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

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás listával 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.

A tároló osztályban statikus metódusokat is használok, mely az 1. és 2. feladat megoldását nagyban megkönnyíti. A konstruktorban lévő if-else szerkezeteket tömörítettem, vagy metódussal kiváltottam.

Adattároló osztály:

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

package webotlet_06feb_szamla_java_v2;

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
    mobil = mobilHivas(szam);
    
    // csucsideju vagy nem
    csucs = kOra >= 7 && kOra < 18;

    // a hivas hossza percekben
    hosszPercek = hivashossz( kOra, kPerc, kMperc, vOra, vPerc, vMperc );

    // 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 + '}';
  }

  public static boolean mobilHivas( String szam )
  {
    return szam.startsWith( "39" )
      || szam.startsWith( "41" )
      || szam.startsWith( "71" );
  }

  public static int hivashossz( int kOra, int kPerc, int kMperc,
                                int vOra, int vPerc, int vMperc )
  {
    int hosszMp = (vOra * 3600 + vPerc * 60 + vMperc) - (kOra * 3600 + kPerc * 60 + kMperc);
    
    int percek = hosszMp / 60;
    
    if( hosszMp % 60 != 0 )
    {
      percek++;
    }
    
    return percek;
  }
}

A feladat megoldásai:

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

package webotlet_06feb_szamla_java_v2;

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

public class Webotlet_06feb_szamla_java_v2
{
  public static void main( String[] args )
  {
    ArrayList<Hivas> hivasok = new ArrayList<>();

// 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( Hivas.mobilHivas( szam ) )
    {
      System.out.println( "A telefonszam mobil." );
    }
    else
    {
      System.out.println( "A telefonszam NEM mobil." );
    }

// 2. feladat
    System.out.println( "2. feladat" );
    System.out.print( "Add meg egy hivas kezdesi es befejezesi "+
                      "idopontjat\n(pl: 6 15 0 6 19 0): " );
    String[] idok = sc.nextLine().split(" ");
    int hossz = Hivas.hivashossz( Integer.parseInt(idok[0]),
                                  Integer.parseInt(idok[1]),
                                  Integer.parseInt(idok[2]),
                                  Integer.parseInt(idok[3]),
                                  Integer.parseInt(idok[4]),
                                  Integer.parseInt(idok[5]) );
    System.out.println( "A hivas hossza percben: "+hossz );
    
    try
    {
// 3. feladat
      int db;
      String sor;

      RandomAccessFile raf = new RandomAccessFile("hivasok.txt","r");
      
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        hivasok.add(new Hivas( sor.split(" "), raf.readLine() ));
      }
      raf.close();
      
      RandomAccessFile ki = new RandomAccessFile("percek.txt","rw");
      ki.setLength(0);

      for( Hivas h : hivasok )
      {
        ki.writeBytes( h.getHosszPercek()+" "+h.getSzam()+"\n" );
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.err.println( "HIBA" );
    }

// 4. feladat
    System.out.println( "4. feladat" );
    int csucsdb = 0;
    
    for( Hivas h : hivasok)
    {
      if( h.isCsucs() )
      {
        csucsdb++;
      }
    }
    
    System.out.println( "Csucsidobeli hivas: "+csucsdb+" db" );
    System.out.println( "Csucsidon kivuli hivas: "+(hivasok.size()-csucsdb)+" db" );

// 5. feladat
    System.out.println( "5. feladat" );
    int vezperc = 0;
    int mobilperc = 0;
    
    for( Hivas h : hivasok)
    {
      if( h.isMobil() )
      {
        mobilperc += h.getHosszPercek();
      }
      else
      {
        vezperc += h.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( Hivas h : hivasok)
    {
      if( h.isCsucs() )
      {
        cskoltseg += h.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 .