Utolsó módosítás: 2016.09.28.
Készítsünk programot, mely kiírja a Fibonacci sorozat első \(n\) elemét! Az \(n\) értékét várja argumentumként a program!
A sorozat első \(n\) elemét tároljuk le egy tömbben, majd egy külön iterációban irassuk ki az elemeket!
A sorozat első \(n\) elemét tároljuk le egy tömbben, majd használjuk a java.util.Arrays.toString()
metódust a kiíratásra!
Készítsünk a util
csomagon belül egy IntVector
osztályt, mely egészek sorozatát ábrázolja!
Legyen egy tömb adattag, mely a sorozatot tárolja. Tegyük rejtetté!
Adjunk az osztályhoz egy konstruktort, mely egy egészekből álló tömböt vár paraméterül! Ügyeljünk, hogy a belső állapotot ne szivárogtassuk ki!
Vegyünk fel egy add()
metódust, mely a sorozat minden eleméhez hozzáad egy paraméterül kapott egész számot!
Írjunk egy toString()
metódust is, mely felsorolja a számokat szóközzel elválasztva. Például: [1 2 3]
Készítsünk egy Calculator
programot, mely egy számsorozatot és egy számot kap argumentumként. A program a számsorozat minden eleméhez hozzáadja a második argumentumot. Például:
$ java Calculator 1,2,3 5
[6 7 8]
Használjuk az előbb megírt util.IntVector
osztályt!
Alakítsuk át az util.IntVector
osztályt, hogy tömb helyett java.util.LinkedList<A>
láncolt listában tárolja a számsorozatot!
add(elem)
metódussal lehet.get(i)
metódussal érjük el.set(i, elem)
metódussal írjuk felül.size()
metódussal kapjuk meg.Egyszerűsítsük le a Calculator
programot a java.util.Scanner
osztállyal!
A java.util.Scanner
legfontosabb műveletei a nextInt()
és a hasNextInt()
.
Készítsünk programot, mely eldönti egy argumentumként megadott szövegről, hogy palindrom vagy sem!
Palindromnak nevezünk egy szót vagy kifejezést, ha visszafele olvasva ugyanazt kapjuk.
Feltesszük, hogy csak egy szót kapunk argumentumként.
Például:
$ java Palindrome noon
true
$ java Palindrome radar
true
$ java Palindrome tree
false
Szorgalmi. Egészítsük ki úgy a programot, hogy az ne csak szavakat, hanem több szóból álló kifejezéseket is elfogadjon.
Például:
$ java Palindrome "race car"
true
Írjunk egy programot, mely kicseréli egy szöveg minden kisbetűjét nagybetűre, minden nagybetűt kisbetűre, minden számjegyéhez hozzáad egyet és minden más karaktert aláhúzásjelre cserél!
Az egyes karakterek besorolásához használjuk a java.lang.Character
osztály statikus metódusait.
Készítsünk egy olyan függvényt, mely egy paraméterül kapott String
szavainak sorrendjét megfordítja, de a szavakat változatlanul hagyja!
Például:
$ java ReverseWords "Alma fa alatt"
alatt fa Alma
Írjunk egy math.Vector
osztályt, melyben az alábbi metódusok szerepelnek:
A statikus dotProduct()
paraméterül vár két lebegőpontos értékekből álló tömböt és visszaadja a skaláris szozatukat. Ha a két tömb \(a\) és \(b\), akkor a skaláris szozatuk \(\sum_{i} a_i \times b_i\)
Szorgalmi. A statikus crossProduct()
paraméterül vár két lebegőpontos értékekből álló, kételemű tömböt és az általuk bezárt szöget radiánban, és visszaad egy harmadik, háromelemű tömböt, melyben a paraméter tömbök vektoriális szozata szerepel.
Haladóknak. Írjunk egy programot, mely a szabványos bemenetről egész számokat olvas be, és megadja a hosszát és a kezdetét a leghosszabb egymást követő azonos számok sorozatának! Egy példa futás az alábbi:
java Longest
~> 1
~> 4
~> 4
~> 3
~>
start: 2
length: 2
Használjuk a java.util.Scanner
osztály nextInt()
, hasNextInt()
metódusait.
Szorgalmi. Készítsünk egy publikus utils.NumericArrays
osztályt, melyben szerepelnek az alábbi statikus metódusok. Mindhárom metódus paraméterül vár egy double
értékekből álló tömböt.
Egy sum()
metódus, mely visszaadja a számokat tartalmazó tömb elemeinek összegét double
típusú értékként.
Egy average()
metódus, mely visszaadja a tömb elemeinek átlagát double
típusú értékként. Ehhez használhatjuk a sum()
metódust.
Egy normalize()
metódus, mely normálja a tömb elemeit. Az normált elemeket egy double
értékeket tartalmazó tömbként adja vissza a metódus.
A normálás azt jelenti, hogy a számok összege egy lesz. Ehhez meg kell határozni a tömb elemeinek összegét, és a tömb minden elemét meg knell szorozni az összeg reciprokával.
Készítsünk egy NumericArrayDemo
osztályt is egy main()
metódussal, mely argumentumként várja az elvégzendő feladatot (sum
, avg
vagy norm
) és a számsorozatot! Ez utóbbit vesszóvel elválasztva adjuk meg:
java NumericArrayDemo sum 1,2,3
6
java NumericArrayDemo norm 1,2,1
[0.25, 0.5, 0.25]
Írjunk egy math.Matrix
osztályt, melyben néhány mátrixműveletet valósítunk meg! Ezek az alábbiak:
A plus()
objektumszintű metódus paraméterül vár két kétdimenziós tömböt, melyeket összeadja. Az eredményt egy harmadik tömbben adja vissza.
Az \(A\) és a \(B\) mátrix összegét megkapjuk a \(\sum_{i=0}^{n} \sum_{j = 0}^{m} A_{ij} + B_{ij}\) kiszámításával.
Haladóknak. Hasonlóan a plus()
metódushoz, készítsünk egy multiply()
metódust, mely paraméterül vár két kétdimenziós tömböt, és a szorzás eredményét egy új tömbben adja vissza!
Az \(A\) és a \(B\) mátrix \(C\) szorzatát megkapjuk a \(C_{ij} = \sum_{k = 0}^n A_{ik} \times B_{jk}\) kiszámításával minden \(i\), \(j\)-re.
Bónusz: készítsük el az aknakereső játék alapjait!
Hozzuk létre a game.Minesweeper
publikus osztályt!
Készítsünk egy createTable()
metódust, mely paraméterül vár egy p
valószínűséget és m
, n
egész számokat, és feltölt egy kétdimenziós, m
sorból és n
oszlopból álló logikai értékeket tartalmazó tömböt (a játéktáblát), ahol minden elem egy adott \(p\) valószínűséggel lesz logikai igaz. Ott lesznek az aknák, ahol az elem értéke logikai igaz.
Egy \(p\) eloszlású \(x\) indikátorváltozót a java.lang.Math.random()
metódus segítségével tudunk előállítani:
boolean x (double p) {
return Math.random() < p;
}
A fenti x
metódust \(p\) valószínűséggel fog logikai igaz értéket, \(1-p\) valószínűséggel hamis értéket visszaadni.
Ez alapján készítsünk egy másik, solve()
nevű függvényt, mely paraméterül vár egy aknakereső játéktáblát (kétdimenziós logikai tömböt), és visszaad egy egészekből álló kétdimenziós tömböt! A paraméter tömb és az eredmény tömb méretei azonosak.
Az eredmény tömbben egy elem azt jelöli, hogy a szomszédjában hány akna található. Ez lesz az aknakereső játék megoldása.
Készítsünk egy-egy függvényt a logikai és a számokból álló tömb szöveggé alakítására! A függvények az átalakítandó tömböt paraméterül várják és szöveget adnak vissza.
Mindkét függvényben az akna helyére kerüljön csillag. A logikai tömbnél az aknamentes helyekre kerüljön pont.
A végeredmény hatékony előállításához használjuk a java.lang.StringBuffer
osztályt.
Írjunk egy program.Main
osztályt! Ebben helyet kap a main()
metódus, mely egy sorban kéri be a szabványos bemenetről az aknakereső tábla méretét és a \(p\) valószínűséget! A szabványos kimenetre írjuk ki mindkét táblát!
A beolvasás megkönnyítésére használjuk a java.util.Scanner
osztályt, és annak nextInt()
, nextDouble()
metódusait.