2020. szeptember 2., szerda

Cégesautók - Felkészülés a Középszintű Szakmai informatikai érettségi feladat mintapélda és megoldása

Egy cég 10 olyan autóval rendelkezik, amelyet a dolgozók igénybe vehetnek az üzleti ügyeik
intézésére. Az autókat akár többnapos útra is elvihetik, illetve egy autót egy nap több dolgozó
is elvihet. A rendszer az autók parkolóból való ki- és behajtását rögzíti. A parkoló a hónap
minden napján 7-23 óra között van nyitva, csak ebben az időszakban lehet elvinni és
visszahozni az autókat. Az autót mindig annak a dolgozónak kell visszahoznia, amelyik elvitte.
Egyszerre csak egy autó lehet minden dolgozónál.
Az autok.txt fájl egy hónap (30 nap) adatait rögzíti. Egy sorban szóközökkel elválasztva
6 adat található az alábbi sorrendben.
nap egész szám (1-30) a hónap adott napja
óra:perc szöveg (óó:pp formátumban) a ki- vagy a behajtás időpontja
rendszám 6 karakteres szöveg
(CEG300-CEG309)
az autó rendszáma
személy azonosítója egész szám (500-600) az autót igénybe vevő dolgozó
azonosítója
km számláló egész szám a km számláló állása
ki/be hajtás egész szám (0 vagy 1) a parkolóból kihajtáskor 0,
a behajtáskor 1
A sorok száma legfeljebb 500. Az adatok a napok szerint, azon belül óra és perc szerint
rendezettek. Továbbá tudjuk, hogy a hónap első napján a cég mind a tíz autója a parkolóban
volt.
Például:
…
5 07:30 CEG300 590 30580 0
5 14:16 CEG300 590 30656 1
5 17:00 CEG300 534 30656 0
5 19:03 CEG300 534 30784 1
…
15 09:53 CEG308 543 35048 0
17 11:16 CEG308 543 35746 1
A példában látható, hogy a CEG300 rendszámú autót az 5. napon kétszer is elvitték. Először
7:30-kor vitték el és 14:16-kor hozta vissza az 590-es dolgozó. A kivitelkor a kilométerszámláló
állása 30 580 km volt, amikor visszahozta 30 656 km volt. Másodszor 17:00-kor vitte el
az 534-es dolgozó az autót és 19:03-kor hozta vissza. A CEG308 rendszámú autót pedig
a 15. napon vitte el az 543-as dolgozó és a 17. napon hozta vissza.
Készítsen programot, amely az autok.txt állomány adatait felhasználva az alábbi
kérdésekre válaszol! A program forráskódját mentse cegesauto néven! (A program
megírásakor a felhasználó által megadott adatok helyességét, érvényességét nem kell
ellenőriznie, feltételezheti, hogy a rendelkezésre álló adatok a leírtaknak megfelelnek.)
A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre
a feladat sorszámát (például: 3. feladat)! Ha a felhasználótól kér be adatot, jelenítse meg
a képernyőn, hogy milyen értéket vár! Az ékezetmentes kiírás is elfogadott.
Az eredmény megjelenítését és a felhasználóval való kommunikációt a feladatot követő
minta alapján valósítsa meg! 
Informatika
emelt szint
1911 gyakorlati vizsga 11 / 12 2019. május 13.
Azonosító
jel:

