2018. június 8., péntek

Informatika emelt szint gyakorlati vizsga Megoldásai 2018 május

Ember osztály az adattárolásra és rövidítésre:
package tarsalgo;

public class Ember
{
  private int ora;
  private int perc;
  private int azon;
  private String irany;
  private boolean be;
 
  public Ember( String[] tomb )
  {
    ora = Integer.parseInt(tomb[0]);
    perc = Integer.parseInt(tomb[1]);
    azon = Integer.parseInt(tomb[2]);
    irany = tomb[3];
    be = tomb[3].equals("be");
  }

  public int getOra()
  {
    return ora;
  }

  public int getPerc()
  {
    return perc;
  }

  public int getAzon()
  {
    return azon;
  }

  public String getIrany()
  {
    return irany;
  }

  public boolean isBe()
  {
    return be;
  }

  @Override
  public String toString()
  {
    return "Ember{" + "ora=" + ora + ", perc=" + perc +
      ", azon=" + azon + ", irany=" + irany + ", be=" + be + '}';
  }
}
A main()-t tartalmazó osztály, mely a fájlkezelést és a feladatokat tartalmazza:
package tarsalgo;

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

public class Tarsalgo
{
  public static void main(String[] args)
  {
    // 1. feladat
    Ember[] emberek = null;
   
    try
    {
      RandomAccessFile raf = new RandomAccessFile("ajto.txt","r");
      String sor;
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        db++;
      }
     
      emberek = new Ember[db];
      raf.seek(0);
      db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        emberek[db] = new Ember(sor.split(" "));
        db++;
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
   
//    for( Ember e : emberek )
//    {
//      System.out.println(e);
//    }

    // 2. feladat
    System.out.println("2. feladat");
    System.out.println("Az elso belepo: "+emberek[0].getAzon());
   
    int hely = -1;
    for( int i = emberek.length-1; i >= 0; i-- )
    {
      if( !emberek[i].isBe() )
      {
        hely = i;
      }
    }
   
    if( hely != -1 )
    {
      System.out.println("Az utolso kilepo: "+emberek[hely].getAzon());
    }
    else
    {
      System.out.println("Senki nem ment ki a tarsalgobol.");
    }
   
    // 3. feladat
    int max = 0;
    for( int i = 0; i < emberek.length; i++ )
    {
      if( emberek[i].getAzon() > max )
      {
        max = emberek[i].getAzon();
      }
    }

    int[] darabok = new int[max+1];
   
    for( int i = 0; i < emberek.length; i++ )
    {
      darabok[emberek[i].getAzon()]++;
    }
   
    try
    {
      RandomAccessFile ki = new RandomAccessFile("athaladas.txt","rw");
      for( int i = 1; i < darabok.length; i++ )
      {
        ki.writeBytes(i+" "+darabok[i]+"\n");
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
   
    // 4. feladat
    System.out.println("4. feladat");
   
    int[] bent = new int[max+1];
   
    for( int i = 0; i < emberek.length; i++ )
    {
      if( emberek[i].isBe() )
      {
        bent[emberek[i].getAzon()]++;
      }
      else
      {
        bent[emberek[i].getAzon()]--;
      }
    }
    System.out.print("A vegen a tarsalgoban voltak: ");
    for( int i = 1; i < bent.length; i++ )
    {
      if( bent[i] > 0 )
      {
        System.out.print(i+" ");
      }
    }
    System.out.println();

    // 5. feladat
    System.out.println("5. feladat");

    int[] bentvannak = new int[emberek.length];
   
    int elozo = 0;
    for( int i = 0; i < emberek.length; i++ )
    {
      if( emberek[i].isBe() )
      {
        bentvannak[i] = elozo + 1;
      }
      else
      {
        bentvannak[i] = elozo - 1;
      }
      elozo = bentvannak[i];
    }
   
    max = 0;
    for( int i = 1; i < bentvannak.length; i++ )
    {
      if( bentvannak[i] > bentvannak[max] )
      {
        max = i;
      }
    }
   
    System.out.println("Peldaul: "+emberek[max].getOra()+":"+
        emberek[max].getPerc()+"-kor voltak a legtobben a tarsalgoban.");
   
    // 6. feladat
    System.out.println("6. feladat");
    System.out.print("Adja meg egy szemely azonositojat: ");
    Scanner sc = new Scanner(System.in);
    int azon = Integer.parseInt(sc.nextLine());

    // 7. feladat
    System.out.println("7. feladat");
    for( int i = 0; i < emberek.length; i++ )
    {
      if( emberek[i].getAzon() == azon )
      {
        if( emberek[i].isBe() )
        {
          System.out.print(emberek[i].getOra()+":"+
            emberek[i].getPerc()+"-");
        }
        else
        {
          System.out.println(emberek[i].getOra()+":"+
            emberek[i].getPerc());
        }
      }
    }
    System.out.println();
   
    // 8. feladat
    System.out.println("8. feladat");
   
    int osszeg = 0;
    int be = 0;
    int ki = 0;
    boolean bentvan = false;
    for( int i = 0; i < emberek.length; i++ )
    {
      if( emberek[i].getAzon() == azon )
      {
        if( emberek[i].isBe() )
        {
          be = emberek[i].getOra()*60+emberek[i].getPerc();
          bentvan = true;
        }
        else
        {
          osszeg += (emberek[i].getOra()*60+emberek[i].getPerc()) - be;
          bentvan = false;
        }
      }
    }
   
    // ha a legvegen nem jott ki, akkor az utolso bemenetel
    // es a 15:00 kozotti idot hozzaadjuk az ossz idejehez
    if( bentvan )
    {
      osszeg += (15*60)-be;
    }
   
    System.out.print("A(z) "+azon+". szemely osszesen "+osszeg+
      " percet volt bent");
   
    if( bentvan )
    {
      System.out.println(", a megfigyeles vegen a tarsalgoban volt.");
    }
    else
    {
      System.out.println(".");
    }
  }
}

ITömbös megoldás:
Vasarlas osztály az adattárolásra és rövidítésre:
package webotlet_16maj_otszaz_tomb;

/**
 *
 * https://webotlet.hu
 */

import java.util.Arrays;

public class Vasarlas
{
  private String[] termekek;
  private int osszeg;
 
  public Vasarlas( String[] tomb )
  {
    for( int i = 0; i < tomb.length; i++ )
    {
      if( tomb[i] == null )
      {
        termekek = new String[i];
        for( int j = 0; j < i; j++ )
        {
          termekek[j] = tomb[j];
        }
        break;
      }
    }
   
    // azert rendezem a termekek neveit nevsorba,
    // hogy az azonos nevuek egymas melle keruljenek,
    // igy majd konnyen meghatarozhatom, melyikbol hany darab van
    String csere;
    for( int i = 0; i < termekek.length-1; i++ )
    {
      for( int j = i+1; j < termekek.length; j++ )
      {
        if( termekek[i].compareTo(termekek[j]) > 0 )
        {
          csere = termekek[i];
          termekek[i] = termekek[j];
          termekek[j] = csere;
        }
      }
    }
   
    // termekek aranak osszege (melyikbol hany darab van)
    // nem lenyeges, hogy mi az a termek,
    // csak a darabszamuk a lenyeg, pl:
    // 2, 2, 1, 3 -> (950 + 950 + 500 + 1350)
    int db = 1;
    for( int i = 1; i < termekek.length; i++ )
    {
      if( !termekek[i].equals(termekek[i-1]) )
      {
        System.out.println(db+" "+termekek[i-1]);
       
        osszeg += ertek(db);
        db = 1;
      }
      else
      {
        db++;
      }
    }
    osszeg += ertek(db);
  }

  public String[] getTermekek()
  {
    return termekek;
  }

  public int getOsszeg()
  {
    return osszeg;
  }
 
  // megkeressuk, van-e adott termek a vasaroltak kozott
  public boolean vettek( String mit )
  {
    boolean van = false;
    for( int i = 0; i < termekek.length; i++ )
    {
      if( termekek[i].equals(mit) )
      {
        van = true;
        break;
      }
    }
    return van;
  }

  @Override
  public String toString()
  {
    return "Vasarlas{" + "termekek=" + Arrays.toString(termekek) +
      ", osszeg=" + osszeg + '}';
  }

// osztalymetodus, ami akkor is meghívhato, ha nincs peldany belole
  public static int ertek( int db )
  {
    if( db == 1 )
    {
      return 500;
    }
    else if( db == 2 )
    {
      return 950;
    }
    else
    {
      return 950+(db-2)*400;
    }
  }
}
A main()-t tartalmazó osztály, mely a fájlkezelést és a feladatokat tartalmazza:
package webotlet_16maj_otszaz_tomb;

/**
 *
 * https://webotlet.hu
 */

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

public class Webotlet_16maj_otszaz_tomb
{
  public static void main(String[] args)
  {
       
    Vasarlas[] vasarlasok = null;
   
    try
    {
      RandomAccessFile raf = new RandomAccessFile("penztar.txt","r");
      String sor;
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        if( sor.equals("F") )
        {
          db++;
        }
      }
     
      vasarlasok = new Vasarlas[db];
      raf.seek(0);

      db = 0;
      String[] termekek = new String[20];
      int tetelszam = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        if( sor.equals("F") )
        {
          vasarlasok[db] = new Vasarlas(termekek);
          db++;
          termekek = new String[20];
          tetelszam = 0;
        }
        else
        {
          termekek[tetelszam] = sor;
          tetelszam++;
        }
      }
     
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }

    // 2. feladat
    System.out.println("2. feladat");
    System.out.println("A fizetesek szama: "+vasarlasok.length);

    // 3. feladat
    System.out.println("3. feladat");
    System.out.println("Az elso vasarlo "+
      vasarlasok[0].getTermekek().length+
      " darab arucikket vasarolt.");

    // 4. feladat
    System.out.println("4. feladat");
    Scanner sc = new Scanner(System.in);
   
    System.out.print("Adja meg egy vasarlas sorszamat! ");
    int sorszam = sc.nextInt();
    System.out.print("Adja meg egy arucikk nevet! ");

// szam utan String-et bekerni nyugos, ezert a szam utani sortorest
// beolvassuk, hogy atlepjunk rajta
    sc.nextLine();
    String cikk = sc.nextLine();
    System.out.print("Adja meg a vasarolt darabszamot! ");
    int darab = sc.nextInt();

    // 5. feladat
    System.out.println("5. feladat");
   
    for( int i = 0; i < vasarlasok.length; i++ )
    {
      if( vasarlasok[i].vettek(cikk) )
      {
        System.out.println("Az elso vasarlas sorszama: "+(i+1));
        break;
      }
    }

    for( int i = vasarlasok.length-1; i >= 0; i-- )
    {
      if( vasarlasok[i].vettek(cikk) )
      {
        System.out.println("Az elso vasarlas sorszama: "+(i+1));
        break;
      }
    }
   
    int db = 0;
    for( int i = 0; i < vasarlasok.length; i++ )
    {
      if( vasarlasok[i].vettek(cikk) )
      {
        db++;
      }
    }

    System.out.println(db+" vasarlas soran vettek belole.");

    // 6. feladat
    System.out.println("6. feladat");
    System.out.println(darab+" darab vetelekor fizetendo: "+
      Vasarlas.ertek(darab)); // osztalymetodus meghivasa

    // 7. feladat
    System.out.println("7. feladat");
    String[] termekek = vasarlasok[sorszam-1].getTermekek();
    db = 1;
    for( int i = 1; i < termekek.length; i++ )
    {
      if( !termekek[i].equals(termekek[i-1]) )
      {
        System.out.println(db+" "+termekek[i-1]);
        db = 1;
      }
      else
      {
        db++;
      }
    }
    System.out.println(db+" "+termekek[termekek.length-1]);

    try
    {
      RandomAccessFile raf = new RandomAccessFile("osszeg.txt","rw");
      for( int i = 0; i < vasarlasok.length; i++ )
      {
        raf.writeBytes((i+1)+": "+vasarlasok[i].getOsszeg()+"\n");
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
  }
}
Listás megoldás:
Vasarlas osztály az adattárolásra és rövidítésre:
package webotlet_16maj_otszaz_lista;

/**
 *
 * https://webotlet.hu
 */

import java.util.ArrayList;

public class Vasarlas
{
  private ArrayList<String> termekek;
  private int osszeg;
 
  public Vasarlas( ArrayList<String> tmp )
  {
    termekek = tmp;
   
    // azert rendezem a termekek neveit nevsorba,
    // hogy az azonos nevuek egymas melle keruljenek,
    // igy majd konnyen meghatarozhatom, melyikbol hany darab van
    String csere;
    for( int i = 0; i < termekek.size()-1; i++ )
    {
      for( int j = i+1; j < termekek.size(); j++ )
      {
        if( termekek.get(i).compareTo(termekek.get(j)) > 0 )
        {
          csere = termekek.get(i);
          termekek.set(i, termekek.get(j));
          termekek.set(j, csere);
        }
      }
    }
   
    // termekek aranak osszege (melyikbol hany darab van)
    // nem lenyeges, hogy mi az a termek,
    // csak a darabszamuk a lenyeg, pl:
    // 2, 2, 1, 3 -> (950 + 950 + 500 + 1350)
    int db = 1;
    for( int i = 1; i < termekek.size(); i++ )
    {
      if( !termekek.get(i).equals(termekek.get(i-1)) )
      {
        System.out.println(db+" "+termekek.get(i-1));
       
        osszeg += ertek(db);
        db = 1;
      }
      else
      {
        db++;
      }
    }
    osszeg += ertek(db);
  }

  public ArrayList<String> getTermekek()
  {
    return termekek;
  }

  public int getOsszeg()
  {
    return osszeg;
  }

  @Override
  public String toString()
  {
    return "Vasarlas{" + "termekek=" + termekek +
      ", osszeg=" + osszeg + '}';
  }

// osztalymetodus, ami akkor is meghívhato, ha nincs peldany belole
  public static int ertek( int db )
  {
    if( db == 1 )
    {
      return 500;
    }
    else if( db == 2 )
    {
      return 950;
    }
    else
    {
      return 950+(db-2)*400;
    }
  }
}
A main()-t tartalmazó osztály, mely a fájlkezelést és a feladatokat tartalmazza:
package webotlet_16maj_otszaz_lista;

/**
 *
 * https://webotlet.hu
 */

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

public class Webotlet_16maj_otszaz_lista
{
  public static void main(String[] args)
  {
    ArrayList< Vasarlas > vasarlasok = new ArrayList<>();
   
    try
    {
      RandomAccessFile raf = new RandomAccessFile("penztar.txt","r");
      String sor;
     
      ArrayList<String> lista = new ArrayList<>();
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        if( !sor.equals("F") )
        {
          lista.add(sor);
        }
        else
        {
          vasarlasok.add(new Vasarlas(lista));
          lista = new ArrayList<>();
        }
      }
     
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }

    // 2. feladat
    System.out.println("2. feladat");
    System.out.println("A fizetesek szama: "+vasarlasok.size());
   
    // 3. feladat
    System.out.println("3. feladat");
    System.out.println("Az elso vasarlo "+
      vasarlasok.get(0).getTermekek().size()+
      " darab arucikket vasarolt.");

    // 4. feladat
    System.out.println("4. feladat");
   
    Scanner sc = new Scanner(System.in);
   
    System.out.print("Adja meg egy vasarlas sorszamat! ");
    int sorszam = sc.nextInt();
    System.out.print("Adja meg egy arucikk nevet! ");

// szam utan String-et bekerni nyugos, ezert a szam utani sortorest
// beolvassuk, hogy atlepjunk rajta
    sc.nextLine();
    String cikk = sc.nextLine();
    System.out.print("Adja meg a vasarolt darabszamot! ");
    int darab = sc.nextInt();
   
    // 5. feladat
    System.out.println("5. feladat");
   
    for( int i = 0; i < vasarlasok.size(); i++ )
    {
      if( vasarlasok.get(i).getTermekek().contains(cikk) )
      {
        System.out.println("Az elso vasarlas sorszama: "+(i+1));
        break;
      }
    }

    for( int i = vasarlasok.size()-1; i >= 0; i-- )
    {
      if( vasarlasok.get(i).getTermekek().contains(cikk) )
      {
        System.out.println("Az utolso vasarlas sorszama: "+(i+1));
        break;
      }
    }
   
    int db = 0;
    for( int i = 0; i < vasarlasok.size(); i++ )
    {
      if( vasarlasok.get(i).getTermekek().contains(cikk) )
      {
        db++;
      }
    }
   
    System.out.println(db+" vasarlas soran vettek belole.");

    // 6. feladat
    System.out.println("6. feladat");
    System.out.println(darab+" darab vetelekor fizetendo: "+
      Vasarlas.ertek(darab)); // osztalymetodus meghivasa

    // 7. feladat
    System.out.println("7. feladat");
    ArrayList<String> lista = vasarlasok.get(sorszam-1).getTermekek();
    db = 1;
    for( int i = 1; i < lista.size(); i++ )
    {
      if( !lista.get(i).equals(lista.get(i-1)) )
      {
        System.out.println(db+" "+lista.get(i-1));
        db = 1;
      }
      else
      {
        db++;
      }
    }
    System.out.println(db+" "+lista.get(lista.size()-1));

    // 8. feladat
    try
    {
      RandomAccessFile raf = new RandomAccessFile("osszeg.txt","rw");
      for( int i = 0; i < vasarlasok.size(); i++ )
      {
        raf.writeBytes((i+1)+": "+vasarlasok.get(i).getOsszeg()+"\n");
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
  }
}

Nincsenek megjegyzések:

Megjegyzés küldése