7. P°φkazy °φdφcφ b∞h programu II
  1. 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:

  2. 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 switch vyhodnotφ 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.";
    }
  3. 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φ.
  4. 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.
  5. 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:

  6. 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.
  7. 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φ.
  8. 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∙).

  9. int cislo, cislice;
    cout << "Zadej p°irozenΘ Φφslo: ";
    cin >> cislo;
    while (cislo) {
      cislo /= 10;
      cislice = cislo % 10;
      cout << cislice << endl;
    }
  10. Vytvo°te konzolovou aplikaci, kterß rozlo╛φ zadanΘ p°irozenΘ Φφslo na prvoΦinitele.
  11. 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.

  12. 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.
  13. Podφvejte se na nßsledujφcφ konzolovou aplikaci.

  14. 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";
7. P°φkazy °φdφcφ b∞h programu II