Klasszikus programozás Java nyelven I. Bevezető gyakorlatok
Eclipse 4.6.1 (Neon.1) Klement András 2016
Utolsó módosítás: 2016. november 27.
JAVA középfokon
Bevezető gyakorlatok
Tartalomjegyzék 1. Algoritmikus alapszerkezetek: ciklusok, elágazások......................................................................................... 3 2. Adatszerkezetek: egész és valós szám, karakter, szöveg, tömb és tömblista ................................................ 11 3. Beolvasás, kiírás: képernyő és szöveges fájl ................................................................................................... 23 4. Elemi algoritmusok: összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás...... 35 5. Rendezések: Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés .................. 42 6. Rendezés két szempont szerint: két- ill. egy lépésben ................................................................................... 51 7. A leghosszabb adott tulajdonságú részsorozat keresése: prímsorozat véletlen sorozatban......................... 58 8. Ismétlődés nélküli véletlen sorozat előállítása: lottóhúzás ............................................................................ 61 9. Statisztikai minta gyakorisági táblázata: érték szerinti indexeléssel, ill. tömblistával ................................... 65 10. Számelméleti feladatok: euklidészi algoritmus, prímfelbontás, osztók száma ............................................ 70 11. Rekurzió: Fibonacci-sorozat, zárójelezés érvényessége ............................................................................... 81 12. Verselemzés: Üllői-úti fák ............................................................................................................................. 85 Folytatás: Klasszikus programozás Java nyelven II. Az emelt szintű informatika érettségi programozási feladatainak megoldása ................................................................................................................................... 100
Klement András
2.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
1. Algoritmikus alapszerkezetek: ciklusok, elágazások /** * Algoritmikus alapszerkezetek: ciklusok, elágazások * * @author Klemand */ public class BevGyak01 { public static void main(String[] args) { // main + CTRL space System.out.println("1. Egyszerű számlálós ciklus \n"); // Kiíratás a képernyőre: sysout + CTRL space // Plusz sortörés beszúrása: \n int i; int n; int ri; double rd; // Számlálós ciklus: kezdőérték, bennmaradási feltétel, léptetés for (i = 1; i <= 12; i++) { // A ciklusmag kezdete: { n = i * i; ri = 1 / i; rd = (double) 1 / i; // Típuskényszerítés System.out.println("i = " + i + ", a négyzete: " + n + ", egész reciproka: " + ri + ", valós reciproka: " + rd); } // A ciklusmag vége: } System.out.println(""); // Automatikus formázás: Shift CTRL F vonal(); // Eljáráshívás System.out.println("2. Az előző ciklus formázással \n"); // A változókat nem kell újra deklarálni for (i = 1; i <= 12; i++) { n = i * i; ri = 1 / i; rd = (double) 1 / i; System.out.printf("i = %2d", i); // Szélesség megadása System.out.printf(", a négyzete: %3d", n); // A print és printf nem emel sort System.out.printf(",\t egész reciproka: %2d", ri); // Tabulátor beszúrása: \t System.out.printf(", valós reciproka: %.4f", rd); // Tizedesjegyek számának megadása System.out.println(""); } vonal();
Klement András
3.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
System.out.println("3. Egymásba ágyazott számlálós ciklus \n"); int j; for (i = 1; i <= 14; i++) { // Külső ciklus: 14 sor System.out.printf("i = %2d", i); System.out.print(": xxxxxx----------------------------------------"); // Ez minden sorban kiíratódik for (j = 1; j <= i; j++) { // Az i-edik sorban plusz i db + kiíratása a belső ciklussal System.out.print("+"); } System.out.println(""); } for (i = 13; i >= 1; i--) { // 13 sor System.out.printf("i = %2d", i); System.out.print(": xxxxxx----------------------------------------"); for (j = 1; j <= i; j++) { System.out.print("+"); } System.out.println(""); } vonal(); System.out.println("4. Elöltesztelő ciklus számlálóval \n"); System.out.println("Addig iratjuk ki a szögek szinuszát, amíg az érték nem nő 0,5 fölé \n"); i = 0; // A számláló kezdőértékének megadása while (Math.sin((double) Math.toRadians(i)) <= 0.5) { // Belépési feltétel megadása System.out.printf("sin(" + i + " fok) = %.4f", Math.sin((double) Math.toRadians(i))); System.out.println(""); i++; // A számláló értékét a ciklusmagban kell módosítani, különben // végtelen ciklus jön létre! } vonal(); System.out.println("5. Elöltesztelő ciklus számláló nélkül \n"); System.out.println("Addig lépünk be a ciklusba, amíg az előállított véletlenszám nagyobb 0,5-nél \n"); double v; while ((v = Math.random()) > 0.5) { // Belépési feltétel megadása System.out.printf("%.6f", v); System.out.println(""); } // Lehet, hogy egyszer sem lép be vonal();
Klement András
4.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
System.out.println("6. Elöltesztelő ciklus függvényhívással \n"); // Bonyolultabb feltétel esetén célszerű a függvényhívás System.out.println("Addig lépünk be a ciklusba, amíg legalább 4-est dobunk \n"); int k; while ((k = kockadobas()) >= 4) { // Belépési feltétel megadása System.out.println(k); } vonal(); System.out.println("7. Hátultesztelő ciklus \n"); // Egyszer mindenképpen végrehajtódik System.out.println("Addig próbálkozunk, amíg hatost nem sikerül dobnunk \n"); do { k = kockadobas(); System.out.println(k); } while (k < 6); vonal(); System.out.println("8. Feltételes utasítás \n"); k = kockadobas(); System.out.println("A dobásod: " + k); if (k == 6) { System.out.println("Gratulálok! Szerencsés ember vagy."); } vonal(); System.out.println("9. Kétirányú elágazás \n"); k = kockadobas(); System.out.println("A dobásod: " + k); if (k == 6) { System.out.println("Ne bízd el magad! Egyszer fenn, máskor lenn."); } else { System.out.println("Ne csüggedj! A szerencse forgandó."); } vonal(); System.out.println("10. Egymásba ágyazott elágazások \n"); k = kockadobas(); System.out.println("A dobásod: " + k); if (k == 6) { System.out.println("Bravó! Csakis a maximummal légy elégedett!"); } else if (k == 4 || k == 5) { // "vagy" feltétel megadása System.out.println("Nem rossz!"); System.out.println("Csak " + (6 - k) + " hiányzott!"); } else if (k < 4 && k % 2 == 1) { // "és" feltétel megadása, ill. osztási maradék meghatározása System.out.println("Kicsi, de legalább páratlan!"); } else { System.out.println("Ez igen! Az egyetlen páros prímszámot sikerült dobnod!"); } vonal();
Klement András
5.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
System.out.println("11. Többirányú elágazás \n"); k = kockadobas(); System.out.println("A dobásod: " + k); switch (k) { case 6: { System.out.println("Mondd csak, nem csalsz?"); break; } case 4: { System.out.println("Ez éppen annyi, mint 26/6, nézd csak: " + 26 / 6); break; } case 1: { System.out.println("Szerencsére ez most nem osztályzat!"); break; } default: System.out.println("Nagyszerű! Prímszámot dobtál."); } vonal(); System.out.println("12. Rajzoljunk! \n"); for (i = 1; i <= 10; i++) { for (j = 1; j <= 39; j++) { if (j == 20 - (i - 1) || j == 20 + (i - 1)) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(""); } for (i = 11; i <= 20; i++) { for (j = 1; j <= 39; j++) { if (j == 20 - (i - 1) || j == 20 + (i - 1)) { System.out.print("*"); } else if (j == 20 - 2 * (i - 11) || j == 20 + 2 * (i - 11)) { System.out.print("+"); } else { System.out.print(" "); } } System.out.println(""); } vonal(); }
Klement András
6.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
// Eljárások, függvények a fő metódus után public static void vonal() { // Eljárás: void típusú System.out.println("\n==================================================================================== \n"); } public static int kockadobas() { // Függvény: a visszaadott érték típusának megadásával int dobas = (int) (Math.random() * 6 + 1); // Típuskényszerítés return dobas; // A visszaadott érték } }
Klement András
7.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
1. Egyszerű számlálós ciklus i i i i i i i i i i i i
= = = = = = = = = = = =
1, a négyzete: 1, egész reciproka: 1, valós reciproka: 1.0 2, a négyzete: 4, egész reciproka: 0, valós reciproka: 0.5 3, a négyzete: 9, egész reciproka: 0, valós reciproka: 0.3333333333333333 4, a négyzete: 16, egész reciproka: 0, valós reciproka: 0.25 5, a négyzete: 25, egész reciproka: 0, valós reciproka: 0.2 6, a négyzete: 36, egész reciproka: 0, valós reciproka: 0.16666666666666666 7, a négyzete: 49, egész reciproka: 0, valós reciproka: 0.14285714285714285 8, a négyzete: 64, egész reciproka: 0, valós reciproka: 0.125 9, a négyzete: 81, egész reciproka: 0, valós reciproka: 0.1111111111111111 10, a négyzete: 100, egész reciproka: 0, valós reciproka: 0.1 11, a négyzete: 121, egész reciproka: 0, valós reciproka: 0.09090909090909091 12, a négyzete: 144, egész reciproka: 0, valós reciproka: 0.08333333333333333
==================================================================================== 2. Az előző ciklus formázással i i i i i i i i i i i i
= 1, a négyzete: 1, egész reciproka: = 2, a négyzete: 4, egész reciproka: = 3, a négyzete: 9, egész reciproka: = 4, a négyzete: 16, egész reciproka: = 5, a négyzete: 25, egész reciproka: = 6, a négyzete: 36, egész reciproka: = 7, a négyzete: 49, egész reciproka: = 8, a négyzete: 64, egész reciproka: = 9, a négyzete: 81, egész reciproka: = 10, a négyzete: 100, egész reciproka: = 11, a négyzete: 121, egész reciproka: = 12, a négyzete: 144, egész reciproka:
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
valós valós valós valós valós valós valós valós valós valós valós valós
reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka: reciproka:
1,0000 0,5000 0,3333 0,2500 0,2000 0,1667 0,1429 0,1250 0,1111 0,1000 0,0909 0,0833
==================================================================================== 3. Egymásba ágyazott számlálós ciklus i i i i i i i i i i i i i i i i i i i i i i i i i i i
= = = = = = = = = = = = = = = = = = = = = = = = = = =
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 13: 12: 11: 10: 9: 8: 7: 6: 5: 4: 3: 2: 1:
xxxxxx----------------------------------------+ xxxxxx----------------------------------------++ xxxxxx----------------------------------------+++ xxxxxx----------------------------------------++++ xxxxxx----------------------------------------+++++ xxxxxx----------------------------------------++++++ xxxxxx----------------------------------------+++++++ xxxxxx----------------------------------------++++++++ xxxxxx----------------------------------------+++++++++ xxxxxx----------------------------------------++++++++++ xxxxxx----------------------------------------+++++++++++ xxxxxx----------------------------------------++++++++++++ xxxxxx----------------------------------------+++++++++++++ xxxxxx----------------------------------------++++++++++++++ xxxxxx----------------------------------------+++++++++++++ xxxxxx----------------------------------------++++++++++++ xxxxxx----------------------------------------+++++++++++ xxxxxx----------------------------------------++++++++++ xxxxxx----------------------------------------+++++++++ xxxxxx----------------------------------------++++++++ xxxxxx----------------------------------------+++++++ xxxxxx----------------------------------------++++++ xxxxxx----------------------------------------+++++ xxxxxx----------------------------------------++++ xxxxxx----------------------------------------+++ xxxxxx----------------------------------------++ xxxxxx----------------------------------------+
====================================================================================
Klement András
8.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
4. Elöltesztelő ciklus számlálóval Addig iratjuk ki a szögek szinuszát, amíg az érték nem nő 0,5 fölé sin(0 fok) = 0,0000 sin(1 fok) = 0,0175 sin(2 fok) = 0,0349 sin(3 fok) = 0,0523 sin(4 fok) = 0,0698 sin(5 fok) = 0,0872 sin(6 fok) = 0,1045 sin(7 fok) = 0,1219 sin(8 fok) = 0,1392 sin(9 fok) = 0,1564 sin(10 fok) = 0,1736 sin(11 fok) = 0,1908 sin(12 fok) = 0,2079 sin(13 fok) = 0,2250 sin(14 fok) = 0,2419 sin(15 fok) = 0,2588 sin(16 fok) = 0,2756 sin(17 fok) = 0,2924 sin(18 fok) = 0,3090 sin(19 fok) = 0,3256 sin(20 fok) = 0,3420 sin(21 fok) = 0,3584 sin(22 fok) = 0,3746 sin(23 fok) = 0,3907 sin(24 fok) = 0,4067 sin(25 fok) = 0,4226 sin(26 fok) = 0,4384 sin(27 fok) = 0,4540 sin(28 fok) = 0,4695 sin(29 fok) = 0,4848 sin(30 fok) = 0,5000 ==================================================================================== 5. Elöltesztelő ciklus számláló nélkül Addig lépünk be a ciklusba, amíg az előállított véletlenszám nagyobb 0,5-nél 0,641596 0,629606 0,955027 ==================================================================================== 6. Elöltesztelő ciklus függvényhívással Addig lépünk be a ciklusba, amíg legalább 4-est dobunk
==================================================================================== 7. Hátultesztelő ciklus Addig próbálkozunk, amíg hatost nem sikerül dobnunk 4 3 3 1 5 6 ====================================================================================
Klement András
9.oldal
2016
1. Algoritmikus alapszerkezetek
Ciklusok, elágazások
8. Feltételes utasítás A dobásod: 4 ==================================================================================== 9. Kétirányú elágazás A dobásod: 5 Ne csüggedj! A szerencse forgandó. ==================================================================================== 10. Egymásba ágyazott elágazások A dobásod: 4 Nem rossz! Csak 2 hiányzott! ==================================================================================== 11. Többirányú elágazás A dobásod: 1 Szerencsére ez most nem osztályzat! ==================================================================================== 12. Rajzoljunk! * * * * * * * * * * * * * * * * * * * * + * * + + * * + + * * + + * * + + * * + + * * + + * * + + * * + + * *+ +* ====================================================================================
Klement András
10.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
2. Adatszerkezetek: egész és valós szám, karakter, szöveg, tömb és tömblista import java.util.ArrayList; /** * Adatszerkezetek: egész és valós szám, karakter, szöveg, tömb és tömblista * * @author Klemand */ public class BevGyak02 { public static void main(String[] args) { System.out.println("1. Egész számok \n
============");
System.out.println("Két 1 és 100 közötti véletlen egész szám előállítása: "); int m = veletlenegesz(); // Egész típusú szám (32 bites) deklarálása értékadással int n = veletlenegesz(); int max = Math.max(m, n); int min = Math.min(m, n); m = min; n = max; System.out.println("A nagyobb egész szám: " + n + ", a kisebb pedig: " + m); System.out.println("Összegük: " + n + " + " + m + " = " + (n + m)); System.out.println("Szorzatuk: " + n + " * " + m + " = " + n * m); System.out.println("Egész osztásuk eredménye: " + n + " / " + m + " = " + n / m); System.out.println("Maradékos osztásuk eredménye: " + n + " % " + m + " = " + n % m); System.out.print("Valós osztásuk eredménye 4 tizedesjegyre kerekítve: " + n + " / " + m + " = "); System.out.printf("%.4f \n", (double) n / m); // típuskényszerítés System.out.println(""); long fakt; // Hosszú egész típusú szám (64 bites) deklarálása értékadás nélkül fakt = 1; int i; for (i = 1; i <= 20; i++) { fakt = fakt * i; } System.out.println("20! = " + fakt); System.out.println(""); System.out.println("Figyelni kell a túlcsordulásra!"); fakt = 1; for (i = 1; i <= 21; i++) { fakt = fakt * i; } System.out.println("21! = " + fakt); System.out.println(""); System.out.println("2. Valós számok \n
============");
System.out.println("Két 0 és 100 közötti véletlen valós szám előállítása: "); double u = veletlenvalos(); // Dupla pontosságú valós típusú szám (64 bites) deklarálása double v = veletlenvalos(); System.out.printf("Az első valós szám 6 tizedes pontossággal: u = System.out.printf(", a második pedig: v = %.6f", v);
Klement András
11.oldal
%.6f", u);
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
System.out.println(""); System.out.printf("Összegük: %.6f", u); System.out.printf(" + %.6f", v); System.out.printf(" = %.6f \n", (u + v)); // Összeadásnál kötelező a zárójel! System.out.printf("Szorzatuk 3 tizedesjeggyel: %.3f", u); System.out.printf(" * %.3f", v); System.out.printf(" = %.3f \n", u * v); System.out.printf("Különbségük abszolút értéke 2 tizedesjeggyel: |%.2f", u); System.out.printf(" - %.2f", v); System.out.printf("| = %.2f \n", Math.abs(u - v)); System.out.println("Egész osztásuk eredménye kerekítés nélkül: " + u + " / " + v + " = " + (int) (u / v)); // típuskényszerítés System.out.printf("Valós osztásuk eredménye 4 tizedesjeggyel: %.4f", u); System.out.printf(" / %.4f", v); System.out.printf(" = %.4f \n", u / v); System.out.println("Összehasonlításuk eredménye kerekítés nélkül: " + Math.max(u, v) + " > " + Math.min(u, v)); System.out.print("Az első szám köbének és a második négyzetgyökének szorzata 8 tizedesjegyre kerekítve: "); System.out.printf("%.8f \n", Math.pow(u, 3) * Math.sqrt(v)); System.out.println(""); System.out.println("3. Karakterek és sztringek \n
=======================");
char k = '*'; System.out.println("A * karakter ASCII-kódja: " + (int) k); System.out.println("\nAz ASCII-kódokhoz tartozó karakterek"); for (i = 32; i <= 370; i++) { System.out.print(i + ": " + (char) i + "\t"); if ((i - 31) % 10 == 0) { System.out.println(""); } } System.out.println("\n"); System.out.println("A Tündérszárnyú kígyóbűvölő kifejezés karaktereinek ASCII-kódjai:"); String ekes = "Tündérszárnyú kígyóbűvölő"; // A String osztály, ezért nagykezdőbetűs for (i = 1; i <= ekes.length(); i++) { System.out.print((int) ekes.charAt(i - 1) + " "); // Az indexelés mindig 0-val kezdődik, ezért van a -1-es eltolás } System.out.println("\n"); System.out.println("Összefűzés:"); System.out.println(k + ekes + k); System.out.println(""); System.out.println("Megfordítás a charAt fügvénnyel:"); String ford = ""; for (i = ekes.length(); i >= 1; i--) { ford += ekes.charAt(i - 1); } System.out.println(ford); System.out.println("");
Klement András
12.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
System.out.println("Visszafordítás a substring fügvénnyel:"); String vissza = ""; for (i = ford.length(); i >= 1; i--) { vissza += ford.substring(i - 1, i); } System.out.println(vissza); System.out.println(""); System.out.println("Nagybetűssé alakítás:"); System.out.println(ekes.toUpperCase()); System.out.println(""); System.out.println("Kisbetűssé alakítás:"); System.out.println(ekes.toLowerCase() + "\n"); System.out.println("Darabolás:"); ekes = ekes.trim(); // A trim() függvény levágja a szöveg elején, ill. végén lévó szóközöket String[] daraboltEkes = ekes.split(" "); System.out.println("A kifejezés " + daraboltEkes.length + " szóból áll."); for (i = 1; i <= daraboltEkes.length; i++) { System.out.println("Az " + i + ". szó: " + daraboltEkes[i - 1]); } System.out.println("Összehasonlítjuk a két szót."); System.out.println("Ha az érték 0, akkor egyenlőek, ha pozitív, akkor a szöveg a nagyobb,"); System.out.println("ha negatív, akkor a paraméter:"); System.out.println(daraboltEkes[0].compareTo(daraboltEkes[1]) + "\n"); System.out.println("Mindkét szóból véletlenszerűen kiválasztunk egy karaktert,"); System.out.println("és összehasonlítjuk az ábécében elfoglalt helyzetüket: \n"); int elso = veletlenparameteres(daraboltEkes[0].length()); int masodik = veletlenparameteres(daraboltEkes[1].length()); String elsoKar = daraboltEkes[0].substring(elso - 1, elso); String masodikKar = daraboltEkes[1].substring(masodik - 1, masodik); System.out.println("Az első szóból kiválasztott karakter: " + elsoKar); System.out.println("A második szóból kiválasztott karakter: " + masodikKar); if (elsoKar.equals(masodikKar)) { // Stringek egyezésének vizsgálata System.out.println("A két kiválasztott karakter megegyezik"); } else if (abcsorrend(elsoKar, masodikKar)) { System.out.println("Az első szóból kiválasztott karakter van előrébb az ábécében."); } else { System.out.println("A második szóból kiválasztott karakter van előrébb az ábécében."); } System.out.println(""); System.out.println("4. Egydimenziós tömbök \n
===================");
System.out.println("Egy megadott pozitív egészeket tartalmazó tömb előállítása \n"); int[] X = { 12, 121, 34, 2, 67, 49, 30, 122, 800, 1256, 2016, 3, 21, 77, 4, 28, 84, 1, 156, 56 }; int hossz = X.length; System.out.println("A tömb elemeinek kiíratása for ciklussal:"); for (i = 1; i <= hossz; i++) { System.out.print(X[i - 1] + " "); } System.out.println("\n");
Klement András
13.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
System.out.println("A tömb elemeinek kiíratása for-each ciklussal:"); for (int elem : X) { System.out.print(elem + " "); } System.out.println("\n"); System.out.println("1 és 100 közötti véletlen pozitív egészeket tartalmazó tömb előállítása \n"); int[] Y = new int[20]; // Deklaráláskor meg kell adni a tömb maximális méretét! for (i = 1; i <= 20; i++) { Y[i - 1] = veletlenegesz(); } System.out.println("A tömb elemeinek kiíratása for ciklussal:"); for (i = 1; i <= Y.length; i++) { System.out.print(Y[i - 1] + " "); } System.out.println("\n"); System.out.println("A mintaszöveg karaktereinek karakter típusú elemekből álló tömbje:"); char[] ekesTombK = new char[ekes.length()]; for (i = 1; i <= ekes.length(); i++) { ekesTombK[i - 1] = ekes.charAt(i - 1); } for (i = 1; i <= ekes.length(); i++) { System.out.print(ekesTombK[i - 1] + " "); } System.out.println("\n\nA karakterek duplázva:"); for (i = 1; i <= ekes.length(); i++) { System.out.print(ekesTombK[i - 1] + "" + ekesTombK[i - 1] + " "); } System.out.println("\n"); System.out.println("A mintaszöveg karaktereinek sztring típusú elemekből álló tömbje:"); String[] ekesTombS = new String[ekes.length()]; for (i = 1; i <= ekes.length(); i++) { ekesTombS[i - 1] = ekes.substring(i - 1, i); } for (i = 1; i <= ekes.length(); i++) { System.out.print(ekesTombS[i - 1] + " "); }
Klement András
14.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
System.out.println("\n\nA tömb magánhangzóinak kicserélése távirati formára:"); for (i = 1; i <= ekes.length(); i++) { if (maganhangzo(ekesTombS[i - 1])) { switch (ekesTombS[i - 1]) { case "á": ekesTombS[i - 1] = "aa"; // Karakter típus esetén ez nem működne break; // Break nélkül végrehajtaná a következő utasítást is, // így mindig "uue" lenne case "é": ekesTombS[i - 1] = "ee"; break; case "í": ekesTombS[i - 1] = "ii"; break; case "ó": ekesTombS[i - 1] = "oo"; break; case "ú": ekesTombS[i - 1] = "uu"; break; case "ö": ekesTombS[i - 1] = "oe"; break; case "ü": ekesTombS[i - 1] = "ue"; break; case "ő": ekesTombS[i - 1] = "ooe"; break; case "ű": ekesTombS[i - 1] = "uue"; } } } for (i = 1; i <= ekes.length(); i++) { System.out.print(ekesTombS[i - 1] + " "); } System.out.println("\n"); System.out.println("5. Kétdimenziós tömbök \n
=====================");
System.out.println("1000 db 1 és 60 közötti véletlen egész számhármas előállítása,"); System.out.println("és tárolása kétdimenziós tömbben"); System.out.println("A számhármasok hány százaléka határoz meg háromszöget?\n"); int[][] szamharmasokT = new int[1000][3]; for (i = 1; i <= 1000; i++) { for (int j = 1; j <= 3; j++) { szamharmasokT[i - 1][j - 1] = veletlenparameteres(50); } } System.out.println("Az első számhármas: " + szamharmasokT[0][0] + ", " + szamharmasokT[0][1] + ", " + szamharmasokT[0][2]); System.out.println("Az utolsó számhármas: " + szamharmasokT[999][0] + ", " + szamharmasokT[999][1] + ", " + szamharmasokT[999][2]);
Klement András
15.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
int hszdb = 0; for (i = 1; i <= 1000; i++) { if (haromszogE(szamharmasokT[i - 1][0], szamharmasokT[i - 1][1], szamharmasokT[i - 1][2])) { hszdb++; } } System.out.printf("A háromszöget meghatározók aránya: %.2f", (double) (100 * hszdb / 1000)); System.out.println("%\n"); System.out.println("6. Tömblisták \n =========="); System.out.println("10 db 1 és 60 közötti véletlen egész számhármas előállítása,"); System.out.println("és tárolása tömblistában"); System.out.println("Egy tömblistában különböző típusú adatokat is tárolhatunk,"); System.out.println("pl. azt is, hogy a számhármasok háromszöget határoznak-e meg:"); int a, b, c; for (i = 1; a = b = c =
i <= 10; i++) { veletlenparameteres(60); veletlenparameteres(60); veletlenparameteres(60);
szamharmasokTL.add(new SzamharmasokTLTipus(a, b, c)); } for (i = 1; i <= 10; i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } System.out.println("\nA tömblistához tetszőlegesen hozzá lehet venni új rekordokat"); System.out.println("Addig folytassuk a hozzávételt, míg a három oldal összege nagyobb nem lesz 122-nél! "); do { a = veletlenparameteres(60); b = veletlenparameteres(60); c = veletlenparameteres(60); szamharmasokTL.add(new SzamharmasokTLTipus(a, b, c)); } while (a + b + c <= 140); // Ha az oldalak típusát csak a blokkokon belül deklarálnánk, // itt ismerné fel őket a program System.out.println("A tömblista méretét le lehet kérdezni: " + szamharmasokTL.size()); for (i = 1; i <= szamharmasokTL.size(); i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } System.out.println("\nHagyjuk el a tömblistából azokat a rekordokat, ahol az oldalak összege kisebb 100-nál!"); i=1; while(i <= szamharmasokTL.size()){ if (szamharmasokTL.get(i - 1).a + szamharmasokTL.get(i - 1).b + szamharmasokTL.get(i - 1).c < 100) { szamharmasokTL.remove(i - 1); }else{ i++; } } //A for ciklus itt alkalmatlan lenne, mert törléskor a következő elem indexe visszaesik 1-gyel.
Klement András
16.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
for (i = 1; i <= szamharmasokTL.size(); i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } System.out.println("\nMinden számhármas utolsó adatát duplázzuk meg!"); System.out.println("Szükség esetén módosítsuk, hogy háromszöget alkotnak-e!"); for (i = 1; i <= szamharmasokTL.size(); i++) { szamharmasokTL.get(i - 1).c *= 2; szamharmasokTL.get(i - 1).haromszog = haromszogE(szamharmasokTL.get(i - 1).a, szamharmasokTL.get(i - 1).b, szamharmasokTL.get(i - 1).c); } for (i = 1; i <= szamharmasokTL.size(); i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } System.out.println("\nCseréljük meg a tömblista első és utolsó rekordját!"); SzamharmasokTLTipus asztal; asztal = szamharmasokTL.get(0); szamharmasokTL.set(0, szamharmasokTL.get(szamharmasokTL.size() - 1)); szamharmasokTL.set(szamharmasokTL.size() - 1, asztal); for (i = 1; i <= szamharmasokTL.size(); i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } System.out.println("\nAz aktuális számhármasok hány százaléka határoz meg háromszöget?\n"); hszdb = 0; for (i = 1; i <= szamharmasokTL.size(); i++) { if (haromszogE(szamharmasokTL.get(i - 1).a, szamharmasokTL.get(i - 1).b, szamharmasokTL.get(i - 1).c)) { hszdb++; } } System.out.printf("A háromszöget meghatározók aránya: %.2f", (double) (100 * hszdb / szamharmasokTL.size())); System.out.println("%\n"); System.out.println("Csak a háromszögeket hagyjuk meg a tömblistában!"); i=1; while(i <= szamharmasokTL.size()){ if (!szamharmasokTL.get(i - 1).haromszog) { szamharmasokTL.remove(i - 1); }else{ i++; } } for (i = 1; i <= szamharmasokTL.size(); i++) { System.out.println("A(z) " + i + ". számhármas: " + szamharmasokTL.get(i - 1).a + ", " + szamharmasokTL.get(i - 1).b + ", " + szamharmasokTL.get(i - 1).c + ": " + szamharmasokTL.get(i - 1).haromszog); } }
Klement András
17.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
// Eljárások, függvények public static int veletlenegesz() { int egesz = (int) (Math.random() * 100 + 1); // Típuskényszerítés return egesz; } public static double veletlenvalos() { double valos = Math.random() * 100; return valos; } public static boolean abcsorrend(String a, String b) { String abc = "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz"; return abc.indexOf(a) < abc.indexOf(b); } public static int veletlenparameteres(int h) { int egesz = (int) (Math.random() * h + 1); return egesz; } public static boolean maganhangzo(String a) { String mgh = "aáeéiíoóöőuúüű"; return mgh.contains(a); // A sztring tartalmazza-e a paramétert } public static boolean haromszogE(int a, int b, int c) { return (a + b > c && a + c > b && b + c > a); } // Tömblista deklarálása, importálni kell hozzá a java.util. ArrayList csomagot static ArrayList<SzamharmasokTLTipus> szamharmasokTL = new ArrayList<>(); // A változó kiskezdőbetűs, a típus pedig nagy, mert osztálynév public static class SzamharmasokTLTipus { private final int a; // Nem változik a feldolgozás során private final int b; // Ez sem private int c; // Ezt változtatni fogjuk private boolean haromszog; // Ez is változhat majd public SzamharmasokTLTipus(int be1, int be2, int be3) { a = be1; b = be2; c = be3; haromszog = haromszogE(a, b, c); } } }
Klement András
18.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
1. Egész számok ============ Két 1 és 100 közötti véletlen egész szám előállítása: A nagyobb egész szám: 65, a kisebb pedig: 42 Összegük: 65 + 42 = 107 Szorzatuk: 65 * 42 = 2730 Egész osztásuk eredménye: 65 / 42 = 1 Maradékos osztásuk eredménye: 65 % 42 = 23 Valós osztásuk eredménye 4 tizedesjegyre kerekítve: 65 / 42 = 1,5476 20! = 2432902008176640000 Figyelni kell a túlcsordulásra! 21! = -4249290049419214848 2. Valós számok ============ Két 0 és 100 közötti véletlen valós szám előállítása: Az első valós szám 6 tizedes pontossággal: u = 13,017114, a második pedig: v = 38,590743 Összegük: 13,017114 + 38,590743 = 51,607857 Szorzatuk 3 tizedesjeggyel: 13,017 * 38,591 = 502,340 Különbségük abszolút értéke 2 tizedesjeggyel: |13,02 - 38,59| = 25,57 Egész osztásuk eredménye kerekítés nélkül: 13.017113906017308 / 38.59074343105446 = 0 Valós osztásuk eredménye 4 tizedesjeggyel: 13,0171 / 38,5907 = 0,3373 Összehasonlításuk eredménye kerekítés nélkül: 38.59074343105446 > 13.017113906017308 Az első szám köbének és a második négyzetgyökének szorzata 8 tizedesjegyre kerekítve: 13702,05441847 3. Karakterek és sztringek ======================= A * karakter ASCII-kódja: 42 Az ASCII-kódokhoz tartozó karakterek 32: 33: ! 34: " 35: # 36: $ 42: * 43: + 44: , 45: 46: . 52: 4 53: 5 54: 6 55: 7 56: 8 62: > 63: ? 64: @ 65: A 66: B 72: H 73: I 74: J 75: K 76: L 82: R 83: S 84: T 85: U 86: V 92: \ 93: ] 94: ^ 95: _ 96: ` 102: f 103: g 104: h 105: i 106: j 112: p 113: q 114: r 115: s 116: t 122: z 123: { 124: | 125: } 126: ~ 132: ? 133: ? 134: ? 135: ? 136: ? 142: ? 143: ? 144: ? 145: ? 146: ? 152: ? 153: ? 154: ? 155: ? 156: ? 162: ? 163: ? 164: ¤ 165: ? 166: ¦ 172: ¬ 173: 174: ® 175: ? 176: ° 182: ¶ 183: · 184: ¸ 185: ? 186: ? 192: ? 193: Á 194: Â 195: ? 196: Ä 202: ? 203: Ë 204: ? 205: Í 206: Î 212: Ô 213: ? 214: Ö 215: × 216: ? 222: ? 223: ß 224: ? 225: á 226: â 232: ? 233: é 234: ? 235: ë 236: ? 242: ? 243: ó 244: ô 245: ? 246: ö 252: ü 253: ý 254: ? 255: ? 256: ? 262: Ć 263: ć 264: ? 265: ? 266: ? 272: Đ 273: đ 274: ? 275: ? 276: ? 282: Ě 283: ě 284: ? 285: ? 286: ? 292: ? 293: ? 294: ? 295: ? 296: ? 302: ? 303: ? 304: ? 305: ? 306: ? 312: ? 313: Ĺ 314: ĺ 315: ? 316: ? 322: ł 323: Ń 324: ń 325: ? 326: ? 332: ? 333: ? 334: ? 335: ? 336: Ő 342: ? 343: ? 344: Ř 345: ř 346: Ś 352: Š 353: š 354: Ţ 355: ţ 356: Ť 362: ? 363: ? 364: ? 365: ? 366: Ů
Klement András
37: % 47: / 57: 9 67: C 77: M 87: W 97: a 107: k 117: u 127: • 137: ? 147: ? 157: ? 167: § 177: ± 187: » 197: ? 207: ? 217: ? 227: ? 237: í 247: ÷ 257: ? 267: ? 277: ? 287: ? 297: ? 307: ? 317: Ľ 327: Ň 337: ő 347: ś 357: ť 367: ů
38: & 48: 0 58: : 68: D 78: N 88: X 98: b 108: l 118: v 128: ? 138: ? 148: ? 158: ? 168: ¨ 178: ? 188: ? 198: ? 208: ? 218: Ú 228: ä 238: î 248: ? 258: Ă 268: Č 278: ? 288: ? 298: ? 308: ? 318: ľ 328: ň 338: ? 348: ? 358: ? 368: Ű
19.oldal
39: ' 49: 1 59: ; 69: E 79: O 89: Y 99: c 109: m 119: w 129: ? 139: ? 149: ? 159: ? 169: © 179: ? 189: ? 199: Ç 209: ? 219: ? 229: ? 239: ? 249: ? 259: ă 269: č 279: ? 289: ? 299: ? 309: ? 319: ? 329: ? 339: ? 349: ? 359: ? 369: ű
40: ( 50: 2 60: < 70: F 80: P 90: Z 100: d 110: n 120: x 130: ? 140: ? 150: ? 160: 170: ? 180: ´ 190: ? 200: ? 210: ? 220: Ü 230: ? 240: ? 250: ú 260: Ą 270: Ď 280: Ę 290: ? 300: ? 310: ? 320: ? 330: ? 340: Ŕ 350: Ş 360: ? 370: ?
41: ) 51: 3 61: = 71: G 81: Q 91: [ 101: e 111: o 121: y 131: ? 141: ? 151: ? 161: ? 171: « 181: µ 191: ? 201: É 211: Ó 221: Ý 231: ç 241: ? 251: ? 261: ą 271: ď 281: ę 291: ? 301: ? 311: ? 321: Ł 331: ? 341: ŕ 351: ş 361: ?
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
A Tündérszárnyú kígyóbűvölő kifejezés karaktereinek ASCII-kódjai: 84 252 110 100 233 114 115 122 225 114 110 121 250 32 107 237 103 121 243 98 369 118 246 108 337 Összefűzés: *Tündérszárnyú kígyóbűvölő* Megfordítás a charAt fügvénnyel: őlövűbóygík úynrázsrédnüT Visszafordítás a substring fügvénnyel: Tündérszárnyú kígyóbűvölő Nagybetűssé alakítás: TÜNDÉRSZÁRNYÚ KÍGYÓBŰVÖLŐ Kisbetűssé alakítás: tündérszárnyú kígyóbűvölő Darabolás: A kifejezés 2 szóból áll. Az 1. szó: Tündérszárnyú Az 2. szó: kígyóbűvölő Összehasonlítjuk a két szót. Ha az érték 0, akkor egyenlőek, ha pozitív, akkor a szöveg a nagyobb, ha negatív, akkor a paraméter: -23 Mindkét szóból véletlenszerűen kiválasztunk egy karaktert, és összehasonlítjuk az ábécében elfoglalt helyzetüket: Az első szóból kiválasztott karakter: ü A második szóból kiválasztott karakter: ő A második szóból kiválasztott karakter van előrébb az ábécében. 4. Egydimenziós tömbök =================== Egy megadott pozitív egészeket tartalmazó tömb előállítása A tömb elemeinek kiíratása for ciklussal: 12 121 34 2 67 49 30 122 800 1256 2016 3 21 77 4 28 84 1 156 56 A tömb elemeinek kiíratása for-each ciklussal: 12 121 34 2 67 49 30 122 800 1256 2016 3 21 77 4 28 84 1 156 56 1 és 100 közötti véletlen pozitív egészeket tartalmazó tömb előállítása A tömb elemeinek kiíratása for ciklussal: 59 97 80 87 43 35 11 41 13 58 43 36 64 2 64 41 16 41 62 36 A mintaszöveg karaktereinek karakter típusú elemekből álló tömbje: T ü n d é r s z á r n y ú k í g y ó b ű v ö l ő A karakterek duplázva: TT üü nn dd éé rr ss zz áá rr nn yy úú
kk íí gg yy óó bb űű vv öö ll őő
A mintaszöveg karaktereinek sztring típusú elemekből álló tömbje: T ü n d é r s z á r n y ú k í g y ó b ű v ö l ő A tömb magánhangzóinak kicserélése távirati formára: T ue n d ee r s z aa r n y uu k ii g y oo b uue v oe l ooe
Klement András
20.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
5. Kétdimenziós tömbök ===================== 1000 db 1 és 60 közötti véletlen egész számhármas előállítása, és tárolása kétdimenziós tömbben A számhármasok hány százaléka határoz meg háromszöget? Az első számhármas: 25, 39, 29 Az utolsó számhármas: 26, 40, 15 A háromszöget meghatározók aránya: 50,00% 6. Tömblisták ========== 10 db 1 és 60 közötti véletlen egész számhármas előállítása, és tárolása tömblistában Egy tömblistában különböző típusú adatokat is tárolhatunk, pl. azt is, hogy a számhármasok háromszöget határoznak-e meg: A(z) 1. számhármas: 52, 34, 15: false A(z) 2. számhármas: 34, 48, 21: true A(z) 3. számhármas: 51, 39, 13: true A(z) 4. számhármas: 34, 32, 7: true A(z) 5. számhármas: 9, 54, 38: false A(z) 6. számhármas: 59, 19, 30: false A(z) 7. számhármas: 11, 53, 52: true A(z) 8. számhármas: 5, 7, 37: false A(z) 9. számhármas: 43, 57, 36: true A(z) 10. számhármas: 44, 25, 15: false A tömblistához tetszőlegesen hozzá lehet venni új rekordokat Addig folytassuk a hozzávételt, míg a három oldal összege nagyobb nem lesz 122-nél! A tömblista méretét le lehet kérdezni: 31 A(z) 1. számhármas: 52, 34, 15: false A(z) 2. számhármas: 34, 48, 21: true A(z) 3. számhármas: 51, 39, 13: true A(z) 4. számhármas: 34, 32, 7: true A(z) 5. számhármas: 9, 54, 38: false A(z) 6. számhármas: 59, 19, 30: false A(z) 7. számhármas: 11, 53, 52: true A(z) 8. számhármas: 5, 7, 37: false A(z) 9. számhármas: 43, 57, 36: true A(z) 10. számhármas: 44, 25, 15: false A(z) 11. számhármas: 3, 25, 37: false A(z) 12. számhármas: 52, 13, 14: false A(z) 13. számhármas: 12, 45, 3: false A(z) 14. számhármas: 52, 24, 1: false A(z) 15. számhármas: 26, 15, 21: true A(z) 16. számhármas: 31, 46, 5: false A(z) 17. számhármas: 47, 21, 40: true A(z) 18. számhármas: 25, 50, 42: true A(z) 19. számhármas: 6, 47, 58: false A(z) 20. számhármas: 51, 17, 26: false A(z) 21. számhármas: 48, 48, 13: true A(z) 22. számhármas: 46, 23, 47: true A(z) 23. számhármas: 33, 60, 24: false A(z) 24. számhármas: 48, 2, 24: false A(z) 25. számhármas: 44, 38, 6: false A(z) 26. számhármas: 44, 24, 10: false A(z) 27. számhármas: 2, 16, 35: false A(z) 28. számhármas: 19, 18, 50: false A(z) 29. számhármas: 29, 52, 58: true A(z) 30. számhármas: 46, 37, 2: false A(z) 31. számhármas: 47, 50, 49: true
Klement András
21.oldal
2016
2. Adatszerkezetek
Egész és valós szám, karakter, szöveg, tömb és tömblista
Hagyjuk el a tömblistából azokat a rekordokat, ahol az oldalak összege kisebb 100-nál! A(z) 1. számhármas: 52, 34, 15: false A(z) 2. számhármas: 34, 48, 21: true A(z) 3. számhármas: 51, 39, 13: true A(z) 4. számhármas: 9, 54, 38: false A(z) 5. számhármas: 59, 19, 30: false A(z) 6. számhármas: 11, 53, 52: true A(z) 7. számhármas: 43, 57, 36: true A(z) 8. számhármas: 47, 21, 40: true A(z) 9. számhármas: 25, 50, 42: true A(z) 10. számhármas: 6, 47, 58: false A(z) 11. számhármas: 48, 48, 13: true A(z) 12. számhármas: 46, 23, 47: true A(z) 13. számhármas: 33, 60, 24: false A(z) 14. számhármas: 29, 52, 58: true A(z) 15. számhármas: 47, 50, 49: true Minden számhármas utolsó adatát duplázzuk meg! Szükség esetén módosítsuk, hogy háromszöget alkotnak-e! A(z) 1. számhármas: 52, 34, 30: true A(z) 2. számhármas: 34, 48, 42: true A(z) 3. számhármas: 51, 39, 26: true A(z) 4. számhármas: 9, 54, 76: false A(z) 5. számhármas: 59, 19, 60: true A(z) 6. számhármas: 11, 53, 104: false A(z) 7. számhármas: 43, 57, 72: true A(z) 8. számhármas: 47, 21, 80: false A(z) 9. számhármas: 25, 50, 84: false A(z) 10. számhármas: 6, 47, 116: false A(z) 11. számhármas: 48, 48, 26: true A(z) 12. számhármas: 46, 23, 94: false A(z) 13. számhármas: 33, 60, 48: true A(z) 14. számhármas: 29, 52, 116: false A(z) 15. számhármas: 47, 50, 98: false Cseréljük meg a tömblista első és utolsó rekordját! A(z) 1. számhármas: 47, 50, 98: false A(z) 2. számhármas: 34, 48, 42: true A(z) 3. számhármas: 51, 39, 26: true A(z) 4. számhármas: 9, 54, 76: false A(z) 5. számhármas: 59, 19, 60: true A(z) 6. számhármas: 11, 53, 104: false A(z) 7. számhármas: 43, 57, 72: true A(z) 8. számhármas: 47, 21, 80: false A(z) 9. számhármas: 25, 50, 84: false A(z) 10. számhármas: 6, 47, 116: false A(z) 11. számhármas: 48, 48, 26: true A(z) 12. számhármas: 46, 23, 94: false A(z) 13. számhármas: 33, 60, 48: true A(z) 14. számhármas: 29, 52, 116: false A(z) 15. számhármas: 52, 34, 30: true Az aktuális számhármasok hány százaléka határoz meg háromszöget? A háromszöget meghatározók aránya: 46,00% Csak A(z) A(z) A(z) A(z) A(z) A(z) A(z)
a háromszögeket hagyjuk meg a tömblistában! 1. számhármas: 34, 48, 42: true 2. számhármas: 51, 39, 26: true 3. számhármas: 59, 19, 60: true 4. számhármas: 43, 57, 72: true 5. számhármas: 48, 48, 26: true 6. számhármas: 33, 60, 48: true 7. számhármas: 52, 34, 30: true
Klement András
22.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
3. Beolvasás, kiírás: képernyő és szöveges fájl import import import import import import import
java.io.BufferedReader; java.io.FileReader; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; java.util.ArrayList; java.util.Scanner;
/** * Beolvasás, kiírás: képernyő és szöveges fájl * * @author Klemand */ public class BevGyak03 { public static void main(String[] args) throws IOException { // A throws IOException csak fájlműveletek esetén kell // Source menüpont Organize Imports System.out.println("1. Egész számok beolvasása a billentyűzetről \n"); System.out.println("Mivel az érettségin feltételezhetjük, hogy helyes számformátumot és értéket"); System.out.println("adunk meg, kivételkezeléssel és ellenőrzéssel nem kell foglalkoznunk.\n"); Scanner sc1 = new Scanner(System.in); // Source menüpont Organize Imports int n, m; System.out.print("Kérek egy egész számot a billentyűzetről: "); n = sc1.nextInt(); System.out.println("A beírt szám: " + n); System.out.print("Kérek egy másik egész számot is a billentyűzetről: "); m = sc1.nextInt(); System.out.println("A beírt második szám: " + m); System.out.println("A két szám távolsága a számegyenesen: " + Math.abs(n - m)); float atlag = (float) (n + m) / 2; System.out.println("A két szám átlaga: " + atlag); int nagyobb = Math.max(n, m); String bin, hex; bin = Integer.toBinaryString(nagyobb); hex = Integer.toHexString(nagyobb); hex = hex.toUpperCase(); System.out.print("A nagyobb szám: " + nagyobb + ", bináris alakja: " + bin); System.out.println(", hexadecimális alakja: " + hex); vonal();
Klement András
23.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
System.out.println("2. Egy hosszú egész szám beolvasása a billentyűzetről \n"); Scanner sc2 = new Scanner(System.in); System.out.println("Addig adogatjuk össze a számjegyeket,"); System.out.println("míg végül az összeg egyjegyű nem lesz."); long nn; System.out.print("Kérek egy hosszú egész számot a billentyűzetről: "); nn = sc2.nextLong(); long maradek; long osszeg; do { osszeg = 0; do { maradek = nn % 10; osszeg += maradek; nn = nn / 10; } while (nn > 0); nn = osszeg; } while (osszeg > 9); System.out.println("A végső összeg: " + osszeg); vonal(); System.out.println("3. Valós számok beolvasása a billentyűzetről \n"); Scanner sc3 = new Scanner(System.in); double x, y; System.out.println("Figyelem! A tizedestörteket tizedesvesszővel kell beírni!\n"); System.out.print("Kérek egy valós számot a billentyűzetről: "); x = sc3.nextDouble(); System.out.println("A beírt szám: " + x); System.out.print("Kérek egy másik valós számot is a billentyűzetről: "); y = sc3.nextDouble(); System.out.println("A beírt második szám: " + y); System.out.printf("A két szám távolsága a számegyenesen (4 tizedes pontossággal): %.4f\n", Math.abs(x - y)); if (x >= 0 && y >= 0) { double mkoz = Math.sqrt(x * y); System.out.printf("A két szám mértani közepe (4 tizedes pontossággal): %.4f\n", mkoz); } else { System.out.println("A mértani közepet csak nemnegatív számokra értelmezzük."); } vonal();
Klement András
24.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
System.out.println("4. Szöveg beolvasása a billentyűzetről \n"); System.out.println("a) Egy szövegként beolvasott hexadecimális szám értéke és számjegyeinek összege \n"); System.out.println("Kérek egy hexadecimális számot! "); System.out.print("A számjegyei: 0 1 2 ... 9 A B C D E F lehetnek. (Pl. babfa88): "); Scanner sc4 = new Scanner(System.in); hex = sc4.nextLine(); hex = hex.toUpperCase(); System.out.println("A megadott hexadecimális szám: " + hex); System.out.print("Decimális alakja: "); long hexErtek = Long.parseLong(hex, 16); System.out.println(hexErtek); System.out.print("Számjegyeienek összege: "); osszeg = 0; for (int i = 1; i <= hex.length(); i++) { osszeg += Integer.parseInt(hex.substring(i - 1, i), 16); } System.out.println(osszeg + "\n"); System.out.println("b) Egy ékezetes szöveg ékezetes karaktereinek összefűzése \n"); System.out.println("Kérek egy ékezetes szöveget! "); String szoveg = sc4.nextLine(); System.out.println("A beolvasott szöveg: " + szoveg); String ekesek = ""; for (int i = 1; i <= szoveg.length(); i++) { String s = szoveg.substring(i - 1, i); if (ekezetes(s)) { ekesek += s; } } System.out.println("A beolvasott szöveg ékezetes betűinek füzére: " + ekesek + "\n"); System.out.println("c) Egy egészekből álló számsorozat beolvasása tömbbe \n"); System.out.println("Kérem a számsorozat tagjait egy sorban szóközzel elválasztva: "); String sor = sc4.nextLine(); sor = sor.trim(); String[] daraboltSor = sor.split(" "); int db = daraboltSor.length; // Szöveg hosszánál length(), itt csak length int[] szamTomb = new int[db]; for (int i = 1; i <= db; i++) { szamTomb[i - 1] = Integer.parseInt(daraboltSor[i - 1]); } System.out.println("A beolvasott számtömb elemei:"); for (int i = 1; i <= db; i++) { System.out.println(szamTomb[i - 1]); } sc1.close(); sc2.close(); sc3.close(); sc4.close(); vonal();
Klement András
25.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
System.out.println("5. Beolvasás szövegfájlból \n"); System.out.println("a) A fájl első sora tartalmazza a beolvasandó sorok számát."); System.out.println("Minden sorban szóközzel elválasztva egy-egy háromszög oldalainak hossza"); System.out.println("szerepel. Olvassuk be kétdimenziós tömbbe a háromszögek oldalait."); System.out.println("Ezután írassuk ki a képernyőre, hogy az adatok háromszöget határoznak-e"); System.out.println(" meg,és ha igen, akkor adjuk meg a kerületüket, területüket, a beírt"); System.out.println("és a körülírt körük sugarát, és minősítsük őket szögeik szerint!\n"); BufferedReader behozatal1; // Source menüpont Organize Imports behozatal1 = new BufferedReader(new FileReader("3szog.txt")); // Source menüpont Organize Imports String fsor; fsor = behozatal1.readLine(); /* * Ha a szövegfájl UTF-8 kódolású, akkor az elején egy UTF-8 azonosító * van, ami konvertálásnál hibát okoz. * * A probléma kezelésére két lehetőségünk van: * * 1) Ha van UTF-8 azonosító, elhagyjuk az első sor elejéről: * * if (elsoSor.charAt(0) == (char) 0xFEFF) { * elsoSor = elsoSor.substring(1); * } * * Ez azonban gondot okozhat, ha már az első sor is az első rekord vagy * annak része. * * 2) Mentsük el a fájlt ANSI kódolással: szerkesztés / mentés másként / * felülírás * * A tapasztalat szerint az érettségin a forrásfájlok általában ANSI * kódolásúak, de erről mindig győződjünk meg az Intézőben vagy a Total * Commanderben! * */ int sordb = Integer.parseInt(fsor); // Tudom, hogy számot olvasok be a fájlból! String[] daraboltFsor; double[][] hszogek = new double[sordb][3]; for (int i = 1; i <= sordb; i++) { fsor = behozatal1.readLine(); daraboltFsor = fsor.split(" "); for (int j = 1; j <= 3; j++) { hszogek[i - 1][j - 1] = Double.parseDouble(daraboltFsor[j - 1]); } } behozatal1.close();
Klement András
26.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
double a, b, c, asztal; for (int i = 1; i <= sordb; i++) { if (haromszogE(hszogek[i - 1][0], hszogek[i - 1][1], hszogek[i - 1][2])) { System.out.print(hszogek[i - 1][0] + ", " + hszogek[i - 1][1] + " és " + hszogek[i - 1][2]); System.out.println(" háromszöget határoznak meg."); a = hszogek[i - 1][0]; b = hszogek[i - 1][1]; c = hszogek[i - 1][2]; if (a >= b && a >= c) { asztal = c; c = a; a = asztal; } if (b >= a && b >= c) { asztal = c; c = b; b = asztal; } // Most már c-nél egyik oldal sem nagyobb. double ker = a + b + c; double s = ker / 2; double ter = Math.sqrt(s * (s - a) * (s - b) * (s - c)); double rb = ter / s; double rk = a * b * c / (4 * ter); double cosgamma = (a * a + b * b - c * c) / (2 * a * b); System.out.printf("Kerülete: %.2f", ker); System.out.printf(", területe: %.4f\n", ter); System.out.printf("A beírt körének sugara: %.3f", rb); System.out.printf(", a körülírt körének sugara: %.3f\n", rk); if (cosgamma > 0) { System.out.println("A háromszög } else if (cosgamma == 0) { System.out.println("A háromszög } else { System.out.println("A háromszög } // A legnagyobb oldallal szemközt van a // dönti el a kérdést. System.out.println();
hegyesszögű."); derékszögű."); tompaszögű."); legnagyobb szög, ez
} else { System.out.print(hszogek[i - 1][0] + ", " + hszogek[i - 1][1] + " és " + hszogek[i - 1][2]); System.out.println(" nem határoznak meg háromszöget."); System.out.println(); } }
Klement András
27.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
System.out.println("b) A fájl első sora nem tartalmazza a beolvasandó sorok számát."); System.out.println("Minden sorban szóközzel elválasztva egy vezetéknév, egy keresztnév,"); System.out.println("egy személyi szám és a születéskor nyert életbiztosítási összeg szerepel."); System.out.println("Olvassuk be az adatokat egy tömblistába."); System.out.println("Ezután írassuk ki a képernyőre a vezetéknevet 10 karakterrel,"); System.out.println("majd tabulátorral elválasztva a keresztnév első két karakterét,"); System.out.println("a személy nemét, születési évét, és 2 %-os évi kamattal számolva"); System.out.println("biztosításának 2020 végén várható értékét!\n"); BufferedReader behozatal2; behozatal2 = new BufferedReader(new FileReader("szemely.txt")); while ((fsor = behozatal2.readLine()) != null) { // Beolvassa a sort és megvizsgálja. Ha nem null, akkor feldolgozza. daraboltFsor = fsor.split(" "); szemely.add(new SzemelyTipus(daraboltFsor)); } behozatal2.close(); System.out.println("A fájl beolvasása megtörtént."); System.out.println("A tömblista " + szemely.size() + " adatsort tartalmaz.\n"); System.out.println("A kért adatok:"); for (int i = 1; i <= szemely.size(); i++) { int hossz = szemely.get(i - 1).veznev.length(); if (hossz < 10) { System.out.print(szemely.get(i - 1).veznev); for (int j = 1; j <= 10 - hossz; j++) { System.out.print(" "); } } else { System.out.print(szemely.get(i - 1).veznev.substring(0, 10)); } System.out.print("\t" + szemely.get(i - 1).kernev.substring(0, 2)); System.out.print("\t" + szemely.get(i - 1).nem + "\t" + szemely.get(i - 1).szulev + "\t"); int ev = 2020 - szemely.get(i - 1).szulev; szemely.get(i - 1).bizt = szemely.get(i - 1).bizt * Math.pow(1.02, ev); // Példa a tömlista egy mezőjének felülírására. // Másrészt később is használjuk még, azért sem csak a kiíratásba // tettük. System.out.printf("%,14.2f", szemely.get(i - 1).bizt); // Ezredes tagolás, szélesség, pontosság beállítása System.out.println(" Ft"); } vonal();
Klement András
28.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
System.out.println("6. Kiíratás szövegfájlba \n"); System.out.println("Írassuk ki az eredmeny.ki szövegfájlba az előző két feladat eredményét!"); System.out.println("Először írjuk felül az esetlegesen meglévő fájlt, a második feladat"); System.out.println("eredménye pedig két üres sor után következzen.\n"); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("eredmeny.ki", false)); // Source menüpont Organize Imports // A fájlkiterjesztés bármi lehet, nem csak txt // false: felülírjuk a meglévő fájlt (elhagyható, ez az alapértelmezés) // Az a) feladatnál nem tároltuk az eredményeket, csak kiírattuk, // ezért most mindent újra kell számolni. kivitel.println("Az a) feladat eredménye:"); kivitel.println(); for (int i = 1; i <= sordb; i++) { if (haromszogE(hszogek[i - 1][0], hszogek[i - 1][1], hszogek[i - 1][2])) { kivitel.print(hszogek[i - 1][0] + ", " + hszogek[i - 1][1] + " és " + hszogek[i - 1][2]); kivitel.println(" háromszöget határoznak meg."); a = hszogek[i - 1][0]; b = hszogek[i - 1][1]; c = hszogek[i - 1][2]; if (a >= b && a >= c) { asztal = c; c = a; a = asztal; } if (b >= a && b >= c) { asztal = c; c = b; b = asztal; } // Most már c-nél egyik oldal sem nagyobb. double ker = a + b + c; double s = ker / 2; double ter = Math.sqrt(s * (s - a) * (s - b) * (s - c)); double rb = ter / s; double rk = a * b * c / (4 * ter); double cosgamma = (a * a + b * b - c * c) / (2 * a * b); kivitel.printf("Kerülete: %.2f", ker); kivitel.printf(", területe: %.4f", ter); kivitel.println(); // A \n itt nem működik kivitel.printf("A beírt körének sugara: %.3f", rb); kivitel.printf(", a körülírt körének sugara: %.3f", rk); kivitel.println(); if (cosgamma > 0) { kivitel.println("A háromszög hegyesszögű."); } else if (cosgamma == 0) { kivitel.println("A háromszög derékszögű."); } else { kivitel.println("A háromszög tompaszögű."); } // A legnagyobb oldallal szemközt van a legnagyobb szög, ez // dönti el a kérdést. kivitel.println(); } else { kivitel.print(hszogek[i - 1][0] + ", " + hszogek[i - 1][1] + " és " + hszogek[i - 1][2]); kivitel.println(" nem határoznak meg háromszöget."); kivitel.println(); } } kivitel.println();
Klement András
29.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
// A b) feladatnál a tömblistában tároltuk az eredményeket, csak ki kell // íratni fájlba is. kivitel.println("A b) feladat eredménye:"); kivitel.println(); for (int i = 1; i <= szemely.size(); i++) { int hossz = szemely.get(i - 1).veznev.length(); if (hossz < 10) { kivitel.print(szemely.get(i - 1).veznev); for (int j = 1; j <= 10 - hossz; j++) { kivitel.print(" "); } } else { kivitel.print(szemely.get(i - 1).veznev.substring(0, 10)); } kivitel.print("\t" + szemely.get(i - 1).kernev.substring(0, 2)); kivitel.print("\t" + szemely.get(i - 1).nem + "\t" + szemely.get(i - 1).szulev + "\t"); kivitel.printf("%,14.2f", szemely.get(i - 1).bizt); kivitel.println(" Ft"); } kivitel.close(); // Minden beolvasást és kiíratást le kell zárni. System.out.println("A fájlkiíratás sikeresen befejeződött."); vonal(); } public static void vonal() { System.out.println("\n************************************************************************************ \n"); } public static boolean ekezetes(String a) { String ekes = "áéíóöőúüűÁÉÍÓÖŐÚÜŰ"; return ekes.contains(a); } public static boolean haromszogE(double a, double b, double c) { return (a + b > c && a + c > b && b + c > a); } static ArrayList<SzemelyTipus> szemely = new ArrayList<>(); public static class SzemelyTipus { private final String veznev; private final String kernev; private final String szemszam; private double bizt; // Ezt változtatni fogjuk. private final String nem; private final int szulev; public SzemelyTipus(String[] daraboltFsor) { veznev = daraboltFsor[0]; kernev = daraboltFsor[1]; szemszam = daraboltFsor[2]; bizt = Double.parseDouble(daraboltFsor[3]); nem = nemMeghat(szemszam); szulev = evMeghat(szemszam); } }
Klement András
30.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
public static String nemMeghat(String szsz) { if (szsz.substring(0, 1).equals("1") || szsz.substring(0, 1).equals("3")) { // String esetén az == helyett az equals metódust kell alkalmazni! return "férfi"; } else { return "nő"; } } public static int evMeghat(String szsz) { int ev = Integer.parseInt(szsz.substring(1, 3)); if (Integer.parseInt(szsz.substring(0, 1)) <= 2) { return 1900 + ev; } else { return 2000 + ev; } } }
Klement András
31.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
1. Egész számok beolvasása a billentyűzetről Mivel az érettségin feltételezhetjük, hogy helyes számformátumot és értéket adunk meg, kivételkezeléssel és ellenőrzéssel nem kell foglalkoznunk. Kérek egy egész számot a billentyűzetről: 28 A beírt szám: 28 Kérek egy másik egész számot is a billentyűzetről: 77 A beírt második szám: 77 A két szám távolsága a számegyenesen: 49 A két szám átlaga: 52.5 A nagyobb szám: 77, bináris alakja: 1001101, hexadecimális alakja: 4D ************************************************************************************ 2. Egy hosszú egész szám beolvasása a billentyűzetről Addig adogatjuk össze a számjegyeket, míg végül az összeg egyjegyű nem lesz. Kérek egy hosszú egész számot a billentyűzetről: 1234567891011121314 A végső összeg: 6 ************************************************************************************ 3. Valós számok beolvasása a billentyűzetről Figyelem! A tizedestörteket tizedesvesszővel kell beírni! Kérek egy valós számot a billentyűzetről: 3,14159265358979323846 A beírt szám: 3.141592653589793 Kérek egy másik valós számot is a billentyűzetről: 2,71828182845904523536 A beírt második szám: 2.718281828459045 A két szám távolsága a számegyenesen (4 tizedes pontossággal): 0,4233 A két szám mértani közepe (4 tizedes pontossággal): 2,9223 ************************************************************************************ 4. Szöveg beolvasása a billentyűzetről a) Egy szövegként beolvasott hexadecimális szám értéke és számjegyeinek összege Kérek egy hexadecimális számot! A számjegyei: 0 1 2 ... 9 A B C D E F lehetnek. (Pl. babfa88): babadada28 A megadott hexadecimális szám: BABADADA28 Decimális alakja: 801998821928 Számjegyeienek összege: 98 b) Egy ékezetes szöveg ékezetes karaktereinek összefűzése Kérek egy ékezetes szöveget! TÜNDÉRszárnyú KÍGYÓbűvölő A beolvasott szöveg: TÜNDÉRszárnyú KÍGYÓbűvölő A beolvasott szöveg ékezetes betűinek füzére: ÜÉáúÍÓűöő c) Egy egészekből álló számsorozat beolvasása tömbbe Kérem a számsorozat tagjait egy sorban szóközzel elválasztva: 3 12 1 55 888 9 133 23 77
A beolvasott számtömb elemei: 3 12 1 55 888 9
Klement András
32.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
133 23 77 ************************************************************************************ 5. Beolvasás szövegfájlból a) A fájl első sora tartalmazza a beolvasandó sorok számát. Minden sorban szóközzel elválasztva egy-egy háromszög oldalainak hossza szerepel. Olvassuk be kétdimenziós tömbbe a háromszögek oldalait. Ezután írassuk ki a képernyőre, hogy az adatok háromszöget határoznak-e meg,és ha igen, akkor adjuk meg a kerületüket, területüket, a beírt és a körülírt körük sugarát, és minősítsük őket szögeik szerint! 5.3, 12.0 és 7.34 háromszöget határoznak meg. Kerülete: 24,64, területe: 11,7399 A beírt körének sugara: 0,953, a körülírt körének sugara: 9,941 A háromszög tompaszögű. 4.2, 55.0 és 44.0 nem határoznak meg háromszöget. 3.888, 7.98 és 5.723 háromszöget határoznak meg. Kerülete: 17,59, területe: 10,3996 A beírt körének sugara: 1,182, a körülírt körének sugara: 4,268 A háromszög tompaszögű. 2.23, 5.34 és 7.18 háromszöget határoznak meg. Kerülete: 14,75, területe: 3,8804 A beírt körének sugara: 0,526, a körülírt körének sugara: 5,509 A háromszög tompaszögű. b) A fájl első sora nem tartalmazza a beolvasandó sorok számát. Minden sorban szóközzel elválasztva egy vezetéknév, egy keresztnév, egy személyi szám és a születéskor nyert életbiztosítási összeg szerepel. Olvassuk be az adatokat egy tömblistába. Ezután írassuk ki a képernyőre a vezetéknevet 10 karakterrel, majd tabulátorral elválasztva a keresztnév első két karakterét, a személy nemét, születési évét, és 2 %-os évi kamattal számolva biztosításának 2020 végén várható értékét! A fájl beolvasása megtörtént. A tömblista 6 adatsort tartalmaz. A kért adatok: Tündérszár Kígyóbűvöl Űrhajós Úszó Műlábú Különc
Ír Ál Éz Őz Ül Úd
nő férfi férfi nő férfi férfi
1980 1976 2012 2006 1956 1903
883 717 585 263 2 486 507
215,87 015,94 829,69 895,75 045,27 212,68
Ft Ft Ft Ft Ft Ft
************************************************************************************ 6. Kiíratás szövegfájlba Írassuk ki az eredmeny.ki szövegfájlba az előző két feladat eredményét! Először írjuk felül az esetlegesen meglévő fájlt, a második feladat eredménye pedig két üres sor után következzen. A fájlkiíratás sikeresen befejeződött. ************************************************************************************
Klement András
33.oldal
2016
3. Beolvasás, kiírás
Képernyő, szöveges fájl
3szog.txt: 4 5.3 12 7.34 4.2 55 44 3.888 7.98 5.723 2.23 5.34 7.18 szemely.txt: Tündérszárnyú Írisz 28005162478 400000 Kígyóbűvölő Álmos 17612263333 300000 Űrhajós Ézsaiás 31208306789 500000 Úszó Őzike 40601038765 200000 Műlábú Üllő 15604031001 700000 Különc Údó 10302141111 50000 eredmeny.ki: Az a) feladat eredménye: 5.3, 12.0 és 7.34 háromszöget határoznak meg. Kerülete: 24,64, területe: 11,7399 A beírt körének sugara: 0,953, a körülírt körének sugara: 9,941 A háromszög tompaszögű. 4.2, 55.0 és 44.0 nem határoznak meg háromszöget. 3.888, 7.98 és 5.723 háromszöget határoznak meg. Kerülete: 17,59, területe: 10,3996 A beírt körének sugara: 1,182, a körülírt körének sugara: 4,268 A háromszög tompaszögű. 2.23, 5.34 és 7.18 háromszöget határoznak meg. Kerülete: 14,75, területe: 3,8804 A beírt körének sugara: 0,526, a körülírt körének sugara: 5,509 A háromszög tompaszögű.
A b) feladat eredménye: Tündérszár Kígyóbűvöl Űrhajós Úszó Műlábú Különc
Klement András
Ír Ál Éz Őz Ül Úd
nő férfi férfi nő férfi férfi
1980 1976 2012 2006 1956 1903
883 717 585 263 2 486 507
215,87 015,94 829,69 895,75 045,27 212,68
34.oldal
Ft Ft Ft Ft Ft Ft
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
4. Elemi algoritmusok: összegzés, eldöntés, keresés, megszámolás, maximumkiválasztás és kiválogatás import java.util.Scanner; /** * Elemi algoritmusok: összegzés, eldöntés, keresés, megszámolás, * maximum-kiválasztás és kiválogatás * * @author Klemand */ public class BevGyak04 { public static void main(String[] args) { // Az adatok beolvasása a billentyűzetről az adattomb tömbbe System.out.println("Kérek egyesével max. 20 db 1 és 100 közötti egész számot! "); System.out.println("Befejezés: 0 "); System.out.println("(Feltételezhetjük, hogy a felhasználó csak megfelelő számokat ír be.)\n"); int n = 0; int[] X = new int[20]; // Az adattömb létrehozása Scanner sc = new Scanner(System.in); int adat; do { System.out.print("Kérem az " + (n + 1) + ". számot: "); adat = sc.nextInt(); if (adat != 0) { n++; X[n - 1] = adat; // Az adattomb feltöltése, az indexelés 0-val kezdődik! } } while (n > 0 && n < 20 && adat != 0); // Legalább 1 adat legyen és 20-nál mindenképp álljon meg! sc.close(); System.out.println(""); System.out.println("Visszajelzés: "); System.out.println("A megadott elemek száma: " + n); System.out.println("A megadott elemek: "); for (int i = 1; i <= n; i++) { System.out.println(i + ".: " + X[i - 1]); } System.out.println(""); // 1. Összegzés programozási tétel System.out.println("1. Összegzés programozási tétel\n"); System.out.println("A megadott számok összegét határozza meg."); int osszeg = 0; System.out.println("Kezdetben az aktuális összeg: " + osszeg); for (int i = 1; i <= n; i++) { osszeg += X[i - 1]; System.out.println("Az " + i + " elem " + X[i - 1] + ", az aktuális összeg: " + osszeg); } System.out.println(""); System.out.println("A megadott számok összege: " + osszeg); rajzol();
Klement András
35.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
// 2. Eldöntés programozási tétel System.out.println("2. Eldöntés programozási tétel\n"); System.out.println("Megvizsgálja, hogy a megadott számok között van-e T tulajdonságú elem. "); System.out.println("Ebben a programban a T tulajdonság azt jelenti,"); System.out.println("hogy az adott elem páros, de nem osztható 4-gyel."); System.out.println("A vizsgálathoz függvényt használunk."); System.out.println("Másik tulajdonság esetén csak a függvényt kell átírni."); int i = 1; while ((i <= n) && (T(X[i - 1]) != true)) { System.out.println("Az aktuális index: " + i + ", az aktuális elem " + X[i - 1] + ", " + T(X[i - 1])); i++; } boolean van = (i <= n); System.out.println(""); System.out.println("A megadott számok között van T tulajdonságú elem: " + van); rajzol(); // 3. Keresés programozási tétel System.out.println("3. Keresés programozási tétel\n"); System.out.println("Megvizsgálja, hogy a megadott számok között van-e T tulajdonságú elem. "); System.out.println("Ha van, akkor megadja az első T tulajdonságú elem sorszámát is. "); System.out.println("Mindig alkalmazható a Kiválasztás tétel helyett is. "); int sorszam; i = 1; while ((i <= n) && (T(X[i - 1]) != true)) { System.out.println("Az aktuális index: " + i + ", az aktuális elem " + X[i - 1] + ", " + T(X[i - 1])); i++; } van = (i <= n); if (van) // if (van=true) { sorszam = i; System.out.println("Az első T tulajdonságú elem sorszáma: " + sorszam); System.out.println("A sorszám ismeretében maga az elem is megadható: " + X[sorszam - 1]); } rajzol(); // 4. Megszámolás programozási tétel System.out.println("4. Megszámolás programozási tétel\n"); System.out.println("Meghatározza, hogy a megadott számok között hány T tulajdonságú elem van. "); int db = 0; for (i = 1; i <= n; i++) { if (T(X[i - 1])) // if (T(X[i-1])==true) { db++; System.out.println("Az aktuális darabszám: " + db + ", az aktuális elem: " + X[i - 1]); } } System.out.println(""); System.out.println("A megadott számok között " + db + " darab T tulajdonságú elem van. "); rajzol();
Klement András
36.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
// 5. Maximum-kiválasztás programozási tétel System.out.println("5. Maximum-kiválasztás programozási tétel\n"); System.out.println("5.a) Meghatározza az első maximális elem sorszámát. "); int max = 1; System.out.println("Az aktuális maximális index: " + max + ", az aktuális elem: " + X[max - 1]); for (i = 2; i <= n; i++) { if (X[i - 1] > X[max - 1]) { max = i; System.out.println("Az aktuális maximális index: " + max + ", az aktuális elem: " + X[max - 1]); } } System.out.println(""); System.out.println("Az első maximális elem sorszáma: " + max); System.out.println("A sorszám ismeretében maga az elem is megadható: " + X[max - 1]); System.out.println(""); System.out.println("5.b) Meghatározza az első T tulajdonságú maximális elem sorszámát. "); int Tmax = 0; for (i = 1; i <= n; i++) { if (T(X[i - 1])) { if (Tmax == 0) { Tmax = i; System.out.println("Az aktuális maximális index: " + Tmax + ", az aktuális elem: " + X[Tmax - 1]); } else { if (X[i - 1] > X[Tmax - 1]) { Tmax = i; System.out.print("Az aktuális maximális index: "); System.out.println(Tmax + ", az aktuális elem: " + X[Tmax - 1]); } } } } System.out.println(""); if (Tmax > 0) { System.out.println("Az első T tulajdonságú maximális elem sorszáma: " + Tmax); System.out.println("A sorszám ismeretében maga az elem is megadható: " + X[Tmax - 1]); } else { System.out.println("Nincs az adatok között T tulajdonságú elem."); } rajzol();
Klement András
37.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
// 6. Kiválogatás programozási tétel System.out.println("6. Kiválogatás programozási tétel\n"); System.out.println("A T tulajdonságú elemek sorszámait kiválogatjuk egy új tömbbe. "); // Egyszerűbb csak a sorszámokat tárolni, mint az elemeket int[] TXS = new int[20]; // A sorszámtömb létrehozása db = 0; for (i = 1; i <= n; i++) { if (T(X[i - 1])) // if (T(X[i-1])==true) { db++; TXS[db - 1] = i; // Az indexelés 0-val kezdődik! } } System.out.println(""); for (i = 1; i <= db; i++) // Ha db=0, egyszer sem hajtódik végre! { System.out.println("Az " + i + ". T tulajdonságú elem sorszáma: " + TXS[i - 1] + ", maga az elem: " + X[TXS[i - 1] - 1]); } rajzol(); } // Eljárások, függvények public static void rajzol() { // Eljárás: void típusú System.out.println("\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"); } // A T tulajdonság megadása függvénnyel public static boolean T(int n) { return (n % 2 == 0 && n % 4 != 0); } }
Klement András
38.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
Kérek egyesével max. 20 db 1 és 100 közötti egész számot! Befejezés: 0 (Feltételezhetjük, hogy a felhasználó csak megfelelő számokat ír be.) Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem Kérem
az az az az az az az az az az az az az az az az az
1. számot: 2. számot: 3. számot: 4. számot: 5. számot: 6. számot: 7. számot: 8. számot: 9. számot: 10. számot: 11. számot: 12. számot: 13. számot: 14. számot: 15. számot: 16. számot: 17. számot:
3 11 23 95 99 42 34 66 98 44 22 34 18 99 98 86 0
Visszajelzés: A megadott elemek száma: 16 A megadott elemek: 1.: 3 2.: 11 3.: 23 4.: 95 5.: 99 6.: 42 7.: 34 8.: 66 9.: 98 10.: 44 11.: 22 12.: 34 13.: 18 14.: 99 15.: 98 16.: 86 1. Összegzés programozási tétel A megadott számok összegét határozza meg. Kezdetben az aktuális összeg: 0 Az 1 elem 3, az aktuális összeg: 3 Az 2 elem 11, az aktuális összeg: 14 Az 3 elem 23, az aktuális összeg: 37 Az 4 elem 95, az aktuális összeg: 132 Az 5 elem 99, az aktuális összeg: 231 Az 6 elem 42, az aktuális összeg: 273 Az 7 elem 34, az aktuális összeg: 307 Az 8 elem 66, az aktuális összeg: 373 Az 9 elem 98, az aktuális összeg: 471 Az 10 elem 44, az aktuális összeg: 515 Az 11 elem 22, az aktuális összeg: 537 Az 12 elem 34, az aktuális összeg: 571 Az 13 elem 18, az aktuális összeg: 589 Az 14 elem 99, az aktuális összeg: 688 Az 15 elem 98, az aktuális összeg: 786 Az 16 elem 86, az aktuális összeg: 872 A megadott számok összege: 872 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Klement András
39.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
2. Eldöntés programozási tétel Megvizsgálja, hogy a megadott számok között van-e T tulajdonságú elem. Ebben a programban a T tulajdonság azt jelenti, hogy az adott elem páros, de nem osztható 4-gyel. A vizsgálathoz függvényt használunk. Másik tulajdonság esetén csak a függvényt kell átírni. Az aktuális index: 1, az aktuális elem 3, false Az aktuális index: 2, az aktuális elem 11, false Az aktuális index: 3, az aktuális elem 23, false Az aktuális index: 4, az aktuális elem 95, false Az aktuális index: 5, az aktuális elem 99, false A megadott számok között van T tulajdonságú elem: true * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3. Keresés programozási tétel Megvizsgálja, hogy a megadott számok között van-e T tulajdonságú elem. Ha van, akkor megadja az első T tulajdonságú elem sorszámát is. Mindig alkalmazható a Kiválasztás tétel helyett is. Az aktuális index: 1, az aktuális elem 3, false Az aktuális index: 2, az aktuális elem 11, false Az aktuális index: 3, az aktuális elem 23, false Az aktuális index: 4, az aktuális elem 95, false Az aktuális index: 5, az aktuális elem 99, false Az első T tulajdonságú elem sorszáma: 6 A sorszám ismeretében maga az elem is megadható: 42 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4. Megszámolás programozási tétel Meghatározza, hogy a megadott számok között Az aktuális darabszám: 1, az aktuális elem: Az aktuális darabszám: 2, az aktuális elem: Az aktuális darabszám: 3, az aktuális elem: Az aktuális darabszám: 4, az aktuális elem: Az aktuális darabszám: 5, az aktuális elem: Az aktuális darabszám: 6, az aktuális elem: Az aktuális darabszám: 7, az aktuális elem: Az aktuális darabszám: 8, az aktuális elem: Az aktuális darabszám: 9, az aktuális elem:
hány T tulajdonságú elem van. 42 34 66 98 22 34 18 98 86
A megadott számok között 9 darab T tulajdonságú elem van. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 5. Maximum-kiválasztás programozási tétel 5.a) Meghatározza az első maximális elem sorszámát. Az aktuális maximális index: 1, az aktuális elem: 3 Az aktuális maximális index: 2, az aktuális elem: 11 Az aktuális maximális index: 3, az aktuális elem: 23 Az aktuális maximális index: 4, az aktuális elem: 95 Az aktuális maximális index: 5, az aktuális elem: 99 Az első maximális elem sorszáma: 5 A sorszám ismeretében maga az elem is megadható: 99
Klement András
40.oldal
2016
4. Elemi algoritmusok
Összegzés, eldöntés, keresés, megszámolás, maximum-kiválasztás és kiválogatás
5.b) Meghatározza az első T tulajdonságú maximális elem sorszámát. Az aktuális maximális index: 6, az aktuális elem: 42 Az aktuális maximális index: 8, az aktuális elem: 66 Az aktuális maximális index: 9, az aktuális elem: 98 Az első T tulajdonságú maximális elem sorszáma: 9 A sorszám ismeretében maga az elem is megadható: 98 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 6. Kiválogatás programozási tétel A T tulajdonságú elemek sorszámait kiválogatjuk egy új tömbbe. Az Az Az Az Az Az Az Az Az
1. 2. 3. 4. 5. 6. 7. 8. 9.
T T T T T T T T T
tulajdonságú tulajdonságú tulajdonságú tulajdonságú tulajdonságú tulajdonságú tulajdonságú tulajdonságú tulajdonságú
elem elem elem elem elem elem elem elem elem
sorszáma: sorszáma: sorszáma: sorszáma: sorszáma: sorszáma: sorszáma: sorszáma: sorszáma:
6, maga az elem: 7, maga az elem: 8, maga az elem: 9, maga az elem: 11, maga az elem: 12, maga az elem: 13, maga az elem: 15, maga az elem: 16, maga az elem:
42 34 66 98 22 34 18 98 86
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Klement András
41.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
5. Rendezések: Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés /** * Rendezések: Egyszerű cserés-, minimum-kiválasztásos-, buborékos* és beillesztéses rendezés * * @author Klemand */ public class BevGyak05 { public static void main(String[] args) { System.out.println("Előállítunk egy 20 elemű 1 és 100 közötti véletlen egészekből"); System.out.println("álló tömböt, majd különböző algoritmusokkal rendezzük az elemeket"); // Véletlen adatok előállítása a veletlentomb tömbbe int m = 20; // A véletlentömb mérete int[] veletlentomb = new int[m]; int i; for (i = 1; i <= m; i++) { veletlentomb[i - 1] = (int) ((Math.random() * 100) + 1); } System.out.println(""); System.out.println("A véletlenül generált elemek: "); for (i = 1; i <= m; i++) { System.out.println(i + ".: " + veletlentomb[i - 1]); } System.out.println(""); int[] X = new int[m]; // 1. Egyszerű cserés rendezés System.out.println("1. Egyszerű cserés rendezés"); System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); System.out.println("Egy tömb elemeit nagyság szerint rendezi távoli elemek cseréivel\n"); for (i = 1; i <= m; i++) { X[i - 1] = veletlentomb[i - 1]; } int cs = 0; int asztal; for (i = 1; i <= m; i++) { for (int j = i + 1; j <= m; j++) { if (X[j - 1] < X[i - 1]) { cs++; System.out.println(cs + ". csere: " + i + ". elem: " + X[i - 1] + " és " + j + ". elem: " + X[j - 1] + " cseréje"); asztal = X[i - 1];// elemcsere X[i - 1] = X[j - 1]; X[j - 1] = asztal; } } }
Klement András
42.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés System.out.println(""); System.out.println("A nagyság szerint rendezett elemek: "); for (i = 1; i <= m; i++) { System.out.print(X[i - 1] + " "); } System.out.println(""); rajzol(); // 2. Minimum-kiválasztásos rendezés System.out.println("2. Minimum-kiválasztásos rendezés"); System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); System.out.println("Csak minden ciklus végén cseréljük ki az aktuális első elemet a mögötte levő"); System.out.println("legkisebbel, melynek az indexét követjük nyomon.\n"); for (i = 1; i <= m; i++) { X[i - 1] = veletlentomb[i - 1]; } cs = 0; for (i = 1; i <= m; i++) { int min = i; for (int j = i + 1; j <= m; j++) { if (X[j - 1] < X[min - 1]) { min = j; System.out.println("Az aktuális minimális elem indexe: " + min); } } cs++; System.out.println(cs + ". csere: " + i + ". elem: " + X[i - 1] + " és " + min + ". elem: " + X[min - 1] + " cseréje"); asztal = X[i - 1];// elemcsere X[i - 1] = X[min - 1]; X[min - 1] = asztal; } System.out.println(""); System.out.println("A nagyság szerint rendezett elemek: "); for (i = 1; i <= m; i++) { System.out.print(X[i - 1] + " "); } System.out.println(""); rajzol(); // 3. Buborékos rendezés System.out.println("3. Buborékos rendezés"); System.out.println("<<<<<<<<<<<<<<<<<<<<<\n"); System.out.println("Először az első elemtől az n-1-ikig eljutva minden elemet összehasonlítunk"); System.out.println("a mögötte levővel, és ha a sorrendjük nem jó, akkor megcseréljük őket. "); System.out.println("Ezáltal a kisebb elemek a sorozat eleje, a nagyobbak pedig a vége felé mozdulnak el, "); System.out.println("és a legnagyobb biztosan a végére kerül. "); System.out.println("A következő ciklusban már csak az n-2-ik elemig kell eljutnunk, "); System.out.println("végül pedig csak az elsőt kell összehasonlítanunk a másodikkal.\n"); for (i = 1; i <= m; i++) { X[i - 1] = veletlentomb[i - 1]; }
Klement András
43.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés cs = 0; for (i = m - 1; i >= 1; i--) { for (int j = 1; j <= i; j++) { if (X[j - 1] > X[j]) { cs++; System.out.println(cs + ". csere: " + j + ". elem: " + X[j - 1] + " és " + (j + 1) + ". elem: " + X[j] + " cseréje"); asztal = X[j - 1];// elemcsere X[j - 1] = X[j]; X[j] = asztal; } } } System.out.println(""); System.out.println("A nagyság szerint rendezett elemek: "); for (i = 1; i <= m; i++) { System.out.print(X[i - 1] + " "); } System.out.println(""); rajzol(); // 4. Beillesztéses rendezés System.out.println("4. Beillesztéses rendezés"); System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<\n"); System.out.println("A módszer lényege: "); System.out.println("- Egyetlen elem mindig rendezett "); System.out.println("- Ha van egy rendezett részsorozatunk, abba mindig be tudunk illeszteni egy új elemet.\n"); for (i = 1; i <= m; i++) { X[i - 1] = veletlentomb[i - 1]; } cs = 0; for (i = 2; i <= m; i++) { int j = i - 1; while (j >= 1 && X[j - 1] > X[j]) { cs++; System.out.println(cs + ". csere: " + j + ". elem: " + X[j - 1] + " és " + (j + 1) + ". elem: " + X[j] + " cseréje"); asztal = X[j - 1];// elemcsere X[j - 1] = X[j]; X[j] = asztal; j--; } } System.out.println(""); System.out.println("A nagyság szerint rendezett elemek: "); for (i = 1; i <= m; i++) { System.out.print(X[i - 1] + " "); } System.out.println(""); rajzol();
} public static void rajzol() { System.out.println("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); } }
Klement András
44.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
Előállítunk egy 20 elemű 1 és 100 közötti véletlen egészekből álló tömböt, majd különböző algoritmusokkal rendezzük az elemeket A véletlenül generált elemek: 1.: 28 2.: 4 3.: 45 4.: 15 5.: 2 6.: 80 7.: 62 8.: 27 9.: 36 10.: 55 11.: 7 12.: 90 13.: 1 14.: 32 15.: 77 16.: 32 17.: 86 18.: 10 19.: 53 20.: 36 1. Egyszerű cserés rendezés <<<<<<<<<<<<<<<<<<<<<<<<<<< Egy tömb elemeit nagyság szerint rendezi távoli elemek cseréivel 1. csere: 1. elem: 28 és 2. elem: 4 cseréje 2. csere: 1. elem: 4 és 5. elem: 2 cseréje 3. csere: 1. elem: 2 és 13. elem: 1 cseréje 4. csere: 2. elem: 28 és 4. elem: 15 cseréje 5. csere: 2. elem: 15 és 5. elem: 4 cseréje 6. csere: 2. elem: 4 és 13. elem: 2 cseréje 7. csere: 3. elem: 45 és 4. elem: 28 cseréje 8. csere: 3. elem: 28 és 5. elem: 15 cseréje 9. csere: 3. elem: 15 és 11. elem: 7 cseréje 10. csere: 3. elem: 7 és 13. elem: 4 cseréje 11. csere: 4. elem: 45 és 5. elem: 28 cseréje 12. csere: 4. elem: 28 és 8. elem: 27 cseréje 13. csere: 4. elem: 27 és 11. elem: 15 cseréje 14. csere: 4. elem: 15 és 13. elem: 7 cseréje 15. csere: 5. elem: 45 és 8. elem: 28 cseréje 16. csere: 5. elem: 28 és 11. elem: 27 cseréje 17. csere: 5. elem: 27 és 13. elem: 15 cseréje 18. csere: 5. elem: 15 és 18. elem: 10 cseréje 19. csere: 6. elem: 80 és 7. elem: 62 cseréje 20. csere: 6. elem: 62 és 8. elem: 45 cseréje 21. csere: 6. elem: 45 és 9. elem: 36 cseréje 22. csere: 6. elem: 36 és 11. elem: 28 cseréje 23. csere: 6. elem: 28 és 13. elem: 27 cseréje 24. csere: 6. elem: 27 és 18. elem: 15 cseréje 25. csere: 7. elem: 80 és 8. elem: 62 cseréje 26. csere: 7. elem: 62 és 9. elem: 45 cseréje 27. csere: 7. elem: 45 és 11. elem: 36 cseréje 28. csere: 7. elem: 36 és 13. elem: 28 cseréje 29. csere: 7. elem: 28 és 18. elem: 27 cseréje 30. csere: 8. elem: 80 és 9. elem: 62 cseréje 31. csere: 8. elem: 62 és 10. elem: 55 cseréje 32. csere: 8. elem: 55 és 11. elem: 45 cseréje 33. csere: 8. elem: 45 és 13. elem: 36 cseréje 34. csere: 8. elem: 36 és 14. elem: 32 cseréje 35. csere: 8. elem: 32 és 18. elem: 28 cseréje 36. csere: 9. elem: 80 és 10. elem: 62 cseréje
Klement András
45.oldal
2016
5. Rendezések 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79.
csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere:
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
9. elem: 62 és 11. elem: 55 cseréje 9. elem: 55 és 13. elem: 45 cseréje 9. elem: 45 és 14. elem: 36 cseréje 9. elem: 36 és 16. elem: 32 cseréje 10. elem: 80 és 11. elem: 62 cseréje 10. elem: 62 és 13. elem: 55 cseréje 10. elem: 55 és 14. elem: 45 cseréje 10. elem: 45 és 16. elem: 36 cseréje 10. elem: 36 és 18. elem: 32 cseréje 11. elem: 80 és 13. elem: 62 cseréje 11. elem: 62 és 14. elem: 55 cseréje 11. elem: 55 és 16. elem: 45 cseréje 11. elem: 45 és 18. elem: 36 cseréje 12. elem: 90 és 13. elem: 80 cseréje 12. elem: 80 és 14. elem: 62 cseréje 12. elem: 62 és 16. elem: 55 cseréje 12. elem: 55 és 18. elem: 45 cseréje 12. elem: 45 és 20. elem: 36 cseréje 13. elem: 90 és 14. elem: 80 cseréje 13. elem: 80 és 15. elem: 77 cseréje 13. elem: 77 és 16. elem: 62 cseréje 13. elem: 62 és 18. elem: 55 cseréje 13. elem: 55 és 19. elem: 53 cseréje 13. elem: 53 és 20. elem: 45 cseréje 14. elem: 90 és 15. elem: 80 cseréje 14. elem: 80 és 16. elem: 77 cseréje 14. elem: 77 és 18. elem: 62 cseréje 14. elem: 62 és 19. elem: 55 cseréje 14. elem: 55 és 20. elem: 53 cseréje 15. elem: 90 és 16. elem: 80 cseréje 15. elem: 80 és 18. elem: 77 cseréje 15. elem: 77 és 19. elem: 62 cseréje 15. elem: 62 és 20. elem: 55 cseréje 16. elem: 90 és 17. elem: 86 cseréje 16. elem: 86 és 18. elem: 80 cseréje 16. elem: 80 és 19. elem: 77 cseréje 16. elem: 77 és 20. elem: 62 cseréje 17. elem: 90 és 18. elem: 86 cseréje 17. elem: 86 és 19. elem: 80 cseréje 17. elem: 80 és 20. elem: 77 cseréje 18. elem: 90 és 19. elem: 86 cseréje 18. elem: 86 és 20. elem: 80 cseréje 19. elem: 90 és 20. elem: 86 cseréje
A nagyság szerint rendezett elemek: 1 2 4 7 10 15 27 28 32 32 36 36 45 53 55 62 77 80 86 90 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 2. Minimum-kiválasztásos rendezés <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Csak minden ciklus végén cseréljük ki az aktuális első elemet a mögötte levő legkisebbel, melynek az indexét követjük nyomon. Az Az Az 1. Az 2. Az Az 3. Az 4.
aktuális minimális elem indexe: 2 aktuális minimális elem indexe: 5 aktuális minimális elem indexe: 13 csere: 1. elem: 28 és 13. elem: 1 cseréje aktuális minimális elem indexe: 5 csere: 2. elem: 4 és 5. elem: 2 cseréje aktuális minimális elem indexe: 4 aktuális minimális elem indexe: 5 csere: 3. elem: 45 és 5. elem: 4 cseréje aktuális minimális elem indexe: 11 csere: 4. elem: 15 és 11. elem: 7 cseréje
Klement András
46.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
Az aktuális minimális elem indexe: 8 Az aktuális minimális elem indexe: 11 Az aktuális minimális elem indexe: 18 5. csere: 5. elem: 45 és 18. elem: 10 cseréje Az aktuális minimális elem indexe: 7 Az aktuális minimális elem indexe: 8 Az aktuális minimális elem indexe: 11 6. csere: 6. elem: 80 és 11. elem: 15 cseréje Az aktuális minimális elem indexe: 8 7. csere: 7. elem: 62 és 8. elem: 27 cseréje Az aktuális minimális elem indexe: 9 Az aktuális minimális elem indexe: 13 8. csere: 8. elem: 62 és 13. elem: 28 cseréje Az aktuális minimális elem indexe: 14 9. csere: 9. elem: 36 és 14. elem: 32 cseréje Az aktuális minimális elem indexe: 14 Az aktuális minimális elem indexe: 16 10. csere: 10. elem: 55 és 16. elem: 32 cseréje Az aktuális minimális elem indexe: 13 Az aktuális minimális elem indexe: 14 11. csere: 11. elem: 80 és 14. elem: 36 cseréje Az aktuális minimális elem indexe: 13 Az aktuális minimális elem indexe: 16 Az aktuális minimális elem indexe: 18 Az aktuális minimális elem indexe: 20 12. csere: 12. elem: 90 és 20. elem: 36 cseréje Az aktuális minimális elem indexe: 16 Az aktuális minimális elem indexe: 18 13. csere: 13. elem: 62 és 18. elem: 45 cseréje Az aktuális minimális elem indexe: 15 Az aktuális minimális elem indexe: 16 Az aktuális minimális elem indexe: 19 14. csere: 14. elem: 80 és 19. elem: 53 cseréje Az aktuális minimális elem indexe: 16 15. csere: 15. elem: 77 és 16. elem: 55 cseréje Az aktuális minimális elem indexe: 18 16. csere: 16. elem: 77 és 18. elem: 62 cseréje Az aktuális minimális elem indexe: 18 17. csere: 17. elem: 86 és 18. elem: 77 cseréje Az aktuális minimális elem indexe: 19 18. csere: 18. elem: 86 és 19. elem: 80 cseréje 19. csere: 19. elem: 86 és 19. elem: 86 cseréje 20. csere: 20. elem: 90 és 20. elem: 90 cseréje A nagyság szerint rendezett elemek: 1 2 4 7 10 15 27 28 32 32 36 36 45 53 55 62 77 80 86 90 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 3. Buborékos rendezés <<<<<<<<<<<<<<<<<<<<< Először az első elemtől az n-1-ikig eljutva minden elemet összehasonlítunk a mögötte levővel, és ha a sorrendjük nem jó, akkor megcseréljük őket. Ezáltal a kisebb elemek a sorozat eleje, a nagyobbak pedig a vége felé mozdulnak el, és a legnagyobb biztosan a végére kerül. A következő ciklusban már csak az n-2-ik elemig kell eljutnunk, végül pedig csak az elsőt kell összehasonlítanunk a másodikkal. 1. 2. 3. 4. 5. 6. 7.
csere: csere: csere: csere: csere: csere: csere:
1. 3. 4. 6. 7. 8. 9.
elem: elem: elem: elem: elem: elem: elem:
Klement András
28 45 45 80 80 80 80
és és és és és és és
2. elem: 4 cseréje 4. elem: 15 cseréje 5. elem: 2 cseréje 7. elem: 62 cseréje 8. elem: 27 cseréje 9. elem: 36 cseréje 10. elem: 55 cseréje
47.oldal
2016
5. Rendezések
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
8. csere: 10. elem: 80 és 11. elem: 7 cseréje 9. csere: 12. elem: 90 és 13. elem: 1 cseréje 10. csere: 13. elem: 90 és 14. elem: 32 cseréje 11. csere: 14. elem: 90 és 15. elem: 77 cseréje 12. csere: 15. elem: 90 és 16. elem: 32 cseréje 13. csere: 16. elem: 90 és 17. elem: 86 cseréje 14. csere: 17. elem: 90 és 18. elem: 10 cseréje 15. csere: 18. elem: 90 és 19. elem: 53 cseréje 16. csere: 19. elem: 90 és 20. elem: 36 cseréje 17. csere: 2. elem: 28 és 3. elem: 15 cseréje 18. csere: 3. elem: 28 és 4. elem: 2 cseréje 19. csere: 6. elem: 62 és 7. elem: 27 cseréje 20. csere: 7. elem: 62 és 8. elem: 36 cseréje 21. csere: 8. elem: 62 és 9. elem: 55 cseréje 22. csere: 9. elem: 62 és 10. elem: 7 cseréje 23. csere: 11. elem: 80 és 12. elem: 1 cseréje 24. csere: 12. elem: 80 és 13. elem: 32 cseréje 25. csere: 13. elem: 80 és 14. elem: 77 cseréje 26. csere: 14. elem: 80 és 15. elem: 32 cseréje 27. csere: 16. elem: 86 és 17. elem: 10 cseréje 28. csere: 17. elem: 86 és 18. elem: 53 cseréje 29. csere: 18. elem: 86 és 19. elem: 36 cseréje 30. csere: 2. elem: 15 és 3. elem: 2 cseréje 31. csere: 5. elem: 45 és 6. elem: 27 cseréje 32. csere: 6. elem: 45 és 7. elem: 36 cseréje 33. csere: 8. elem: 55 és 9. elem: 7 cseréje 34. csere: 10. elem: 62 és 11. elem: 1 cseréje 35. csere: 11. elem: 62 és 12. elem: 32 cseréje 36. csere: 13. elem: 77 és 14. elem: 32 cseréje 37. csere: 15. elem: 80 és 16. elem: 10 cseréje 38. csere: 16. elem: 80 és 17. elem: 53 cseréje 39. csere: 17. elem: 80 és 18. elem: 36 cseréje 40. csere: 1. elem: 4 és 2. elem: 2 cseréje 41. csere: 4. elem: 28 és 5. elem: 27 cseréje 42. csere: 7. elem: 45 és 8. elem: 7 cseréje 43. csere: 9. elem: 55 és 10. elem: 1 cseréje 44. csere: 10. elem: 55 és 11. elem: 32 cseréje 45. csere: 12. elem: 62 és 13. elem: 32 cseréje 46. csere: 14. elem: 77 és 15. elem: 10 cseréje 47. csere: 15. elem: 77 és 16. elem: 53 cseréje 48. csere: 16. elem: 77 és 17. elem: 36 cseréje 49. csere: 6. elem: 36 és 7. elem: 7 cseréje 50. csere: 8. elem: 45 és 9. elem: 1 cseréje 51. csere: 9. elem: 45 és 10. elem: 32 cseréje 52. csere: 11. elem: 55 és 12. elem: 32 cseréje 53. csere: 13. elem: 62 és 14. elem: 10 cseréje 54. csere: 14. elem: 62 és 15. elem: 53 cseréje 55. csere: 15. elem: 62 és 16. elem: 36 cseréje 56. csere: 5. elem: 28 és 6. elem: 7 cseréje 57. csere: 7. elem: 36 és 8. elem: 1 cseréje 58. csere: 8. elem: 36 és 9. elem: 32 cseréje 59. csere: 10. elem: 45 és 11. elem: 32 cseréje 60. csere: 12. elem: 55 és 13. elem: 10 cseréje 61. csere: 13. elem: 55 és 14. elem: 53 cseréje 62. csere: 14. elem: 55 és 15. elem: 36 cseréje 63. csere: 4. elem: 27 és 5. elem: 7 cseréje 64. csere: 6. elem: 28 és 7. elem: 1 cseréje 65. csere: 9. elem: 36 és 10. elem: 32 cseréje 66. csere: 11. elem: 45 és 12. elem: 10 cseréje 67. csere: 13. elem: 53 és 14. elem: 36 cseréje 68. csere: 3. elem: 15 és 4. elem: 7 cseréje 69. csere: 5. elem: 27 és 6. elem: 1 cseréje 70. csere: 10. elem: 36 és 11. elem: 10 cseréje 71. csere: 12. elem: 45 és 13. elem: 36 cseréje 72. csere: 4. elem: 15 és 5. elem: 1 cseréje 73. csere: 9. elem: 32 és 10. elem: 10 cseréje
Klement András
48.oldal
2016
5. Rendezések 74. 75. 76. 77. 78. 79. 80.
csere: csere: csere: csere: csere: csere: csere:
3. 8. 2. 7. 1. 6. 5.
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés elem: elem: elem: elem: elem: elem: elem:
7 és 4. elem: 1 cseréje 32 és 9. elem: 10 cseréje 4 és 3. elem: 1 cseréje 28 és 8. elem: 10 cseréje 2 és 2. elem: 1 cseréje 27 és 7. elem: 10 cseréje 15 és 6. elem: 10 cseréje
A nagyság szerint rendezett elemek: 1 2 4 7 10 15 27 28 32 32 36 36 45 53 55 62 77 80 86 90 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 4. Beillesztéses rendezés <<<<<<<<<<<<<<<<<<<<<<<<< A módszer lényege: - Egyetlen elem mindig rendezett - Ha van egy rendezett részsorozatunk, abba mindig be tudunk illeszteni egy új elemet. 1. csere: 1. elem: 28 és 2. elem: 4 cseréje 2. csere: 3. elem: 45 és 4. elem: 15 cseréje 3. csere: 2. elem: 28 és 3. elem: 15 cseréje 4. csere: 4. elem: 45 és 5. elem: 2 cseréje 5. csere: 3. elem: 28 és 4. elem: 2 cseréje 6. csere: 2. elem: 15 és 3. elem: 2 cseréje 7. csere: 1. elem: 4 és 2. elem: 2 cseréje 8. csere: 6. elem: 80 és 7. elem: 62 cseréje 9. csere: 7. elem: 80 és 8. elem: 27 cseréje 10. csere: 6. elem: 62 és 7. elem: 27 cseréje 11. csere: 5. elem: 45 és 6. elem: 27 cseréje 12. csere: 4. elem: 28 és 5. elem: 27 cseréje 13. csere: 8. elem: 80 és 9. elem: 36 cseréje 14. csere: 7. elem: 62 és 8. elem: 36 cseréje 15. csere: 6. elem: 45 és 7. elem: 36 cseréje 16. csere: 9. elem: 80 és 10. elem: 55 cseréje 17. csere: 8. elem: 62 és 9. elem: 55 cseréje 18. csere: 10. elem: 80 és 11. elem: 7 cseréje 19. csere: 9. elem: 62 és 10. elem: 7 cseréje 20. csere: 8. elem: 55 és 9. elem: 7 cseréje 21. csere: 7. elem: 45 és 8. elem: 7 cseréje 22. csere: 6. elem: 36 és 7. elem: 7 cseréje 23. csere: 5. elem: 28 és 6. elem: 7 cseréje 24. csere: 4. elem: 27 és 5. elem: 7 cseréje 25. csere: 3. elem: 15 és 4. elem: 7 cseréje 26. csere: 12. elem: 90 és 13. elem: 1 cseréje 27. csere: 11. elem: 80 és 12. elem: 1 cseréje 28. csere: 10. elem: 62 és 11. elem: 1 cseréje 29. csere: 9. elem: 55 és 10. elem: 1 cseréje 30. csere: 8. elem: 45 és 9. elem: 1 cseréje 31. csere: 7. elem: 36 és 8. elem: 1 cseréje 32. csere: 6. elem: 28 és 7. elem: 1 cseréje 33. csere: 5. elem: 27 és 6. elem: 1 cseréje 34. csere: 4. elem: 15 és 5. elem: 1 cseréje 35. csere: 3. elem: 7 és 4. elem: 1 cseréje 36. csere: 2. elem: 4 és 3. elem: 1 cseréje 37. csere: 1. elem: 2 és 2. elem: 1 cseréje 38. csere: 13. elem: 90 és 14. elem: 32 cseréje 39. csere: 12. elem: 80 és 13. elem: 32 cseréje 40. csere: 11. elem: 62 és 12. elem: 32 cseréje 41. csere: 10. elem: 55 és 11. elem: 32 cseréje 42. csere: 9. elem: 45 és 10. elem: 32 cseréje 43. csere: 8. elem: 36 és 9. elem: 32 cseréje 44. csere: 14. elem: 90 és 15. elem: 77 cseréje 45. csere: 13. elem: 80 és 14. elem: 77 cseréje 46. csere: 15. elem: 90 és 16. elem: 32 cseréje
Klement András
49.oldal
2016
5. Rendezések 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.
csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere: csere:
Egyszerű cserés-, minimum-kiválasztásos-, buborékos- és beillesztéses rendezés
14. elem: 80 és 15. elem: 32 cseréje 13. elem: 77 és 14. elem: 32 cseréje 12. elem: 62 és 13. elem: 32 cseréje 11. elem: 55 és 12. elem: 32 cseréje 10. elem: 45 és 11. elem: 32 cseréje 9. elem: 36 és 10. elem: 32 cseréje 16. elem: 90 és 17. elem: 86 cseréje 17. elem: 90 és 18. elem: 10 cseréje 16. elem: 86 és 17. elem: 10 cseréje 15. elem: 80 és 16. elem: 10 cseréje 14. elem: 77 és 15. elem: 10 cseréje 13. elem: 62 és 14. elem: 10 cseréje 12. elem: 55 és 13. elem: 10 cseréje 11. elem: 45 és 12. elem: 10 cseréje 10. elem: 36 és 11. elem: 10 cseréje 9. elem: 32 és 10. elem: 10 cseréje 8. elem: 32 és 9. elem: 10 cseréje 7. elem: 28 és 8. elem: 10 cseréje 6. elem: 27 és 7. elem: 10 cseréje 5. elem: 15 és 6. elem: 10 cseréje 18. elem: 90 és 19. elem: 53 cseréje 17. elem: 86 és 18. elem: 53 cseréje 16. elem: 80 és 17. elem: 53 cseréje 15. elem: 77 és 16. elem: 53 cseréje 14. elem: 62 és 15. elem: 53 cseréje 13. elem: 55 és 14. elem: 53 cseréje 19. elem: 90 és 20. elem: 36 cseréje 18. elem: 86 és 19. elem: 36 cseréje 17. elem: 80 és 18. elem: 36 cseréje 16. elem: 77 és 17. elem: 36 cseréje 15. elem: 62 és 16. elem: 36 cseréje 14. elem: 55 és 15. elem: 36 cseréje 13. elem: 53 és 14. elem: 36 cseréje 12. elem: 45 és 13. elem: 36 cseréje
A nagyság szerint rendezett elemek: 1 2 4 7 10 15 27 28 32 32 36 36 45 53 55 62 77 80 86 90 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Klement András
50.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
6. Rendezés két szempont szerint: két- ill. egy lépésben import import import import import import
java.io.BufferedReader; java.io.FileReader; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; java.util.ArrayList;
/** * Két szempont szerinti rendezés * * @author Klemand */ public class BevGyak06 { public static void main(String[] args) throws IOException { System.out.println("Egy iskolai csapat tagjainak vezetéknevét, első keresztnevét,"); System.out.println("születési évét és lakhelyét tároljuk a csapat.txt fájl"); System.out.println("soraiban szóközökkel elválasztva.\n"); System.out.println("A listát születési év és azon belül név szerint akarjuk rendezni."); System.out.println("Először olvassuk be az adatokat a csapat2l tömblistába,"); System.out.println("majd rendezzük a tömblistát először a mellékszempont (név),"); System.out.println("majd második lépésben a főszempont (születési év) szerint."); System.out.println("Az eredményt írassuk ki az eredetihez hasonló formában"); System.out.println("a képernyőre és a csapat2l.txt fájlba is!\n"); System.out.println("Beolvasás a csapat2l tömblistába"); BufferedReader behozatal; behozatal = new BufferedReader(new FileReader("csapat.txt")); // Source menüpont Organize Imports String fsor; String[] daraboltFsor; while ((fsor = behozatal.readLine()) != null) { // Beolvassa a sort és megvizsgálja. Ha nem null, akkor feldolgozza. daraboltFsor = fsor.split(" "); csapat2l.add(new Csapat2lTipus(daraboltFsor)); } behozatal.close(); System.out.println("A fájl beolvasása megtörtént."); int m = csapat2l.size(); System.out.println("A tömblista " + m + " adatsort tartalmaz.\n"); int i, j; for (i = 1; i <= m; i++) { System.out.print(csapat2l.get(i - 1).nev + " "); System.out.println(csapat2l.get(i - 1).szulev + " " + csapat2l.get(i - 1).lakhely); }
Klement András
51.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
System.out.println("\nElőször a mellékszempont szerint bármelyik rendezést választhatjuk."); System.out.println("Alkalmazzuk az egyszerű cserés rendezést!\n"); //Ha az ékezetes betűket a magyar ábécé szerint kívánjuk rendezni, //akkor külön függvényt kell írnunk az összehasonlításra (lásd BevGyak12), //viszont az érettségin nem kell ékezetes betűket kezelni. Csapat2lTipus asztal2l; for (i = 1; i <= m; i++) { for (j = i + 1; j <= m; j++) { if (csapat2l.get(j - 1).nev.compareTo(csapat2l.get(i - 1).nev) < 0) { // A paraméter a nagyobb asztal2l = csapat2l.get(i - 1);// rekordcsere csapat2l.set(i - 1, csapat2l.get(j - 1)); csapat2l.set(j - 1, asztal2l); } } } System.out.println("A csapat2l tömblista a mellékszempont (név) szerinti rendezés után:\n"); for (i = 1; i <= m; i++) { System.out.print(csapat2l.get(i - 1).nev + " "); System.out.println(csapat2l.get(i - 1).szulev + " " + csapat2l.get(i - 1).lakhely); } System.out.println("\nA főszempont szerinti rendezésnél már csak olyan"); System.out.println("algoritmust választhatunk, amelyik nem rontja el a korábbit."); System.out.println("Nem lehetnek benne távoli cserék!"); System.out.println("Alkalmazzuk a buborékos rendezést!\n"); for (i = m - 1; i >= 1; i--) { for (j = 1; j <= i; j++) { if (csapat2l.get(j - 1).szulev > csapat2l.get(j).szulev) { asztal2l = csapat2l.get(j - 1);// rekordcsere csapat2l.set(j - 1, csapat2l.get(j)); csapat2l.set(j, asztal2l); } } } System.out.println("A csapat2l tömblista a főszempont (születési év) szerinti rendezés után:\n"); for (i = 1; i <= m; i++) { System.out.print(csapat2l.get(i - 1).nev + " "); System.out.println(csapat2l.get(i - 1).szulev + " " + csapat2l.get(i - 1).lakhely); } PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("csapat2l.txt")); // Source menüpont Organize Imports for (i = 1; i <= m; i++) { kivitel.print(csapat2l.get(i - 1).nev + " "); kivitel.println(csapat2l.get(i - 1).szulev + " " + csapat2l.get(i - 1).lakhely); } kivitel.close();
System.out.println("\n********************************************************************************\n");
Klement András
52.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
System.out.println("Ezután olvassuk be az adatokat a csapat1l tömblistába,"); System.out.println("majd rendezzük a tömblistát egyetlen lépésben "); System.out.println("születési év és azon belül név szerint is."); System.out.println("Az eredményt írassuk ki az eredetihez hasonló formában"); System.out.println("a képernyőre és a csapat1l.txt fájlba is!\n"); System.out.println("Beolvasás a csapat1l tömblistába"); behozatal = new BufferedReader(new FileReader("csapat.txt")); while ((fsor = behozatal.readLine()) != null) { // Beolvassa a sort és megvizsgálja. Ha nem null, akkor feldolgozza. daraboltFsor = fsor.split(" "); csapat1l.add(new Csapat1lTipus(daraboltFsor)); } behozatal.close(); System.out.println("A fájl beolvasása megtörtént."); m = csapat1l.size(); System.out.println("A tömblista " + m + " adatsort tartalmaz.\n"); for (i = 1; i <= m; i++) { System.out.print(csapat1l.get(i - 1).nev + " "); System.out.println(csapat1l.get(i - 1).szulev + " " + csapat1l.get(i - 1).lakhely); } System.out.println("\nEgyszerű cserés rendezés egy fő- és mellékszempont szerint\n"); Csapat1lTipus asztal1l; for (i = 1; i <= m - 1; i++) { for (j = i + 1; j <= m; j++) { if ((csapat1l.get(j - 1).szulev < csapat1l.get(i - 1).szulev) || (csapat1l.get(j - 1).szulev == csapat1l.get(i - 1).szulev) && (csapat1l.get(j - 1).nev.compareTo(csapat1l.get(i - 1).nev) < 0)) { asztal1l = csapat1l.get(i - 1); csapat1l.set(i - 1, csapat1l.get(j - 1)); csapat1l.set(j - 1, asztal1l); } } } System.out.println("A csapat1l tömblista a főszempont (születési év) szerinti rendezés után:\n"); for (i = 1; i <= m; i++) { System.out.print(csapat1l.get(i - 1).nev + " "); System.out.println(csapat1l.get(i - 1).szulev + " " + csapat1l.get(i - 1).lakhely); } kivitel = new PrintWriter(new FileWriter("csapat1l.txt")); for (i = 1; i <= m; i++) { kivitel.print(csapat1l.get(i - 1).nev + " "); kivitel.println(csapat1l.get(i - 1).szulev + " " + csapat1l.get(i - 1).lakhely); } kivitel.close(); }
Klement András
53.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
static ArrayList
csapat2l = new ArrayList<>(); public static class Csapat2lTipus { private final String nev; private final int szulev; private final String lakhely; public Csapat2lTipus(String[] daraboltFsor) { nev = daraboltFsor[0] + " " + daraboltFsor[1]; szulev = Integer.parseInt(daraboltFsor[2]); lakhely = daraboltFsor[3]; } } static ArrayList csapat1l = new ArrayList<>(); public static class Csapat1lTipus { private final String nev; private final int szulev; private final String lakhely; public Csapat1lTipus(String[] daraboltFsor) { nev = daraboltFsor[0] + " " + daraboltFsor[1]; szulev = Integer.parseInt(daraboltFsor[2]); lakhely = daraboltFsor[3]; } } }
Klement András
54.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
Egy iskolai csapat tagjainak vezetéknevét, első keresztnevét, születési évét és lakhelyét tároljuk a csapat.txt fájl soraiban szóközökkel elválasztva. A listát születési év és azon belül név szerint akarjuk rendezni. Először olvassuk be az adatokat a csapat2l tömblistába, majd rendezzük a tömblistát először a mellékszempont (név), majd második lépésben a főszempont (születési év) szerint. Az eredményt írassuk ki az eredetihez hasonló formában a képernyőre és a csapat2l.txt fájlba is! Beolvasás a csapat2l tömblistába A fájl beolvasása megtörtént. A tömblista 16 adatsort tartalmaz. Kovács Aladár 1999 Őriszentpéter Illés Imre 1998 Körmend Vas Eszter 2002 Szentgotthárd Zala Eszter 2001 Körmend Alföldi Gizella 1999 Egyházasrádóc Badacsonyi Béla 2000 Körmend Arany Írisz 2000 Szombathely Hentes Oszkár 1998 Vasvár Fürge Ferenc 1999 Vasvár Hajós Annamária 2001 Csákánydoroszló Bíró Judit 1998 Körmend Deák Dóra 1999 Körmend Nagy János 1998 Körmend Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Ibolya 2001 Szalafő Először a mellékszempont szerint bármelyik rendezést választhatjuk. Alkalmazzuk az egyszerű cserés rendezést! A csapat2l tömblista a mellékszempont (név) szerinti rendezés után: Alföldi Gizella 1999 Egyházasrádóc Arany Írisz 2000 Szombathely Badacsonyi Béla 2000 Körmend Bíró Judit 1998 Körmend Deák Dóra 1999 Körmend Fürge Ferenc 1999 Vasvár Hajós Annamária 2001 Csákánydoroszló Hentes Oszkár 1998 Vasvár Illés Imre 1998 Körmend Kovács Aladár 1999 Őriszentpéter Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Nagy János 1998 Körmend Vas Eszter 2002 Szentgotthárd Zala Eszter 2001 Körmend Zala Ibolya 2001 Szalafő A főszempont szerinti rendezésnél már csak olyan algoritmust választhatunk, amelyik nem rontja el a korábbit. Nem lehetnek benne távoli cserék! Alkalmazzuk a buborékos rendezést! A csapat2l tömblista a főszempont (születési év) szerinti rendezés után: Bíró Judit 1998 Körmend Hentes Oszkár 1998 Vasvár Illés Imre 1998 Körmend Nagy János 1998 Körmend Alföldi Gizella 1999 Egyházasrádóc
Klement András
55.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
Deák Dóra 1999 Körmend Fürge Ferenc 1999 Vasvár Kovács Aladár 1999 Őriszentpéter Arany Írisz 2000 Szombathely Badacsonyi Béla 2000 Körmend Hajós Annamária 2001 Csákánydoroszló Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Eszter 2001 Körmend Zala Ibolya 2001 Szalafő Vas Eszter 2002 Szentgotthárd ******************************************************************************** Ezután olvassuk be az adatokat a csapat1l tömblistába, majd rendezzük a tömblistát egyetlen lépésben születési év és azon belül név szerint is. Az eredményt írassuk ki az eredetihez hasonló formában a képernyőre és a csapat1l.txt fájlba is! Beolvasás a csapat1l tömblistába A fájl beolvasása megtörtént. A tömblista 16 adatsort tartalmaz. Kovács Aladár 1999 Őriszentpéter Illés Imre 1998 Körmend Vas Eszter 2002 Szentgotthárd Zala Eszter 2001 Körmend Alföldi Gizella 1999 Egyházasrádóc Badacsonyi Béla 2000 Körmend Arany Írisz 2000 Szombathely Hentes Oszkár 1998 Vasvár Fürge Ferenc 1999 Vasvár Hajós Annamária 2001 Csákánydoroszló Bíró Judit 1998 Körmend Deák Dóra 1999 Körmend Nagy János 1998 Körmend Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Ibolya 2001 Szalafő Egyszerű cserés rendezés egy fő- és mellékszempont szerint A csapat1l tömblista a főszempont (születési év) szerinti rendezés után: Bíró Judit 1998 Körmend Hentes Oszkár 1998 Vasvár Illés Imre 1998 Körmend Nagy János 1998 Körmend Alföldi Gizella 1999 Egyházasrádóc Deák Dóra 1999 Körmend Fürge Ferenc 1999 Vasvár Kovács Aladár 1999 Őriszentpéter Arany Írisz 2000 Szombathely Badacsonyi Béla 2000 Körmend Hajós Annamária 2001 Csákánydoroszló Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Eszter 2001 Körmend Zala Ibolya 2001 Szalafő Vas Eszter 2002 Szentgotthárd
Klement András
56.oldal
2016
6. Rendezés két szempont szerint
Két-, ill. egy lépésben
csapat.txt: Kovács Aladár 1999 Őriszentpéter Illés Imre 1998 Körmend Vas Eszter 2002 Szentgotthárd Zala Eszter 2001 Körmend Alföldi Gizella 1999 Egyházasrádóc Badacsonyi Béla 2000 Körmend Arany Írisz 2000 Szombathely Hentes Oszkár 1998 Vasvár Fürge Ferenc 1999 Vasvár Hajós Annamária 2001 Csákánydoroszló Bíró Judit 1998 Körmend Deák Dóra 1999 Körmend Nagy János 1998 Körmend Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Ibolya 2001 Szalafő csapat2l.txt: Bíró Judit 1998 Körmend Hentes Oszkár 1998 Vasvár Illés Imre 1998 Körmend Nagy János 1998 Körmend Alföldi Gizella 1999 Egyházasrádóc Deák Dóra 1999 Körmend Fürge Ferenc 1999 Vasvár Kovács Aladár 1999 Őriszentpéter Arany Írisz 2000 Szombathely Badacsonyi Béla 2000 Körmend Hajós Annamária 2001 Csákánydoroszló Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Eszter 2001 Körmend Zala Ibolya 2001 Szalafő Vas Eszter 2002 Szentgotthárd csapat1l.txt: Bíró Judit 1998 Körmend Hentes Oszkár 1998 Vasvár Illés Imre 1998 Körmend Nagy János 1998 Körmend Alföldi Gizella 1999 Egyházasrádóc Deák Dóra 1999 Körmend Fürge Ferenc 1999 Vasvár Kovács Aladár 1999 Őriszentpéter Arany Írisz 2000 Szombathely Badacsonyi Béla 2000 Körmend Hajós Annamária 2001 Csákánydoroszló Mázsa Lenke 2001 Ják Mázsa Nóra 2001 Ják Zala Eszter 2001 Körmend Zala Ibolya 2001 Szalafő Vas Eszter 2002 Szentgotthárd
Klement András
57.oldal
2016
7. A leghosszabb adott tulajdonságú részsorozat keresése
Prímsorozat véletlen sorozatban
7. A leghosszabb adott tulajdonságú részsorozat keresése: prímsorozat véletlen sorozatban public class BevGyak07 { /** * A leghosszabb adott tulajdonságú részsorozat keresése: * prímsorozat véletlen sorozatban * * @author Klemand */ public static void main(String[] args) { System.out.println("500 db 1 és 100 közötti véletlen egész szám előállítása\n"); int m = 500; int n = 100; int[] X = new int[m]; int i; for (i = 1; i <= m; i++) { X[i - 1] = (int) (Math.random() * n + 1); } for (i = 1; i <= m; i++) { System.out.printf("%3d", X[i - 1]); if(T(X[i - 1])){ System.out.print("*\t"); }else{ System.out.print(" \t"); } if (i % 10 == 0) { System.out.println(); } if (i % 100 == 0) { System.out.println(); } } System.out.println(); int int int int
aktTkezdet = -1; // irreális kezdőérték aktThossz = 0; maxTkezdet = -1; // irreális kezdőérték maxThossz = 0;
for (i = 1; i <= m; i++) { if (T(X[i - 1])) { if (aktTkezdet == -1) { aktTkezdet = i; } aktThossz++; if (aktThossz > maxThossz) { maxTkezdet = aktTkezdet; maxThossz = aktThossz; } } else { aktTkezdet = -1; aktThossz = 0; } }
Klement András
58.oldal
2016
7. A leghosszabb adott tulajdonságú részsorozat keresése
Prímsorozat véletlen sorozatban
if (maxTkezdet > -1) { System.out.println("A leghosszabb prímsorozat kezdete: " + maxTkezdet + ". elem: " + X[maxTkezdet - 1]); System.out.println("Hossza: " + maxThossz); System.out.print("Az elemek: "); for (i = maxTkezdet; i <= maxTkezdet + maxThossz - 1; i++) { System.out.print(X[i - 1] + "\t"); if ((i - maxTkezdet + 1) % 10 == 0) { System.out.println(); } } } else { System.out.println("A sorozatban nincs prímszám."); } System.out.println(); } // Eljárások, függvények public static boolean T(int p) { // T: prím-e switch (p) { case 1: return false; case 2: return true; default: 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); } } }
Klement András
59.oldal
2016
7. A leghosszabb adott tulajdonságú részsorozat keresése
Prímsorozat véletlen sorozatban
500 db 1 és 100 közötti véletlen egész szám előállítása 46 78 50 86 49 97* 66 60 45 58
88 15 64 60 76 46 86 98 27 86
38 11* 34 20 19* 52 39 4 100 91
17* 44 44 27 20 7* 30 89* 78 9
12 79* 23* 13* 18 22 38 41* 39 15
46 2* 73* 81 71* 58 77 45 94 38
95 1 47* 40 1 8 28 60 38 50
47* 42 75 84 1 71* 43* 99 3* 86
2* 54 54 70 43* 90 14 86 69 2*
88 21 12 11* 51 93 21 72 75 50
86 32 21 9 67* 24 32 11* 17* 56
68 30 41* 10 24 95 60 47* 85 18
11* 41* 18 8 91 64 63 67* 69 88
92 49 5* 87 41* 15 81 76 37* 20
69 65 38 3* 4 48 68 44 9 26
47* 8 10 69 99 27 84 60 48 74
67* 21 82 50 10 49 70 15 86 53*
61* 14 33 62 33 27 29* 72 53* 35
88 9 89* 90 100 70 71* 71* 3* 33
93 67* 60 20 49 80 43* 47* 23* 67*
19* 22 47* 69 52 79* 97* 37* 41* 100
17* 63 21 49 30 46 55 91 42 14
4 28 72 4 29* 56 94 83* 79* 41*
52 50 36 83* 59* 80 33 71* 18 73*
83* 68 4 15 4 37* 57 19* 9 87
72 24 93 75 69 83* 86 50 78 2*
91 32 49 80 70 97* 74 56 14 38
2* 32 89* 31* 65 20 43* 53* 95 19*
59* 19* 38 79* 54 30 59* 43* 21 38
3* 39 32 33 65 75 47* 74 25 68
56 4 45 61* 61* 5* 65 44 35 74
89* 18 35 57 68 62 73* 96 69 86
58 35 35 54 72 64 82 13* 42 88
25 61* 27 34 90 22 53* 64 58 76
88 65 81 85 5* 92 32 41* 35 47*
35 87 64 68 71* 7* 22 11* 76 3*
81 98 17* 46 94 16 37* 28 70 33
85 35 24 53* 97* 62 26 26 84 29*
86 94 83* 87 61* 19* 3* 43* 43* 51
7* 52 51 66 50 43* 32 56 34 96
17* 36 99 56 11* 34 74 61* 70 88
42 18 72 13* 100 28 64 47* 52 1
64 41* 28 31* 1 19* 65 8 25 85
48 78 6 22 82 21 15 97* 94 7*
67* 28 2* 65 87 29* 70 45 26 97*
97* 39 56 64 17* 36 8 18 24 35
83* 36 48 85 96 42 95 100 94 60
50 98 41* 57 18 31* 76 23* 84 95
89* 96 55 78 49 91 48 94 96 77
81 1 78 80 21 11* 55 4 1 47*
A leghosszabb prímsorozat kezdete: 168. elem: 29 Hossza: 6 Az elemek: 29 71 43 11 47 67
Klement András
60.oldal
2016
8. Ismétlődés nélküli véletlen sorozat előállítása
Lottóhúzás
8. Ismétlődés nélküli véletlen sorozat előállítása: lottóhúzás import java.util.Calendar; import java.util.Scanner; /** * Ismétlődés nélküli véletlen sorozat előállítása * Lottóhúzás * * @author Klemand */ public class BevGyak08 { public static void main(String[] args) { System.out.println("1) Ötöslottó\n"); Scanner sc = new Scanner(System.in); System.out.println("Figyelmeztetés: 14 év alattiak nem lottózhatnak!"); System.out.print("Kérem a születési dátumát 1982.08.12 alakban: "); String szDat = sc.nextLine(); int szEv = Integer.parseInt(szDat.substring(0, 4)); int szHo = Integer.parseInt(szDat.substring(5, 7)); int szNap = Integer.parseInt(szDat.substring(8)); Calendar cal = Calendar.getInstance(); int aktEv = cal.get(Calendar.YEAR); int aktHo = cal.get(Calendar.MONTH) + 1; // január: 0 int aktNap = cal.get(Calendar.DAY_OF_MONTH); int kor; if (szHo < aktHo) { kor = aktEv - szEv; } else if (szHo == aktHo && szNap <= aktNap) { kor = aktEv - szEv; } else { kor = aktEv - szEv - 1; } System.out.println("A mai dátum: " + aktEv+"." + aktHo+"." + aktNap); System.out.println("Az Ön életkora a mai napon: " + kor + " év."); if (kor < 14) { System.out.println("Találkozzunk " + (14 - kor) + " év múlva!\n"); } else if (kor > 80) { System.out.println("Ilyen korban már kerülni kell a túlzott izgalmakat!\n"); } else { System.out.println("Sok szerencsét a játékhoz!\n"); System.out.println("Tippelés:\n"); int[] tippek = new int[5]; int i, n; for (i = 1; i <= 5; i++) { System.out.print(i + ". tipp: "); tippek[i - 1] = sc.nextInt(); } System.out.println();
Klement András
61.oldal
2016
8. Ismétlődés nélküli véletlen sorozat előállítása
Lottóhúzás
System.out.println("Számhúzás:"); System.out.println("5 db 1 és 90 közötti különböző véletlen egész szám előállítása\n"); // Szelvénytörlés boolean[] szelveny = new boolean[90]; for (i = 1; i <= 90; i++) { szelveny[i - 1] = false; } // Számhúzás int[] kihuzott = new int[5]; i = 0; do { n = (int) (90 * Math.random()) + 1; // 1 és 90 közötti véletlen szám if (szelveny[n - 1] == false) { // még nem volt ilyen szám szelveny[n - 1] = true; // ez többet nem húzható ki! i++; // ciklusváltozó növelése kihuzott[i - 1] = n; } } while (i < 5); System.out.println("A lottósorsolás megtörtént."); System.out.println("A nyertes számok nagyság szerint:"); int db = 0; for (i = 1; i <= 90; i++) { if (szelveny[i - 1] == true) { db++; System.out.print(i); if (db < 5) { System.out.print(", "); } } } System.out.println("\n"); System.out.println("Értékelés:\n"); int[] nyertesek = new int[5]; db = 0; int aktTipp; for (i = 1; i <= 5; i++) { aktTipp = tippek[i - 1]; if (szelveny[aktTipp - 1]) { db++; nyertesek[db - 1] = aktTipp; } } System.out.println("A találatok száma: " + db); System.out.print("A nyertes tippek: "); for (i = 1; i <= db; i++) { System.out.print(nyertesek[i - 1]); if (i < db) { System.out.print(", "); } } System.out.println("\n"); }
Klement András
62.oldal
2016
8. Ismétlődés nélküli véletlen sorozat előállítása
Lottóhúzás
System.out.println("2) A lottóhúzás általánosítása:"); System.out.println("k db a és f közötti különböző véletlen egész szám előállítása\n"); int a, f, k, i, n; System.out.print("Kérek egy egész számot, az alsó határ értékét: a = "); a = sc.nextInt(); System.out.print("Kérek egy egész számot, a felső határ értékét: f = "); f = sc.nextInt(); System.out.print("Kérem a darabszámot : k = "); k = sc.nextInt(); System.out.println(); if (k > f - a + 1) { System.out.println("Ennyi különböző egész szám"); System.out.println("nem állítható elő a megadott határok között."); } else { // Táblatörlés boolean[] tabla = new boolean[f - a + 1]; for (i = 1; i <= f - a + 1; i++) { tabla[i - 1] = false; } // A véletlen számok előállítása int[] veletlen = new int[k]; i = 0; do { n = (int) ((f - a + 1) * Math.random()) + 1; // 1 és f - a + 1 közötti véletlen szám if (!tabla[n - 1]) { // még nem volt ilyen szám tabla[n - 1] = true; // ez többet nem húzható ki! i++; // ciklusváltozó növelése veletlen[i - 1] = n; } } while (i < k); System.out.println("Az előállítás megtörtént."); System.out.println("Az előállított véletlen számok nagyság szerint:"); int db = 0; for (i = 1; i <= f - a + 1; i++) { if (tabla[i - 1]) { db++; System.out.print(i + a - 1); if (db < k) { System.out.print(", "); } if (db % 10 == 0) { System.out.println(); } } } System.out.println(); } sc.close(); } }
Klement András
63.oldal
2016
8. Ismétlődés nélküli véletlen sorozat előállítása
Lottóhúzás
1) Ötöslottó Figyelmeztetés: 14 év alattiak nem lottózhatnak! Kérem a születési dátumát 1982.08.12 alakban: 2004.08.31 A mai dátum: 2016.11.10 Az Ön életkora a mai napon: 12 év. Találkozzunk 2 év múlva! 2) A lottóhúzás általánosítása: k db a és f közötti különböző véletlen egész szám előállítása Kérek egy egész számot, az alsó határ értékét: a = -3 Kérek egy egész számot, a felső határ értékét: f = 4 Kérem a darabszámot : k = 10 Ennyi különböző egész szám nem állítható elő a megadott határok között.
Másik futási eredmény: 1) Ötöslottó Figyelmeztetés: 14 év alattiak nem lottózhatnak! Kérem a születési dátumát 1982.08.12 alakban: 1986.11.10 A mai dátum: 2016.11.10 Az Ön életkora a mai napon: 30 év. Sok szerencsét a játékhoz! Tippelés: 1. 2. 3. 4. 5.
tipp: tipp: tipp: tipp: tipp:
22 5 88 76 14
Számhúzás: 5 db 1 és 90 közötti különböző véletlen egész szám előállítása A lottósorsolás megtörtént. A nyertes számok nagyság szerint: 21, 28, 51, 74, 78 Értékelés: A találatok száma: 0 A nyertes tippek: 2) A lottóhúzás általánosítása: k db a és f közötti különböző véletlen egész szám előállítása Kérek egy egész számot, az alsó határ értékét: a = -5 Kérek egy egész számot, a felső határ értékét: f = 4 Kérem a darabszámot : k = 8 Az előállítás megtörtént. Az előállított véletlen számok nagyság szerint: -5, -4, -3, -2, -1, 0, 2, 3
Klement András
64.oldal
2016
9. Statisztikai minta gyakorisági táblázata
Érték szerinti indexeléssel, ill. tömblistával
9. Statisztikai minta gyakorisági táblázata: érték szerinti indexeléssel, ill. tömblistával import import import import
java.io.BufferedReader; java.io.FileReader; java.io.IOException; java.util.ArrayList;
/** * Statisztikai minta gyakorisági táblázata: * érték szerinti indexeléssel, ill. tömblistával * * @author Klemand */ public class BevGyak09 { public static void main(String[] args) throws IOException { System.out.println("1) Kvantitatív minta gyakorisági táblázata érték szerinti indexeléssel\n"); System.out.println("A januar.txt fájl sorai a januári napi átlaghőmérsékleteket tartalmazzák."); System.out.println("Az értékekről tudjuk, hogy -10 és 10 Celsius fok között vannak."); System.out.println("Készítsünk gyakorisági táblázatot!\n"); BufferedReader behozatal1; // Source menüpont Organize Imports behozatal1 = new BufferedReader(new FileReader("januar.txt")); int k = 31; int[] januar = new int[k]; // Tudom, hogy 31 nap van januárban int i; for (i = 1; i <= k; i++) { januar[i - 1] = Integer.parseInt(behozatal1.readLine()); } behozatal1.close();
int m = -10; int n = 10; // Először az [m;n] intervallumot átkonvertáljuk a [0 ; n-m] // intervallumra, és készítünk egy egész típusú tömböt, // melyben az indexnek megfelelő szám gyakoriságát tároljuk. int[] gyaktomb = new int[n - m + 1]; for (i = 0; i <= n - m; i++) { gyaktomb[i] = 0; // először lenullázzuk } for (i = 1; i <= k; i++) { gyaktomb[januar[i - 1] - m]++; // aztán feltöltjük, ügyelve az eltolásra }
Klement András
65.oldal
2016
9. Statisztikai minta gyakorisági táblázata
Érték szerinti indexeléssel, ill. tömblistával
// A gyakorisági táblázat elkészítése: int[][] gyaktabla1 = new int[k][2]; int db = 0; for (i = 1; i <= n - m + 1; i++) { if (gyaktomb[i - 1] > 0) { db++; gyaktabla1[db - 1][0] = i - 1 + m; // A db-edik tulajdonságérték visszakonvertálva // gyaktabla1[db - 1][1] = gyaktomb[i - 1]; // A db-edik tulajdonságérték gyakorisága } } // A gyakorisági táblázat kiíratása: System.out.println("A hőmérsékletek gyakorisági táblázata:\n"); for (i = 1; i <= db; i++) { System.out.printf("Hőmérséklet: %3d", gyaktabla1[i - 1][0]); System.out.println(" Celsius fok, gyakorisága: " + gyaktabla1[i - 1][1]); } System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); System.out.println("2) Tetszőleges minta gyakorisági táblázata tömblistával\n"); System.out.println("Az osztály.txt fájl sorai szóközökkel elválasztva egy osztály tanulóinak "); System.out.println("vezetéknevét, keresztnevét és lakhelyét tartalmazza."); System.out.println("Készítsünk gyakorisági táblázatot a lakhelyekről!\n"); BufferedReader behozatal2; behozatal2 = new BufferedReader(new FileReader("osztaly.txt")); // Nem ismerjük előre az osztálylétszámot String fsor; String[] daraboltFsor; while ((fsor = behozatal2.readLine()) != null) { // Beolvassa a sort és megvizsgálja. Ha nem null, akkor feldolgozza. daraboltFsor = fsor.split(" "); osztaly.add(new OsztalyTipus(daraboltFsor)); } behozatal2.close(); int j; for (i = 1; i <= osztaly.size(); i++) { String aktLakhely = osztaly.get(i - 1).lakhely; j = 1; while (j <= gyaktabla2.size() && !(aktLakhely.equals(gyaktabla2.get(j - 1).lakhely))) { j++; } if (j <= gyaktabla2.size()) { gyaktabla2.get(j - 1).db++; } else { gyaktabla2.add(new Gyaktabla2Tipus(aktLakhely, 1)); } }
Klement András
66.oldal
2016
9. Statisztikai minta gyakorisági táblázata
Érték szerinti indexeléssel, ill. tömblistával
// A gyakorisági táblázat kiíratása: System.out.println("A lakhelyek gyakorisági táblázata:\n"); for (i = 1; i <= gyaktabla2.size(); i++) { System.out.print("Lakhely: " + gyaktabla2.get(i - 1).lakhely); System.out.println(", gyakorisága: " + gyaktabla2.get(i - 1).db); } } static ArrayList osztaly = new ArrayList<>(); public static class OsztalyTipus { //A nevekre nincs szükségünk, azokat nem tároljuk private final String lakhely; public OsztalyTipus(String[] daraboltFsor) { lakhely = daraboltFsor[2]; } } // A gyaktabla konstruktora: static ArrayList gyaktabla2 = new ArrayList<>(); public static class Gyaktabla2Tipus { private final String lakhely; // végleges érték private int db; // változó érték public Gyaktabla2Tipus(String lakhelyBe, int dbBe) { lakhely = lakhelyBe; db = dbBe; } } }
Klement András
67.oldal
2016
9. Statisztikai minta gyakorisági táblázata
Érték szerinti indexeléssel, ill. tömblistával
1) Kvantitatív minta gyakorisági táblázata érték szerinti indexeléssel A januar.txt fájl sorai a januári napi átlaghőmérsékleteket tartalmazzák. Az értékekről tudjuk, hogy -10 és 10 Celsius fok között vannak. Készítsünk gyakorisági táblázatot! A hőmérsékletek gyakorisági táblázata: Hőmérséklet: Hőmérséklet: Hőmérséklet: Hőmérséklet: Hőmérséklet: Hőmérséklet: Hőmérséklet: Hőmérséklet:
-4 -3 -2 0 1 2 3 4
Celsius Celsius Celsius Celsius Celsius Celsius Celsius Celsius
fok, fok, fok, fok, fok, fok, fok, fok,
gyakorisága: gyakorisága: gyakorisága: gyakorisága: gyakorisága: gyakorisága: gyakorisága: gyakorisága:
2 3 5 4 8 4 4 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2) Tetszőleges minta gyakorisági táblázata tömblistával Az osztály.txt fájl sorai szóközökkel elválasztva egy osztály tanulóinak vezetéknevét, keresztnevét és lakhelyét tartalmazza. Készítsünk gyakorisági táblázatot a lakhelyekről! A lakhelyek gyakorisági táblázata: Lakhely: Lakhely: Lakhely: Lakhely: Lakhely: Lakhely: Lakhely:
Körmend, gyakorisága: 11 Ják, gyakorisága: 4 Csákánydoroszló, gyakorisága: 3 Egyházasrádóc, gyakorisága: 2 Nádasd, gyakorisága: 3 Magyarszecsőd, gyakorisága: 1 Szentgotthárd, gyakorisága: 1
Klement András
68.oldal
2016
9. Statisztikai minta gyakorisági táblázata
Érték szerinti indexeléssel, ill. tömblistával
januar.txt: -3 -2 0 0 2 2 3 1 -2 -2 -3 -4 -4 -3 -2 1 1 1 3 3 4 2 1 0 1 2 1 3 1 0 -2 osztaly.txt: Antal András Körmend Barna Béla Ják Ceglédi Cecília Körmend Csontos Csilla Körmend Dénes Dezső Csákánydoroszló Elekes Endre Körmend Fazekas Ferenc Egyházasrádóc Gárdonyi Gréta Csákánydoroszló Hideg Hedvig Körmend Igéző Ibolya Ják Jó Jenő Egyházasrádóc Kovács Kristóf Körmend Lakatos Levente Ják Molnár Mihály Körmend Németh Nóra Csákánydoroszló Olasz Olga Nádasd Postás Péter Nádasd Rigó Róbert Körmend Sebes Sarolta Ják Szabó Szilveszter Magyarszecsőd Tábori Tibor Szentgotthárd Udvaros Ulászló Körmend Vajda Viktor Nádasd Zala Zoltán Körmend Zsiga Zsolt Körmend
Klement András
69.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
10. Számelméleti feladatok: euklidészi algoritmus, prímfelbontás, osztók száma import import import import
java.io.FileWriter; java.io.IOException; java.io.PrintWriter; java.util.Scanner;
/** * Számelméleti feladatok: euklidészi algoritmus, prímfelbontás, osztók száma * * @author Klemand */ public class BevGyak10 { public static void main(String[] args) throws IOException { System.out.println("Számelméleti feladatok\n"); System.out.println("1) Euklidészi algoritmus\n"); System.out.println("Két megadott egész szám"); System.out.println("legnagyobb közös osztójának"); System.out.println("és legkisebb közös többszörösének meghatározása"); System.out.println("az Euklidészi algoritmus segítségével"); System.out.println(""); Scanner sc = new Scanner(System.in); System.out.print("Kérek egy 1 és 100 000 közötti egész számot! a = "); long a = sc.nextLong(); System.out.println(""); System.out.print("Kérek egy másik 1 és 100 000 közötti egész számot! b = "); long b = sc.nextLong(); System.out.println(""); System.out.println("A beírt számok: a = " + a + " és b = " + b); long n = Math.max(a, b); // nagyobbik szám long k = Math.min(a, b); // kisebbik szám long r; do { r = n % k; n = k; k = r; } while (r > 0); long lnko = n; // az utolsó el nem tűnő maradék a-ba került long lkkt = a * b / lnko; System.out.println(""); System.out.println(a + " és " + b + " legnagyobb közös osztója " + lnko); System.out.println(a + " és " + b + " legkisebb közös többszöröse " + lkkt);
System.out.println("\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); System.out.println("2) Prímtényezős felbontás\n"); System.out.println("Megadott határok közötti pozitív egész számok"); System.out.println("prímtényezős felbontásának kiíratása a primfelbontas.txt fájlba\n");
Klement András
70.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
System.out.print("Kérem az alsó határ értékét, egy 2 és 100 000 közötti egész számot: "); int al = sc.nextInt(); System.out.println(""); System.out.print("Kérem a felső határ értékét, egy 2 és 100 000 közötti egész számot: "); int fel = sc.nextInt(); System.out.println(""); sc.close(); System.out.println("Az alsó határ: " + al + ", a felső határ: " + fel + "\n"); int[][] primfelbontas = new int[fel][20]; int[] tenyezokSzama = new int[fel]; int i, j, akt, tdb; for (i = al; i <= fel; i++) { akt = i; // A prímtényezőket kétdimenziós tömbbe tesszük j = 2; tdb = 0; while (akt > 1) { if (akt % j == 0) { tdb = tdb + 1; primfelbontas[i - 1][tdb - 1] = j; akt = akt / j; } else { j = j + 1; } } tenyezokSzama[i - 1] = tdb; } PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("primfelbontas.txt")); for (i = al; i <= fel; i++) { kivitel.print(i + " = "); for (j = 1; j < tenyezokSzama[i - 1]; j++) { kivitel.print(primfelbontas[i - 1][j - 1] + "*"); } kivitel.print(primfelbontas[i - 1][tenyezokSzama[i - 1] - 1]); kivitel.println(""); } System.out.println("A prímtényezős felbontás fájlba írása befejeződött."); kivitel.close(); System.out.println("Az utolsó sorok: "); for (i = fel; ((i >= 2) && (i >= fel - 5)); i--) { System.out.print(i + " = "); for (j = 1; j < tenyezokSzama[i - 1]; j++) { System.out.print(primfelbontas[i - 1][j - 1] + "*"); } System.out.print(primfelbontas[i - 1][tenyezokSzama[i - 1] - 1]); System.out.println(""); }
System.out.println("\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
Klement András
71.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
System.out.println("3) Prímtényezős felbontás hatványalakban és az osztók száma\n"); System.out.println("Az előbb megadott határok közötti pozitív egész számok"); System.out.println("prímtényezős felbontásának megadása hatványalakban,"); System.out.println("az osztóik számának meghatározása,"); System.out.println("és kiíratásuk az osztokszama.txt fájlba\n"); int[] osztokSzama = new int[fel]; kivitel = new PrintWriter(new FileWriter("osztokszama.txt")); int pt; for (i = al; i <= fel; i++) { kivitel.print(i + " = "); j = 1; osztokSzama[i - 1] = 1; while (j <= tenyezokSzama[i - 1]) { pt = primfelbontas[i - 1][j - 1]; int veg = tenyezokSzama[i - 1]; int kit = 1; kivitel.print(primfelbontas[i - 1][j - 1]); while ((j <= tenyezokSzama[i - 1]) && (primfelbontas[i - 1][j - 1]) == pt) { j++; kit++; } osztokSzama[i - 1] = osztokSzama[i - 1] * kit; if (j > veg) { if (kit > 2) { kivitel.print("^" + (kit - 1)); } else { } } else if (kit > 2) { kivitel.print("^" + (kit - 1) + "*"); } else { kivitel.print("*"); } } kivitel.println(", osztóinak száma: " + osztokSzama[i - 1]); } System.out.println("A kiíratás befejeződött."); kivitel.close();
Klement András
72.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
System.out.println("Az utolsó sorok: "); for (i = fel; ((i >= 2) && (i >= fel - 5)); i--) { System.out.print(i + " = "); j = 1; osztokSzama[i - 1] = 1; while (j <= tenyezokSzama[i - 1]) { pt = primfelbontas[i - 1][j - 1]; int veg = tenyezokSzama[i - 1]; int kit = 1; System.out.print(primfelbontas[i - 1][j - 1]); while ((j <= tenyezokSzama[i - 1]) && (primfelbontas[i - 1][j - 1]) == pt) { j++; kit++; } osztokSzama[i - 1] = osztokSzama[i - 1] * kit; if (j > veg) { if (kit > 2) { System.out.print("^" + (kit - 1)); } else { } } else if (kit > 2) { System.out.print("^" + (kit - 1) + "*"); } else { System.out.print("*"); } } System.out.println(", osztóinak száma: " + osztokSzama[i - 1]); }
System.out.println("\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); System.out.println("4) A prímek és a legösszetettebb számok kiválogatása\n"); System.out.println("Az előbb megadott határok közötti prímszámok"); System.out.println("és a legtöbb osztóval rendelkező számok meghatározása\n"); System.out.println("A prímszámok:"); int pdb = 0; for (i = al; i <= fel; i++) { if (osztokSzama[i - 1] == 2) { System.out.print(i + "\t"); pdb++; if (pdb % 10 == 0) { System.out.println(""); } if (pdb % 100 == 0) { System.out.println(""); } } } System.out.println("\n");
Klement András
73.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
int max = 1; for (i = al; i <= fel; i++) { if (osztokSzama[i - 1] > osztokSzama[max - 1]) { max = i; } } System.out.println("Az osztók számának maximuma az adott intervallumbam: " + osztokSzama[max - 1]); System.out.println(""); System.out.println("A(z) " + osztokSzama[max - 1] + " db osztóval rendelkező számok: "); // Kiválogatás kiíratással for (i = al; i <= fel; i++) { if (osztokSzama[i - 1] == osztokSzama[max - 1]) { System.out.print(i + "\t"); } } System.out.println("\n"); } }
Klement András
74.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
Számelméleti feladatok 1) Euklidészi algoritmus Két megadott egész szám legnagyobb közös osztójának és legkisebb közös többszörösének meghatározása az Euklidészi algoritmus segítségével Kérek egy 1 és 100 000 közötti egész számot! a = 98764 Kérek egy másik 1 és 100 000 közötti egész számot! b = 96872 A beírt számok: a = 98764 és b = 96872 98764 és 96872 legnagyobb közös osztója 4 98764 és 96872 legkisebb közös többszöröse 2391866552 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2) Prímtényezős felbontás Megadott határok közötti pozitív egész számok prímtényezős felbontásának kiíratása a primfelbontas.txt fájlba Kérem az alsó határ értékét, egy 2 és 100 000 közötti egész számot: 1900 Kérem a felső határ értékét, egy 2 és 100 000 közötti egész számot: 2100 Az alsó határ: 1900, a felső határ: 2100 A prímtényezős felbontás fájlba írása befejeződött. Az utolsó sorok: 2100 = 2*2*3*5*5*7 2099 = 2099 2098 = 2*1049 2097 = 3*3*233 2096 = 2*2*2*2*131 2095 = 5*419 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3) Prímtényezős felbontás hatványalakban és az osztók száma Az előbb megadott határok közötti pozitív egész számok prímtényezős felbontásának megadása hatványalakban, az osztóik számának meghatározása, és kiíratásuk az osztokszama.txt fájlba A kiíratás befejeződött. Az utolsó sorok: 2100 = 2^2*3*5^2*7, osztóinak száma: 36 2099 = 2099, osztóinak száma: 2 2098 = 2*1049, osztóinak száma: 4 2097 = 3^2*233, osztóinak száma: 6 2096 = 2^4*131, osztóinak száma: 10 2095 = 5*419, osztóinak száma: 4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Klement András
75.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
4) A prímek és a legösszetettebb számok kiválogatása Az előbb megadott határok közötti prímszámok és a legtöbb osztóval rendelkező számok meghatározása A prímszámok: 1901 1907 1993 1997 2063 2069
1913 1999 2081
1931 2003 2083
1933 2011 2087
1949 2017 2089
1951 2027 2099
1973 2029
1979 2039
1987 2053
Az osztók számának maximuma az adott intervallumbam: 36 A(z) 36 db osztóval rendelkező számok: 1980 2016 2100
Klement András
76.oldal
2016
10. Számelméleti feladatok
Euklidészi algoritmus, prímfelbontás, osztók száma
primfelbontas.txt: 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2*2*5*5*19 1901 2*3*317 11*173 2*2*2*2*7*17 3*5*127 2*953 1907 2*2*3*3*53 23*83 2*5*191 3*7*7*13 2*2*2*239 1913 2*3*11*29 5*383 2*2*479 3*3*3*71 2*7*137 19*101 2*2*2*2*2*2*2*3*5 17*113 2*31*31 3*641 2*2*13*37 5*5*7*11 2*3*3*107 41*47 2*2*2*241 3*643 2*5*193 1931 2*2*3*7*23 1933 2*967 3*3*5*43 2*2*2*2*11*11 13*149 2*3*17*19 7*277 2*2*5*97 3*647 2*971 29*67 2*2*2*3*3*3*3*3 5*389 2*7*139 3*11*59 2*2*487 1949 2*3*5*5*13 1951 2*2*2*2*2*61 3*3*7*31 2*977 5*17*23 2*2*3*163 19*103 2*11*89 3*653 2*2*2*5*7*7 37*53 2*3*3*109 13*151
Klement András
1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027
77.oldal
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2*2*491 3*5*131 2*983 7*281 2*2*2*2*3*41 11*179 2*5*197 3*3*3*73 2*2*17*29 1973 2*3*7*47 5*5*79 2*2*2*13*19 3*659 2*23*43 1979 2*2*3*3*5*11 7*283 2*991 3*661 2*2*2*2*2*2*31 5*397 2*3*331 1987 2*2*7*71 3*3*13*17 2*5*199 11*181 2*2*2*3*83 1993 2*997 3*5*7*19 2*2*499 1997 2*3*3*3*37 1999 2*2*2*2*5*5*5 3*23*29 2*7*11*13 2003 2*2*3*167 5*401 2*17*59 3*3*223 2*2*2*251 7*7*41 2*3*5*67 2011 2*2*503 3*11*61 2*19*53 5*13*31 2*2*2*2*2*3*3*7 2017 2*1009 3*673 2*2*5*101 43*47 2*3*337 7*17*17 2*2*2*11*23 3*3*3*3*5*5 2*1013 2027
2016
10. Számelméleti feladatok 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Euklidészi algoritmus, prímfelbontás, osztók száma
2*2*3*13*13 2029 2*5*7*29 3*677 2*2*2*2*127 19*107 2*3*3*113 5*11*37 2*2*509 3*7*97 2*1019 2039 2*2*2*3*5*17 13*157 2*1021 3*3*227 2*2*7*73 5*409 2*3*11*31 23*89 2*2*2*2*2*2*2*2*2*2*2 3*683 2*5*5*41 7*293 2*2*3*3*3*19 2053 2*13*79 3*5*137 2*2*2*257 11*11*17 2*3*7*7*7 29*71 2*2*5*103 3*3*229 2*1031 2063 2*2*2*2*3*43
2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
5*7*59 2*1033 3*13*53 2*2*11*47 2069 2*3*3*5*23 19*109 2*2*2*7*37 3*691 2*17*61 5*5*83 2*2*3*173 31*67 2*1039 3*3*3*7*11 2*2*2*2*2*5*13 2081 2*3*347 2083 2*2*521 3*5*139 2*7*149 2087 2*2*2*3*3*29 2089 2*5*11*19 3*17*41 2*2*523 7*13*23 2*3*349 5*419 2*2*2*2*131 3*3*233 2*1049 2099 2*2*3*5*5*7
1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949
= = = = = = = = = = = = = = = = = = = = = = = = =
5^2*7*11, osztóinak száma: 12 2*3^2*107, osztóinak száma: 12 41*47, osztóinak száma: 4 2^3*241, osztóinak száma: 8 3*643, osztóinak száma: 4 2*5*193, osztóinak száma: 8 1931, osztóinak száma: 2 2^2*3*7*23, osztóinak száma: 24 1933, osztóinak száma: 2 2*967, osztóinak száma: 4 3^2*5*43, osztóinak száma: 12 2^4*11^2, osztóinak száma: 15 13*149, osztóinak száma: 4 2*3*17*19, osztóinak száma: 16 7*277, osztóinak száma: 4 2^2*5*97, osztóinak száma: 12 3*647, osztóinak száma: 4 2*971, osztóinak száma: 4 29*67, osztóinak száma: 4 2^3*3^5, osztóinak száma: 24 5*389, osztóinak száma: 4 2*7*139, osztóinak száma: 8 3*11*59, osztóinak száma: 8 2^2*487, osztóinak száma: 6 1949, osztóinak száma: 2
osztokszama.txt: 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924
= = = = = = = = = = = = = = = = = = = = = = = = =
2^2*5^2*19, osztóinak száma: 18 1901, osztóinak száma: 2 2*3*317, osztóinak száma: 8 11*173, osztóinak száma: 4 2^4*7*17, osztóinak száma: 20 3*5*127, osztóinak száma: 8 2*953, osztóinak száma: 4 1907, osztóinak száma: 2 2^2*3^2*53, osztóinak száma: 18 23*83, osztóinak száma: 4 2*5*191, osztóinak száma: 8 3*7^2*13, osztóinak száma: 12 2^3*239, osztóinak száma: 8 1913, osztóinak száma: 2 2*3*11*29, osztóinak száma: 16 5*383, osztóinak száma: 4 2^2*479, osztóinak száma: 6 3^3*71, osztóinak száma: 8 2*7*137, osztóinak száma: 8 19*101, osztóinak száma: 4 2^7*3*5, osztóinak száma: 32 17*113, osztóinak száma: 4 2*31^2, osztóinak száma: 6 3*641, osztóinak száma: 4 2^2*13*37, osztóinak száma: 12
Klement András
78.oldal
2016
10. Számelméleti feladatok 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Euklidészi algoritmus, prímfelbontás, osztók száma
2*3*5^2*13, osztóinak száma: 24 1951, osztóinak száma: 2 2^5*61, osztóinak száma: 12 3^2*7*31, osztóinak száma: 12 2*977, osztóinak száma: 4 5*17*23, osztóinak száma: 8 2^2*3*163, osztóinak száma: 12 19*103, osztóinak száma: 4 2*11*89, osztóinak száma: 8 3*653, osztóinak száma: 4 2^3*5*7^2, osztóinak száma: 24 37*53, osztóinak száma: 4 2*3^2*109, osztóinak száma: 12 13*151, osztóinak száma: 4 2^2*491, osztóinak száma: 6 3*5*131, osztóinak száma: 8 2*983, osztóinak száma: 4 7*281, osztóinak száma: 4 2^4*3*41, osztóinak száma: 20 11*179, osztóinak száma: 4 2*5*197, osztóinak száma: 8 3^3*73, osztóinak száma: 8 2^2*17*29, osztóinak száma: 12 1973, osztóinak száma: 2 2*3*7*47, osztóinak száma: 16 5^2*79, osztóinak száma: 6 2^3*13*19, osztóinak száma: 16 3*659, osztóinak száma: 4 2*23*43, osztóinak száma: 8 1979, osztóinak száma: 2 2^2*3^2*5*11, osztóinak száma: 36 7*283, osztóinak száma: 4 2*991, osztóinak száma: 4 3*661, osztóinak száma: 4 2^6*31, osztóinak száma: 14 5*397, osztóinak száma: 4 2*3*331, osztóinak száma: 8 1987, osztóinak száma: 2 2^2*7*71, osztóinak száma: 12 3^2*13*17, osztóinak száma: 12 2*5*199, osztóinak száma: 8 11*181, osztóinak száma: 4 2^3*3*83, osztóinak száma: 16 1993, osztóinak száma: 2 2*997, osztóinak száma: 4 3*5*7*19, osztóinak száma: 16 2^2*499, osztóinak száma: 6 1997, osztóinak száma: 2 2*3^3*37, osztóinak száma: 16 1999, osztóinak száma: 2 2^4*5^3, osztóinak száma: 20 3*23*29, osztóinak száma: 8 2*7*11*13, osztóinak száma: 16 2003, osztóinak száma: 2 2^2*3*167, osztóinak száma: 12 5*401, osztóinak száma: 4 2*17*59, osztóinak száma: 8 3^2*223, osztóinak száma: 6 2^3*251, osztóinak száma: 8 7^2*41, osztóinak száma: 6 2*3*5*67, osztóinak száma: 16 2011, osztóinak száma: 2 2^2*503, osztóinak száma: 6 3*11*61, osztóinak száma: 8 2*19*53, osztóinak száma: 8 5*13*31, osztóinak száma: 8
Klement András
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081
79.oldal
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2^5*3^2*7, osztóinak száma: 36 2017, osztóinak száma: 2 2*1009, osztóinak száma: 4 3*673, osztóinak száma: 4 2^2*5*101, osztóinak száma: 12 43*47, osztóinak száma: 4 2*3*337, osztóinak száma: 8 7*17^2, osztóinak száma: 6 2^3*11*23, osztóinak száma: 16 3^4*5^2, osztóinak száma: 15 2*1013, osztóinak száma: 4 2027, osztóinak száma: 2 2^2*3*13^2, osztóinak száma: 18 2029, osztóinak száma: 2 2*5*7*29, osztóinak száma: 16 3*677, osztóinak száma: 4 2^4*127, osztóinak száma: 10 19*107, osztóinak száma: 4 2*3^2*113, osztóinak száma: 12 5*11*37, osztóinak száma: 8 2^2*509, osztóinak száma: 6 3*7*97, osztóinak száma: 8 2*1019, osztóinak száma: 4 2039, osztóinak száma: 2 2^3*3*5*17, osztóinak száma: 32 13*157, osztóinak száma: 4 2*1021, osztóinak száma: 4 3^2*227, osztóinak száma: 6 2^2*7*73, osztóinak száma: 12 5*409, osztóinak száma: 4 2*3*11*31, osztóinak száma: 16 23*89, osztóinak száma: 4 2^11, osztóinak száma: 12 3*683, osztóinak száma: 4 2*5^2*41, osztóinak száma: 12 7*293, osztóinak száma: 4 2^2*3^3*19, osztóinak száma: 24 2053, osztóinak száma: 2 2*13*79, osztóinak száma: 8 3*5*137, osztóinak száma: 8 2^3*257, osztóinak száma: 8 11^2*17, osztóinak száma: 6 2*3*7^3, osztóinak száma: 16 29*71, osztóinak száma: 4 2^2*5*103, osztóinak száma: 12 3^2*229, osztóinak száma: 6 2*1031, osztóinak száma: 4 2063, osztóinak száma: 2 2^4*3*43, osztóinak száma: 20 5*7*59, osztóinak száma: 8 2*1033, osztóinak száma: 4 3*13*53, osztóinak száma: 8 2^2*11*47, osztóinak száma: 12 2069, osztóinak száma: 2 2*3^2*5*23, osztóinak száma: 24 19*109, osztóinak száma: 4 2^3*7*37, osztóinak száma: 16 3*691, osztóinak száma: 4 2*17*61, osztóinak száma: 8 5^2*83, osztóinak száma: 6 2^2*3*173, osztóinak száma: 12 31*67, osztóinak száma: 4 2*1039, osztóinak száma: 4 3^3*7*11, osztóinak száma: 16 2^5*5*13, osztóinak száma: 24 2081, osztóinak száma: 2
2016
10. Számelméleti feladatok 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091
= = = = = = = = = =
Euklidészi algoritmus, prímfelbontás, osztók száma
2*3*347, osztóinak száma: 8 2083, osztóinak száma: 2 2^2*521, osztóinak száma: 6 3*5*139, osztóinak száma: 8 2*7*149, osztóinak száma: 8 2087, osztóinak száma: 2 2^3*3^2*29, osztóinak száma: 24 2089, osztóinak száma: 2 2*5*11*19, osztóinak száma: 16 3*17*41, osztóinak száma: 8
Klement András
2092 2093 2094 2095 2096 2097 2098 2099 2100
80.oldal
= = = = = = = = =
2^2*523, osztóinak száma: 6 7*13*23, osztóinak száma: 8 2*3*349, osztóinak száma: 8 5*419, osztóinak száma: 4 2^4*131, osztóinak száma: 10 3^2*233, osztóinak száma: 6 2*1049, osztóinak száma: 4 2099, osztóinak száma: 2 2^2*3*5^2*7, osztóinak száma: 36
2016
11. Rekurzió
Fibonacci-sorozat, zárójelezés érvényessége
11. Rekurzió: Fibonacci-sorozat, zárójelezés érvényessége import import import import
java.io.FileWriter; java.io.IOException; java.io.PrintWriter; java.util.Scanner;
/** * Rekurzió: * Fibonacci-sorozat * Zárójelezés érvényessége * * @author Klemand */ public class BevGyak11 { public static void main(String[] args) throws IOException { System.out.println("I. A Fibonacci-sorozat tagjainak meghatározása "); System.out.println("ciklussal és rekurzióval. \n"); Scanner sc1 = new Scanner(System.in); System.out.print("Kérem a sorozat tagjának indexét (max. 45)! n = "); int n = sc1.nextInt(); System.out.println(""); System.out.println("A megadott index: " + n +"\n"); long[] fibonacciCTomb = new long[45]; System.out.print("1. A(z) " + n + ". tag meghatározása ciklussal: "); fibonacciCTomb[0] = 1; fibonacciCTomb[1] = 1; for (int i = 3; i <= n; i++) { fibonacciCTomb[i - 1] = fibonacciCTomb[i - 3] + fibonacciCTomb[i - 2]; } System.out.println(fibonacciCTomb[n - 1]); System.out.println("\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n"); System.out.print("2. A(z) " + n + ". tag meghatározása rekurzív függvénnyel: "); System.out.println(fibonacci(n)); System.out.println("\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n"); System.out.println("3. A Fibonacci sorozat első " + n + " tagjának kiíratása "); System.out.println("a fibonacci.txt fájlba\n"); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("fibonacci.txt")); for (int i = 1; i <= n; i++) { kivitel.printf("%2d", i ); kivitel.println(". tag: " + fibonacciCTomb[i - 1]); } System.out.println("A kiíratás befejeződött."); kivitel.close();
Klement András
81.oldal
2016
11. Rekurzió
Fibonacci-sorozat, zárójelezés érvényessége System.out.println("\n{{[]()[]}}[()][]{[([]{((()))})]}{[)(]}{([}]){{[()[]}}{{{()}}}}\n"); System.out.println("II. Egy megadott zárójelezés érvényességének eldöntése\n"); Scanner sc2 = new Scanner(System.in); System.out.println("Helyes pl. {{[]()[]}}[()][] vagy {[([]{((()))})]}"); System.out.println("Hibás pl. {[)(]}, {([}]), {{[()[]}} vagy {{{()}}}}"); System.out.print("Kérek egy zárójelsorozatot: "); String zj = sc2.nextLine(); System.out.println("A megadott zárójelezés helyessége: " + ervenyes(zj)); sc1.close(); sc2.close(); System.out.println("");
} // Eljárások, függyvények public static long fibonacci(int n) { if ((n == 1) || (n == 2)) { return 1; } else { return (fibonacci(n - 2) + fibonacci(n - 1)); } } public static
boolean ervenyes(String z) {
if (z.equals("")) { return true; } else { String par = ""; if (z.contains("()")) { par = "()"; } else if (z.contains("[]")) { par = "[]"; } else if (z.contains("{}")) { par = "{}"; } int i; if (!par.equals("")) { i = z.indexOf(par); return ervenyes(z.substring(0, i) + z.substring(i + 2)); } else { return false; } } } }
Klement András
82.oldal
2016
11. Rekurzió
Fibonacci-sorozat, zárójelezés érvényessége
I. A Fibonacci-sorozat tagjainak meghatározása ciklussal és rekurzióval. Kérem a sorozat tagjának indexét (max. 45)! n = 45 A megadott index: 45 1. A(z) 45. tag meghatározása ciklussal: 1134903170 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2. A(z) 45. tag meghatározása rekurzív függvénnyel: 1134903170 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3. A Fibonacci sorozat első 45 tagjának kiíratása a fibonacci.txt fájlba A kiíratás befejeződött. {{[]()[]}}[()][]{[([]{((()))})]}{[)(]}{([}]){{[()[]}}{{{()}}}} II. Egy megadott zárójelezés érvényességének eldöntése Helyes pl. {{[]()[]}}[()][] vagy {[([]{((()))})]} Hibás pl. {[)(]}, {([}]), {{[()[]}} vagy {{{()}}}} Kérek egy zárójelsorozatot: {{[]()[]}}[()][]{[([]{((()))})]} A megadott zárójelezés helyessége: true
Klement András
83.oldal
2016
11. Rekurzió
Fibonacci-sorozat, zárójelezés érvényessége
fibonacci.txt: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag: tag:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170
Klement András
84.oldal
2016
Üllői-úti fák
12. Verselemzés
12. Verselemzés: Üllői-úti fák import import import import import import
java.io.BufferedReader; java.io.FileReader; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; java.util.ArrayList;
/** * Verselemzés: Üllői-úti fák * * @author Klemand */ public class BevGyak12 { public static void main(String[] args) throws IOException { // A vers beolvasása System.out.println("1. feladat\n"); System.out.println("A vers szerzőjének, címének és szavainak beolvasása a vers.txt fájlból \n"); BufferedReader behozatal; behozatal = new BufferedReader(new FileReader("vers.txt")); String elsoSor; String sor; String[] daraboltSor; elsoSor = behozatal.readLine(); String szerzo = elsoSor.trim(); sor = behozatal.readLine(); String cim = sor.trim(); while ((sor = behozatal.readLine()) != null) { // Beolvassa a sort és megvizsgálja. Ha nem null, akkor feldolgozza. if (sor.length() > 0) { // Az üres sorokat kihagyjuk. sor sor sor sor
= = = =
sor.replace(',', sor.replace('.', sor.replace('!', sor.replace('?',
' ' ' '
'); '); '); ');
daraboltSor = sor.trim().split("\\s+"); // Itt több szóköz is előállhat a sor belsejében is! int i; for (i = 1; i <= daraboltSor.length; i++) { szavak.add(new SzavakTipus(daraboltSor[i - 1])); } } } behozatal.close(); // A beolvasás ellenőrzése System.out.println("A beolvasás ellenőrzése: \n"); System.out.println("A költő neve: " + szerzo); System.out.println("A vers címe: " + cim); System.out.println(""); System.out.println("A vers " + szavak.size() + " szóból áll:"); System.out.println("");
Klement András
85.oldal
2016
Üllői-úti fák
12. Verselemzés for (int i = 1; i <= szavak.size(); i++) { System.out.println(szavak.get(i - 1).szo); } System.out.println(""); diszsor();
System.out.println("2. feladat\n"); System.out.println("Listázzuk ki a versben szereplő szavakat, adjuk meg az előfordulásuk számát,"); System.out.println("a karaktereik számát és az ékezetes betűik számát! \n"); // Szólista készítése int i, j; for (i = 1; i <= szavak.size(); i++) { String kisbetus = szavak.get(i - 1).szo.toLowerCase(); j = 1; while (j <= szolista.size() && !(kisbetus.equals(szolista.get(j - 1).szo))) { j++; } if (j <= szolista.size()) { szolista.get(j - 1).elofordulasDb++; } else { szolista.add(new SzolistaTipus(kisbetus, 1)); } } // Statisztikák System.out.println("A versben szereplő szavak és tulajdonságaik az első előfordulásuk sorrendjében: \n"); for (i = 1; i <= szolista.size(); i++) { System.out.print(szolista.get(i - 1).szo + ": " + szolista.get(i - 1).elofordulasDb + " alkalommal fordul elő, "); System.out.println(szolista.get(i - 1).betuDb + " karakterből áll, ebből ékezetes: " + szolista.get(i - 1).ekezetesDb); } System.out.println(""); System.out.println("A versben összesen " + szolista.size() + " különböző szó van. \n"); diszsor(); System.out.println("3. feladat\n"); System.out.println("Állapítsuk meg, melyik a leghosszabb szó,"); System.out.println("és készítsük el a szavak hossza szerinti statisztikát! \n"); System.out.print("A leghosszabb szó: "); int max = 1; for (i = 1; i <= szolista.size(); i++) { if (szolista.get(i - 1).szo.length() > szolista.get(max - 1).szo.length()) { max = i; } } int maxHossz = szolista.get(max - 1).szo.length(); System.out.println(szolista.get(max - 1).szo + ", hossza " + maxHossz); int[] hosszDb = new int[maxHossz]; for (i = 1; i <= maxHossz; i++) { hosszDb[i - 1] = 0; } for (i = 1; i <= szolista.size(); i++) { hosszDb[szolista.get(i - 1).betuDb - 1]++; }
Klement András
86.oldal
2016
Üllői-úti fák
12. Verselemzés
System.out.println("A szavak hossza szerinti statisztika: \n"); int osszDb = 0; for (i = 1; i <= maxHossz; i++) { System.out.println(i + " karakteres szavak száma: " + hosszDb[i - 1]); osszDb += hosszDb[i - 1]; } System.out.println("------------------------------"); System.out.println("Összesen: " + osszDb + " szó"); System.out.println(""); diszsor(); System.out.println("4. feladat\n"); System.out.println("Határozzuk meg az ékezetes szavak százalékos arányát két tizedes pontossággal"); System.out.println("a szólistában, ill. a versben! \n"); int ekezetesSzoDbLista = 0; int ekezetesSzoDbVers = 0; for (i = 1; i <= szolista.size(); i++) { if (szolista.get(i - 1).ekezetesDb > 0) { ekezetesSzoDbLista++; ekezetesSzoDbVers += szolista.get(i - 1).elofordulasDb; } } System.out.print("Az ékezetes szavak aránya a szólistában: "); double arany = (double) ekezetesSzoDbLista / szolista.size(); arany *= 100; System.out.printf("%.2f", arany); System.out.print("%, a versben: "); arany = (double) ekezetesSzoDbVers / szavak.size(); arany *= 100; System.out.printf("%.2f", arany); System.out.println("% \n"); diszsor(); System.out.println("5. feladat\n"); System.out.println("Rendezzük ábécé rendbe a szólistát! \n"); // A szólista rendezése abc szerint minimumkiválasztásos rendezéssel int min; SzolistaTipus asztal; for (i = 1; i <= szolista.size(); i++) { min = i; for (j = i + 1; j <= szolista.size(); j++) { if (abcElobbSzo(szolista.get(j - 1).szo, szolista.get(min - 1).szo)) { min = j; } } asztal = szolista.get(i - 1); szolista.set(i - 1, szolista.get(min - 1)); szolista.set(min - 1, asztal); } System.out.println("A versben szereplő szavak és tulajdonságaik ábécé rendben: \n"); for (i = 1; i <= szolista.size(); i++) { System.out.print(szolista.get(i - 1).szo + ": " + szolista.get(i - 1).elofordulasDb + " alkalommal fordul elő, "); System.out.println(szolista.get(i - 1).betuDb + " karakterből áll, ebből ékezetes: " + szolista.get(i - 1).ekezetesDb); } System.out.println(""); diszsor();
Klement András
87.oldal
2016
Üllői-úti fák
12. Verselemzés
System.out.println("6. feladat\n"); System.out.println("Határozzuk meg az ábécébe rendezett szólista leghosszabb "); System.out.println("ékezetes szakaszának kezdőszavát és hosszát!"); System.out.println("Írassuk ki a teljes szakaszt is!\n"); int int int int
aktTkezdet = -1; // irreális kezdőérték aktThossz = 0; maxTkezdet = -1; // irreális kezdőérték maxThossz = 0;
for (i = 1; i <= szolista.size(); i++) { if (szolista.get(i - 1).ekezetesDb > 0) { if (aktTkezdet == -1) { aktTkezdet = i; } aktThossz++; if (aktThossz > maxThossz) { maxTkezdet = aktTkezdet; maxThossz = aktThossz; } } else { aktTkezdet = -1; aktThossz = 0; } } if (maxTkezdet > -1) { System.out.println("A kezdőszó: " + szolista.get(maxTkezdet - 1).szo + ", a leghosszabb ékezetes szakasz hossza: " + maxThossz); System.out.println("\nAz ékezetes szakasz:"); for (i = maxTkezdet; i <= maxTkezdet + maxThossz - 1; i++) { System.out.println(szolista.get(i - 1).szo); } } else { System.out.println("A szólistában nincs ékezetes szó."); } System.out.println(""); diszsor(); System.out.println("7. feladat\n"); System.out.println("Írjuk ki a permutacio.txt fájlba a vers szavainak egy véletlen permutációját! \n"); PrintWriter kivitel; kivitel = new PrintWriter(new FileWriter("permutacio.txt")); boolean[] kivalasztott = new boolean[szolista.size()]; for (i = 1; i <= szolista.size(); i++) { kivalasztott[i - 1] = false; } int n; i = 0; do { n = (int) (szolista.size() * Math.random()) + 1; if (kivalasztott[n - 1] == false) { kivalasztott[n - 1] = true; i++; kivitel.println(szolista.get(n - 1).szo); } } while (i < szolista.size());
Klement András
88.oldal
2016
Üllői-úti fák
12. Verselemzés kivitel.close(); System.out.println("A fájlkiírás befejeződött."); System.out.println(""); diszsor(); System.out.println("8. feladat\n"); System.out.println("Csoportosítsuk a szólistát a szavak hossza szerint,"); System.out.println("csoportonként megtartva az ábécé rendbe sorolást! \n"); /* * Rendezzük a már ábécébe rendezett szólistát buborékos rendezéssel a * szavak hossza szerint, mert az megtartja a korábbi szempont szerinti * rendezettséget! */ for (i = szolista.size() - 1; i >= 1; i--) { for (j = 1; j <= i; j++) { if (szolista.get(j - 1).betuDb > szolista.get(j).betuDb) { asztal = szolista.get(j - 1); szolista.set(j - 1, szolista.get(j)); szolista.set(j, asztal); } } }
System.out.println("A versben szereplő szavak és tulajdonságaik "); System.out.println("a szavak hossza szerint és azon belül ábécé rendben:"); int betuDb = 0; for (i = 1; i <= szolista.size(); i++) { if (szolista.get(i - 1).betuDb > betuDb) { betuDb = szolista.get(i - 1).betuDb; System.out.println(""); System.out.println(betuDb + " karakteres szavak: \n"); } System.out.print(szolista.get(i - 1).szo + ": " + szolista.get(i - 1).elofordulasDb + " alkalommal fordul elő, "); System.out.println("ékezetes betűinek száma: " + szolista.get(i - 1).ekezetesDb); } System.out.println(""); } public static void diszsor() { System.out.println("K S T L N I E S Ü L IT F K"); System.out.println("============================================================"); System.out.println(""); System.out.println("============================================================"); System.out.println(" O Z O Á Y D Z Ő L Ő Ú I Á\n"); } /* * A tömblista konstruktora Mivel itt csak egy típus van, tömbbe is * tehetném, de akkor előre meg kellene adnom a maximális méretét */ static ArrayList<SzavakTipus> szavak = new ArrayList<>(); public static class SzavakTipus { private final String szo; public SzavakTipus(String szoBe) // konstruktor { szo = szoBe; } }
Klement András
89.oldal
2016
Üllői-úti fák
12. Verselemzés static ArrayList<SzolistaTipus> szolista = new ArrayList<>(); public static class SzolistaTipus { private private private private
final String szo; int elofordulasDb; final int betuDb; final int ekezetesDb;
public SzolistaTipus(String szoBe, int dbBe) // konstruktor { szo = szoBe; elofordulasDb = dbBe; betuDb = betuDbMeghat(szo); ekezetesDb = ekezetesDbMeghat(szo); } } public static int betuDbMeghat(String szo) { int db = 0; int i; for (i = 1; i <= szo.length(); i++) { db++; } return db; } public static int ekezetesDbMeghat(String szo) { int db = 0; int i; for (i = 1; i <= szo.length(); i++) { if ("áéíóöőúüű".contains(szo.substring(i - 1, i))) { db++; } } return db; } public static boolean abcElobbBetu(String a, String b) { String abc = "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz"; return abc.indexOf(a) < abc.indexOf(b); } public static boolean abcElobbSzo(String szo1, String szo2) { szo1 = szo1.toLowerCase(); szo2 = szo2.toLowerCase(); int i = 1; while (i <= szo1.length() && i <= szo2.length() && szo1.substring(i - 1, i).equals(szo2.substring(i - 1, i))) { i++; } if (i <= szo1.length() && i <= szo2.length()) { return abcElobbBetu(szo1.substring(i - 1, i), szo2.substring(i - 1, i)); } else { return szo1.length() < szo2.length(); } } }
Klement András
90.oldal
2016
Üllői-úti fák
12. Verselemzés 1. feladat A vers szerzőjének, címének és szavainak beolvasása a vers.txt fájlból A beolvasás ellenőrzése: A költő neve: Kosztolányi Dezső A vers címe: Üllői-úti fák A vers 84 szóból áll: Az ég legyen tivéletek Üllői-úti fák Borítsa lombos fejetek szagos virágos fergeteg ezer fehér virág Ti adtatok kedvet tusát ti voltatok az ifjúság Üllői-úti fák Másoknak is így nyíljatok Üllői-úti fák Szívják az édes illatot a balzsamost az altatót az est óráin át Ne lássák a bú ciprusát higgyék örök az ifjúság Üllői-úti fák Haldoklik
Klement András
91.oldal
2016
Üllői-úti fák
12. Verselemzés a sárgult határ Üllői-úti fák Nyugszik a kedvem napja már a szél búsan dúdolva jár s megöl minden csírát Hova repül az ifjúság Feleljetek bús lombú fák Üllői-úti fák K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 2. feladat Listázzuk ki a versben szereplő szavakat, adjuk meg az előfordulásuk számát, a karaktereik számát és az ékezetes betűik számát! A versben szereplő szavak és tulajdonságaik az első előfordulásuk sorrendjében: az: 7 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 ég: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 legyen: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 tivéletek: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 1 üllői-úti: 6 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 3 fák: 7 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 borítsa: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 lombos: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 fejetek: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 szagos: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 virágos: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 fergeteg: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 ezer: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 0 fehér: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 virág: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 ti: 2 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 adtatok: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 kedvet: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 tusát: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 voltatok: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 ifjúság: 3 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 2 másoknak: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 1 is: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0
Klement András
92.oldal
2016
Üllői-úti fák
12. Verselemzés így: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 nyíljatok: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 1 szívják: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 2 édes: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 1 illatot: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 a: 5 alkalommal fordul elő, 1 karakterből áll, ebből ékezetes: 0 balzsamost: 1 alkalommal fordul elő, 10 karakterből áll, ebből ékezetes: 0 altatót: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 est: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 0 óráin: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 2 át: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 ne: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 lássák: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 2 bú: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 ciprusát: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 1 higgyék: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 örök: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 2 haldoklik: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 0 sárgult: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 határ: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 nyugszik: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 kedvem: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 napja: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 0 már: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 szél: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 1 búsan: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 dúdolva: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 jár: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 s: 1 alkalommal fordul elő, 1 karakterből áll, ebből ékezetes: 0 megöl: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 minden: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 csírát: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 2 hova: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 0 repül: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 feleljetek: 1 alkalommal fordul elő, 10 karakterből áll, ebből ékezetes: 0 bús: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 lombú: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 A versben összesen 60 különböző szó van. K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 3. feladat Állapítsuk meg, melyik a leghosszabb szó, és készítsük el a szavak hossza szerinti statisztikát! A leghosszabb szó: balzsamost, hossza 10 A szavak hossza szerinti statisztika: 1 karakteres szavak száma: 2 2 karakteres szavak száma: 7 3 karakteres szavak száma: 6 4 karakteres szavak száma: 5 5 karakteres szavak száma: 10 6 karakteres szavak száma: 8 7 karakteres szavak száma: 11 8 karakteres szavak száma: 5 9 karakteres szavak száma: 4 10 karakteres szavak száma: 2 -----------------------------Összesen: 60 szó
Klement András
93.oldal
2016
Üllői-úti fák
12. Verselemzés K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 4. feladat Határozzuk meg az ékezetes szavak százalékos arányát két tizedes pontossággal a szólistában, ill. a versben! Az ékezetes szavak aránya a szólistában: 58,33%, a versben: 57,14% K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 5. feladat Rendezzük ábécé rendbe a szólistát! A versben szereplő szavak és tulajdonságaik ábécé rendben: a: 5 alkalommal fordul elő, 1 karakterből áll, ebből ékezetes: 0 adtatok: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 altatót: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 az: 7 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 át: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 balzsamost: 1 alkalommal fordul elő, 10 karakterből áll, ebből ékezetes: 0 borítsa: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 bú: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 bús: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 búsan: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 ciprusát: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 1 csírát: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 2 dúdolva: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 est: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 0 ezer: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 0 édes: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 1 ég: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 1 fák: 7 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 fehér: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 fejetek: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 feleljetek: 1 alkalommal fordul elő, 10 karakterből áll, ebből ékezetes: 0 fergeteg: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 haldoklik: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 0 határ: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 higgyék: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 hova: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 0 ifjúság: 3 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 2 illatot: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 0 is: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 így: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 jár: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 kedvem: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 kedvet: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 lássák: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 2 legyen: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 lombos: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 lombú: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 már: 1 alkalommal fordul elő, 3 karakterből áll, ebből ékezetes: 1 másoknak: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 1 megöl: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 minden: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0
Klement András
94.oldal
2016
Üllői-úti fák
12. Verselemzés napja: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 0 ne: 1 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 nyíljatok: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 1 nyugszik: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 óráin: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 2 örök: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 2 repül: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 s: 1 alkalommal fordul elő, 1 karakterből áll, ebből ékezetes: 0 sárgult: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 szagos: 1 alkalommal fordul elő, 6 karakterből áll, ebből ékezetes: 0 szél: 1 alkalommal fordul elő, 4 karakterből áll, ebből ékezetes: 1 szívják: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 2 ti: 2 alkalommal fordul elő, 2 karakterből áll, ebből ékezetes: 0 tivéletek: 1 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 1 tusát: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 üllői-úti: 6 alkalommal fordul elő, 9 karakterből áll, ebből ékezetes: 3 virág: 1 alkalommal fordul elő, 5 karakterből áll, ebből ékezetes: 1 virágos: 1 alkalommal fordul elő, 7 karakterből áll, ebből ékezetes: 1 voltatok: 1 alkalommal fordul elő, 8 karakterből áll, ebből ékezetes: 0 K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 6. feladat Határozzuk meg az ábécébe rendezett szólista leghosszabb ékezetes szakaszának kezdőszavát és hosszát! Írassuk ki a teljes szakaszt is! A kezdőszó: borítsa, a leghosszabb ékezetes szakasz hossza: 7 Az ékezetes szakasz: borítsa bú bús búsan ciprusát csírát dúdolva K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á 7. feladat Írjuk ki a permutacio.txt fájlba a vers szavainak egy véletlen permutációját! A fájlkiírás befejeződött. K S T L N I E S Ü L IT F K ============================================================ ============================================================ O Z O Á Y D Z Ő L Ő Ú I Á
Klement András
95.oldal
2016
Üllői-úti fák
12. Verselemzés 8. feladat Csoportosítsuk a szólistát a szavak hossza szerint, csoportonként megtartva az ábécé rendbe sorolást! A versben szereplő szavak és tulajdonságaik a szavak hossza szerint és azon belül ábécé rendben: 1 karakteres szavak: a: 5 alkalommal fordul elő, ékezetes betűinek száma: 0 s: 1 alkalommal fordul elő, ékezetes betűinek száma: 0 2 karakteres szavak: az: át: bú: ég: is: ne: ti:
7 1 1 1 1 1 2
alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma: száma: száma:
0 1 1 1 0 0 0
3 karakteres szavak: bús: est: fák: így: jár: már:
1 1 7 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma: száma:
1 0 1 1 1 1
4 karakteres szavak: ezer: édes: hova: örök: szél:
1 1 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma:
0 1 0 2 1
5 karakteres szavak: búsan: fehér: határ: lombú: megöl: napja: óráin: repül: tusát: virág:
1 1 1 1 1 1 1 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő, elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma: száma: száma: száma: száma: száma:
1 1 1 1 1 0 2 1 1 1
6 karakteres szavak: csírát: kedvem: kedvet: lássák: legyen: lombos: minden: szagos:
1 1 1 1 1 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal
Klement András
fordul fordul fordul fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma: száma: száma: száma:
96.oldal
2 0 0 2 0 0 0 0
2016
Üllői-úti fák
12. Verselemzés 7 karakteres szavak: adtatok: altatót: borítsa: dúdolva: fejetek: higgyék: ifjúság: illatot: sárgult: szívják: virágos:
1 1 1 1 1 1 3 1 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul fordul fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő, elő, elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma: száma: száma: száma: száma: száma: száma:
0 1 1 1 0 1 2 0 1 2 1
8 karakteres szavak: ciprusát: fergeteg: másoknak: nyugszik: voltatok:
1 1 1 1 1
alkalommal alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul fordul
elő, elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek betűinek
száma: száma: száma: száma: száma:
1 0 1 0 0
9 karakteres szavak: haldoklik: nyíljatok: tivéletek: üllői-úti:
1 1 1 6
alkalommal alkalommal alkalommal alkalommal
fordul fordul fordul fordul
elő, elő, elő, elő,
ékezetes ékezetes ékezetes ékezetes
betűinek betűinek betűinek betűinek
száma: száma: száma: száma:
0 1 1 3
10 karakteres szavak: balzsamost: 1 alkalommal fordul elő, ékezetes betűinek száma: 0 feleljetek: 1 alkalommal fordul elő, ékezetes betűinek száma: 0
Klement András
97.oldal
2016
Üllői-úti fák
12. Verselemzés vers.txt: Kosztolányi Dezső Üllői-úti fák
Az ég legyen tivéletek, Üllői-úti fák. Borítsa lombos fejetek szagos, virágos fergeteg, ezer fehér virág. Ti adtatok kedvet, tusát, ti voltatok az ifjúság, Üllői-úti fák. Másoknak is így nyíljatok, Üllői-úti fák. Szívják az édes illatot, a balzsamost, az altatót, az est óráin át. Ne lássák a bú ciprusát, higgyék, örök az ifjúság, Üllői-úti fák. Haldoklik a sárgult határ, Üllői-úti fák. Nyugszik a kedvem napja már, a szél búsan dúdolva jár, s megöl minden csírát. Hova repül az ifjúság? Feleljetek, bús lombú fák, Üllői-úti fák. permutacio.txt: kedvem ifjúság tivéletek határ fehér est voltatok üllői-úti adtatok a haldoklik hova fergeteg lássák csírát virág szél napja ezer búsan altatót lombú fák ne szívják repül édes nyíljatok borítsa óráin ciprusát
Klement András
98.oldal
2016
Üllői-úti fák
12. Verselemzés s fejetek higgyék balzsamost megöl örök virágos lombos illatot másoknak nyugszik minden ti az bús feleljetek is tusát így már legyen sárgult kedvet ég dúdolva szagos bú jár át
Klement András
99.oldal
2016
Folytatás
Klasszikus programozás Java nyelven II. Az emelt szintű informatika érettségi programozási feladatainak megoldása
Folytatás: Klasszikus programozás Java nyelven II. Az emelt szintű informatika érettségi programozási feladatainak megoldása
Klasszikus programozás Java nyelven II. Az emelt szintű informatika érettségi programozási feladatainak megoldása
Eclipse 4.6.1 (Neon.1) Klement András 2016
Klement András
100.oldal
2016