CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
Toate problemele prezentate pana acum au putut fi rezolvate folosind numai functii de citire / scriere, atribuiri si instructiunea de decizie (IF). Cele mai multe dintre probleme vor necesita structuri de date mai complexe precum si folosirea unor noi instructiuni, care sa permita repetarea de un numar oarecare de ori a unor parti din algoritm.
Sa luam ca exemplu algoritmul de calcul al sumei a 2 numere introduse de la tastatura. El consta in citirea valorilor pentru cele doua numere si afisarea sumei acestora. Nu era nevoie decat de doua variabile, cate una pentru fiecare numar. Acest exemplu este doar unul didactic, in practica ne intalnindu-se prea des cazuri in care sa fie nevoie de a suma doua numere. Generalizarea problemei pentru n numere va modifica substantial algoritmul nostru. Nu vom putea folosi cate o variabila pentru fiecare numar introdus deoarece nu cunoastem exact cate numere avem (n este introdus de utilizatorul programului, altfel algoritmul nu ar mai fi general). Chiar daca s-ar sti ca avem, sa zicem, 2500 de numere ar fi cam dificil sa utilizam 2500 de variabile distincte.
Problema noastra se poate rezolva simplu daca utilizam o instructiune iterativa (ciclica), care sa ne permita repetarea de n ori a urmatoarei secvente de operatii:
citim o valoare folosind variabila "a";
adunam valoarea citita la rezultatul partial, memorat in variabila "s";
Instructiunile ce descriu aceste prelucrari ciclice sunt compuse din doua parti:
corpul ciclului, format din prelucrarile ce se doresc a fi realizate de mai multe ori;
conditia, pe baza careia se stabileste daca se vor mai executa prelucrarile din ciclu (este obligatorie executarea prelucrarilor din corpul instructiunii de un numar finit de ori);
Corpul ciclului sau conditia trebuie sa contina acele operatii care, dupa efectuarea de un numar de ori a corpului instructiunii, sa determine schimbarea valorii de adevar a conditiei, permitand incheierea executarii instructiunii ciclice si trecerea la urmatoarele instructiuni ale algoritmului. In cazul in care este neglijat acest aspect, programul se va executa la infinit.
Conditia trebuie sa fie o expresie cu valoare logica. Reamintesc faptul ca in limbajul C++ nu exista un tip de date logic, dar se utilizeaza conventia ca orice valoare ne nula sa fie considerata ca adevar iar valoarea zero ca valoarea fals. In consecinta, orice expresie cu valoare de tip intreg va putea fi utilizata drept conditie intr-o instructiune iterativa.
In finalul paragrafului o chestiune de terminologie: o executie a corpului instructiunii poarta numele se iteratie.
Instructiunile iterative pot fi clasificate, in functie de momentul evaluarii conditiei, astfel:
cicluri cu test initial (While si For)- evaluarea conditiei se face inaintea fiecarei iteratii;
cicluri cu test final (Do .. While)- evaluarea conditiei se face la sfarsitul fiecarei iteratii;
Instructiunea While ("atat timp cat") este o instructiune iterativa cu test initial si are urmatoarea sintaxa:
while ( <conditie>) instructiune;
unde:
<conditie> - orice expresie cu valoare intreaga;
instructiune - orice instructiune valida a limbajului;
Mod de functionare:
daca expresia este adevarata se executa prelucrarile din ciclu;
altfel, se trece la urmatoarea instructiune de dupa while;
Cu alte cuvinte, prelucrarile din ciclu se executa atat timp cat conditia este adevarata. Daca expresia este falsa de la inceput corpul ciclului nu se va executa deloc.
Problema propusa in paragraful precedent se poate rezolva astfel:
Exemplul 1 Suma a n numere introduse de utilizator
#include <iostream.h>
void main()
cout<<'Suma este= '<<suma;
Exemplul 2: Suma primelor n numere naturale.
#include <iostream.h>
void main()
cout<<'Suma este: '<<suma;
Observatie: Se poate utiliza o scriere mai compacta, care elimina si necesitatea utilizarii variabilei i:
while (n--) suma+=n;
Modul de executie este urmatorul:
valoarea conditiei este valoarea variabilei n, valoare care scade cu o unitate dupa fiecare iteratie (postdecrementare)
conditia devine falsa atunci cand valoarea lui n devine zero;
Instructiunea do .. while este o instructiune iterativa cu test final si are urmatoarea sintaxa:
do
instructiune;
while (<conditie>)
Mod de functionare:
se executa corpul instructiunii;
se evalueaza conditia: daca aceasta este adevarata se reia executia, altfel se trece la urmatoarea instructiune din program;
Deosebirea esentiala fata de instructiunea while este aceea ca expresia se evalueaza dupa iteratie.
In cazul in care conditia este falsa de la inceput, corpul instructiunii se executa o singura data. Utilizarea instructiunii do .. while este mai putin frecventa (se foloseste pentru acele prelucrari care trebuiesc executate cel putin o data).
Daca rescriem exemplul 1 utilizand do .. while, obtinem:
do
while(i<=n);
Una dintre cele mai puternice instructiuni iterative ale limbajului C (si nu numai) este instructiunea for, care are urmatoarea sintaxa:
for (expresie1; expresie2; expresie3) [instructiune];
unde:
expresie1, expresie2, expresie3 - expresii valide in C++;
instructiune - orice instructiune a limbajului C++;
Parantezele patrate semnifica faptul ca instructiunea este optionala;
Mod de executie:
expresiile au urmatoarea semnificatie generala:
expresie1 - expresie de initializare;
expresie2 - conditia de continuare a executiei ciclului;
expresie3 - expresie de actualizare;
atat timp cat expresie2 este adevarata se executa corpul ciclului;
de fiecare data se evalueaza expresia de actualizare, care are rolul esential de a determina ca, dupa un numar de iteratii, expresie2 sa devina falsa;
expresie1 se evalueaza o singura data;
Exemplul 3: Reluam exemplul 1 folosind instructiunea for:
#include <iostream.h>
void main()
cout<<"suma ="<<suma;
Observatii:
Variabila i este utilizata pe post de "contor" al instructiunii for, numarand la a cata iteratie s-a ajuns.
Executia instructiunii for se incheie atunci cand numarul de iteratii devine egal cu n. Initializarea lui i cu 1 se realizeaza o singura data, la inceput; i <= n este conditia de continuare a executiei; i++ se efectueaza dupa fiecare executie a ciclului (postincrementare).
Aceasta forma a instructiunii for este cea mai utilizata. Un alt mod de a descrie executia acesteia este urmatorul: pentru i de la 1 la n se executa corpul instructiunii.
Nu este obligatoriu ca valoarea lui i sa se mareasca de fiecare data cu o unitate.
Nu este obligatorie utilizarea tuturor celor trei expresii din for, dar este obligatorie scrierea separatorului ";" .
Exemplul de mai sus se poate rescrie astfel:
for( ;n--; )
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1777
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved