Az emelt szintű informatika érettségi programozási feladatainak megoldása Java nyelven NetBeans IDE 8.1 környezetben Klement András 2016 Utolsó módosítás: 2016. május 25.
Tartalomjegyzék Tartalomjegyzék 2003 minta 1: Triatlon...3 2003 minta 2: Kugli... 12 2004 május: Személyazonosító jel... 19 2005 május: Lottó... 24 2005 október: Vigenère tábla... 34 2006 február: Telefonszámla... 42 2006 május: Fehérje... 50 2006 október: Zenei adók... 61 2007 május: SMS szavak... 73 2007 október: Foci... 81 2008 május: SMS... 89 2008 október: Robot... 100 2009 május: Lift... 108 2009 május idegennyelvű: Automata... 118 2009 október: Útépítés... 126 2010 május: Helyjegy... 134 2010 május idegennyelvű: Telek... 143 2010 október: Anagramma... 152 2011 május: Szójáték... 161 2011 május idegennyelvű: Rejtvény... 168 2011 október: Pitypang... 179 2012 május: Futár... 189 2012 május idegennyelvű: Törtek... 199 2012 október: Szín-kép... 205 2013 május: Választások... 216 2013 május idegennyelvű: Számok... 223 2013 október: Közúti ellenőrzés... 232 2014 május: IPv6... 241 2014 május idegennyelvű: Céllövészet... 252 2014 október: Nézőtér... 261 2015 május: Expedíció... 270 2015 május idegennyelvű: Latin táncok... 282 2015 október: Fej vagy írás... 291 2016 május: Ötszáz... 299 2016 május idegennyelvű: Zár... 312 Függelék: Alapvető algoritmusok Java nyelven... 319 Klemand 2.oldal 2016
2003 minta 1 Triatlon 2003 minta 1: Triatlon Egy triatlon versenyen a versenyzőknek a verseny folyamán egymás után kell először úszniuk, kerékpározniuk majd futniuk. Az győz, aki a legrövidebb idő alatt fejezi be a versenyt. Az egyes versenyzők adatai és időeredményei a triatlon.be fájlban találhatók. Az első sorban 0<N<100, versenyzők száma, a következő sorokban a versenyzők adatai a következők szerint szerepelnek: Például: Név Úszás idő Kerékpár idő Futás idő Gipsz Jakab 1345 2312 7988 Az elért időeredményeket másodpercekben tároljuk. 1. Olvassa be a triatlon.be fájlból az adatokat! 2. Írja ki az összesített időeredmények alapján az első három versenyző nevét a képernyőre! 3. Írja ki a képernyőre az első helyezett nevét és azt, hogy mekkora volt az átlagsebessége (km/h-ban) az úszásban, kerékpározásban és futásban, ha a távok a következők voltak: Úszás: 1,5 km, Kerékpározás:40 km, Futás: 10 km! 4. Konvertálja át a versenyzők végső időeredményeit óó:pp:ss formátumra (Óra:Perc:Másodperc). Mindegyik értéket két számjeggyel jelölje! 5. A versenyzők nevét és az átkonvertált, összesített időeredményét írja ki a triatlon.ki fájlba! 6. A fájlban a név mellett szerepeljen az időeredmény, például: Gipsz Jakab 03:14:05! 7. Mivel a közönség kíváncsi arra is, hogy az egyes számokat (azaz az úszást, kerékpározást, futást) kik nyerték, ezért a reszer.ki fájlba 3 versenyző nevét és átkonvertált, időeredményét kell kiírni. Az első név az úszás győztesének a neve és az úszásban elért ideje, a második sorban a kerékpározásban győztes neve és a kerekpározásban elért időeredménye, a harmadik sorban pedig a futásban legjobb időt elért versenyző neve és időeredménye szerepeljen! Ha többen ugyanazt az eredményt érték el valamelyik versenyszámban, akkor elég az egyikük nevét kiírni. Klemand 3.oldal 2016
2003 minta 1 Triatlon package emeltinfo2003mt1; import java.io.*; import java.util.*; /** * Triatlon * * @author Klemand */ public class EmeltInfo2003mt1 { public static void main(string[] args) throws IOException { //1. feladat System.out.println("Az 1. feladat megoldása"); System.out.println("Az adatok beolvasása a triatlon.be fájlból "); /* Kivételkezelés nem kell az emeltszintű érettségin, de ekkor a throws IOException mindig kell a fájlhasználathoz! Ügyelni kell, hogy a beolvasandó fájl a projekt főkönyvtárában legyen!*/ System.setProperty("file.encoding", "UTF-8"); //karakterkódolás beállítása BufferedReader behozatal; behozatal = new BufferedReader(new FileReader("triatlon.be")); String sor; sor = behozatal.readline(); //Ha van UTF-8 azonosító a fájl elején, elhagyjuk a sor elejéről: if (sor.charat(0) == (char) 0xFEFF) { sor = sor.substring(1); int n = Integer.parseInt(sor); //Az egyes versenyzők adatainak beolvasása és átadása a tömblista konstruktorának String nevbe; int uszidobe; int keridobe; int futidobe; for (int i = 1; i <= n; i++) { nevbe = behozatal.readline(); uszidobe = Integer.parseInt(behozatal.readLine()); keridobe = Integer.parseInt(behozatal.readLine()); futidobe = Integer.parseInt(behozatal.readLine()); //Az add metódus hozzáad egy új rekordot a tömblistához. versenyzo.add(new VersenyzoTipus(nevBe, uszidobe, keridobe, futidobe)); behozatal.close(); final int rajtletszam = versenyzo.size(); //2. feladat System.out.println("A 2. feladat megoldása"); //Az összidők felvétele és kiszámítása a konstruktorban. System.out.println("Próbabeolvasás az összidőkkel:"); System.out.println("A beolvasott fájl " + rajtletszam + " versenyző eredményeit tartalmazza. \n"); for (int i = 1; i <= rajtletszam; i++) { System.out.println(i + ". versenyző: "); System.out.println("név: " + versenyzo.get(i - 1).nev); Klemand 4.oldal 2016
2003 minta 1 Triatlon System.out.println("úszásidő: " + versenyzo.get(i - 1).uszIdo); System.out.println("kerékpáridő: " + versenyzo.get(i - 1).kerIdo); System.out.println("futásidő: " + versenyzo.get(i - 1).futIdo); System.out.println("összidő: " + versenyzo.get(i - 1).osszIdo); System.out.println("Rendezés az összidők szerint: "); int i, j, min; //minimumkiválasztásos rendezés VersenyzoTipus asztal; for (i = 1; i <= rajtletszam; i++) { min = i; for (j = i + 1; j <= rajtletszam; j++) { if (versenyzo.get(j - 1).osszIdo < versenyzo.get(min - 1).osszIdo) { min = j; /*Csere: egyszerre cseréljük a versenyzőkhöz tartozó teljes rekordokat. A get metódus lekérdezi, a set beállítja a tömblista teljes rekordjait, ill. külön-külön azok mezőit is. */ asztal = versenyzo.get(i - 1); versenyzo.set(i - 1, versenyzo.get(min - 1)); versenyzo.set(min - 1, asztal); for (i = 1; i <= rajtletszam; i++) { System.out.println(i + ". helyezett: "); System.out.println("név: " + versenyzo.get(i - 1).nev); System.out.println("úszásidő: " + versenyzo.get(i - 1).uszIdo); System.out.println("kerékpáridő: " + versenyzo.get(i - 1).kerIdo); System.out.println("futásidő: " + versenyzo.get(i - 1).futIdo); System.out.println("összidő: " + versenyzo.get(i - 1).osszIdo); System.out.println("Az első három helyezett az összidők alapján: \n"); for (i = 1; i <= 3; i++) { System.out.println(i + ". : " + versenyzo.get(i - 1).nev + " (összideje: " + versenyzo.get(i - 1).osszIdo + " s.)"); //3. feladat System.out.println("A 3. feladat megoldása"); System.out.println("Az első helyezett átlagsebessége az egyes versenyszámokban \n"); double USZTAV = 1.5; //km double KERTAV = 40; //km double FUTTAV = 10; //km double uszv, kerv, futv; uszv = USZTAV * 3600 / versenyzo.get(0).uszido; kerv = KERTAV * 3600 / versenyzo.get(0).kerido; futv = FUTTAV * 3600 / versenyzo.get(0).futido; System.out.println("A győztes neve: " + versenyzo.get(0).nev); System.out.print("Átlagsebessége úszásban: "); System.out.printf("%.2f", uszv); System.out.println(" km/h"); System.out.printf("Átlagsebessége kerékpározásban: %.2f", kerv); System.out.println(" km/h"); System.out.printf("Átlagsebessége futásban: %.2f", futv); System.out.println(" km/h\n"); //plusz soremelés Klemand 5.oldal 2016
2003 minta 1 Triatlon //4. feladat System.out.println("A 4. feladat megoldása"); System.out.println("Az időeredmények átkonvertálása "); //A konvertált összidők felvétele és kiszámítása függvénnyel a konstruktorban. System.out.println("Ellenőrzés: \n"); for (i = 1; i <= rajtletszam; i++) { System.out.println(versenyzo.get(i - 1).nev + " " + versenyzo.get(i - 1).osszIdoKonv); //5. és 6. feladat System.out.println("Az 5. és 6. feladat megoldása:"); System.out.println("Az átkonvertált időeredmények fájlba írása \n"); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("triatlon.ki")); for (i = 1; i <= rajtletszam; i++) { kivitel.println(versenyzo.get(i - 1).nev + " " + versenyzo.get(i - 1).osszIdoKonv); kivitel.close(); System.out.println("A fájlkiírás befejeződött. \n"); //7. feladat System.out.println("A 7. feladat megoldása:"); System.out.println("A versenyszámok győzteseinek fájlba írása \n"); int uszmin = 1; int kermin = 1; int futmin = 1; for (i = 2; i <= rajtletszam; i++) { if (versenyzo.get(i - 1).uszIdo < versenyzo.get(uszmin - 1).uszIdo) { uszmin = i; if (versenyzo.get(i - 1).kerIdo < versenyzo.get(kermin - 1).kerIdo) { kermin = i; if (versenyzo.get(i - 1).futIdo < versenyzo.get(futmin - 1).futIdo) { futmin = i; kivitel = new PrintWriter(new FileWriter("reszer.ki")); kivitel.println(versenyzo.get(uszmin - 1).nev + " " + idokonvertalas(versenyzo.get(uszmin - 1).uszIdo)); kivitel.println(versenyzo.get(kermin - 1).nev + " " + idokonvertalas(versenyzo.get(kermin - 1).kerIdo)); kivitel.println(versenyzo.get(futmin - 1).nev + " " + idokonvertalas(versenyzo.get(futmin - 1).futIdo)); kivitel.close(); System.out.println("A fájlkiírás befejeződött. \n"); System.out.println("Ellenőrzés: az átkonvertált részeredmények \n"); for (i = 1; i <= rajtletszam; i++) { System.out.println(i + ". helyezett: "); System.out.println("név: " + versenyzo.get(i - 1).nev); System.out.println("úszásidő: " + idokonvertalas(versenyzo.get(i - 1).uszIdo)); System.out.println("kerékpáridő: " + idokonvertalas(versenyzo.get(i - 1).kerIdo)); System.out.println("futásidő: " + idokonvertalas(versenyzo.get(i - 1).futIdo)); System.out.println("összidő: " + idokonvertalas(versenyzo.get(i - 1).osszIdo)); Klemand 6.oldal 2016
2003 minta 1 Triatlon System.out.println("Az egyes versenyszámok győztesei: "); System.out.println(versenyzo.get(uszMin - 1).nev + " " + idokonvertalas(versenyzo.get(uszmin - 1).uszIdo)); System.out.println(versenyzo.get(kerMin - 1).nev + " " + idokonvertalas(versenyzo.get(kermin - 1).kerIdo)); System.out.println(versenyzo.get(futMin - 1).nev + " " + idokonvertalas(versenyzo.get(futmin - 1).futIdo)); //************************************************************ //A tömblista konstruktora static ArrayList<VersenyzoTipus> versenyzo = new ArrayList<>(); //A típus egy osztály, ezért nagybetűvel kezdődik! public static class VersenyzoTipus { private final String nev; private final int uszido; private final int kerido; private final int futido; private final int osszido; private final String osszidokonv; public VersenyzoTipus(String nevbe, int uszidobe, int keridobe, int futidobe) //konstruktor { nev = nevbe; uszido = uszidobe; kerido = keridobe; futido = futidobe; osszido = uszidobe + keridobe + futidobe; osszidokonv = idokonvertalas(osszido);//függvényhívás public static String idokonvertalas(int ido) { int ora, perc, mp; String orast, percst, mpst; mp = ido % 60; perc = (ido / 60) % 60; ora = ido / 3600; orast = Integer.toString(ora); if (orast.length() < 2) { orast = "0" + orast; percst = Integer.toString(perc); if (percst.length() < 2) { percst = "0" + percst; mpst = Integer.toString(mp); if (mpst.length() < 2) { mpst = "0" + mpst; return orast + ":" + percst + ":" + mpst; //visszaadott függvényérték Klemand 7.oldal 2016
2003 minta 1 Triatlon run: Az 1. feladat megoldása Az adatok beolvasása a triatlon.be fájlból A 2. feladat megoldása Próbabeolvasás az összidőkkel: A beolvasott fájl 6 versenyző eredményeit tartalmazza. 1. versenyző: név: Kiss Pál úszásidő: 1512 kerékpáridő: 4931 futásidő: 2952 összidő: 9395 2. versenyző: név: Nagy Péter úszásidő: 1452 kerékpáridő: 4992 futásidő: 3071 összidő: 9515 3. versenyző: név: Tóth Ödön úszásidő: 1570 kerékpáridő: 5112 futásidő: 2832 összidő: 9514 4. versenyző: név: Tóth Pál úszásidő: 1518 kerékpáridő: 5051 futásidő: 2891 összidő: 9460 5. versenyző: név: Pál Péter úszásidő: 1439 kerékpáridő: 4997 futásidő: 2951 összidő: 9387 6. versenyző: név: Péter Pál úszásidő: 1522 kerékpáridő: 5085 futásidő: 2925 összidő: 9532 Rendezés az összidők szerint: 1. helyezett: név: Pál Péter úszásidő: 1439 kerékpáridő: 4997 futásidő: 2951 összidő: 9387 2. helyezett: név: Kiss Pál úszásidő: 1512 kerékpáridő: 4931 futásidő: 2952 Klemand 8.oldal 2016
2003 minta 1 Triatlon összidő: 9395 3. helyezett: név: Tóth Pál úszásidő: 1518 kerékpáridő: 5051 futásidő: 2891 összidő: 9460 4. helyezett: név: Tóth Ödön úszásidő: 1570 kerékpáridő: 5112 futásidő: 2832 összidő: 9514 5. helyezett: név: Nagy Péter úszásidő: 1452 kerékpáridő: 4992 futásidő: 3071 összidő: 9515 6. helyezett: név: Péter Pál úszásidő: 1522 kerékpáridő: 5085 futásidő: 2925 összidő: 9532 Az első három helyezett az összidők alapján: 1. : Pál Péter (összideje: 9387 s.) 2. : Kiss Pál (összideje: 9395 s.) 3. : Tóth Pál (összideje: 9460 s.) A 3. feladat megoldása Az első helyezett átlagsebessége az egyes versenyszámokban A győztes neve: Pál Péter Átlagsebessége úszásban: 3,75 km/h Átlagsebessége kerékpározásban: 28,82 km/h Átlagsebessége futásban: 12,20 km/h A 4. feladat megoldása Az időeredmények átkonvertálása Ellenőrzés: Pál Péter 02:36:27 Kiss Pál 02:36:35 Tóth Pál 02:37:40 Tóth Ödön 02:38:34 Nagy Péter 02:38:35 Péter Pál 02:38:52 Az 5. és 6. feladat megoldása: Az átkonvertált időeredmények fájlba írása A fájlkiírás befejeződött. A 7. feladat megoldása: A versenyszámok győzteseinek fájlba írása A fájlkiírás befejeződött. Klemand 9.oldal 2016
2003 minta 1 Triatlon Ellenőrzés: az átkonvertált részeredmények 1. helyezett: név: Pál Péter úszásidő: 00:23:59 kerékpáridő: 01:23:17 futásidő: 00:49:11 összidő: 02:36:27 2. helyezett: név: Kiss Pál úszásidő: 00:25:12 kerékpáridő: 01:22:11 futásidő: 00:49:12 összidő: 02:36:35 3. helyezett: név: Tóth Pál úszásidő: 00:25:18 kerékpáridő: 01:24:11 futásidő: 00:48:11 összidő: 02:37:40 4. helyezett: név: Tóth Ödön úszásidő: 00:26:10 kerékpáridő: 01:25:12 futásidő: 00:47:12 összidő: 02:38:34 5. helyezett: név: Nagy Péter úszásidő: 00:24:12 kerékpáridő: 01:23:12 futásidő: 00:51:11 összidő: 02:38:35 6. helyezett: név: Péter Pál úszásidő: 00:25:22 kerékpáridő: 01:24:45 futásidő: 00:48:45 összidő: 02:38:52 Az egyes versenyszámok győztesei: Pál Péter 00:23:59 Kiss Pál 01:22:11 Tóth Ödön 00:47:12 BUILD SUCCESSFUL (total time: 1 second) Klemand 10.oldal 2016
2003 minta 1 Triatlon triatlon.ki: Pál Péter 02:36:27 Kiss Pál 02:36:35 Tóth Pál 02:37:40 Tóth Ödön 02:38:34 Nagy Péter 02:38:35 Péter Pál 02:38:52 reszer.ki: Pál Péter 00:23:59 Kiss Pál 01:22:11 Tóth Ödön 00:47:12 Klemand 11.oldal 2016
2003 minta 2 Kugli 2003 minta 2: Kugli A kugli játéknál 9 bábut állítanak fel egy négyzet alakú helyre, ezeket a bábukat egy golyóval lehet ledönteni. A játékosok egymás után dobnak. A játékszabály a következő: a játékosoknak legalább annyi bábut kell ledöntenie, mint amennyit az előtte dobó játékos ledöntött. Ha kevesebbet dönt le, akkor hibapontot kap. A játékos 2 hibapont után kiesik a játékból. A játékosok száma 5, és a játék 4 kör alatt ért véget. Az első játékos az első körben nem kaphat hibapontot, de a további körökben az előző kör utolsó dobáseredményéhez viszonyítják teljesítményét. A kugli játék körönkénti eredményeit az eredm1.txt, eredm2.txt, eredm3.txt, eredm4.txt fájlokban tároljuk. Minden fájlban a még versenyben lévő személyek nevét és a körben elért eredményét, a következőképpen: Versenyző neve Ledöntött bábuk száma Ha valaki kiesett a játékból, akkor a további körök eredményeit tároló fájlban a ledöntött bábuk száma sorban értékként 10 szerepel. Például: Gipsz Jakab 5 Kelep Elek 10 Kiss Géza 6 Nagy Péter 4 Kovács Éva 8 1. Olvassa be az eredm1.txt fájlból az adatokat! 2. A szabályok alapján állapítsa meg, hogy az első körben mely játékosok kaptak hibapontot. Ezek nevét írja ki a képernyőre! 3. Olvassa be az eredm2.txt, eredm3.txt és az eredm4.txt fájlokból az adatokat! 4. Számítsa ki, hogy a versenyzők a játék során külön-külön mennyi bábut döntöttek le, az eredményt írja ki a képernyőre! A kiírásnál a név mellett szerepeljen az elért eredmény! Például: Gipsz Jakab 24 Kelep Elek 12. 5. Írja ki a képernyőre a legtöbb pontot elért versenyző nevét és eredményét! 6. Állapítsa meg a fájlokban lévő adatok alapján a kiesett versenyzők nevét és azt, hogy melyik körben estek ki! A neveket és a kör számát írja ki a képernyőre! 7. Írja ki a képernyőre azoknak a versenyzőknek a nevét, akiknek sikerült 9 bábut eldönteniük a dobásukkal a játék során! A nevük mellett szerepeljen, hogy mely körökben érték el ezt az eredményt! (A név legfeljebb egyszer szerepeljen!) Klemand 12.oldal 2016
2003 minta 2 Kugli package emeltinfo2003mt2; import java.io.*; import java.util.*; /** * Kugli * * @author Klemand */ public class EmeltInfo2003mt2 { public static void main(string[] args) throws IOException { //1. feladat System.out.println("Az 1. feladat megoldása"); System.out.println("Az adatok beolvasása az eredm1.txt fájlból \n"); int LSZ = 5; //A feladatban megadott String[] eredm = new String[4]; eredm[0] = "eredm1.txt"; eredm[1] = "eredm2.txt"; eredm[2] = "eredm3.txt"; eredm[3] = "eredm4.txt"; System.setProperty("file.encoding", "UTF-8"); //karakterkódolás beállítása BufferedReader behozatal; behozatal = new BufferedReader(new FileReader(eredm[0])); String sor; sor = behozatal.readline(); //Ha van UTF-8 azonosító a fájl elején, elhagyjuk a sor elejéről: if (sor.charat(0) == (char) 0xFEFF) { sor = sor.substring(1); String nevbe; int kor1be; nevbe = sor; kor1be = Integer.parseInt(behozatal.readLine()); jatekos.add(new JatekosTipus(nevBe, kor1be)); //Az első játékost az UTF-8 azonosító miatt kellett külön kezelni. int i; for (i = 2; i <= LSZ; i++) { nevbe = behozatal.readline(); kor1be = Integer.parseInt(behozatal.readLine()); //Az add metódus hozzáad egy új rekordot a tömblistához. jatekos.add(new JatekosTipus(nevBe, kor1be)); behozatal.close(); System.out.println("A beolvasás ellenőrzése \n"); for (i = 1; i <= LSZ; i++) { System.out.println(i + ". játékos: "); System.out.println("név: " + jatekos.get(i - 1).nev); System.out.println("első kör: " + jatekos.get(i - 1).korok[0]); //2. feladat System.out.println("A 2. feladat megoldása"); System.out.println("Hibapontok az első körben \n"); Klemand 13.oldal 2016
2003 minta 2 Kugli for (i = 2; i <= LSZ; i++) { if (jatekos.get(i - 1).korok[0] < jatekos.get(i - 2).korok[0]) { jatekos.get(i - 1).hibaPont1++; for (i = 2; i <= LSZ; i++) { if (jatekos.get(i - 1).hibaPont1 > 0) { System.out.println(jatekos.get(i - 1).nev); //3. feladat System.out.println("A 3. feladat megoldása"); System.out.println("Az adatok beolvasása a többi txt fájlból \n"); for (int k = 2; k <= 4; k++) { behozatal = new BufferedReader(new FileReader(eredm[k - 1])); for (i = 1; i <= LSZ; i++) { behozatal.readline(); //A nevet most már csak átugorjuk jatekos.get(i - 1).korok[k - 1] = Integer.parseInt(behozatal.readLine()); behozatal.close(); System.out.println("A beolvasás ellenőrzése \n"); for (i = 1; i <= LSZ; i++) { System.out.println(i + ". játékos: "); System.out.println("név: " + jatekos.get(i - 1).nev); for (int k = 1; k <= 4; k++) { System.out.println(k + ". kör: " + jatekos.get(i - 1).korok[k - 1]); //4. feladat System.out.println("A 4. feladat megoldása"); System.out.println("Ledöntött bábuk száma \n"); for (i = 1; i <= LSZ; i++) { int k = 1; while ((k <= 4) && (jatekos.get(i - 1).korok[k - 1] < 10)) { /*Itt nagyon fontos, hogy a k<=4 feltétel kerüljön előre, mert így a k=5-öt már nem kapja meg a második felétel*/ jatekos.get(i - 1).osszDobas += jatekos.get(i - 1).korok[k - 1]; k++; for (i = 1; i <= LSZ; i++) { System.out.println(jatekos.get(i - 1).nev + " " + jatekos.get(i - 1).osszDobas); //5. feladat System.out.println("Az 5. feladat megoldása"); System.out.println("A legtöbb pontot elért versenyző \n"); int max = 1; for (i = 2; i <= LSZ; i++) { if (jatekos.get(i - 1).osszDobas > jatekos.get(max - 1).osszDobas) { max = i; System.out.println(jatekos.get(max - 1).nev + " " + jatekos.get(max - 1).osszDobas); Klemand 14.oldal 2016
2003 minta 2 Kugli //6. feladat System.out.println("A 6. feladat megoldása"); System.out.println("A kiesett versenyzők és a kiesés köre \n"); for (i = 1; i <= LSZ; i++) { int k = 1; while ((k <= 4) && (jatekos.get(i - 1).korok[k - 1] < 10)) { //Itt is nagyon fontos a sorrend! k++; if (k <= 4) { jatekos.get(i - 1).kiesett = true; jatekos.get(i - 1).kieses = k - 1; for (i = 1; i <= LSZ; i++) { if (jatekos.get(i - 1).kiesett == true) { System.out.println(jatekos.get(i - 1).nev + " " + jatekos.get(i - 1).kieses); //7. feladat System.out.println("A 7. feladat megoldása"); System.out.println("A 9 pontos versenyzők és a 9 pontos körök \n"); for (i = 1; i <= LSZ; i++) { if ((jatekos.get(i - 1).korok[0] == 9) (jatekos.get(i - 1).korok[1] == 9) (jatekos.get(i - 1).korok[2] == 9) (jatekos.get(i - 1).korok[3] == 9)) { jatekos.get(i - 1).kilencPontos = true; for (i = 1; i <= LSZ; i++) { if (jatekos.get(i - 1).kilencPontos == true) { System.out.print(jatekos.get(i - 1).nev); for (int k = 1; k <= 4; k++) { if (jatekos.get(i - 1).korok[k - 1] == 9) { System.out.print(" " + k); //************************************************************ Klemand 15.oldal 2016
2003 minta 2 Kugli //A tömblista konstruktora static ArrayList<JatekosTipus> jatekos = new ArrayList<>(); public static class JatekosTipus { private final String nev; private int[] korok = new int[4]; private int osszdobas; private int hibapont1; private boolean kiesett; private int kieses; private boolean kilencpontos; //finalként utólag nem engedi az értéket módosítani public JatekosTipus(String nevbe, int kor1be) //konstruktor { nev = nevbe; korok[0] = kor1be; korok[1] = 0;//Kezdőértékek, futás közben állítjuk be a valódi értéküket korok[2] = 0; korok[3] = 0; osszdobas = 0; hibapont1 = 0; kiesett = false; kieses = 0; kilencpontos = false; Klemand 16.oldal 2016
2003 minta 2 Kugli run: Az 1. feladat megoldása Az adatok beolvasása az eredm1.txt fájlból A beolvasás ellenőrzése 1. játékos: név: Gipsz Jakab első kör: 8 2. játékos: név: Kelep Elek első kör: 9 3. játékos: név: Kiss Géza első kör: 7 4. játékos: név: Nagy Péter első kör: 7 5. játékos: név: Kovács Éva első kör: 6 A 2. feladat megoldása Hibapontok az első körben Kiss Géza Kovács Éva A 3. feladat megoldása Az adatok beolvasása a többi txt fájlból A beolvasás ellenőrzése 1. játékos: név: Gipsz Jakab 1. kör: 8 2. kör: 5 3. kör: 7 4. kör: 10 2. játékos: név: Kelep Elek 1. kör: 9 2. kör: 7 3. kör: 7 4. kör: 9 3. játékos: név: Kiss Géza 1. kör: 7 2. kör: 5 3. kör: 10 4. kör: 10 4. játékos: név: Nagy Péter 1. kör: 7 2. kör: 9 3. kör: 8 4. kör: 9 Klemand 17.oldal 2016
2003 minta 2 Kugli 5. játékos: név: Kovács Éva 1. kör: 6 2. kör: 8 3. kör: 10 4. kör: 10 A 4. feladat megoldása Ledöntött bábuk száma Gipsz Jakab 20 Kelep Elek 32 Kiss Géza 12 Nagy Péter 33 Kovács Éva 14 Az 5. feladat megoldása A legtöbb pontot elért versenyző Nagy Péter 33 A 6. feladat megoldása A kiesett versenyzők és a kiesés köre Gipsz Jakab 3 Kiss Géza 2 Kovács Éva 2 A 7. feladat megoldása A 9 pontos versenyzők és a 9 pontos körök Kelep Elek 1 4 Nagy Péter 2 4 BUILD SUCCESSFUL (total time: 0 seconds) Klemand 18.oldal 2016
2004 május Személyazonosító jel 2004 május: Személyazonosító jel Az ország állampolgárainak van egyedi azonosítójuk. Ez a személyazonosító jel. Az 1997. január 1-je után születetteknél ez a következőképpen néz ki. A személyazonosító jel 11 jegyű. Az első jegy a személy nemét jelöli, az alábbi táblázat alapján. 1997. január 1. és 1999. december 31. 1999. december 31. után született között született férfi nő férfi nő 1 2 3 4 A 2 7 számjegyek a születési év utolsó két jegyét, a születési hónapot és napot tartalmazza. A 8 10. számjegyek az azonos napon születettek születési sorszáma. A 11. jegy az első tíz jegyből képzett ellenőrző szám. Írjon olyan programot, amely végrehajtja az alábbi utasításokat! a) Kérje be egy személyazonosító jel első 10 jegyét! b) Írassa ki a képernyőre, a személyazonosító jel alapján, hogy az adott személy férfi vagy nő! c) Írassa ki a képernyőre, az adott személy születési sorszámát! d) Írassa ki a képernyőre, hogy hányadik születésnapja van ebben az évben a személynek! e) Kérjen be egy másik személyazonosító jelet is! (Szintén csak az első 10 jegyét!) f) Határozza meg, a két beadott személyazonosító jel alapján, hogy melyik személy idősebb! (Ha két ember ugyanakkor született, akkor a 8 10. jegy alapján döntse el, melyik az idősebb!) Az eredményt a képernyőn jelenítse meg! g) Mennyi a különbség a születési éveik között? Figyeljen a 1999. dec. 31. után születettekre is! Az eredményt írassa ki a képernyőre! h) A másodikként beadott személyazonosító jelből, számítsa ki a 11. jegyet és írassa ki a képernyőre a teljes személyazonosító jelet. A számítás a következő szabály alapján működik. A első tíz számjegy mindegyikét szorozzuk meg egy számmal. Mégpedig a 10. helyen állót eggyel, a 9. helyen állót kettővel és így tovább. Az így kapott szorzatokat adjuk össze. A kapott összeget osszuk el tizeneggyel. Az osztás maradéka lesz a 11. jegy. Kivéve, ha a maradék 10. Mert ekkor azt a születési sorszámot nem adják ki. Ebben az esetben írja ki, hogy hibás a születési sorszám! i) Mindkét korábban beadott személyazonosító jel első 10 jegyét írja a szemszam.txt fájlba! Klemand 19.oldal 2016
2004 május Személyazonosító jel package emeltinfo2004maj; import java.util.*; //számbeolvasáshoz import java.io.*;//szöveg beolvasásához /** * Személyazonosító jel * * @author Klemand */ public class EmeltInfo2004maj { public static void main(string[] args) throws IOException { //a) feladat //Az első személyi szám első 10 jegyének bekérése a billyentyűzetről System.out.println("Az a) feladat megoldása:"); System.out.println("Kérem az első személyi szám első tíz jegyét! "); String kod = kodbeolvasas(); int[] szemszam1 = new int[11]; for (int i = 1; i <= 10; i++) { szemszam1[i - 1] = Integer.parseInt(kod.substring(i - 1, i)); //Ellenőrzés (nem része a feladatnak) for (int i = 1; i <= 10; i++) { System.out.println("A megadott személyi szám " + i + ". számjegye: " + szemszam1[i - 1]); //b) feladat //A nem meghatározása a beírt személyi számból System.out.println("A b) feladat megoldása:"); if (szemszam1[0] % 2 == 1) { System.out.println("Az adott személy férfi."); else { System.out.println("Az adott személy nő."); //c) feladat //A születési sorszám kiíratása a képernyőre System.out.println("A c) feladat megoldása:"); System.out.println("Az adott személy születési sorszáma a beolvasott sztringből: " + kod.substring(7, 10)); int szulsorszam1 = 100 * szemszam1[7] + 10 * szemszam1[8] + szemszam1[9]; System.out.println("Vagy a személyi szám jegyeinek tömbjéből: " + szulsorszam1); //d) feladat //Hányadik születésnap int szulev1, aktev; System.out.println("A d) feladat megoldása:"); szulev1 = szulev(szemszam1); Calendar calendar = Calendar.getInstance(); aktev = calendar.get(calendar.year); System.out.println("Az adott személy születési éve: " + szulev1 + ", az idei év: " + aktev); System.out.println("Tehát idén " + (aktev - szulev1) + ". születésnapja van."); Klemand 20.oldal 2016
2004 május Személyazonosító jel //e) feladat //A második személyi szám első 10 jegyének bekérése a billyentyűzetről System.out.println("Az e) feladat megoldása:"); System.out.println("Kérem a második személyi szám első tíz jegyét! "); kod = kodbeolvasas(); int[] szemszam2 = new int[11]; for (int i = 1; i <= 10; i++) { szemszam2[i - 1] = Integer.parseInt(kod.substring(i - 1, i)); //Ellenőrzés (nem része a feladatnak) for (int i = 1; i <= 10; i++) { System.out.println("A megadott személyi szám " + i + ". számjegye: " + szemszam2[i - 1]); //f) feladat //Melyik idősebb? System.out.println("Az f) feladat megoldása:"); int szulev2; szulev2 = szulev(szemszam2); if (szulev1 < szulev2) { System.out.println("Az első személy az idősebb"); else if (szulev1 > szulev2) { System.out.println("A második személy az idősebb"); else { int i = 4; while (i<=10 && szemszam1[i - 1] == szemszam2[i - 1]) { i++; if (szemszam1[i - 1] < szemszam2[i - 1]) { System.out.println("Az első személy az idősebb"); else if (szemszam1[i - 1] > szemszam2[i - 1]) { System.out.println("A második személy az idősebb"); else { System.out.println("A két személyi szám nem lehet azonos!"); //g) feladat //Születési éveik közti különbség System.out.println("A g) feladat megoldása:"); System.out.println("A születési éveik közti különbség: " + (Math.abs(szulEv2 - szulev1))); //h) feladat //A második személyi szám 11. jegyének meghatározása //A valóságban az első jegyet szorozzák eggyel, nem a tizediket! //Így nem kapjuk meg pl. a saját személyi számunk utolsó jegyét! System.out.println("A h) feladat megoldása:"); int osszeg = 0; for (int i = 10; i >= 1; i--) { osszeg += szemszam2[i - 1] * (11 - i); int jegy = osszeg % 11; if (jegy!= 10) { System.out.print("A teljes második személyi szám: "); for (int i = 1; i <= 10; i++) { System.out.print(szemSzam2[i - 1]); System.out.println(jegy); Klemand 21.oldal 2016
2004 május Személyazonosító jel else { System.out.println("Hibás a születési sorszám!"); //i) feladat //A személyi számok első 10 jegyének kiíratása fájlba System.out.println("A h) feladat megoldása:"); System.out.println("A személyi számok első 10 jegyének kiíratása a szemszam.txt fájlba."); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("szemszam.txt")); for (int i = 1; i <= 10; i++) { kivitel.print(szemszam1[i - 1]); kivitel.println(); for (int i = 1; i <= 10; i++) { kivitel.print(szemszam2[i - 1]); kivitel.println(); kivitel.close(); System.out.println("A fájlkiírás befejeződött."); //************************************************************ public static String kodbeolvasas() throws IOException { BufferedReader bill; bill = new BufferedReader(new InputStreamReader(System.in, "Cp1250")); return bill.readline(); public static int szulev(int[] szemszam) { if ((szemszam[0] <= 2)) { return 1900 + 10 * szemszam[1] + szemszam[2]; else { return 2000 + 10 * szemszam[1] + szemszam[2]; Klemand 22.oldal 2016
2004 május Személyazonosító jel run: Az a) feladat megoldása: Kérem az első személyi szám első tíz jegyét! 1991231999 A megadott személyi szám 1. számjegye: 1 A megadott személyi szám 2. számjegye: 9 A megadott személyi szám 3. számjegye: 9 A megadott személyi szám 4. számjegye: 1 A megadott személyi szám 5. számjegye: 2 A megadott személyi szám 6. számjegye: 3 A megadott személyi szám 7. számjegye: 1 A megadott személyi szám 8. számjegye: 9 A megadott személyi szám 9. számjegye: 9 A megadott személyi szám 10. számjegye: 9 A b) feladat megoldása: Az adott személy férfi. A c) feladat megoldása: Az adott személy születési sorszáma a beolvasott sztringből: 999 Vagy a személyi szám jegyeinek tömbjéből: 999 A d) feladat megoldása: Az adott személy születési éve: 1999, az idei év: 2016 Tehát idén 17. születésnapja van. Az e) feladat megoldása: Kérem a második személyi szám első tíz jegyét! 3000101001 A megadott személyi szám 1. számjegye: 3 A megadott személyi szám 2. számjegye: 0 A megadott személyi szám 3. számjegye: 0 A megadott személyi szám 4. számjegye: 0 A megadott személyi szám 5. számjegye: 1 A megadott személyi szám 6. számjegye: 0 A megadott személyi szám 7. számjegye: 1 A megadott személyi szám 8. számjegye: 0 A megadott személyi szám 9. számjegye: 0 A megadott személyi szám 10. számjegye: 1 Az f) feladat megoldása: Az első személy az idősebb A g) feladat megoldása: A születési éveik közti különbség: 1 A h) feladat megoldása: A teljes második személyi szám: 30001010018 A h) feladat megoldása: A személyi számok első 10 jegyének kiíratása a szemszam.txt fájlba. A fájlkiírás befejeződött. BUILD SUCCESSFUL (total time: 48 seconds) szemszam.txt: 1991231999 3000101001 Klemand 23.oldal 2016
2005 május Lottó 2005 május: Lottó Magyarországon 1957 óta lehet ötös lottót játszani. A játék lényege a következő: a lottószelvényeken 90 szám közül 5 számot kell a fogadónak megjelölnie. Ha ezek közül 2 vagy annál több megegyezik a kisorsolt számokkal, akkor nyer. Az évek során egyre többen hódoltak ennek a szerencsejátéknak és a nyeremények is egyre nőttek. Adottak a lottosz.dat szöveges állományban a 2003. év 51 hetének ötös lottó számai. Az első sorában az első héten húzott számok vannak, szóközzel elválasztva, a második sorban a második hét lottószámai vannak stb. Például: 37 42 44 61 62 18 42 54 83 89... 9 20 21 59 68 A lottószámok minden sorban emelkedő számsorrendben szerepelnek. Az állományból kimaradtak az 52. hét lottószámai. Ezek a következők voltak: 89 24 34 11 64. Készítsen programot a következő feladatok megoldására! 1. Kérje be a felhasználótól az 52. hét megadott lottószámait! 2. A program rendezze a bekért lottószámokat emelkedő sorrendbe! A rendezett számokat írja ki a képernyőre! 3. Kérjen be a felhasználótól egy egész számot 1-51 között! A bekért adatot nem kell ellenőrizni! 4. Írja ki a képernyőre a bekért számnak megfelelő sorszámú hét lottószámait, a lottosz.dat állományban lévő adatok alapján! 5. A lottosz.dat állományból beolvasott adatok alapján döntse el, hogy volt-e olyan szám, amit egyszer sem húztak ki az 51 hét alatt! A döntés eredményét (Van/Nincs) írja ki a képernyőre! 6. A lottosz.dat állományban lévő adatok alapján állapítsa meg, hogy hányszor volt páratlan szám a kihúzott lottószámok között! Az eredményt a képernyőre írja ki! 7. Fűzze hozzá a lottosz.dat állományból beolvasott lottószámok után a felhasználótól bekért, és rendezett 52. hét lottószámait, majd írja ki az összes lottószámot a lotto52.ki szöveges fájlba! A fájlban egy sorba egy hét lottószámai kerüljenek, szóközzel elválasztva egymástól! 8. Határozza meg a lotto52.ki állomány adatai alapján, hogy az egyes számokat hányszor húzták ki 2003-ban. Az eredményt írja ki a képernyőre a következő formában: az első sor első eleme az a szám legyen ahányszor az egyest kihúzták! Az első sor második eleme az az érték legyen, ahányszor a kettes számot kihúzták stb.! (Annyit biztosan tudunk az értékekről, hogy mindegyikük egyjegyű.) Klemand 24.oldal 2016
2005 május Lottó package emeltinfo2005maj; import java.io.*; import java.util.*; /** * Lottó * * @author Klemand */ public class EmeltInfo2005maj { public static void main(string[] args) throws IOException { System.setProperty("file.encoding", "UTF8"); //karakterkódolás beállítása BufferedReader behozatal; behozatal= new BufferedReader(new FileReader("lottosz.dat")); int i, j, k; String elsosor; String sor; String[] daraboltsor; int[][] lottoszamok = new int[52][5]; elsosor = behozatal.readline(); //Ha van UTF-8 azonosító a fájl elején, elhagyjuk a sor elejéről: if (elsosor.charat(0) == (char) 0xFEFF) { elsosor = elsosor.substring(1); daraboltsor = elsosor.split(" "); for (j = 1; j <= 5; j++) { lottoszamok[0][j - 1] = Integer.parseInt(daraboltSor[j - 1]); for (i = 2; i <= 51; i++) { sor = behozatal.readline(); daraboltsor = sor.split(" "); for (j = 1; j <= 5; j++) { lottoszamok[i - 1][j - 1] = Integer.parseInt(daraboltSor[j - 1]); behozatal.close(); //Ellenőrzés System.out.println("Az utolsó 5 hét beolvasott lottószámai: "); for (i = 47; i <= 51; i++) { System.out.print(i + ". hét: "); for (j = 1; j <= 5; j++) { System.out.print(lottoSzamok[i - 1][j - 1] + " "); //1. feladat System.out.println("Az 1. feladat megoldása:"); Klemand 25.oldal 2016
2005 május Lottó /*A beírt számok ellenőrzése nélkül: System.out.println("Kérem az 52. hét megadott lottószámait (89 24 34 11 64) szóközökkel elválasztva!"); (Az érettsigin általában nem kell ellenőrizni a beírt adatokat, de ha nem számot írnánk be, vagy nem esne az [1;90] intervallumba, vagy 5-nél kevesebb számot írnánk be, akkor a program hibajelzéssel leállna.) bevitel(); for (j = 1; j <= 5; j++) { lottoszamok[51][j - 1] = Integer.parseInt(daraboltSor[j - 1]); */ //A beírt számok teljes ellenőrzésével: Van-e 5 megfelelő lottószám? int tipp; int db; int jodb = 0; boolean[] lotto = new boolean[90]; while (jodb < 5) { //Lottótörlés for (i = 1; i <= 90; i++) { lotto[i - 1] = false; jodb = 0; //Ne lehessen hozzáírni a korábbi hiányos bevitelhez! System.out.println("Kérem az 52. hét megadott lottószámait (89 24 34 11 64) szóközökkel elválasztva!"); //Azt nem ellenőrizzük, hogy valóban ezeket a számokat írjuk-e be. daraboltsor = beolvas(); db = daraboltsor.length; //Tömbnél length, szövegnél length()! for (j = 1; ((j <= db) && (jodb < 5)); j++) { try { tipp = Integer.parseInt(daraboltSor[j - 1]); if ((tipp < 1) (tipp > 90)) { System.out.println("Csak 1 és 90 közötti számot tippelhetsz!"); else if (lotto[tipp - 1]!= true) { //még nem volt ilyen szám lotto[tipp - 1] = true; //ez többet nem húzható ki! jodb++; //ciklusváltozó növelése lottoszamok[51][jodb - 1] = tipp; else { System.out.println("A " + tipp + " már szerepelt. "); catch (Exception e) { if (j <= db) { System.out.println(j + ". elem: " + daraboltsor[j - 1] + ", törölve, hibás számformátum! "); if (jodb < 5) { System.out.println("Kevés számot adtál meg!"); System.out.print("Az elfogadott beolvasott lottószámok: "); for (j = 1; j <= 5; j++) { System.out.print(lottoSzamok[51][j - 1] + " "); Klemand 26.oldal 2016
2005 május Lottó //2. feladat System.out.println("A 2. feladat megoldása:"); int min, asztal; for (j = 1; j <= 5; j++) { min = j; for (k = j + 1; k <= 5; k++) { if (lottoszamok[51][k - 1] < lottoszamok[51][min - 1]) { min = k; asztal = lottoszamok[51][j - 1];//elemcsere lottoszamok[51][j - 1] = lottoszamok[51][min - 1]; lottoszamok[51][min - 1] = asztal; System.out.print("Az 52. hét lottószámai nagyság szerint rendezve: "); for (j = 1; j <= 5; j++) { System.out.print(lottoSzamok[51][j - 1] + " "); //3. feladat //Egy hét sorszámának bekérése System.out.println("A 3. feladat megoldása:"); System.out.println("Kérem a vizsgált hét sorszámát 1 és 51 között! "); int het = hetbeolvasas(); //Ellenőrzés System.out.println("A hét sorszáma: " + het); //4. feladat //A bekért hét nyerőszámainak kiírása System.out.println("A 4. feladat megoldása:"); System.out.print("A(z) " + het + ". hét nyerőszámai: "); for (j = 1; j <= 5; j++) { System.out.print(lottoSzamok[het - 1][j - 1] + " "); System.out.println("\n"); //5. feladat //Volt-e olyan szám, amit egyszer sem húztak ki? System.out.println("Az 5. feladat megoldása:"); //Lottótörlés for (i = 1; i <= 90; i++) { lotto[i - 1] = false; //Az 51 hét során kihúzott számok for (i = 1; i <= 51; i++) { for (j = 1; j <= 5; j++) { lotto[lottoszamok[i - 1][j - 1] - 1] = true; Klemand 27.oldal 2016
2005 május Lottó //Eldöntés, keresés //A feladat csak az eldöntést kéri i = 1; while ((i <= 90) && (lotto[i - 1] == true)) { i++; if (i <= 90) { System.out.println("Volt olyan szám, amit egyszer sem húztak ki."); System.out.println("Az első ilyen szám a(z) " + i); else { System.out.println("Nem volt olyan szám, amit egyszer sem húztak ki."); //Megszámolás //A feladat csak az eldöntést kéri int egyszersemdb = 0; int[] egyszersem = new int[90]; for (i = 1; i <= 90; i++) { if (lotto[i - 1] == false) { egyszersem[egyszersemdb] = i; egyszersemdb++; System.out.print(egyszersemDb + " olyan szám volt, amit egyszer sem húztak ki: "); for (i = 1; i <= egyszersemdb; i++) { System.out.print(egyszerSem[i - 1] + " "); //6. feladat //Hányszor volt páratlan szám a kihúzott lottószámok között? System.out.println("Az 6. feladat megoldása:"); //Hivatalos megoldás: Hány páratlan szám volt összesen? int paratlanossz = 0; for (i = 1; i <= 51; i++) { for (j = 1; j <= 5; j++) { if (lottoszamok[i - 1][j - 1] % 2 == 1) { paratlanossz++; System.out.println("Összesen " + paratlanossz + " esetben volt a nyertes szám páratlan."); //Alternatív értelmezés: Hány héten szerepelt páratlan szám a kihúzottak között? int paratlanhet = 0; for (i = 1; i <= 51; i++) { j = 1; while ((j <= 5) && (lottoszamok[i - 1][j - 1] % 2 == 0)) { j++; if (j <= 5) { paratlanhet++; System.out.println(paratlanHet + " héten volt a nyertes számok között páratlan."); Klemand 28.oldal 2016
2005 május Lottó //7. feladat //Fájlkiírás System.out.println("A 7. feladat megoldása:"); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("lotto52.ki")); for (i = 1; i <= 52; i++) { for (j = 1; j <= 5; j++) { kivitel.print(lottoszamok[i - 1][j - 1] + " "); kivitel.println(); kivitel.close(); System.out.println("A fájlkiírás befejeződött."); //8. feladat //Gyakorisági táblázat System.out.println("A 8. feladat megoldása a lottószámok tömb alapján: "); //Jó lenne az 5. feladathoz is. //dbtörlés int[] gyakorisag = new int[90]; for (i = 1; i <= 90; i++) { gyakorisag[i - 1] = 0; //Az 52 hét során kihúzott számok gyakorisága //A 11-é azért nem 0, mert az 52. héten kihúzták! for (i = 1; i <= 52; i++) { for (j = 1; j <= 5; j++) { gyakorisag[lottoszamok[i - 1][j - 1] - 1]++; //Kiírás for (i = 1; i <= 90; i++) { System.out.print(gyakorisag[i - 1] + " "); if (i % 15 == 0) { System.out.println("A 8. feladat megoldásaa lotto52.ki fájl alapján: "); //dbtörlés for (i = 1; i <= 90; i++) { gyakorisag[i - 1] = 0; //Az 52 hét során kihúzott számok gyakorisága behozatal = new BufferedReader(new FileReader("lotto52.ki")); /*A program csak az ékezetes fájlokat menti UTF-8 kódolással, de nem tesz ki a fájl elejére UTF-8 azonosítót.*/ Klemand 29.oldal 2016
2005 május Lottó for (i = 1; i <= 52; i++) { sor = behozatal.readline(); daraboltsor = sor.split(" "); for (j = 1; j <= 5; j++) { gyakorisag[integer.parseint(daraboltsor[j - 1]) - 1]++; behozatal.close(); //Kiírás for (i = 1; i <= 90; i++) { System.out.print(gyakorisag[i - 1] + " "); if (i % 15 == 0) { //9. feladat //Egyszer sem kihúzott prímek System.out.println("A 9. feladat megoldása:"); System.out.print("Egyszer sem kihúzott prímek: "); //Csak a 2-t és a páratlan számokat vizsgálom! if (gyakorisag[2-1] == 0) { System.out.println(2 + " "); for (i = 3; i <= 90; i += 2) { if ((primvizsg(i)) && (gyakorisag[i - 1] == 0)) { System.out.print(i + " "); System.out.println("\n"); //************************************************************ public static String[] beolvas() throws IOException { BufferedReader bill; bill = new BufferedReader(new InputStreamReader(System.in, "Cp1250")); return bill.readline().trim().split("\\s+"); /*Először eltávolítjuk a beolvasott szöveg széleiről a szóközöket, majd egy vagy több egymás melletti szóköz mentén feldaraboljuk*/ public static int hetbeolvasas() { int x = 0; do { try { System.out.println("1 <= hét <= 51"); Scanner szambill; szambill = new Scanner(System.in); x = szambill.nextint(); catch (Exception e) { System.out.println("Számot kérek!"); while ((x < 1) (x > 51)); return x; Klemand 30.oldal 2016
2005 május Lottó //Egy szám prím voltának eldöntése public static boolean primvizsg(int p) //logikai függvény { if (p == 2) { return (true); else { int q = 2; double h = Math.sqrt(p); while (q <= h && (p % q!= 0)) { if (q == 2) { q++; //ha 2, 1-gyel növeljük else { q += 2; //ha már páratlan, 2-vel növeljük return (q > h); Klemand 31.oldal 2016
2005 május Lottó run: Az utolsó 5 hét beolvasott lottószámai: 47. hét: 1 4 8 69 74 48. hét: 4 15 46 49 59 49. hét: 24 31 67 71 73 50. hét: 12 26 36 46 49 51. hét: 9 20 21 59 68 Az 1. feladat megoldása: Kérem az 52. hét megadott lottószámait (89 24 34 11 64) szóközökkel elválasztva! x 4 6-2 777 1. elem: x, törölve, hibás számformátum! Csak 1 és 90 közötti számot tippelhetsz! Csak 1 és 90 közötti számot tippelhetsz! Kevés számot adtál meg! Kérem az 52. hét megadott lottószámait (89 24 34 11 64) szóközökkel elválasztva! A számok: egy 89 3,14 3.14 89 24 Válogass! 89 34 99 0 11 64 77 33 1. elem: A, törölve, hibás számformátum! 2. elem: számok:, törölve, hibás számformátum! 3. elem: egy, törölve, hibás számformátum! 5. elem: 3,14, törölve, hibás számformátum! 6. elem: 3.14, törölve, hibás számformátum! A 89 már szerepelt. 9. elem: Válogass!, törölve, hibás számformátum! A 89 már szerepelt. Csak 1 és 90 közötti számot tippelhetsz! Csak 1 és 90 közötti számot tippelhetsz! Az elfogadott beolvasott lottószámok: 89 24 34 11 64 A 2. feladat megoldása: Az 52. hét lottószámai nagyság szerint rendezve: 11 24 34 64 89 A 3. feladat megoldása: Kérem a vizsgált hét sorszámát 1 és 51 között! 1 <= hét <= 51 28 A hét sorszáma: 28 A 4. feladat megoldása: A(z) 28. hét nyerőszámai: 4 56 74 77 89 Az 5. feladat megoldása: Volt olyan szám, amit egyszer sem húztak ki. Az első ilyen szám a(z) 11 4 olyan szám volt, amit egyszer sem húztak ki: 11 19 27 63 Az 6. feladat megoldása: Összesen 126 esetben volt a nyertes szám páratlan. 49 héten volt a nyertes számok között páratlan. A 7. feladat megoldása: A fájlkiírás befejeződött. A 8. feladat megoldása a lottószámok tömb alapján: 4 2 2 4 2 2 6 1 1 2 1 5 2 1 1 1 3 5 0 5 5 2 6 6 5 1 0 6 4 3 3 3 5 4 3 1 4 2 2 4 2 4 1 2 3 4 2 1 2 3 2 2 2 4 4 5 1 3 5 5 5 2 0 2 2 4 4 3 1 3 6 1 5 6 2 4 3 2 2 3 1 1 4 1 3 3 2 1 5 3 Klemand 32.oldal 2016
2005 május Lottó A 8. feladat megoldásaa lotto52.ki fájl alapján: 4 2 2 4 2 2 6 1 1 2 1 5 2 1 1 1 3 5 0 5 5 2 6 6 5 1 0 6 4 3 3 3 5 4 3 1 4 2 2 4 2 4 1 2 3 4 2 1 2 3 2 2 2 4 4 5 1 3 5 5 5 2 0 2 2 4 4 3 1 3 6 1 5 6 2 4 3 2 2 3 1 1 4 1 3 3 2 1 5 3 A 9. feladat megoldása: Egyszer sem kihúzott prímek: 19 BUILD SUCCESSFUL (total time: 3 minutes 57 seconds) lotto52.ki: 37 42 44 61 62 18 42 54 83 89 5 12 31 53 60 1 28 47 56 70 54 56 57 59 71 4 15 46 49 59 24 31 67 71 73 12 26 36 46 49 9 20 21 59 68 11 24 34 64 89 Klemand 33.oldal 2016
2005 október Vigenère tábla 2005 október: Vigenère tábla Már a XVI. században komoly titkosítási módszereket találtak ki az üzenetek elrejtésére. A század egyik legjobb kriptográfusának Blaise de Vigenère-nek a módszerét olvashatja a következőkben. A kódoláshoz egy táblázatot és egy ún. kulcsszót használt. A táblázatot a jobb oldali ábra tartalmazza. A tábla adatait a vtabla.dat fájlban találja a következő formában. ABCDEFGHIJKLMNOPQRSTUVWXYZ BCDEFGHIJKLMNOPQRSTUVWXYZA CDEFGHIJKLMNOPQRSTUVWXYZAB DEFGHIJKLMNOPQRSTUVWXYZABC EFGHIJKLMNOPQRSTUVWXYZABCD FGHIJKLMNOPQRSTUVWXYZABCDE Készítsen programot kodol néven a következő feladatok végrehajtására! 1. Kérjen be a felhasználótól egy maximum 255 karakternyi, nem üres szöveget! A továbbiakban ez a nyílt szöveg. 2. Alakítsa át a nyílt szöveget, hogy a későbbi kódolás feltételeinek megfeleljen! A kódolás feltételei: A magyar ékezetes karakterek helyett ékezetmenteseket kell használni. (Például á helyett a; ő helyett o stb.) A nyílt szövegben az átalakítás után csak az angol ábécé betűi szerepelhetnek. A nyílt szöveg az átalakítás után legyen csupa nagybetűs. 3. Írja ki a képernyőre az átalakított nyílt szöveget! 4. Kérjen be a felhasználótól egy maximum 5 karakteres, nem üres kulcsszót! A kulcsszó a kódolás feltételeinek megfelelő legyen! (Sem átalakítás, sem ellenőrzés nem kell!) Alakítsa át a kulcsszót csupa nagybetűssé! 5. A kódolás első lépéseként fűzze össze a kulcsszót egymás után annyiszor, hogy az így kapott karaktersorozat (továbbiakban kulcsszöveg) hossza legyen egyenlő a kódolandó szöveg hosszával! Írja ki a képernyőre az így kapott kulcsszöveget! 6. A kódolás második lépéseként a következőket hajtsa végre! Vegye az átalakított nyílt szöveg első karakterét, és keresse meg a vtabla.dat fájlból beolvasott táblázat első oszlopában! Ezután vegye a kulcsszöveg első karakterét, és keresse meg a táblázat első sorában! Az így kiválasztott sor és oszlop metszéspontjában lévő karakter lesz a kódolt szöveg első karaktere. Ezt ismételje a kódolandó szöveg többi karakterével is! Klemand 34.oldal 2016
2005 október Vigenère tábla 7. Írja ki a képernyőre és a kodolt.dat fájlba a kapott kódolt szöveget! Példa: Nyílt szöveg: Ez a próba szöveg, amit kódolunk! Szöveg átalakítása: EZAPROBASZOVEGAMITKODOLUNK Kulcsszó: auto Kulcsszó nagybetűssé alakítása: AUTO Nyílt szöveg és kulcsszöveg együtt: E Z A P R O B A S Z O V E G A M I T K O D O L U N K A U T O A U T O A U T O A U T O A U T O A U T O A U Kódolt szöveg: E T T D R I U O S T H J E A T A I N D C D I E I N E Klemand 35.oldal 2016
2005 október Vigenère tábla package emeltinfo2005okt; import java.io.*; /** * Vignère tábla * * @author user */ public class EmeltInfo2005okt { public static void main(string[] args) throws IOException { //1. feladat System.out.println("Az 1. feladat megoldása"); System.out.println("Ékezetes nyílt szöveg beolvasása a billentyűzetről \n"); System.out.println("Kérek egy max. 255 karakterből álló ékezetes szöveget!"); String bsor = szovegbevitel(); //Ellenőrzés: System.out.println("A beírt szöveg: " + bsor); System.out.println("Hossza: " + bsor.length() + " karakter \n"); //2. feladat System.out.println("A 2. feladat megoldása"); System.out.println("A nyílt szöveg átalakítása \n"); String ujsor; String betu; char karakter; ujsor = ""; for (int i = 1; i <= bsor.length(); i++) { betu = bsor.substring(i - 1, i); karakter = betu.charat(0); //Az ékezettelenítéshez karakter kell, a szövegalkotáshoz String. if (((karakter >= 'a') && (karakter <= 'z')) ((karakter >= 'A') && (karakter <= 'Z'))) { ujsor += betu; else { if ((betu.equals("á")) (betu.equals("á"))) { ujsor += "a"; if ((betu.equals("é")) (betu.equals("é"))) { ujsor += "e"; if ((betu.equals("í")) (betu.equals("í"))) { ujsor += "i"; if ((betu.equals("ó")) (betu.equals("ó"))) { ujsor += "o"; if ((betu.equals("ö")) (betu.equals("ö"))) { ujsor += "o"; if ((betu.equals("ő")) (betu.equals("ő"))) { ujsor += "o"; if ((betu.equals("ú")) (betu.equals("ú"))) { ujsor += "u"; if ((betu.equals("ü")) (betu.equals("ü"))) { ujsor += "u"; Klemand 36.oldal 2016
2005 október Vigenère tábla if ((betu.equals("ű")) (betu.equals("ű"))) { ujsor += "u"; ujsor = ujsor.touppercase(); //3. feladat System.out.println("A 3. feladat megoldása"); System.out.println("Az átalakított nyílt szöveg kiírása \n"); System.out.println("Az átalakított szöveg: " + ujsor); System.out.println("Hossza: " + ujsor.length() + " karakter \n"); //4. feladat System.out.println("A 4. feladat megoldása"); System.out.println("A kulcsszó beolvasása a billentyűzetről \n"); System.out.println("Kérek egy max. 5 karakterből álló ékezetmentes szót!"); String kulcs = szovegbevitel(); //Ellenőrzés: System.out.println("A beírt kulcsszó: " + kulcs); System.out.println("Hossza: " + kulcs.length() + " karakter"); kulcs = kulcs.touppercase(); System.out.println("A nagybetűssé alakított kulcsszó: " + kulcs); System.out.println("Hossza: " + kulcs.length() + " karakter \n"); //5. feladat System.out.println("Az 5. feladat megoldása"); System.out.println("A kulcsszó-füzér megalkotása"); int k = kulcs.length(); String kulcsfuzer = ""; for (int i = 1; i <= ujsor.length(); i++) { if (i % k!= 0) { kulcsfuzer += kulcs.substring(i % k - 1, i % k); else { kulcsfuzer += kulcs.substring(k - 1, k); System.out.println("A kulcsszó-füzér: " + kulcsfuzer); System.out.println("Hossza: " + kulcsfuzer.length() + " karakter \n"); //6. feladat System.out.println("A 6. feladat megoldása"); System.out.println("Fájlbeolvasás és a kódolás végrehajtása \n"); String[][] vtabla = new String[26][26]; System.setProperty("file.encoding", "UTF-8"); //karakterkódolás beállítása BufferedReader behozatal; behozatal = new BufferedReader(new FileReader("Vtabla.dat")); int i, j; String felsosor; felsosor = behozatal.readline(); //Ha van UTF-8 azonosító a fájl elején, elhagyjuk a sor elejéről: if (felsosor.charat(0) == (char) 0xFEFF) { felsosor = felsosor.substring(1); //Tudjuk, hogy a Vignère tábla konstans 26x26 méretű for (j = 1; j <= 26; j++) { vtabla[0][j - 1] = felsosor.substring(j - 1, j); Klemand 37.oldal 2016