Java programozás – 2009 októberi emelt informatika érettségi – útépítés (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 néhány feladatot előkészítek, és a végső megoldásban ezeket használom. Az adattároló osztályban több új tulajdonságot is felveszek, az egyiket pedig az utolsó feladatban még módosítom is. A kiíratásokhoz is írtam egy metódust a vége felé.

Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_09okt_utepites_java;

public class Jarmu
{
  private int ora;
  private int perc;
  private int mperc;
  private int utIdo;
  private String honnan;
  
  private String hova;
  private int indulas;
  private double sebesseg;
  private int erkezes;
  
  public Jarmu(String[] tomb)
  {
    ora = Integer.parseInt(tomb[0]);
    perc = Integer.parseInt(tomb[1]);
    mperc = Integer.parseInt(tomb[2]);
    utIdo = Integer.parseInt(tomb[3]);
    honnan = tomb[4];
    
    if( honnan.equals("A"))
    {
      hova = "F";
    }
    else
    {
      hova = "A";
    }
    
    indulas = ora * 3600 + perc * 60 + mperc;
    
    sebesseg = 1000.0 / utIdo;
    erkezes = indulas + utIdo;
 }

  public int getOra()
  {
    return ora;
  }

  public int getPerc()
  {
    return perc;
  }

  public int getMperc()
  {
    return mperc;
  }

  public int getUtIdo()
  {
    return utIdo;
  }

  public String getHonnan()
  {
    return honnan;
  }

  public String getHova()
  {
    return hova;
  }

  public int getIndulas()
  {
    return indulas;
  }

  public double getSebesseg()
  {
    return sebesseg;
  }

  public int getErkezes()
  {
    return erkezes;
  }

  public void setErkezes(int erkezes)
  {
    this.erkezes = erkezes;
  }
  
  @Override
  public String toString()
  {
    return "Jarmu{" + "ora=" + ora + ", perc=" + perc
      + ", mperc=" + mperc + ", utIdo=" + utIdo
      + ", honnan=" + honnan + ", hova=" + hova
      + ", indulas=" + indulas + ", sebesseg="
      + sebesseg + ", erkezes=" + erkezes + '}';
  }
  
  
  public String leggyorsabbToString()
  {
    return ora + " " + perc + " " + mperc + " "
      + honnan + " " + String.format("%.1f", sebesseg);
  }
  
  public String autoAdat()
  {
    return ora + ":" + perc + ":" + mperc + " " + erkezes;
  }
  
  public String idoFormaz(int ido)
  {
    int ora;
    int perc;
    int mperc;
    
    ora = ido / 3600;
    ido = ido % 3600;
    perc = ido / 60;
    mperc = ido % 60;
    return ora + ":" + perc + ":" + mperc;
  }
   
}

A feladat megoldásai:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_09okt_utepites_java;

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

public class Webotlet_09okt_utepites_java
{

  public static void main(String[] args)
  {
    Jarmu[] jarmuvek = null;
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("forgalom.txt", "r");
      jarmuvek = new Jarmu[Integer.parseInt(raf.readLine())];
      
      String sor;
      int hely = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        jarmuvek[hely] = new Jarmu(sor.split(" "));
        hely++;
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < jarmuvek.length; i++ )
//    {
//      System.out.println(jarmuvek[i].toString());
//    }

    // 2. feladat
    System.out.println("2. feladat Adja meg a jarmu sorszamat!");
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    
    System.out.println(jarmuvek[n - 1].getHova());
    
    
    // 3. feladat
    System.out.println("3. feladat");
    
    // 1. verzió
    // feltételezzük hogy van legalább 2 ilyen jármű!
    int utolso = -1;
    int utolsoElotti = -1;
    
    for( int i = jarmuvek.length - 1; i >= 0; i-- )
    {
      if( jarmuvek[i].getHova().equals("F"))
      {
        if( utolso == -1 )
        {
          utolso = i;
        }
        else if( utolsoElotti == -1 )
        {
          utolsoElotti = i;
          break;
        }
      }
    }
    
    System.out.println(jarmuvek[utolso].getIndulas()
      - jarmuvek[utolsoElotti].getIndulas());
    
    // 2. verzió
    // feltételezzük hogy van legalább 2 ilyen jármű!
    Jarmu jUtolso = null;
    Jarmu jUtolsoE = null;
    
    int idx = jarmuvek.length - 1;
    while( jUtolsoE == null )
    {
      if( jarmuvek[idx].getHova().equals("F") )
      {
        if( jUtolso ==  null )
        {
          jUtolso = jarmuvek[idx];
        }
        else
        {
          jUtolsoE = jarmuvek[idx];
        }
      }
      idx--;
    }
    
    System.out.println(jUtolso.getIndulas() - jUtolsoE.getIndulas());
    
    // 4. feladat
    System.out.println("4. feladat");
    
    int[] alsoOraDb = new int[24];
    int[] felsoOraDb = new int[24];
    
    for( int i = 0; i < jarmuvek.length; i++ )
    {
      if( jarmuvek[i].getHonnan().equals("A") )
      {
        alsoOraDb[jarmuvek[i].getOra()]++;
      }
      else
      {
        felsoOraDb[jarmuvek[i].getOra()]++;
      }
    }
    
    for( int i = 0; i < alsoOraDb.length; i++ )
    {
      if( alsoOraDb[i] > 0 || felsoOraDb[i] > 0 )
      {
        System.out.println(i + " " + alsoOraDb[i] + " " + felsoOraDb[i]);
      }
    }
    
    // 5. feladat
    System.out.println("5. feladat");
    
// másolat az eredeti tömbről, hogy annak a sorrendje ne változzon
    Jarmu[] masolat = new Jarmu[jarmuvek.length];
    
    for( int i = 0; i < jarmuvek.length; i++ )
    {
      masolat[i] = jarmuvek[i];
    }
    
    for( int i = 0; i < masolat.length - 1; i++ )
    {
      for( int j = i + 1; j < masolat.length; j++ )
      {
        if( masolat[i].getSebesseg() < masolat[j].getSebesseg() )
        {
          Jarmu csere = masolat[i];
          masolat[i] = masolat[j];
          masolat[j] = csere;
        }
      }
    }
    
    for( int i = 0; i < 10; i++ )
    {
      System.out.println(masolat[i].leggyorsabbToString() );
    }
    
    // 6. feladat
    int alsoDb = 0;
    for( int i = 0; i < jarmuvek.length; i++ )
    {
      if( jarmuvek[i].getHova().equals("A") )
      {
        alsoDb++;
      }
    }
    
    Jarmu[] alsoba = new Jarmu[alsoDb];
    
    int hely = 0;
    for( int i = 0; i < jarmuvek.length; i++ )
    {
      if( jarmuvek[i].getHova().equals("A") )
      {
        alsoba[hely] = jarmuvek[i];
        hely++;
      }
    }

    try
    {
      RandomAccessFile ki = new RandomAccessFile("also.txt","rw");
      ki.setLength(0);

      ki.writeBytes(alsoba[0].idoFormaz(alsoba[0].getErkezes()) + "\n");
      for( int i = 1; i < alsoba.length; i++ )
      {
        if( alsoba[i].getErkezes() < alsoba[i - 1].getErkezes() )
        {
          alsoba[i].setErkezes(alsoba[i - 1].getErkezes());
        }
        ki.writeBytes(alsoba[i].idoFormaz(alsoba[i].getErkezes()) + "\n");
      }
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
  }
  
}

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 .