Gyakorlati alapok
Kisebb-nagyobb külön függvényekkel
Adott egy olyan feltételhalmaz, amely voltaképpen bármilyenre felállítható. Ám ebben a fejezetben:
-
vegyünk egy véletlenszámokból álló tömböt és vizsgáljuk meg, hogy melyik az az eleme, amelyik nagyobb az előtte lévőnél és kisebb az utána jövőnél. A feltétel valójában ez b értékét keresve:
if (a < b < c)
-
Nyilvánvalóan a bemeneti tömbbe nem kerülhet 2 azonos szám,
-
továbbá legyen külön eredménytömbünk, amelyik az egyezés elemének indexét tartalmazza, ha pedig nincs feltételegyezés, 0-val reprezentálja,
-
mindent pakoljunk külön függvényekbe, a main() főmetódusban csak hivatkozások legyenek.
Az implementált metódusok a következők lesznek:
-
benneVan - ellenőrzi, hogy a bemeneti tömbbe ne kerüljön 2 azonos szám,
-
tombFeltoltes - a benneVan() függvény segítségével véletlenszámokkal tölti fel a bemeneti adattömböt,
-
kisebbNagyobb - elvégzi a feltételellenőrzést és visszaadja azt a kimeneti adattömböt, amelyik a feltételegyezés indexeit tartalmazza,
-
tombkiiras - kiírja a tömbtartalmat,
-
main() - lefuttatja a programot.
Ugyanakkor felmerül az első és utolsó tömbelem lekezelésének lehetősége is:
-
if (első elem < második elem),
-
if (utolsó előtti elem < utolsó elem),
Ekkor vagy foglalkozunk velük vagy nem. A kód ezt a feltételhalmazt is lekezeli, bár még ezután is maradt benne 1 kis értelmezési probléma. Ennek megtalálása legyen a Tisztelt Olvasó házi feladata.
A kód része Sike Zoltán informatika tanár oktatási anyagának. Nézzük meg a futtatható Java-kódokat!
import java.util.Random;
public class Main {
public static boolean benneVan(int szam, int[] tomb) {
boolean talalat = false;
for(int i = 0; i < tomb.length; i++) {
if(szam == tomb[i]) {
talalat =
true;
break;
}
}
return talalat;
}
public static int[] tombFeltoltes(int elemszam, int
hatar) {
int[] tomb = new int[elemszam];
Random rnd = new Random();
int szam;
for(int i = 0; i < tomb.length; i++) {
do{
szam =
rnd.nextInt(hatar) + 1;
}while (benneVan(szam, tomb));
tomb[i] = szam;
}
return tomb;
}
public static int[] kisebbNagyobb (int[] szamok) {
int[] indexek = new int[szamok.length];
int db = 0;
for(int i = 0; i < szamok.length; i++) {
if(i == 0) {
if(szamok[i]
< szamok[i+1]) {
indexek[db] = i;
db++;
}
}else if(i == szamok.length - 1) {
if(szamok[i-1]
< szamok[i]) {
indexek[db] = i;
db++;
}
} else if((szamok[i] < szamok[i+1])
&& (szamok[i-1] < szamok[i])) {
indexek[db] =
i;
db++;
}
}
return indexek;
}
public static void tombkiiras(int[] tomb){
for(int i = 0; i < tomb.length; i++) {
System.out.print(tomb[i] + " ");
}
}
public static void main(String[] args) {
int[] szamok = tombFeltoltes(10, 100);
tombkiiras(szamok);
System.out.println();
tombkiiras(kisebbNagyobb(szamok));
}
}
Végeredmény (például):
20 71 19 34 45 40 96 46 48 77
0 3 8 9 0 0 0 0 0 0
Házi feladat - Mondjunk egy olyan, már részletesen kifejtett algoritmust, amelyben szintén fontos a szomszédos elemek figyelése? Ha tudjuk a választ, programozzuk le!
A megoldás fejezete a képre kattintva érhető el.