1. Olvassa be és tárolja el az autok.txt fájl tartalmát!
2. Adja meg, hogy melyik autót vitték el utoljára a parkolóból! Az eredményt a mintának
megfelelően írja a képernyőre!
3. Kérjen be egy napot és írja ki a képernyőre a minta szerint, hogy mely autókat vitték ki és
hozták vissza az adott napon!
4. Adja meg, hogy hány autó nem volt bent a hónap végén a parkolóban!
5. Készítsen statisztikát, és írja ki a képernyőre mind a 10 autó esetén az ebben a hónapban
megtett távolságot kilométerben! A hónap végén még kint lévő autók esetén az utolsó
rögzített kilométerállással számoljon! A kiírásban az autók sorrendje tetszőleges lehet.
6. Határozza meg, melyik személy volt az, aki az autó egy elvitele alatt a leghosszabb
távolságot tette meg! A személy azonosítóját és a megtett kilométert a minta szerint írja a
képernyőre! (Több legnagyobb érték esetén bármelyiket kiírhatja.)
7. Az autók esetén egy havi menetlevelet kell készíteni! Kérjen be a felhasználótól egy
rendszámot! Készítsen egy X_menetlevel.txt állományt, amelybe elkészíti az adott
rendszámú autó menetlevelét! (Az X helyére az autó rendszáma kerüljön!) A fájlba
soronként tabulátorral elválasztva a személy azonosítóját, a kivitel időpontját (nap.
óra:perc), a kilométerszámláló állását, a visszahozatal időpontját (nap. óra:perc), és
a kilométerszámláló állását írja a minta szerint! (A tabulátor karakter ASCII-kódja: 9.)

Megoldás

Ez a megoldás tömbbel dolgozik.
Adattároló osztály:

/**
 *
 */
package webotlet_19maj_ceges_autok;
 
public class AutoAdat
{
 
  private int nap;
  private String ido;
  private String rendszam;
  private int dolgozo;
  private int km;
  private boolean be;
  private int sorszam;
 
  public AutoAdat(String[] tomb)
  {
    nap = Integer.parseInt(tomb[0]);
    ido = tomb[1];
    rendszam = tomb[2];
    dolgozo = Integer.parseInt(tomb[3]);
    km = Integer.parseInt(tomb[4]);
    be = tomb[5].equals("1");
    sorszam = Character.getNumericValue(rendszam.charAt(5));
  }
 
  public int getNap()
  {
    return nap;
  }
 
  public String getIdo()
  {
    return ido;
  }
 
  public String getRendszam()
  {
    return rendszam;
  }
 
  public int getDolgozo()
  {
    return dolgozo;
  }
 
  public int getKm()
  {
    return km;
  }
 
  public boolean isBe()
  {
    return be;
  }
 
  public int getSorszam()
  {
    return sorszam;
  }
 
  @Override
  public String toString()
  {
    return "AutoAdat{" + "nap=" + nap + ", ido=" + ido
      + ", rendszam=" + rendszam + ", dolgozo=" + dolgozo
      + ", km=" + km + ", be=" + be + ", sorszam=" + sorszam + '}';
  }
}

A feladat megoldásai:

/**
 *
 */
package webotlet_19maj_ceges_autok;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
 
public class Webotlet_19maj_ceges_autok
{
 
  public static void main(String[] args)
  {
    // 1. feladat
    RandomAccessFile raf;
    String sor;
    AutoAdat[] adatok = null;
 
    try
    {
      raf = new RandomAccessFile("autok.txt", "r");
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        db++;
      }
 
      adatok = new AutoAdat[db];
 
      raf.seek(0);
      int hely = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        adatok[hely] = new AutoAdat(sor.split(" "));
        hely++;
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
 
//        for( AutoAdat adat : adatok )
//        {
//            System.out.println(adat);
//        }
// 2. feladat
    System.out.println("2. feladat");
    for( int i = adatok.length - 1; i > -1; i-- )
    {
      if( !adatok[i].isBe() )
      {
        System.out.println(adatok[i].getNap() + ". nap rendszam: "
          + adatok[i].getRendszam());
        break;
      }
    }
 
// 3. feladat
    System.out.println("3. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.print("Nap: ");
    int nap = sc.nextInt();
    System.out.println("Forgalom a(z) " + nap + ". napon:");
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].getNap() == nap )
      {
        System.out.print(adatok[i].getIdo() + " "
          + adatok[i].getRendszam() + " "
          + adatok[i].getDolgozo() + " ");
        if( adatok[i].isBe() )
        {
          System.out.println("be");
        }
        else
        {
          System.out.println("ki");
        }
      }
    }
 
