curs 04

Imbricate în cazul în care-declarație - o declarație care este utilizat ca parte a oricărei alte instrucțiuni sau dacă- altceva-declarație.

Limbajul C ++ permite 256 de niveluri de cuiburi, dar, în practică, rareori trebuie să investească în cazul în care-declarație privind „o astfel de adâncime.“ demonstrează utilizarea imbricate utilizând un alt program de imbunatatire „Magic Number“ (în cazul în care jucătorul primește răspunsul programului la un răspuns greșit).

// Programul "Număr Magic":

using namespace std;

magie int; // numar magic

ghici int; // opțiune utilizator

Magic = rand (); // Ia un număr aleatoriu.

cout <<"Введите свой вариант магического числа: ";

cout <<" ** Правильно **\n";

cout <

cout <<". Очень жаль, но вы ошиблись.";

dacă (ghici> magie) cout <<"Ваш вариант превышает магическое число.\n";

cout altceva <<" Ваш вариант меньше магического числа.\n";

O structură de programare foarte frecvente, care se bazează pe o imbricată if-declarație este o „scară“ if-else-dacă. Acesta poate fi reprezentat după cum urmează.

Aici, în condițiile unui element se referă la expresia condițională. Expresiile condiționate sunt evaluate de sus în jos. De îndată ce orice sucursală a rezultatului este găsit adevărat, va urma instrucțiunile asociate cu această ramură, iar restul de „scara“ este omisă. Dacă găsiți că nici una dintre aceste condiții nu este adevărat, ultima altfel, declarația va fi executată (se poate presupune că acesta acționează ca o condiție, care este implicit). În cazul în care ultima parte-declarație nu este specificată, și toți ceilalți au fost false, atunci, în general, nici o acțiune nu va fi executat.

Pentru bucla - seria cel mai versatil din C ++.

În acest capitol ne uităm la ciclul mai în detaliu, și veți ști cât de puternic și mijloacele de programare flexibile este. Să începem cu formele tradiționale de utilizare.

Astfel, totalul pentru formatul de înregistrare în buclă pentru a executa în mod repetat o singură instrucțiune este după cum urmează.

pentru (initializare increment, expresie) declarație;

În cazul în care o buclă pentru este proiectat pentru a executa în mod repetat o instrucțiune nu este, și unitatea de program, formatul său general, este după cum urmează.

pentru (expresia de inițializare; increment)

Elementul este în mod tipic o declarație de atribuire de inițializare care setează variabila de control în buclă egală cu valoarea inițială. Această variabilă acționează ca un contor care controlează ciclul de lucru. Expresia element este o expresie condițională, în care valoarea testată a ciclului variabil manipulat. Rezultatul acestui test determină pentru bucla este executată din nou sau nu. Element increment - o expresie care definește modul în care valoarea ciclului variabil manipulate după fiecare iterație. Vă rugăm să rețineți că toate aceste elemente ale buclei trebuie să fie separate prin punct și virgulă. Pentru bucla va fi executată atâta timp cât calcularea elementului de expresie dă rezultatul adevărat. Odată ce această expresie condițională devine falsă, bucla este finalizată, iar programul continuă cu următoarea declarație bucla pentru.

Următorul program pentru bucla este utilizat pentru a afișa rădăcina pătrată a valorilor extrase din numerele de la 1 la 99. De notat că, în acest exemplu, ciclul variabil de control numit num.

using namespace std;

pentru (num = 1; num<100; num++)

sq_root = sqrt ((double) num);

Programul utilizat este o altă caracteristică standard C ++: sqrt (). Această funcție returnează rădăcina pătrată a argumentului său. Argumentul trebuie să fie de tip dublu. și de aceea funcția de apel sqrt () este furnizat de tipul dublu parametru num. Funcția returnează, de asemenea, o valoare de tip dublu. Fii atent la ceea ce este inclus în antetul programului . deoarece acest fișier antet oferă suport pentru funcția sqrt ().

Important! În plus față de funcția sqrt (), C ++ suportă o gamă largă de alte funcții matematice, cum ar fi sin (), cos (), tan (), log (), ceil () și podea (). Amintiți-vă că toate funcțiile matematice necesită includerea în antetul programului .

Comanda pentru ciclul variabil poate să varieze ca increment pozitiv sau negativ, iar această valoare incrementală poate fi, de asemenea, orice. De exemplu, următoarele numere de program afișează în intervalul -100-100 decrementarea egal cu 5.

using namespace std;

pentru (i = 100; i> = - 100; i = i-5) cout <

