Java programozás – 2006 februári emelt informatika érettségi programozási feladatának megoldása (1. verzió)

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás tömbbel dolgozik. Az adattároló osztályban már belül sok feladatot előkészítek, és a végső megoldásban csak ezeket használom.

Az első két feladat megoldását sokkal elegánsabban is meg lehetne írni statikus metódusokkal. A rengeteg if-else szerkezetet sokkal tömörebben és egyszerűbben is meg lehet oldani. Ezeket a 2. verzióban mutatom meg.

Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */

package webotlet_06feb_szamla_java;

public class Hivas
{
  private int kOra;
  private int kPerc;
  private int kMperc;
  private int vOra;
  private int vPerc;
  private int vMperc;
  private String szam;
  
  private boolean mobil;
  private boolean csucs;
  private int hosszPercek;
  private double koltseg;
  
  public Hivas( String[] tomb, String szam )
  {
    kOra = Integer.parseInt(tomb[0]);
    kPerc = Integer.parseInt(tomb[1]);
    kMperc = Integer.parseInt(tomb[2]);
    vOra = Integer.parseInt(tomb[3]);
    vPerc = Integer.parseInt(tomb[4]);
    vMperc = Integer.parseInt(tomb[5]);
    this.szam = szam;

    // mobilhivas vagy nem
    if( szam.startsWith( "39" )
      || szam.startsWith( "41" )
      || szam.startsWith( "71" ) )
    {
      mobil = true;
    }
    else
    {
      mobil = false;
    }
    
    // csucsideju vagy nem
    if( kOra >= 7 && kOra < 18 )
    {
      csucs = true;
    }
    else
    {
      csucs = false;
    }
    
    // a hivas hossza percekben
    int hosszMp = (vOra * 3600 + vPerc * 60 + vMperc) - (kOra * 3600 + kPerc * 60 + kMperc);
    
    hosszPercek = hosszMp / 60;
    
    if( hosszMp % 60 != 0 )
    {
      hosszPercek++;
    }

    // hivaskoltsegek kiszamitasa
    if( csucs && mobil )
    {
      koltseg = 69.175 * hosszPercek;
    }
    else if( csucs && !mobil )
    {
      koltseg = 30 * hosszPercek;
    }
    // ez a ketto felesleges a feladat szempontjabol,
    // de inkabb ne maradjon ekkor sem ures a koltseg
    else if( !csucs && mobil )
    {
      koltseg = 46.675 * hosszPercek;
    }
    else
    {
      koltseg = 15 * hosszPercek;
    }
  }

  public String getSzam()
  {
    return szam;
  }

  public boolean isMobil()
  {
    return mobil;
  }

  public boolean isCsucs()
  {
    return csucs;
  }

  public int getHosszPercek()
  {
    return hosszPercek;
  }

  public double getKoltseg()
  {
    return koltseg;
  }

  @Override
  public String toString()
  {
    return "Hivas{" + "kOra=" + kOra + ", kPerc=" + kPerc +
           ", kMperc=" + kMperc + ", vOra=" + vOra +
      ", vPerc=" + vPerc + ", vMperc=" + vMperc +
      ", szam=" + szam + ", mobil=" + mobil + ", csucs=" +
      csucs + ", hossz=" + hosszPercek + ", koltseg=" + koltseg + '}';
  }
}

A feladat megoldásai:

/**
 *
 * @author https://webotlet.hu
 */

package webotlet_06feb_szamla_java;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Webotlet_06feb_szamla_java
{
  public static void main( String[] args )
  {
    Hivas[] hivasok = null;

// 1. feladat
    System.out.println( "1. feladat" );
    Scanner sc = new Scanner(System.in);
    System.out.print( "Adj meg egy telefonszamot: " );
    String szam = sc.nextLine();
    
    if( szam.startsWith( "39" )
      || szam.startsWith( "41" )
      || szam.startsWith( "71" ) )
    {
      System.out.println( "A telefonszam mobil." );
    }
    else
    {
      System.out.println( "A telefonszam NEM mobil." );
    }

// 2. feladat
    System.out.println( "2. feladat" );
    System.out.println( "Add meg egy hivas kezdesi es befejezesi "+
                      "idopontjat" );
    System.out.print("ora: ");
    int kOra = sc.nextInt();
    System.out.print("perc: ");
    int kPerc = sc.nextInt();
    System.out.print("mp: ");
    int kMperc = sc.nextInt();
    System.out.print("ora: ");
    int vOra = sc.nextInt();
    System.out.print("perc: ");
    int vPerc = sc.nextInt();
    System.out.print("mp: ");
    int vMperc = sc.nextInt();

    int hossz = vOra * 3600 + vPerc * 60 + vMperc - kOra * 3600 + kPerc * 60 + kMperc;
    
    int percek = hossz / 60;
    
    if( hossz % 60 != 0 )
    {
      percek++;
    }
    
    System.out.println( "A hivas hossza percben: "+percek );
    
    try
    {
// 3. feladat
      int db;
      String sor;

      RandomAccessFile raf = new RandomAccessFile("hivasok.txt","r");
      db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        db++;
      }
    
      hivasok = new Hivas[db/2];
      raf.seek(0);
      
      int hely = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        hivasok[hely] = new Hivas( sor.split(" "), raf.readLine() );
        hely++;
      }
      raf.close();
      
      RandomAccessFile ki = new RandomAccessFile("percek.txt","rw");
      ki.setLength(0);

      for( int i = 0; i < hivasok.length; i++ )
      {
        ki.writeBytes( hivasok[i].getHosszPercek()+" "+hivasok[i].getSzam()+"\n" );
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.err.println( "HIBA" );
    }

// 4. feladat
    System.out.println( "4. feladat" );
    int csucsdb = 0;
    
    for( int i = 0; i < hivasok.length; i++ )
    {
      if( hivasok[i].isCsucs() )
      {
        csucsdb++;
      }
    }

    System.out.println( "Csucsidobeli hivas: "+csucsdb+" db" );
    System.out.println( "Csucsidon kivuli hivas: "+(hivasok.length-csucsdb)+" db" );

// 5. feladat
    System.out.println( "5. feladat" );
    int vezperc = 0;
    int mobilperc = 0;

    for( int i = 0; i < hivasok.length; i++ )
    {
      if( hivasok[i].isMobil() )
      {
        mobilperc += hivasok[i].getHosszPercek();
      }
      else
      {
        vezperc += hivasok[i].getHosszPercek();
      }
    }
    System.out.println( "Mobil percek: "+mobilperc+" perc" );
    System.out.println( "Vezetekes percek: "+vezperc+" perc" );

// 6. feladat
    System.out.println( "6. feladat" );
    double cskoltseg = 0;
    for( int i = 0; i < hivasok.length; i++ )
    {
      if( hivasok[i].isCsucs() )
      {
        cskoltseg += hivasok[i].getKoltseg();
      }
    }

    System.out.println( "A csucsidos hivasok koltsege: "+cskoltseg );
      
  }
}

Ha hibát találsz benne, kérlek jelezd!

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .