A 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