2020. szeptember 2., szerda

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

nyári olimpián nagyon szépen szerepeltek a magyar színekben induló olimpikonok. Ebben a feladatban az általuk elért helyezésekkel kapcsolatos számításokat kell elvégeznie.
A megoldás során vegye figyelembe a következőket: 
• 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.
• Az egyes feladatokban a kiírásokat a minta szerint készítse el!
• Az ékezetmentes kiírás is elfogadott.
• A program megírásakor a fájlban lévő adatok helyes szerkezetét nem kell
ellenőriznie, feltételezheti, hogy a rendelkezésre álló adatok a leírtaknak
megfelelnek.
• A megoldását úgy készítse el, hogy az azonos szerkezetű, de tetszőleges bemeneti
adatok mellett is helyes eredményt adjon!
A helsinki.txt állomány soronként tartalmazza az 1952-es nyári olimpián elért
pontszerző helyezéseket (1−6. hely). Az első három helyezés egyben azt is jelentette, hogy
arany-, ezüst- vagy bronzérmet szerzett a sportoló vagy a csapat. Az adatokat a szóköz
karakter választja el egymástól.
Például: 3 4 atletika 4x100m_valtofutas
A sorokban lévő adatok rendre a következők:
− Az elért helyezés. Például: „3”
− A helyezést elérő sportoló vagy csapat esetén sportolók száma. Például: „4”
− A sportág neve. Például: „atletika”
− A versenyszám neve. Például: „4x100m_valtofutas”
1. Készítsen programot a következő feladatok megoldására, amelynek a forráskódját
helsinki1952 néven mentse el!
2. Olvassa be a helsinki.txt állományban lévő adatokat és tárolja el egy olyan
adatszerkezetben, amely a további feladatok megoldására alkalmas! A fájlban legfeljebb
200 sor lehet.
3. Határozza meg és írja ki a képernyőre a minta szerint, hogy hány pontszerző helyezést értek
el a magyar olimpikonok!
4. Készítsen statisztikát a megszerzett érmek számáról, majd összesítse az érmek számát a
minta szerint!
5. Az olimpián az országokat az elért eredményeik alapján rangsorolják. Az 1−6.
helyezéseket olimpiai pontokra váltják, és ezt összegzik. Határozza meg és írja ki a minta
szerint az elért olimpiai pontok összegét az alábbi táblázat segítségével!
Helyezés Olimpiai pont
1. 7
2. 5
3. 4
4. 3
5. 2
6. 1
 
Informatika ismeretek
középszint

6. Az úszás és a torna sportágakban világversenyeken mindig jól szerepeltek a magyar
sportolók. Határozza meg és írja ki a minta szerint, hogy az 1952-es nyári olimpián melyik
sportágban szereztek több érmet a sportolók! Ha az érmek száma egyenlő, akkor az
„Egyenlő volt az érmek száma” felirat jelenjen meg!
7. A helsinki.txt állományba hibásan, egybeírva „kajakkenu” került a kajak-kenu
sportág neve. Készítsen szöveges állományt helsinki2.txt néven, amelybe helyesen,
kötőjellel kerül a sportág neve! Az új állomány tartalmazzon minden helyezést a
forrásállományból, a sportágak neve elé kerüljön be a megszerzett olimpiai pont is a minta
szerint! A sorokban az adatokat szóközzel válassza el egymástól!
8. Határozza meg, hogy melyik pontszerző helyezéshez fűződik a legtöbb sportoló! Írja ki a
minta szerint a helyezést, a sportágat, a versenyszámot és a sportolók számát!
Feltételezheti, hogy nem alakult ki holtverseny.

Megoldás

Saját osztály:

/**
 *
 * @a szerzo
 */
package webotlet_17maj_szakmai_vizsga;
 
public class Helyezes
{
  private int hely;
  private int db;
  private String sportag;
  private String versenyszam;
   
  private int pontszam;
   
  public Helyezes(String[] tomb)
  {
    hely = Integer.parseInt(tomb[0]);
    db = Integer.parseInt(tomb[1]);
    sportag = tomb[2];
    versenyszam = tomb[3];
  }
 
  public int getHely()
  {
    return hely;
  }
 
  public int getDb()
  {
    return db;
  }
 
  public String getSportag()
  {
    return sportag;
  }
 
  public String getVersenyszam()
  {
    return versenyszam;
  }
 
  public int getPontszam()
  {
    return pontszam;
  }
 
  public void setPontszam(int pontszam)
  {
    this.pontszam = pontszam;
  }
 
