Dal╣φm p°φkazem je p°φkaz switch. Tento p°φkaz pou╛φvßme k provßd∞nφ
p°φkaz∙ urΦen²ch n∞jak²m v²razem. Nap°. p°edpoklßdejme, ╛e nß╣ program
obsahuje prom∞nnou s Φφslem m∞sφce a my pot°ebujeme vypisovat jmΘno m∞sφce.
To m∙╛eme provΘst nßsledujφcφm p°φkazem:
int mesic;
. . .
switch (mesic) {
case 1: cout
<< "Leden"; break;
case 2: cout
<< "┌nor"; break;
case 3: cout
<< "B°ezen"; break;
case 4: cout
<< "Duben"; break;
case 5: cout
<< "Kv∞ten"; break;
case 6: cout
<< "╚erven"; break;
case 7: cout
<< "╚ervenec"; break;
case 8: cout
<< "Srpen"; break;
case 9: cout
<< "Zß°φ"; break;
case 10: cout
<< "╪φjen"; break;
case 11: cout
<< "Listopad"; break;
case 12: cout
<< "Prosinec"; break;
}
P°φkaz switchvyhodnotφ sv∙j v²raz, v na╣em p°φpad∞ je
to hodnota prom∞nnΘ mesic a provede p°φkaz oznaΦen² p°φslu╣nou hodnotou.
Tuto situaci m∙╛eme takΘ vy°e╣it pomocφ p°φkazu if:
int mesic;
. . .
if (mesic ==
1) {
cout << "Leden";
} else if (mesic
== 2) {
cout << "┌nor";
. . .
Zda pou╛φt p°φkaz if nebo p°φkaz switch rozhodneme podle
poΦtu v∞tvenφ. Ka╛dß Φßst case musφ b²t unikßtnφ a hodnota t∞chto
Φßstφ musφ b²t stejnΘho datovΘho typu a to typu poskytnutΘho v²razem p°φkazu
switch.
Jin²m d∙le╛it²m bodem pou╛φvßnφ p°φkazu switch je pou╛itφ p°φkazu
break
na zßv∞r ka╛dΘho case. P°φkaz break p°edßvß °φzenφ za p°φkaz
switch
a pokraΦuje se prvnφm p°φkazem za switch. Tj. bez pou╛itφ p°φkazu
break
bude provßd∞nφ pokraΦovat p°φkazy dal╣φ Φßsti
case. V p°edchozφm
p°φkladu nechceme, aby °φzenφ p°echßzelo z jednΘ Φßsti case do dal╣φ
Φßsti a tedy ka╛dß Φßst case je ukonΦena p°φkazem break.
Toto ale nepo╛adujeme v╛dy. Nap°. nßsledujφcφ Φßst programu zji╣╗uje poΦet
dnφ v zadanΘm m∞sφci (p°estupnΘ roky jsou roky, kde Φφslo roku je d∞litelnΘ
4; v²jimku tvo°φ roky na p°elomu stoletφ, kde jsou p°estupnΘ pouze roky,
u kter²ch stoletφ je d∞litelnΘ 4, tj. roky 1600 a 2000 p°estupnΘ jsou a
roky 1700, 1800 a 1900 p°estupnΘ nejsou):
int mesic, rok;
int pocetDni;
. . .
switch (mesic) {
case
1:
case
3:
case
5:
case
7:
case
8:
case
10:
case
12:
pocetDni = 31; break;
case
4:
case
6:
case
9:
case
11:
pocetDni = 30; break;
case
2:
if ( ((rok % 4 == 0) && !(rok % 100 == 0)) || (rok % 400 == 0)
)
pocetDni = 29;
else
pocetDni = 28;
break;
}
V p°φkazu switch m∙╛eme takΘ pou╛φt implicitnφ p°φkaz na konci
p°φkazu switch k zpracovßnφ v╣ech hodnot, kterΘ se nevyskytly v
╛ßdnΘ p°edchozφ Φßsti case.
int mesic;
. . .
switch (mesic) {
case 1: cout
<< "Leden"; break;
case 2: cout
<< "┌nor"; break;
case 3: cout
<< "B°ezen"; break;
case 4: cout
<< "Duben"; break;
case 5: cout
<< "Kv∞ten"; break;
case 6: cout
<< "╚erven"; break;
case 7: cout
<< "╚ervenec"; break;
case 8: cout
<< "Srpen"; break;
case 9: cout
<< "Zß°φ"; break;
case 10: cout
<< "╪φjen"; break;
case 11: cout
<< "Listopad"; break;
case 12: cout
<< "Prosinec"; break;
default: cout
<< "Toto nenφ p°φpustn² m∞sφc.";
}
Vytvo°te konzolovou aplikaci, ve kterΘ po zadßnφ Φφsla m∞sφce vypφ╣ete
jmΘno m∞sφce. V p°φpad∞ zadßnφ chybnΘho Φφsla m∞sφce vypi╣te chybovΘ hlß╣enφ.
Pokuste se vytvo°it konzolovou aplikaci, kterß bude pracovat jako jednoduchß
kalkulaΦka. Zadßvejte operand, operßtor a druh² operand a vypi╣te v²sledek.
Nynφ op∞t opustφme konzolovΘ aplikace a vyzkou╣φme si pou╛itφ p°φkazu switch
v aplikaci GUI. V tΘto aplikaci na formulß° p°idßme editaΦnφ ovladaΦ (vyprßzdnφme
jej), nad n∞j p°idßme komponentu Label s textem
?Zadej Φφslo dne v t²dnu:?, vedle editaΦnφho
ovladaΦe umφstφme tlaΦφtko ?UrΦi? a pod editaΦnφ
ovladaΦ vlo╛φme dal╣φ komponentu Label pro
v²pis v²sledk∙ (vyprßzdnφme jej). V²sledky budeme zobrazovat v∞t╣φm pφsmem
a barevn∞. Nastavφme tedy vlastnost Font komponenty
Label2
(po v²b∞ru vlastnosti Font
v
Inspektoru
objekt∙ se v mφst∞ hodnoty tΘto vlastnosti zobrazφ tlaΦφtko s t°emi
teΦkami; kliknutφm na toto tlaΦφtko zobrazφme dialogovΘ okno volby pφsma,
kde provedeme po╛adovanΘ nastavenφ) na v∞t╣φ a barevnΘ pφsmo. Obsluha stisknutφ
tlaΦφtka bude tvo°ena p°φkazem:
switch (Edit1->Text.ToInt())
{
case 1: Label2->Caption = "Pond∞lφ"; break;
case 2: Label2->Caption = "┌ter²"; break;
case 3: Label2->Caption = "St°eda"; break;
. . . zde
dopl≥te dal╣φ p°φkazy
default: Label2->Caption = "Chyba";
}
Chyb∞jφcφ p°φkazy dopl≥te sami a program vyzkou╣ejte.
Vytvo°te aplikaci GUI, kterß po zadßnφ Φφsla m∞sφce vypφ╣e jmΘno m∞sφce.
V p°φpad∞ zadßnφ Φφsla mimo interval <1,12> vypi╣te chybovΘ hlß╣enφ.
Nßsledujφcφ konzolovß aplikace rozlo╛φ zadanΘ p°irozenΘ Φφslo na jednotlivΘ
Φφslice (od nejni╛╣φho °ßdu k nejvy╣╣φmu). V programu je chyba. Nalezn∞te
a odstra≥te ji (chybnΘ po°adφ p°φkaz∙).
Vytvo°te konzolovou aplikaci, kterß rozlo╛φ zadanΘ p°irozenΘ Φφslo na prvoΦinitele.
Podmφnka cyklu while urΦuje ukonΦenφ cyklu. P°φkazy cyklu jsou provßd∞ny
dokud tato podmφnka je pravdivß (nenula). P°φkazy cyklu by tuto podmφnku
m∞ly ovliv≥ovat. Jinak hrozφ nebezpeΦφ, ╛e provßd∞nφ cyklu nikdy neskonΦφ.
V tomto p°φpad∞ je nutno ukonΦit prßci programu pomocφ Sprßvce ·loh Windows.
V C++ Builderu obvykle program spou╣tφme volbou Run | Run (nebo
stiskem klßvesy F9 nebo tlaΦφtkem Run na palet∞ nßstroj∙). Z prost°edφ
Builderu lze takΘ ukonΦit spu╣t∞n² program. Provedeme to volbou Run
| Program Reset nebo kombinacφ klßves Ctrl+F2.
Podφvejte se na nßsledujφcφ konzolovou aplikaci.
cout << endl
<< "ZaΦßtek programu ... " << endl << endl;
int i = 6;
while (i-- > 0) {
cout <<
endl << "Mßme je╣t∞ " << i << " problΘm∙.";
}
cout << "\b!\nSlßva";
cout << endl
<< endl <<
"Pro pokraΦovßnφ stiskni libovolnou klßvesu ... ";
getch();
Pokuste se urΦit, co provede p°φkaz:
cout << "\b!\nSlßva";