Gyakorlati alapok
Dönteni kell! (if - else)
A számítógép nemcsak számolni képes, hanem dönteni is és ez óriási lehetőségeket nyitott meg az informatikában. Erről részletesen írok Az algoritmus fogalma című fejezetben.
Mindennapi életünk során napjában rengetegszer kell döntenünk. Például ha piros a lámpa, várakoznom kell és csak zöld lámpa esetén léphetek le a járdáról. Nézzük meg ezt a döntési kényszert pszeudokód formájában:
HA(lámpa == piros){
várakozás();
}
MÁSKÉNT
séta();
A döntés kényszerét néha mindannyian átérezzük: ennek során válaszutak elé érkezünk, ahonnan többféle (de minimum 2) út vezet tovább:
A döntés kényszere során feltételek merülnek fel, valójában ezen feltételek határozzák meg, hogy melyik utat választjuk (nevezik ágaknak is).
A választás után csakis az egyik úton-ágon mehetünk tovább. Programozás-technikailag ekkor csakis az egyik ág kerül végrehajtásra.
Mindez a Java-nyelvben nagyon egyszerűen megfogalmazható:
if
(feltételek){akkor ez történik;
}
else
ez történik;
Programozás-technikailag sok, további lehetőségünk van. Például több feltételből válogathatunk...
if(1. feltétel){
akkor ez történik;
}
else if(2. feltétel){
akkor ez történik;
}
else if(3. feltétel){
akkor ez történik;
}
else
ez történik;
...ám ebben az esetben valójában több választási utunk-águnk keletkezik.
Gyakran nemcsak 1 feltétel, hanem 2 vagy több egyidejű feltétel teljesülése szükséges a döntéshez. Például a fenti, gyalogátkelős döntési mechanizmust csak naiv gyalogosok futtatják le magukban, a tapasztaltak önmaguk védelmében további feltételeket is beiktatnak (zöldben is körülnéznek, hogy nem jön-e autó):
HA(lámpa == piros){
várakozás();
}
MÁSKÉNT HA(lámpa == zöld ÉS láthatóAutó != 0){
várakozás();
}
MÁSKÉNT
séta();
Ezzel szemben mit csinál a felelőtlen diák?
HA(láthatóAutó != 0 ÉS láthatóRendőr != 0){
várakozás();
}
MÁSKÉNT
futás();
Elméletileg bármennyi else if águnk lehet, de ne felejtsük el, hogy ekkor mindegyikhez feltételt is kell hozzárendelnünk, ami adott mennyiség után roppant számításigényes vagy egyszerűen értelmetlen. Az alábbi, félkész, valójában jó, de önmagában NEM futtatható Java-kódban 12 db else if ágat láthatunk, amely kód része egy készülő zenei projektnek:
public static int [] KonverterToBinary(String hangNev){
//0c, 1c#, 2d, 3d#, 4e, 5f, 6f#, 7g, 8g#, 9a, 10a#, 11h
int [] tomb = new int[12];
for(int i = 0; i < tomb.length; i++){
tomb[i] = 0;
}
for(int i = 0; i < hangNev.length(); i++){
int j = i;
if (hangNev.length() > (i+1)) {
j = i+1;
}
char karakter = hangNev.charAt(i);
char karakterNext = hangNev.charAt(j);
if(karakter == 'c' && karakterNext == '#'){
tomb[1] = 1;
}
else if(karakter == 'c'){
tomb[0] = 1;
}
else if(karakter == 'd' && karakterNext == '#'){
tomb[3] = 1;
}
else if(karakter == 'd'){
tomb[2] = 1;
}
if(karakter == 'e' && karakterNext == '#'){
tomb[5] = 1;
}
else if(karakter == 'e'){
tomb[4] = 1;
}
else if(karakter == 'f' && karakterNext == '#'){
tomb[6] = 1;
}
else if(karakter == 'f'){
tomb[5] = 1;
}
else if(karakter == 'g' && karakterNext == '#'){
tomb[8] = 1;
}
else if(karakter == 'g'){
tomb[7] = 1;
}
else if(karakter == 'a' && karakterNext == '#'){
tomb[10] = 1;
}
else if(karakter == 'a'){
tomb[9] = 1;
}
else if(karakter == 'h'){
tomb[11] = 1;
}
}
for(int i = 0; i < tomb.length; i++){
System.out.print(tomb[i]);
}
return tomb;
}
Demonstrációképpen az alábbi, futtatható Java-kódban egy többszörös feltétel leprogramozását tanulmányozhatjuk. A szökőév kiszámítása ugyanis több, egyidejű feltétel teljesülését kívánja meg:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int ev = 0;
Scanner scanner = new Scanner (System.in);
System.out.println ("Kérem, hogy adja meg az évszámot!");
String elem = scanner.nextLine();
ev = Integer.parseInt(elem);
if ((ev > 1582) && (ev % 4 == 0) && (ev % 100 != 0) || (ev %
400 == 0)){
System.out.println ("Az év
szökőév.");
}
else
System.out.println ("Az év NEM
szökőév.");
}
}
Végül fontos kihangsúlyoznunk, hogy a feltételek megszabásának nyilvánvalóan belső logikát kell tükröznie. Például ha nem szeretünk repülni, mert félünk a lezuhanástól, akkor ez egy emberileg érthető és logikus feltétel:
HA(halálFélelem == TRUE){
UtazásVonattal();
}
MÁSKÉNT
UtazásRepülővel();
Ha azonban azért nem szállunk repülőgépre, mert cipőméretünk nagyobb 44-nél, akkor a súlyos belső logikátlanságon felül őrültek is vagyunk, ugyanis csakis ők mondanak ilyeneket:
HA(cipőMéret > 44){
UtazásVonattal();
}
MÁSKÉNT
UtazásRepülővel();
Házi feladat I. - A Boolean című fejezetben ismertetett alkonykapcsoló analógiájára "építsünk" egy egyszerű esőérzékelőt!
A megoldás fejezete a képre kattintva érhető el.
Házi feladat II. - Adott egy egyszerű int típusú szám. Állapítsuk meg, hogy a szám pozitív, negatív vagy 0!
A megoldás fejezete a képre kattintva érhető el.