// 4. feladat
    System.out.println("4. feladat");
    int[] napok = new int[10];
 
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].isBe() )
      {
        napok[adatok[i].getSorszam()]--;
      }
      else
      {
        napok[adatok[i].getSorszam()]++;
      }
    }
 
    int osszeg = 0;
    for( int i = 0; i < napok.length; i++ )
    {
      osszeg += napok[i];
    }
    System.out.println("A honap vegen " + osszeg + " autot nem hoztak vissza.");
 
// 5. feladat
    System.out.println("5. feladat");
 
    for( int i = 0; i < adatok.length - 1; i++ )
    {
      for( int j = i + 1; j < adatok.length; j++ ) { // 3 szempont szerint rendezek // rendszam szerint // azon belul nap szerint // azon belul ido szerint if( adatok[i].getRendszam().compareTo(adatok[j].getRendszam()) > 0
          || (adatok[i].getRendszam().compareTo(adatok[j].getRendszam()) == 0
          && adatok[i].getNap() > adatok[j].getNap())
          || (adatok[i].getRendszam().compareTo(adatok[j].getRendszam()) == 0
          && adatok[i].getNap() == adatok[j].getNap()
          && adatok[i].getIdo().compareTo(adatok[j].getIdo()) > 0) )
        {
          AutoAdat csere = adatok[i];
          adatok[i] = adatok[j];
          adatok[j] = csere;
        }
      }
    }
 
    int[] kmosszeg = new int[10];
 
    for( int i = 1; i < adatok.length; i++ )
    {
      if( adatok[i].getSorszam() == adatok[i - 1].getSorszam() )
      {
        kmosszeg[adatok[i].getSorszam()] += adatok[i].getKm() - adatok[i - 1].getKm();
      }
    }
 
    for( int i = 0; i < kmosszeg.length; i++ )
    {
      System.out.println("CEG30" + i + " " + kmosszeg[i] + " km");
    }
 
// 6. feladat
    System.out.println("6. feladat");
 
    int maxhely = 0;
    int max = 0;
 
    for( int i = 1; i < adatok.length; i++ ) { if( adatok[i].getSorszam() == adatok[i - 1].getSorszam() ) { if( adatok[i].getKm() - adatok[i - 1].getKm() > max )
        {
          max = adatok[i].getKm() - adatok[i - 1].getKm();
          maxhely = i;
        }
      }
    }
 
    System.out.println("Leghosszabb ut: " + max + " km, szemely: "
      + adatok[maxhely].getDolgozo());
 
// 7. feladat
    System.out.println("7. feladat");
 
    sc = new Scanner(System.in);
    System.out.print("Rendszam: ");
    String rendszam = sc.nextLine();
 
    RandomAccessFile ki;
    try
    {
      ki = new RandomAccessFile(rendszam + "_menetlevel.txt", "rw");
      ki.setLength(0);
      for( int i = 0; i < adatok.length; i++ )
      {
        if( adatok[i].getRendszam().equals(rendszam) )
        {
          if( !adatok[i].isBe() )
          {
            ki.writeBytes(adatok[i].getDolgozo() + "\t"
              + adatok[i].getNap() + ". " + adatok[i].getIdo()
              + "\t" + adatok[i].getKm() + " km");
          }
          else
          {
            ki.writeBytes("\t" + adatok[i].getNap()
              + ". " + adatok[i].getIdo() + "\t" + adatok[i].getKm()
              + " km\n");
 
          }
        }
      }
      System.out.println("Menetlevel kesz.");
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
  }
 
}

Tantárgyfelosztás - Felkészülés a Középszintű Szakmai informatikai érettségi feladat mintapélda és megoldása

