Java programozás – 2017 májusi emelt informatika érettségi – tesztverseny (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 utolsó feladatra két megoldást adtam. Talán a for ciklusos jutna többeknek eszébe, de ez do-while ciklussal tipikusan elegánsabb.

Adattároló osztály:

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

public class Versenyzo
{
  private String kod;
  private String valaszok;
  private int pontszam;
  
  public Versenyzo( String[] tomb )
  {
    kod = tomb[0];
    valaszok = tomb[1];
  }

  public String getKod()
  {
    return kod;
  }

  public String getValaszok()
  {
    return valaszok;
  }

  public int getPontszam()
  {
    return pontszam;
  }

  public void setPontszam(int pontszam)
  {
    this.pontszam = pontszam;
  }

  @Override
  public String toString()
  {
    return "Versenyzo{" + "kod=" + kod + ", valaszok="
      + valaszok + ", pontszam=" + pontszam + '}';
  }

}

A feladat megoldásai:

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

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

public class Webotlet_17maj_tesztverseny_v2
{
  public static void main(String[] args)
  {
    ArrayList<Versenyzo> versenyzok = new ArrayList<>();
    String helyes = null;
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("valaszok.txt", "r");
      String sor;
      helyes = raf.readLine();
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        versenyzok.add(new Versenyzo(sor.split(" ")));
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < versenyzok.length; i++ )
//    {
//      System.out.println(versenyzok.get(i).toString());
//    }
    
    System.out.println("2. feladat: A vetelkedon " + versenyzok.size()
      + " versenyzo indult.\n");
    
    System.out.print("3. feladat: A versenyzo azonositoja = ");
    Scanner sc = new Scanner(System.in);
    String azon = sc.nextLine();
    Versenyzo v = null;
    
    for( Versenyzo versenyzo : versenyzok)
    {
      if( versenyzo.getKod().equals(azon) )
      {
        v = versenyzo;
        break;
      }
    }
    
    System.out.println(v.getValaszok()
      + "   (a versenyzo valasza)\n");
    
    System.out.println("4. feladat:");
    System.out.println(helyes + "   (helyes megoldas)");
    for( int i = 0; i < helyes.length(); i++ )
    {
      if( v.getValaszok().charAt(i) == helyes.charAt(i) )
      {
        System.out.print("+");
      }
      else
      {
        System.out.print(" ");
      }
    }
    System.out.println("   (a versenyzo helyes valaszai)\n");
    
    System.out.print("5. feladat: A feladat sorszama = ");
    int szam = sc.nextInt() - 1; // a tombindex 1-gyel kisebb a sorszamtol
    
    int jo = 0;
    for( Versenyzo versenyzo : versenyzok)
    {
      if( versenyzo.getValaszok().charAt(szam) == helyes.charAt(szam) )
      {
        jo++;
      }
    }

    double szazalek = (double)jo / versenyzok.size() * 100;
    System.out.println(String.format("A feladatra %d fo, a "
      + "versenyzok %.2f%%-a adott helyes valaszt.%n",
      versenyzok.size(), szazalek));
    
    // 6. feladat
    int[] pontok = {3,3,3,3,3,4,4,4,4,4,5,5,5,6};
    for( Versenyzo versenyzo : versenyzok)
    {
      int pontszam = 0;
      for( int j = 0; j < versenyzo.getValaszok().length(); j++ )
      {
        if( versenyzo.getValaszok().charAt(j) == helyes.charAt(j) )
        {
          pontszam += pontok[j];
        }
      }
      versenyzo.setPontszam(pontszam);
    }
    
    try
    {
      RandomAccessFile ki = new RandomAccessFile("pontok.txt", "rw");
      ki.setLength(0);
      
      for( Versenyzo versenyzo : versenyzok)
      {
        ki.writeBytes(versenyzo.getKod() + " " + versenyzo.getPontszam() + "\n");
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
    System.out.println("7. feladat: A verseny legjobbjai:");
    for( int i = 0; i < versenyzok.size() - 1; i++ )
    {
      for( int j = i + 1; j < versenyzok.size(); j++ )
      {
        if( versenyzok.get(i).getPontszam() < versenyzok.get(j).getPontszam() )
        {
          Versenyzo csere = versenyzok.get(i);
          versenyzok.set(i, versenyzok.get(j));
          versenyzok.set(j, csere);
        }
      }
    }

    // 7. feladat egyik valtozat
    int helyezes = 1;
    System.out.println("1. dij (" + versenyzok.get(0).getPontszam()
      + " pont): " + versenyzok.get(0).getKod());
    
    for( int i = 1; i < versenyzok.size(); i++ )
    {
      if( versenyzok.get(i).getPontszam() != versenyzok.get(i - 1).getPontszam() )
      {
        helyezes++;
      }
      
      if( helyezes <= 3 )
      {
        System.out.println(helyezes + ". dij (" + versenyzok.get(i).getPontszam()
          + " pont): " + versenyzok.get(i).getKod());
      }
      else
      {
        break;
      }
    }
    System.out.println();
    
    // 7. feladat maskepp
    System.out.println("7. feladat maskepp:");
    
    helyezes = 1;
    int i = 0;
    do
    {
      System.out.println(helyezes + ". dij (" + versenyzok.get(i).getPontszam()
        + " pont): " + versenyzok.get(i).getKod());
      i++;
      if( versenyzok.get(i).getPontszam() != versenyzok.get(i - 1).getPontszam() )
      {
        helyezes++;
      }
    }
    while( helyezes != 4);
  }
}

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 .