Lecţia 5 – Structura repetitivă WHILE și algoritmi specifici
Clasa a V-a
Structura repetitivă cu număr necunoscut de pași. Instrucțiunea while
În cazul structurii repetitive cu un număr necunoscut de pași, numărul de repetiții al unei acțiuni nu se
poate determina cu precizie din start și în funcție de momentul în care se verifică condiția de continuare a
repetiției, structura repetitivă cu un număr necunoscut de pași poate fi:
condiționată anterior – condiția este verificată înainte de executarea instrucțiunii/instrucțiunilor - while
condiționată posterior – condiția este verificată după prima executare a instrucțiunii/ instrucțiunilor –
do – while (Deci în acest caz, instrucțiunea/instrucțiunile care trebuiesc repeptate, se vor executa cel
puțin o dată indiferent dacă condiția este sau nu îndeplinită).
Forma generală prin care se descrie structura repetitivă cu un număr necunoscut de pași condiționată
anterior este:
cât timp condiție execută
instrucțiune;
sfârșit_cat_timp
iar cel prin care se descrie structura repetitivă cu un număr necunoscut de pași condiționată posterior este:
execută
instrucțiune
cât timp condiție
Exemplu
Se citesc numere până la citirea lui zero. Scrieți algoritmul pentru calcularea sumei numerelor citite.
Varianta 1 Varianta 2
întreg x, s; întreg x, s;
început început
citește x; execută
cât timp x!=0 execută citește x;
s=s+x; s=s+x;
citește x; cât timp x!=0;
sfârșit_cât_timp; scrie s;
scrie s; sfârșit
sfârșit
Lecţia 5 – Structura repetitivă WHILE și algoritmi specifici
Clasa a V-a
Structura repetitivă cât timp se execută astfel:
Etapa 1. Se evaluează condiţia
Etapa 2. Dacă condiția este adevărată, se execută instrucțiunea/instrucțiunile, apoi revenim la Etapa 1
Dacă condiția NU este adevarată, se oprește execuția structurii cât timp.
Structura repetitivă execută ... cât timp se execută astfel:
Etapa 1. Se execută instrucțiunea/instrucțiunile
Etapa 2. Se evaluează condiţia. Dacă condiția este adevărată revenim la Etapa 1
Dacă condiția NU este adevărată, se oprește execuția structurii execută ... cât timp
Structura repetitivă cu test inițial. Instrucțiunea while
În C++, pentru structura cât timp, se utilizează instrucțiunea while care are următoare sintaxă:
while (condiție)
{Instrucțiune;}
Observații:
1. dacă la prima evaluare a condiţiei aceasta este falsă, instrucțiunea/instrucţiunile nu se execută
2. dacă sunt două sau mai multe instrucţiuni care trebuie executate repetat în while, ele se vor încadra între
{}
În C++, pentru structura execută ... cât timp, se utilizează instrucțiunea do ... while care are următoare sintaxă:
do
{Instrucțiune;}
while (condiție);
Observație:
Instrucțiunea/instrucțiunile se execută cel puțin o dată indiferent dacă condiția este sau nu îndeplinită.
Algoritmi elementari care se implementeză cu ajutorul instrucțiunii while
1. Citirea și prelucrarea numerelor până la citirea unui număr cu o anumită proprietate
Exemplu: Se citesc numere până la citirea lui 0 să se calculeze suma numerelor citite.
cin>>n;
s=0;
while(n!=0)
{s=s+n;
cin>>n;
}
cout<<s;
}
Aplicații
1. Se citesc pe rând numere naturale până la citirea unui număr divizibil cu 3. Să se determine cel mai mare
număr citit și de câte ori apare.
2. Se citesc pe rând numere naturale până la citirea lui 0. Să se afișeze, pentru fiecare număr citit, pe rânduri
diferite separate prin spațiu numărul citit urmat de oglinditul său.
3. [Link]
4. [Link]
Lecţia 5 – Structura repetitivă WHILE și algoritmi specifici
Clasa a V-a
2. Prelucrarea cifrelor unui număr n
a. determinarea numărului de cifre
cin>>n;
nr_cifre=0;
while(n!=0)
{
n=n/10; ///elimin ultima cifră
nr_cifre++;/// număr cifra eliminată
}
cout<<nr_cifre;
Caz particular: când citim valoarea 0 se va afișa 0, deoarece instrucțiunea while nu se execută, dar numărul
0 are o cifră!!!
Cum rezolvăm această situație? Tratăm separat cazul n=0, sau folosim instrucțiunea do ... while()
ATENȚIE !!!!
Atunci când prelucrăm cifrele unui număr valoarea acestuia la finalul algoritmului devine 0!!!
b. produsul cifrelor
cin>>n;
produs=1;
while(n!=0)
{uc=n%10; ///determin ultima cifră a lui n
n=n/10; ///elimin ultima cifră
produs = produs *uc;///înmulțesc la produsul anterior ultima cifră
}
cout<<produs;
c. construire oglindit (oglinditul unui număr este numărul citit de la dreapta la stânga)
cin>>n;
ogl=0; ///inițializez oglinditul cu 0
while(n!=0)
{uc=n%10; ///determin ultima cifră a lui n
n=n/10; ///elimin ultima cifră
ogl=ogl*10+uc;///construiesc oglinditul
}
cout<<ogl;
d. verificare palindrom (un număr este palindrom dacă este egal cu oglinditul său, exemplu 121)
cin>>n;
copie_n=n; ///realizez o copie pentru numărul
citit ogl=0; ///inițializez oglinditul cu 0
while(n!=0)
{uc=n%10; ///determin ultima cifră a lui n
n=n/10; ///elimin ultima cifră
ogl=ogl*10+uc;///construiesc oglinditul
}
if(ogl==copie_n) cout<<”Număr palindrom”;
else cout<<”Numărul nu este palindrom”;
Lecţia 5 – Structura repetitivă WHILE și algoritmi specifici
Clasa a V-a
e. construire număr cu cifrele pare ale lui n
cin>>n;
n_nou=0;
p=1;
while(n!=0)
{uc=n%10; ///determin ultima cifră a lui
n n=n/10; ///elimin ultima cifră
if(uc%2==0)
{n_nou=n_nou+uc*p;
p=p*10;
}}
cout<<n_nou;
f. determinarea cifrei minime/maxime din scrierea lui n
cin>>n;
cif_min=9;///inițializez cifra minima cu cea mai mare cifră
cif_max=0;///inițializez cifra maximă cu cea mai mică cifră
while(n!=0)
{uc=n%10; ///determin ultima cifră a lui n
n=n/10; ///elimin ultima cifră
if(uc>cif_max) cif_max=uc; if(uc<cif_min)
cif_min=uc;
}
cout<<cif_min<<” “<<cif_max;
Aplicații
1. [Link]
2. [Link]
3. [Link]
4. [Link]
3. Verificare dacă n este o putere a lui k
cin>>n>>k;
copie=n;///facem o copie pentru
n putere=0;
while(n%k==0)
{n=n/k; ///împart numărul la k
putere++; ///contorizez
puterea
}
if(putere!=0 && n==1) cout<<copie<<” este o putere a lui ”<<k; else
cout<<copie<<” NU este o putere a lui ”<<k;
4. Determinare prima cifră
cin>>n;
while(n>9)
n=n/10; ///elimin ultima
cifră cout<<n;
Lecţia 5 – Structura repetitivă WHILE și algoritmi specifici
Clasa a V-a
5. Determinare primele 2 cifre
cin>>n;
while(n>99)
n=n/10; ///elimin ultimacifră
cout<<n;
Aplicații
1. [Link]
2. [Link]
3. [Link]
4. [Link]
TEMA
1. [Link]
2. [Link]
3. [Link]
4. [Link]
5. [Link]
6. [Link]
7. [Link]
Succes!