A tantárgyfelosztás a tanév tervezésének alapvető dokumentuma. A tantárgyfelosztás azt
tartalmazza, hogy a tanárok a tantárgyaikat mely osztályokban, hány órában tanítják. Ebben
a feladatban egy négy évfolyamos gimnázium tantárgyfelosztásának adatait kell elemeznie.
A tantárgyfelosztást ezúttal egy adatbázis-kezelő programmal előállított, egyszerű
szerkezetű szöveges állományban kapja az alábbi minta szerint (Minden bejegyzést négy sor
tárol.):
Albatrosz Aladin
biologia
9.a
2
Albatrosz Aladin
osztalyfonoki
9.a
1
…
Csincsilla Csilla
matematika
9.x
2
…
Az első bejegyzés megadja, hogy Albatrosz Aladin tanár úr biológiát (biologia) fog tanítani
a 9.a osztályban heti 2 órában. Ha az osztály betűjele x, akkor évfolyam szintű csoportról van
szó. Példánkban Csincsilla Csilla tanárnő a 9. évfolyam részére heti 2 órás matematika órát tart.
Az osztályfőnököket arról ismerhetjük fel, hogy ők tartják az osztályfőnöki (osztalyfonoki) órát.
A megoldás során felhasználhatja, hogy a fájl maximum 1000 bejegyzést (azaz legfeljebb
4000 sort) tartalmaz. Az iskolában legfeljebb 100 tanár és legfeljebb 50 osztály van, továbbá
minden osztálynak pontosan egy osztályfőnöke van.
Készítsen programot, amely a beosztas.txt állomány adatait felhasználva az alábbi
kérdésekre válaszol! A program forráskódját mentse tanfel néven! (A program megírásakor
a felhasználó által megadott adatok helyességét, érvényességét nem kell ellenőriznie, és
feltételezheti, hogy a rendelkezésre álló adatok a leírtaknak megfelelnek.)
A képernyőre írást igénylő részfeladatok esetén – a mintához tartalmában hasonlóan – írja
ki a képernyőre a feladat sorszámát (például: 3. feladat:), és utaljon a kiírt tartalomra is!
Ha a felhasználótól kér be adatot, jelenítse meg a képernyőn, hogy milyen értéket vár! Mindkét
esetben az ékezetmentes kiírás is elfogadott.
1. Olvassa be és tárolja el a beosztas.txt állományban talált adatokat, és annak
felhasználásával oldja meg a következő feladatokat!
2. Hány bejegyzés található az állományban? Az eredményt írassa ki a képernyőre!
3. A fenntartó számára fontos információ, hogy az iskolában hetente összesen hány tanítási
óra van. Határozza meg ezt az adatot és írassa ki a képernyőre!
4. Kérje be a felhasználótól egy tanár nevét, és írassa ki a képernyőre, hogy hetente hány
órában tanít!
 
Informatika
emelt szint
1711 gyakorlati vizsga 11 / 12 2019. május 13.
Azonosító
jel:

5. Készítse el az of.txt fájlt, amely az osztályfőnökök nevét tartalmazza osztályonként
az alábbi formában (az osztályok megjelenítésének sorrendje a mintától eltérhet):
9.a - Albatrosz Aladin
9.b - Hangya Hanna
9.c - Zerge Zenina
…
6. Egyes osztályokban bizonyos tantárgyakat a tanulók csoportbontásban tanulnak: ekkor az
adott tantárgyra és osztályra két bejegyzést is tartalmaz a tantárgyfelosztás. Kérje be egy
osztály azonosítóját, valamint egy tantárgy nevét, és írassa ki a képernyőre, hogy az adott
osztály a megadott tantárgyat csoportbontásban vagy osztályszinten tanulja-e!
(Feltételezheti, hogy a megadott osztály tanulja a megadott tantárgyat.) 

Megoldása

Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_19majma_tantargyfelosztas;
 
