Sunteți pe pagina 1din 4

Instructiunea WHILE

Sintaxa :

while (expL) instructiune;

Efect
1.
Se evalueaza expresia logica
2.
Daca valoarea expresiei logice este 1 (adevarata) se executa instructiunea si se revine la pasul 1
3.
daca valoarea expresiei logice este zero (falsa) se continua cu instructiunea de dupa punct-virgula
Observatii:

in esenta, cat timp valoarea expresiei logice este adevarata, se executa instructiunea
daca valoarea expresiei logice este falsa de la inceput atunci instructiunea nu se mai executa
daca WHILE trebuie sa repete mai mult de o instructiune, acestea se vor incadra intre acolade;
instructiunea WHILE se mai numeste repetitiva cu test initial sau conditionata anterior, pentru
ca intai verifica valoarea conditiei si apoi executa secventa ce trebuie repetata
Problema exemplu. Fie A si B doua valori naturale. Sa se simuleza impartirea cu rest a lui A la B (prin scaderi
repetate) si sa se determine catul si restul impartirii.
#include <iostream.h>
void main()
{//declararea
int A, B, C=0;
//citirea
cin>>A>>B;
//prelucrarea
while(A>=B) {A=A-B; C++;};
//Afisarea rezultatelor
cout<<"catul este :"<<C<<endl;
cout<<"restul este : "<<A;
}
Explicatii. Cand impartim pe A la B cautam de cate ori se cuprinde B in A, altfel spus cate scaderi ale lui B din
a se pot face.
Un tip e problema ce necesita folosirea instructiunii WHILE este prelucrarea unui sir de valori ce se incheie cu
zero.

Ideea : Se citeste fiecare valoare si daca este nenula se prelucreaza; Acest pas se repeta pana citim valoarea zero.
(Ex: 23, -4, 5, 12, 79, 0).
Codul corespunzator este:
cin>>x;
While (x!=0) { //prelucrez valoarea X citita;
..............................
//citesc urmatoarea valoare din sir
cin>>x;};
Probleme ce folosesc acest algoritm pot umari:

numarul de valori din sir


valoarea maxima/minima
numarul de aparitii a unei valori K

Prelucrarea unui sir cu un numar necunoscut de valori (care se incheie cu zero)


Valoarea zero nu face parte din sir si nu trebuie prelucrata. Nu stim exact cand primim valoarea zero (care
marcheaza sfarsitul sirului), motiv pentru care la fiecare citire trebuie sa verificam daca s-a citit zero
saunu.Daca valoarea citita nu este zero avem de realizar prelucrarea ceruta de problema si o noua citire.
citeste x;
cat timp (x!=0) {
//prelucrez valorea X
.........
//trec la valoarea urmatoare
citeste X
}
Probleme
1.
2.
3.
4.

Sa se calculeze suma/produsul valorilor din sir


Sa se determine valoarea minima/maxima dintre valorile citite.
O valoare data Y se gaseste in sir?
De cate ori apare o valoare data Y?

5.