Este important să realizăm că expresia condițională este întotdeauna testat la începutul buclei. Acest lucru înseamnă că, în cazul în care prima verificare a condițiilor va FALSE, codul corpului bucla nu este executată nici măcar o dată. Iată un exemplu:

pentru (count = 10; count<5; count++)

cout <

Aceasta bucla nu va fi executat, deoarece deja la intrarea în valoarea sa de a numărului său de control variabil este mai mare de cinci. Acest lucru face ca expresia condițională (conta <5 ) ложным с самого начала. Поэтому даже одна итерация этого цикла не будет выполнена.

Variațiuni pe bucla

Pentru bucla - una dintre cele mai flexibile instrucțiuni în C ++, deoarece permite o gamă largă de opțiuni de utilizare a acestuia. De exemplu, mai multe variabile pot fi folosite pentru a controla ciclul de. Luați în considerare următorul fragment de cod.

pentru (x = 0, y = 10, x<=10; ++х, --у)

cout <<х <<' ' <<у <<'\n';

Aici, virgule separa instrucțiunea două inițializarea și două expresie incrementală. Acest lucru este de a se asigura că compilatorul „a înțeles“ că există două manualul de instrucțiuni de inițializare și două incrementare (decrementare). În C ++, virgula este un operator, ceea ce înseamnă, în esență, „a face acest lucru și că.“ Alte aplicații ale „virgula“ operatorul vom lua în considerare mai târziu în această carte, dar cel mai adesea este folosit în bucla pentru. La intrarea în ambele variabile sunt inițializate în bucla - x și y. După fiecare iterație, variabila x este incrementat ciclu, în timp ce variabila este decrementat. Utilizarea mai multor variabile de control în ciclul poate simplifica uneori algoritmii. Secțiunile de inițializare și de creștere pentru bucla poate folosi orice număr de instrucțiuni, dar de obicei nu depășește numărul doi.

O expresie condițională, care controlează ciclul pentru, poate fi orice C valid ++ - expresie. În acest caz, nu trebuie să includă neapărat variabilă de control al buclei. În următorul ciclu va fi executat atâta timp cât utilizatorul apasă o tastă de pe tastatură. Acest program prezintă un alt (foarte important) funcția de bibliotecă: kbhit (). Se returnează FALSE dacă nici o tastă a fost apăsată pe tastatură, și TRUE altfel. Funcția nu se așteaptă intrarile de la tastatura, permițând ciclul să fie efectuate atâta timp cât nu se întâmplă. Funcția kbhit () nu este determinată de un standard C ++, dar este inclus în extensia C ++ limbaj, care este susținută de cele mai multe compilatoare. trebuie să includă antetul pentru utilizare în programul . (Acest antet trebuie specificat cu extensia .h. Deoarece nu este definit de standardul C ++.)

using namespace std;

// Afișează numerele de pe ecran până când apăsați orice tastă.

cout <

La fiecare iterație a buclei este numită funcția kbhit (). Dacă porniți programul, apăsați orice tastă, această funcție returnează TRUE, provocând o expresie! Kbhit () dă FALSE, iar ciclul se oprește. Dar, dacă nu apăsați butonul, funcția returnează FALSE, iar expresia! Kbhit () dă TRUE, care va continua ciclul de „rece“.

Absența elementelor în definirea ciclului

In C ++, este permis să se omită orice element antet ciclu (inițializarea. Expresie condițională. Incrementare), sau chiar dintr-o dată. De exemplu, vrem să scrie o buclă care ar trebui să fie efectuată atât timp cât numărul 123. Aici este un astfel de program nu va fi introdus de la tastatura.

using namespace std;

cout <<"Введите число: ";

Aici, în antetul unei buclă nu este expresia increment. Acest lucru înseamnă că, la fiecare ciclu de repetiție face doar un singur lucru: valoarea lui x este comparat cu numărul 123. Dar dacă introduceți numărul utilizând tastatura 123. Expresia condițională este verificată într-o buclă devine falsă și bucla se termină. Deoarece expresia increment în bucla antet lipsește, ciclul variabilă de control nu este modificat.

ciclu nesfârșit - un ciclu care nu se termină niciodată.

Lăsând o expresie condițională gol pentru bucla, puteți crea un ciclu nesfârșit (un ciclu care nu se termină niciodată). O metodă de a crea un astfel de ciclu este prezentat în următorul exemplu pentru structura ciclului.

Acest ciclu va rula la nesfârșit.

Cicluri de întârziere de timp

