Szelekció Döntéshozatal
Elágazásos algoritmus-szerkezet Eddig az ún. szekvenciális (lineáris) algoritmust alkalmaztunk a parancsok egyenként egymás után hajtüdnak végre. Bizonyos esetekben egy adott feltételtől függően egy adott utasítás vagy végrehajtódik, vagy nem a programnak döntést kell hoznia. Elágazásos algoritmus az algoritmus egyes részei egy adott feltételtől függnek.
A feltételes operátor A feltételes operátor lehetővé teszi, hogy a program futása során eldöntse szükséges-e az adott parancs végrehajtása, vagy nem. A feltételes operátor általános alakja: if(kifejezés) utasítás; Ha a kifejezés logikai igaz eredményt ad, az utasítás végrehajtódik.
Példa Ha az a változó értéke pozitív, csökkentsd eggyel: if(a>0) a--;
Választás két lehetőség közül Néha szükséges, hogy két lehetőség közül választhatunk, egy adott feltételtől függően. Általános alak: if(feltétel) utasítás1; else utasítás2; Ha a feltétel eredménye logikai igaz, végrehajtódik az utasítás1, ellenben utasítás2.
Példa Írj programot az x valós szám abszolút értékének meghatározására. Algoritmus: Ha x<0 akkor abs=-x különben abs=x. #include<iostream> int main() double x,abs; cout<<"x=";cin>>x; if(x<0) abs=-x; else abs=x; cout<<"abs="<<abs<<endl; system("pause"); return 0;
Példa Írj programot az x és y egész számok nagyobbikának meghatározásához. Algoritmus: ha x>y akkor max=x különben max=y. #include<iostream> int main() int x,y,max; cout<<"x=";cin>>x; cout<<"y=";cin>>y; if(x>y) max=x; else max=y; cout<<"max="<<max<<endl; system("pause"); return 0;
Példa Az előző példa jobb változata: Algoritmus: max=x; ha y>max akkor max=y; A javítás több változó esetén hatékonyabb. #include<iostream> int main() int x,y,max; cout<<"x=";cin>>x; cout<<"y=";cin>>y; max=x; if(y>max) max=y; cout<<"max="<<max<<endl; system("pause"); return 0;
Példa Írj programot három egész szám minimumának meghatározására. Algoritmus: min=x ha y<min akkor min=y ha z<min akkor min=z. #include<iostream> int main() int x,y,z,min; cout<<"x=";cin>>x; cout<<"y=";cin>>y; cout<<"z=";cin>>z; min=x; if(y<min) min=y; if(z<min) min=z; cout<<"min="<<min<<endl; system("pause"); return 0;
Példa Adott két valós szám, x és y. Ha x<y, a k változó értéke legyen 1, ha a feltétel nem teljesül, k legyen 0. Algoritmus: Ha x<y akkor k=1 különben k=0. #include<iostream> int main() double x,y,k; cout<<"x=";cin>>x; cout<<"y=";cin>>y; if(x<y) k=1; else k=0; cout<<"k= "<<k<<endl; system("pause"); return 0;
Utasításblokk Az utasításblokk utasítások sorozata kapcsos zárójelek - és - közé zárva. A feltételes utasításban az utasításblokk egy utasításként szerepel. if(kifejezés) utasítások;... else utasítások;...
Példa Írj programot amely bekéri az x és y egész számokat, majd növekvő sorrendben írja ki őket. Algoritmus: Ha x>y akkor temp=x x=y y=temp. Blokk #include<iostream> using namespace std; int main() int x,y,temp; cout<<"x=";cin>>x; cout<<"y=";cin>>y; if(x>y) temp=x; x=y; y=temp; cout<<x<<'\t'<<y<<endl; system("pause"); return 0;
Egy elágazáson belül újabb elágazásokat is használhatunk. Például: if(kifejezés1) if(kifejezés2) utasításblokk Az if-if beágyazott elágazás
Az if-else beágyazott elágazás Példa: if(kifejezés1) utasításblokk_1 else if(kifejezés2) utasításblokk_2 else utasításblokk_3
Példa Írj programot, amely kivizsgálja, hogy az (a, b) intervallum tartalmazza-e az x valós számot. Algoritmus: ha x>a akkor ha x<b akkor tartalmazza különben nem tartalmazza különben nem tartalmazza. #include<iostream> int main() int x,a,b; cout<<"a=";cin>>a; cout<<"b=";cin>>b; cout<<"x=";cin>>x; if(x>a) if(x<b) cout<<"tartalmazza"<<endl; else cout<<"nem tartalmazza"<<endl; else cout<<"nem tartalmazza"<<endl; system("pause"); return 0;
Az && logikai operátor alkalmazása Az if(kif1) if(kif2) utasítás helyett alkalmazhatjuk az if(kif1 && kif2) utasítás programstruktúrát. #include<iostream> int main() int x,a,b; cout<<"a=";cin>>a; cout<<"b=";cin>>b; cout<<"x=";cin>>x; if((x>a)&&(x<b)) cout<<"tartalmazza"<<endl; else cout<<"nem tartalmazza"<<endl; system("pause"); return 0;
A?: operátor alkalmazása Az if-else szerkezet helyett használhatjuk a? : feltételes utasítást: kifejezés? u_1 : u_2 Ha a kifejezés logikai értéke igaz, az u_1 utasítás, ellenkező esetben az u_2 utasítás értékelődik ki. Az u_1 utasítás után kötelező a kettőspont (:). Példa: y= x 3, x 0 2x, különben y=(x>0)? x+3 : -2*x;
Többágú elágazások Az egész vagy karakter típusú kifejezés különböző értékeire egy adott utasítástól kezdődően más és más utasítások hajtódnak végre. u1 u2 u3 u4 kifejezés
A switch utasítás A C++ programozási nyelvben a többágú elágazást a switch utasítással hajthatjuk végre: switch(kifejezés) case érték 1 : utasítás 1 ; case érték 2 : utasítás 2 ;... case érték n : utasítás n ; default: utasítás n+1 ; A default címke (label) nem kötelező. Ha hiányzik, akkor a vezérlés helyette a switch utáni első utasításra helyeződik át. switch váltó case eset
Példa Írjuk fel azokat az utasításokat, amelyekkel a A C++ nyelvet könnyű tanulni. mondat szavait az n- edik szótól kezdve írja ki. switch(n) case 1: cout<<"a "; case 2: cout<<"c++ "; case 3: cout<<"nyelvet "; case 4: cout<<"konnyu "; case 5: cout<<"tanulni."; cout<<endl;
A break feltétel nélküli ugrás A break utasítás segítségével kiugorhatunk a program egyik ágából az utána következő első utasításra. Legtöbbször a switch utasításban használjuk. switch(nap) case 1: cout<<"hetfo"; break; case 2: cout<<"kedd"; break; case 3: cout<<"szerda"; break; case 4: cout<<"csutortok"; break; case 5: cout<<"pentek"; break; case 6: cout<<"szombat"; break; case 7: cout<<"vasarnap"; break; default: cout<<"hiba!";