  @Override
  public String toString()
  {
    return "Helyezes{" + "hely=" + hely + ", db=" + db + ", sportag="
      + sportag + ", versenyszam=" + versenyszam + ", pontszam=" + pontszam + '}';
  }
   
  public String eredmeny()
  {
    String nev = sportag;
    if( sportag.equals("kajakkenu") )
    {
      nev = "kajak-kenu";
    }
     
    return hely + " " + db + " " + pontszam + " " + nev + " " + versenyszam;
  }
}
A feladat megoldásai:

/**
 *
 * @a szerzo
 */
package webotlet_17maj_szakmai_vizsga;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
 
public class Webotlet_17maj_szakmai_e_helsinki1952
{
  public static void main(String[] args)
  {
    // 2. feladat
    ArrayList<Helyezes> helyezesek = new ArrayList<>();
     
    try
    {
      RandomAccessFile raf = new RandomAccessFile("helsinki.txt", "r");
      String sor;
       
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        helyezesek.add(new Helyezes(sor.split(" ")));
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
//    for( Helyezes helyezes : helyezesek)
//    {
//      System.out.println(helyezes.toString());
//    }
     
    System.out.println("3. feladat:");
    System.out.println("Pontszerző helyezések száma: " + helyezesek.size());
     
    System.out.println("4. feladat");
    int[] helyezesDb = new int[7];
    for( int i = 0; i < helyezesek.size(); i++ )
    {
      helyezesDb[helyezesek.get(i).getHely()]++;
    }
     
    System.out.println("Arany: " + helyezesDb[1]);
    System.out.println("Ezüst: " + helyezesDb[2]);
    System.out.println("Bronz: " + helyezesDb[3]);
    System.out.println("Összesen: " +
      (helyezesDb[1] + helyezesDb[2] + helyezesDb[3]));
     
    System.out.println("5. feladat");
    int osszeg = 0;
    for( int i = 0; i < helyezesek.size(); i++ )
    {
      helyezesek.get(i).setPontszam(pontszam(helyezesek.get(i).getHely()));
      osszeg += helyezesek.get(i).getPontszam();
    }
       
    System.out.println("Olimpiai pontok száma: " + osszeg);
     
    System.out.println("6. feladat");
    int tornaErmek = 0;
    int uszasErmek = 0;
    for( int i = 0; i < helyezesek.size(); i++ )
    {
      if( helyezesek.get(i).getHely() <= 3 )
      {
        if( helyezesek.get(i).getSportag().equals("torna") )
        {
          tornaErmek++;
        }
        else if( helyezesek.get(i).getSportag().equals("uszas") )
        {
          uszasErmek++;
        }
      }
    }
     
    if( tornaErmek > uszasErmek )
    {
      System.out.println("Torna sportágban szereztek több érmet");
    }
    else if( tornaErmek > uszasErmek )
    {
      System.out.println("Úszás sportágban szereztek több érmet");
    }
    else
    {
      System.out.println("Egyenlő volt az érmek száma");
    }
     
    // 7. feladat
    try
    {
      RandomAccessFile ki = new RandomAccessFile("helsinki2.txt", "rw");
      ki.setLength(0);
      for( int i = 0; i < helyezesek.size(); i++ )
      {
        ki.writeBytes(helyezesek.get(i).eredmeny() + "\n");
      }
      ki.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
    System.out.println("8. feladat");
     
    int max = 0;
    for( int i = 1; i < helyezesek.size(); i++ )
    {
      if( helyezesek.get(i).getDb() > helyezesek.get(max).getDb() )
      {
        max = i;
      }
    }
    System.out.println("Helyezés: " + helyezesek.get(max).getHely());
    System.out.println("Sportág: " + helyezesek.get(max).getSportag());
    System.out.println("Versenyszám: " + helyezesek.get(max).getVersenyszam());
    System.out.println("Sportolók száma: " + helyezesek.get(max).getDb());
     
  }
   
  public static int pontszam(int helyezes)
  {
    int pont;
    if( helyezes == 1 )
    {
      pont = 7;
    }
    else if( helyezes == 2 )
    {
      pont = 5;
    } 
    else if( helyezes == 3 )
    {
      pont = 4;
    } 
    else if( helyezes == 4 )
    {
      pont = 3;
    } 
    else if( helyezes == 5 )
    {
      pont = 2;
    } 
    else
    {
      pont = 1;
    }
    return pont;
  }
   
}
https://www.webotlet.hu/?page_id=2768

Nincsenek megjegyzések:

Megjegyzés küldése