Programele sunt adesea folosite așa-numitele bucle timp de întârziere. Sarcina lor - doar la „Uciderea timp.“ Pentru a crea astfel de cicluri este suficient pentru a lăsa un corp buclă goală, adică, omite acele instrucțiuni care repetă ciclul la fiecare iterație. Iată un exemplu:

pentru (x = 0; x<1000; х++);

Această buclă incrementeaza doar valoarea variabilei x, și nu face nimic mai mult. Este necesar Semicoloana (sfârșitul liniei), datorită faptului că ciclul de se așteaptă să primească o instrucțiune care poate fi gol (ca în acest caz).

Înainte de a merge mai departe, n-ar strica să experimenteze cu propriile lor variații pe bucla for. Acest lucru va contribui la asigurarea flexibilității și a puterii sale.

Instrucțiunea switch - o ramificare multidirecțional declarație, care vă permite de a alege dintr-un set de alternative.

Înainte de a trece la studiul altor ciclice C ++ - desene și face cunoștință cu o altă instrucțiune de selecție - comutator. Instrucțiunea switch oferă o ramificare multidirecțional. Acesta vă permite să alegeți una dintre cele mai multe alternative. Deși testul multi-direcțional poate fi implementată printr-o secvență de imbricate în cazul în care -Instructions, în multe situații, declarația de comutare este o soluție mai eficientă. Acesta funcționează după cum urmează. Valoarea expresiei este comparată succesiv cu constantele dintr-o listă dată. Atunci când un meci este găsit pentru una dintre condițiile de comparație executate de secvență de instrucțiuni asociate cu această condiție. Formatul total de înregistrare declarație comutator este după cum urmează.

Element al exprimării declarației comutatorului în calcul trebuie să aibă o valoare întreagă sau caracter. (Spunând având, de exemplu, cu virgulă mobilă tip nu este permisă.) Frecvent, comutatorul de control utilizat -vyrazheniya o singură variabilă.

Declarația break se încheie executarea codului, un comutator specific de instrucțiuni.

implicit Q secvența de instrucțiuni de ramură se efectuează în cazul în care nici unul dintre constantele date de caz nu va coincide cu rezultatul calculului comutatorului -vyrazheniya. ramura implicită este opțională. Dacă nu, atunci rezultatele nu se potrivesc expresia cu oricare dintre constantele de caz, nu se iau măsuri. Dacă acest meci este încă dovedit a fi executat instrucțiuni de caz pentru ramura respectivă, până atunci, până când întâlnește o declarație de întrerupere sau se ajunge la comutator -instructions capăt (sau în mod implicit - sau, în acest din urmă caz ​​ramura Q).

Instrucțiuni default-vetvivypolnyayutsya în caz nici unul dintre cazuri constante nu coincid cu rezultatul evaluării comutatorului expresiei.

Deci, pentru aplicația -instructions de comutare trebuie să știe.

■ Comutator manual diferă de cazul în care declarația comutatorul -vyrazhenie poate fi testată numai prin utilizarea egal (de exemplu, pentru un meci cu constantele comutator -vyrazheniya caz specificate), în timp ce condiționată, în cazul -vyrazhenie poate fi de orice tip.

■ Nu există două constante de caz, în aceleași -instructions de comutare nu pot avea valori identice.

■ Instrucțiunea switch este de obicei mai eficientă decât în ​​cazul în care imbricate-declarație.

■ secvență de instrucțiuni asociate cu fiecare caz ramura Q, nu un bloc. Cu toate acestea, comutatorul complet detectează unitatea de -User. Semnificația acestui fapt va deveni evidente după ce se va afla mai multe despre C ++.

Conform C ++ standard de comutare de construcție nu pot avea mai mult de 16384 de caz -Instructions. Dar, în practică (din motive de eficiență) sunt de obicei limitate la un număr mult mai mic de ele.

Utilizarea comutatorului -instructions Programul următor demonstrează. Se creează un sistem simplu de „ajutor“, care descrie scopul -, în cazul în care - și comuta -Instructions. După afișarea listei de subiecte propuse, care ar putea oferi ajutor, programul revine la modul de așteptare până când utilizatorul face o alegere. Valoarea introdusă de utilizator este utilizat în comutatorul de instrucțiuni pentru afișarea informațiilor pe acest subiect. (Ai putea ca un exercițiu pentru a suplimenta informațiile disponibile cu privire la acest subiect, precum și pentru a intra în acest „ajutor“ noul sistem de teme.)

// Demonstrați switch-instrucțiuni pentru un sistem simplu „Help“.

using namespace std;

cout <<"Справка по темам:\n\n";

cout <<"1. for\n";