public class Adat
{
  private String tanar;
  private String tantargy;
  private String osztaly;
  private int db;
  private boolean osztalyfonok;
   
  public Adat(String sor1, String sor2, String sor3, String sor4)
  {
    tanar = sor1;
    tantargy = sor2;
    osztaly = sor3;
    db = Integer.parseInt(sor4);
    if( tantargy.equals("osztalyfonoki"))
    {
      osztalyfonok = true;
    }
  }
 
  public String getTanar()
  {
    return tanar;
  }
 
  public String getTantargy()
  {
    return tantargy;
  }
 
  public String getOsztaly()
  {
    return osztaly;
  }
 
  public int getDb()
  {
    return db;
  }
 
  public boolean isOsztalyfonok()
  {
    return osztalyfonok;
  }
 
  @Override
  public String toString()
  {
    return "Adat{" + "tanar=" + tanar + ", tantargy="
      + tantargy + ", osztaly=" + osztaly + ", db="
      + db + ", osztalyfonok=" + osztalyfonok + '}';
  }
}
A feladat megoldásai:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_19majma_tantargyfelosztas;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
 
public class Webotlet_19majma_tantargyfelosztas
{
 
  public static void main(String[] args)
  {
    Adat[] adatok = null;
    try
    {
      RandomAccessFile raf = new RandomAccessFile("beosztas.txt", "r");
      String sor;
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        db++;
      }
       
      adatok = new Adat[db / 4];
      raf.seek(0);
       
      int hely = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        adatok[hely] = new Adat(sor, raf.readLine(),
          raf.readLine(), raf.readLine());
        hely++;
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
//    for( int i = 0; i < adatok.length; i++ )
//    {
//      System.out.println(adatok[i].toString());
//    }
 
    System.out.println("2. feladat");
    System.out.println("A fajlban " + adatok.length
      + " bejegyzes van.");
     
    System.out.println("3. feladat");
    int orak = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      orak += adatok[i].getDb();
    }
     
    System.out.println("Az iskolaban a heti osszoraszam: " + orak);
     
    System.out.println("4. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.print("Egy tanar neve= ");
    String tanar = sc.nextLine();
    int tanarOrak = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].getTanar().equals(tanar) )
      {
        tanarOrak += adatok[i].getDb();
      }
    }
     
    System.out.println("A tanar heti oraszama: " + tanarOrak);
     
    try
    {
      RandomAccessFile ki = new RandomAccessFile("of.txt", "rw");
      ki.setLength(0);
      for( int i = 0; i < adatok.length; i++ )
      {
        if( adatok[i].isOsztalyfonok() )
        {
          ki.writeBytes(adatok[i].getOsztaly() + " - "
            + adatok[i].getTanar() + "\n");
        }
      }
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
    System.out.println("6. feladat");
    System.out.print("Osztaly= ");
    String osztaly = sc.nextLine();
    System.out.print("Tantargy= ");
    String tantargy = sc.nextLine();
    int db = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].getOsztaly().equals(osztaly)
        && adatok[i].getTantargy().equals(tantargy) )
      {
        db++;
      }
    }
     
    if( db == 2 ) // feltetelezzuk, hogy nincs nagyobb bontas
    {
      System.out.println("Csoportbontasban tanuljak.");
    }
    else
    {
      System.out.println("Osztalyszinten tanuljak.");
    }
     
    System.out.println("7. feladat");
     
    String[] tanarok = new String[adatok.length];
    int hely = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      boolean benne = false;
      for( int j = 0; j < hely; j++ )
      {
        if( tanarok[j].equals(adatok[i].getTanar()) )
        {
          benne = true;
          break;
        }
      }
       
      if( !benne )
      {
        tanarok[hely] = adatok[i].getTanar();
        hely++;
      }
    }
     
    System.out.println("Az iskolaban " + hely + " tanar tanit.");
  }
   
}

https://www.webotlet.hu/?p=2968