Presupunand ca sirul reprezinta coeficientii uni polinom ( dati incepand cu gradul cel mai mic),
calculati valoarea polinomului intr-un punct Y
6.
Se citeste un numar n, iar apoi se citesc n numere. Sa se zica daca exista macar un numar care sa
aiba exact 3 cifre de 0
#include<iostream.h> #include<conio.h> exact3nenule(int numar){ int c_nenule=0; while(numar > 0){
if((numar % 10)>0)c_nenule = c_nenule + 1; numar = numar / 10; } return c_nenule;} main(){ int n, numar, i=1;
bool exista = false; cout<<"Introduceti numarul de valori pe care le veti introduce: ";cin>>n; while(i<=n){
cout<<"Introduceti un numar: ";cin>>numar; if(exact3nenule(numar)==3)exista = true; i=i+1; } if(exista ==
true)cout<<"Exista un numar cu exact 3 cifre nenule!"; else cout<<"Nu exista un numar cu exact 3 cifre
nenule!"; getch();}
Se citeste un numar. Sa se calculeze suma cifrelor acestuia pana cand ajunge o singura cifra.
#include<iostream.h> #include<conio.h> suma_cifre(long numar){ int suma=0; while(numar > 0){ suma = suma
+ numar % 10; numar = numar / 10;} return suma; } main(){ long numar; cout<<"Introduceti un numar natural:
";cin>>numar; while (numar > 9){ numar = suma_cifre(numar);} cout<<"Cifra de control este "<<numar;

Se introduce un numar. Sa se afiseze rasturnatul acestuia.


#include<iostream.h> #include<conio.h> main(){ unsigned long numar, numar2=0; int cifra; cout<<"introduceti
un numar: ";cin>>numar; while(numar>0){ cifra = numar % 10; numar2 = numar2 * 10 + cifra; numar = numar /
10;} cout<<numar2; getch(); }
Se introduce un numar. Sa se afiseze daca e sau nu palindrom (numarul este egal cu rasturnatul lui).
#include<iostream.h> #include<conio.h> main() { long numar, numar_invers, numar_salvat; cout<<"Introduceti
un numar: ";cin>>numar; numar_salvat = numar; while(numar>0){ numar_invers = numar_invers * 10 + numar
% 10; numar = numar / 10;} if(numar_salvat==numar_invers){ cout<<"Numarul este palidrom!"; } else
cout<<"Numarul nu este palidrom!"; getch(); }
Se introduc o succesiune de valori pana la intalnirea valorii -1. Sa se zica de cate ori a aparut cifra 0 in
scrierea numerelor date.
#include<iostream.h> #include<conio.h> main(){ int numar, v_iesire=0; while(1){ cout<<"Introduceti un
numar: ";cin>>numar; if(numar==-1)goto end; if(numar>=0){ while(numar > 0){if(numar
%10==0)v_iesire=v_iesire+1;numar=numar/10;} }} end: cout<<"Numarul de zerouri aparute in sirul de numere
introdus esre "<<v_iesire; getch(); }
Se introduce un numar. Sa se afiseze toate patratele perfecte <= decat el
#include<iostream.h> #include<conio.h> #include<math.h> main(){ unsigned long numar, patrat, i=1;
cout<<"introduceti un numar natural: ";cin>>numar; numar = sqrt(numar); while(i<=numar){ patrat=i*i; i=i+1;
cout<<patrat<<endl;} getch(); }
Se introduce un numar. Sa se afiseze numarul de cifre pare, suma acestora, numarul de cifre impare si
produsul lor.
#include<iostream.h> #include<conio.h> main(){ unsigned long numar; int cifra, suma=0, produs = 1,
cifre_pare=0, cifre_impare=0; cout<<"introduceti un numar: ";cin>>numar; while(numar>0){ cifra = numar %
10; if(cifra % 2 == 0){ suma = suma + cifra; cifre_pare++; } else { produs = produs * cifra; cifre_impare++; }
numar = numar / 10;} cout<<"Suma cifrelor pare este "<<suma<<endl; cout<<"Produsul cifrelor impare este
"<<produs<<endl; cout<<"Numarul de cifre pare este "<<cifre_pare<<endl; cout<<"Numarul de cifre impare
este "<<cifre_impare<<endl; getch(); }

87.Se citeste printrun program nr.de la tastatura pana la citirea valori 0.Se cere
calcularea si afisarea mediei aritmetice a patratelor nr. PoZitive citite. Algoritm:
START Citeste x P=0 S=0 Cat timp x>0 executa Daca x>0 atunci S=s+x*x
P=p+1 Sf.daca Sf.cat timp Tipareste media aritmetica este s/p STOP
Program: #include #include using namespace std; int x,s,p; int main(){ p=0;
s=0; cout<<"x=";cin>>x; while (x) {if(x>0) { s=s+x*x; p=p+1; }
cout<<"x=";cin>>x;} cout<<"media aritmetica este"<<(float)s/p;
26. Sa se scrie un algoritm care citeste un numar si numara cate cifre pare si cate
impare are numarul. Algoritm: Start Citeste n P=0 I=0 Cat timp n!=0 executa
Daca rest(n,2)=0 atunci P=P+1 Altfel I=I+1 Sfarsit daca n=cat(n,10) Sfarsit cat
timp Tipareste Numarul are ,P, cifre pare si ,I, cifre impare; Stop Program:
#include #include using namespace std; int n,P,I; int main (){ cout<>n; P=0;I=0;
While (n!=0) If (n%2==0) P+=1; else I+=1; cout<<<P<<<I<<cifre impare;
24.Se citeste un numar.Sa se determine suma cifrelor sale. Algoritm : Start
Citeste n S=0 Cat timp n #0 executa S=S+rest (n,10) n=cat(n,10) Sfarsit cat
timp Tipareste suma este S Stop Program: #include #include using
namespace std; int n,S; int main(){ cout<<"n=" ; cin>>n; S=0; while (n)
{S=S+n%10; n=n/10;} cout<< "Suma este"<< S ; getch (); return 0;}

S-ar putea să vă placă și