Sunteți pe pagina 1din 16

instructiuni repetitive

-> clasificare:
-> cu nr nedeterminat de pasi (ciclari)
-> cu cond la inceput: while
-> cu cond la sfarsit: do - while

-> cu nr (pre)determinat de pasi: for

-> sintaxa buclei while:

while (conditie)
grup_de_instruct;

-> functionarea buclei while:


Pasul 1 se stabileste valoarea de adevar a conditiei
Pasul 2 Cazul 1 - cond este falsa - se iese din bucla
Cazul 2 - cond este adevarata
Pasul 2.1 Se execita grupul de instructiuni
Pasul 2.2 Se revine la Pasul 1

-> sintaxa buclei do - while:

do
grup_de_instruct;
while (conditie);

-> functionarea:
Pasul 1 Se executa grupul de instructiuni
Pasul 2 Se stabileste valoarea de adevar a conditiei
Pasul 3 Cazul 1 - conditia este falsa - se iese din bucla
Cazul 2 conditia este adevarata
P3.1 Se revine la Pasul 1

-> aplicatii:
- prelucrari asupra cifrelor unui numar natural
-> suma sau produsul cifrelor
-> cea mai mare / mica cifra a unui numar natural
-> oglinditul unui numar natural / intreg
-> testul de nr palindrom pentru un numar natural / intreg
-> cel mai mare divizor comun a doua numere naturale / intregi
-> cel mai mic multiplu comun a doua numere naturale / intregi
-> aducerea unei gracti la forma ireductibila
-> de cate ori se imparte a la b
-> preluarea corecta a informatiei
-> constructia unui meniu elementar

-> Sa se studieze urmatoarea secventa de cod:

int x = 8;
while(x > 0)
{
cout << x << " ";
x -= 3;
}

-> se construieste urmatorul tabel:

x x > 0
8 -> 5 8 > 0 - a
5 -> 2 5 > 0 - a
2 -> -1 2 > 0 - a
-1 -1 > 0 - f

-> ce se afiseaza: 8_5_2_


-> nr ciclari: 3
-> val fin: x = -1

-> Sa se studieze urmatoarea secventa de cod:

int i = 3;
while(i < 24)
i *= 2;
cout << 2 * i + 1 << endl;

-> se intocmeste urmatorul tabel:

i i < 24
3 -> 6 3 < 24 - a
6 -> 12 6 < 24 - a
12 -> 24 12 < 24 - a
24 24 < 24 - f

-> se afiseaza: 49
-> nr ciclari: 3
-> val fin: i = 24

-> Sa se studieze secventa de cod:

int i = 4;
while (i > 1)
{
cout << i << " ";
i -= 1;
}

-> se construieste urmatorul tabel:

i i > 1
4 -> 3 4 > 1 - a
3 -> 2 3 > 1 - a
2 -> 1 2 > 1 - a
1 1 > 1 - f

-> se afiseaza: 4_3_2_


-> nr ciclari: 3
-> valorile finale: i = 1
-> Sa se studieze urmatoarea secventa de cod:

int a = 0, b = 20;
while (a <= b)
{
a += 3;
b -= 3;
}
cout << a * b << endl;

-> se construieste urmatorul tabel:

a b a <= b
0 -> 3 20 -> 17 0 <= 20 - a
3 -> 6 17 -> 14 3 <= 17 - a
6 -> 9 14 -> 11 6 <= 14 - a
9 -> 12 11 -> 8 9 <= 11 - a
12 8 12 <= 8 - f

-> ce se afiseaza: 96 = 12 * 8
-> nr ciclari: 4
-> valorile finale: a = 12 si b = 8

-> Sa se studieze secventa de cod:

int a = 0, b = 20;
while (a <= b)
a += 3;
b -= 3;
cout << a * b << endl;

-> se construieste tabelul urmator:

a b a <= b
0 -> 3 20 0 <= 20 - a
3 -> 6 20 3 <= 20 - a
6 -> 9 20 6 <= 20 - a
9 -> 12 20 9 <= 20 - a
12 -> 15 20 12 <= 20 - a
15 -> 18 20 15 <= 20 - a
18 -> 21 20 18 <= 20 - a
21 20 21 <= 20 - f
-> 17

-> ce se afiseaza: 21 * 17 = 357


-> nr ciclari: 7
-> valorile finale: a = 21, b = 17

-> Sa se stuidieze urmatoarea secventa de cod:

int t = 31;
while (t != 0)
{
cout << t << " ";
t = t / 2;
}

-> se intocmeste urmatorul tabel:

t t != 0
31 -> 15 31 != 0 - a
15 -> 7 15 != 0 - a
7 -> 3 7 != 0 - a
3 -> 1 3 != 0 - a
1 -> 0 1 != 0 - a
0 0 != 0 - f

-> se afiseaza: 31_15_7_3_1_


-> nr ciclari: 5
-> val fin: t = 0

-> Sa se studieze secventa de cod:

int x = 0, s = 0;
while (x <= 4)
{
if (x % 2 == 1)
s += x;
x += 1;
}

-> se intocmeste tabelul urmatorul:

x s x <= 4 x % 2 == 1
0 -> 1 0 0 <= 4 - a 0 % 2 == 1 - f
1 -> 2 0 -> 1 1 <= 4 - a 1 % 2 == 1 - a
2 -> 3 1 2 <= 4 - a 2 % 2 == 1 - f
3 -> 4 1 -> 4 3 <= 4 - a 3 % 2 == 1 - a
4 -> 5 4 4 <= 4 - a 4 % 2 == 1 - f
5 4 5 <= 4 - f

-> ce se afiseaza: -
-> nr ciclari: 5
-> valorile finale: x = 5, s = 4

-> Sa se studieze secventa de cod:

int u = 3, c = 0;
while (u != 1)
{
if (u % 2 == 0)
u = u / 2;
else
u = 3 * u + 1;
c += 1;
}
-> se intocmeste urmatorul tabel:

u c u != 1 u % 2 == 0
3 -> 10 0 -> 1 3 != 1 - a 3 % 2 == 0 - f
10 -> 5 1 -> 2 10 != 1 - a 10 % 2 == 0 - a
5 -> 16 2 -> 3 5 != 1 - a 5 % 2 == 0 - f
16 -> 8 3 -> 4 16 != 1 - a 16 % 2 == 0 - a
8 -> 4 4 -> 5 8 != 1 - a 8 % 2 == 0 - a
4 -> 2 5 -> 6 4 != 1 - a 4 % 2 == 0 - a
2 -> 1 6 -> 7 2 != 1 - a 2 % 2 == 0 - a
1 7 1 != 1 - f

-> se afiseaza: -
-> nr ciclari: 7
-> valorile finale: u = 1, c = 7

-> Sa se studieze urmatoarea secventa de cod:

int k = 3;
while (k != 15)
{
cout << k << " ";
k = 2 * k + 1;
}

-> se intocmeste urmatorul tabel:

k k != 15
3 -> 7 3 != 15 - a
7 -> 15 7 != 15 - a
15 15 != 15 - f

-> se afiseaza: 3_7_


-> nr ciclari: 2
-> val fin: k = 15

-> Sa se studieze urmatoarea secventa de cod:

int x = 5, y = 1;
while (x > y)
{
x--;
y++;
}

-> se intocmeste urmatorul tabel:

x y x > y
5 -> 4 1 -> 2 5 > 1 - a
4 -> 3 2 -> 3 4 > 2 - a
3 3 3 > 3 - f

-> se afiseaza: -
-> nr ciclari: 2
-> val fin: x = 3, y = 3

-> Sa se studieze urmatoarea secventa de cod:

int x = 4, y = 0;
while (x-- != 0)
y++;
cout << y << endl;

-> se intocmeste urmatorul tabel:

x y x-- != 0
4 -> 3 0 -> 1 4 != 0 - a
3 -> 2 1 -> 2 3 != 0 - a
2 -> 1 2 -> 3 2 != 0 - a
1 -> 0 3 -> 4 1 != 0 - a
0 -> -1 4 0 != 0 - f

-> se afiseaza: 4
-> nr ciclari: 4
-> val fin: x = -1, y = 4

-> Sa se studieze urmatoarea secventa de cod:

int z = -2;
while (1 + ++z != 0)
{
cout << z << " ";
z ++;
}

-> se intocmeste urmatorul tabel:

z 1 + ++z != 0
-2 -> -1 1 + (-1) != 0 - f

-> se afiseaza: -
-> nr ciclari: 0
-> val fin: z = -1

-> Sa se studieze urmatoarea secventa de cod:

float r = 2 / 3;
while (r++ < 2)
r++;
cout << r << endl;

-> se intocmeste urmatorul tabel:

r r++ < 2
0 -> 1 -> 2 0 < 2 - a
2 -> 3 2 < 2 - f
se afiseaza: 3
nr ciclari: 1
val fin: r = 3

-> Sa se studieze urmatoarea secventa de cod:

int y = 6;
while (y != 0)
{
if (y % 2 == 1)
cout << y << " ";
y -= 2;
}

y y != 0 y % 2 == 1
6 -> 4 6 != 0 - a 6 % 2 == 1 - f
4 -> 2 4 != 0 - a 4 % 2 == 1 - f
2 -> 0 2 != 0 - a 2 % 2 == 1 - f
0 0 != 0 - f

-> se afiseaza: -
-> nr ciclari: 3
-> val fin: y = 6

-> Sa se studieze urmatoarea secventa de cod:

int z = 5;
while (z != 0)
{
if (z % 6 >= 6)
cout << z << " ";
z -= 1;
}

-> se intocmeste urmatorul tabel:

z z != 0 z % 6 >= 6
5 -> 4 5 != 0 - a 5 % 6 >= 6 - f 5 % 6 = 5
4 -> 3 4 != 0 - a 4 % 6 >= 6 - f 4 % 6 = 4
3 -> 2 3 != 0 - a 3 % 6 >= 6 - f 3 % 6 = 3
2 -> 1 2 != 0 - a 2 % 6 >= 6 - f 2 % 6 = 2
1 -> 0 1 != 0 - a 1 % 6 >= 6 - f 1 % 6 = 2
0 0 != 0 - f

-> se afiseaza: -
-> nr ciclari: 5
-> valori finale: z = 0

-> Sa se studieze urmatoarea secventa de cod:

int i = 1;
while (i != 8)
{
cout << i << " ";
i = i * 2 % 7;
}

-> se intocmeste urmatorul tabel:

i i != 8
1 -> 2 1 != 8 - a 1 * 2 % 7 = 2 % 7 = 2
2 -> 4 2 != 8 - a 2 * 2 % 7 = 4 % 7 = 4
4 -> 1 4 != 8 - a 4 * 2 % 7 = 8 % 7 = 1

se afiseaza: 1_2_4_ (secv princ de la afisare)


nr ciclari: infinit (bucla infinita)
val fin: -

-> Sa se studieze urmatoarea secventa de cod:

int i = 1;
while (i != 8)
{
cout << i << " ";
i = i * 3 % 15;
}

-> se intocmeste urmatorul tabel:

i i != 8
1 -> 3 1 != 8 - a 1 * 3 % 15 = 3 % 15 = 3
3 -> 9 3 != 8 - a 3 * 3 % 15 = 9 % 15 = 9
9 -> 12 9 != 8 - a 9 * 3 % 15 = 27 % 15 = 12
12 -> 6 12 != 9 - a 12 * 3 % 15 = 36 % 15 = 6
6 -> 3 6 != 8 - a 6 * 3 % 15 = 18 % 15 = 3

-> se afiseaza: 1_3_9_12_6_ ... (secventa principala de la afisare: 3_9_12_6_)


-> nr ciclari: infint

-> Sa se studieze urmatoarea secventa de cod:

int k = 1;
while (k < 5)
{
cout << k << " ";
k++;
if (k == 4)
k = k - 1;
}

-> se intocmeste urmatorul tabel:

k k < 5 k == 4
1 -> 2 1 < 5 - a 2 == 4 - f
2 -> 3 2 < 5 - a 3 == 4 - f
3 -> 4 -> 3 3 < 5 - a 4 == 4 - a
3 -> 4 -> 3 3 < 5 - a 4 == 4 - a

se afiseaza: 1_2_3_3_ ... (secventa principala de la afisare: 3_)


nr ciclari: infinit

-> Sa se studieze urmatoarea secventa de cod:

int r = 1;
while (r < 5)
{
cout << r << " ";
if (r % 2 == 1)
r += 1;
}

-> se intocmeste urmatorul tabel:

r r < 5 r % 2 == 1
1 -> 2 1 < 5 - a 1 % 2 == 1 - a
2 2 < 5 - a 2 % 2 == 1 - f
2 2 < 5 - a 2 % 2 == 1 - f

se afiseaza: 1_2_2_ (secventa principala de la afisare: 2_)


nr de ciclari: infinit

-> Sa se studieze urmatoarea secventa de cod:

int i = 1;
while (1) // 1 != 0
{
cout << i << ' ';
i *= 5;
i %= 10;
}

-> se intocmeste urmatorul tabel:

i 1 != 0
1 -> 5 -> 5 a
5 -> 25 -> 5 a

se afiseaza: 1_5_ (secventa principala de la afisare: 5_)


nr ciclari: infinit

-> Sa se studieze secventa de cod:

int i = 8;
do
i -= 4;
while (i >= 0);
cout << i << endl;
-> se intocmeste urmatorul tabel:

i i >= 0
8 -> 4 4 >= 0 - a
4 -> 0 0 >= 0 - a
0 -> -4 -4 >= 0 - f

-> se afiseaza: -4
-> nr. ciclari: 3
-> valori finale: i = -4

-> Sa se studieze secventa de cod:

int x = 0, y = 2;
do
{
x += 2;
y += 1;
}
while (x <= y);
cout << x * y << endl;

-> se intocmeste urmatorul tabel:

x y x <= y
0 -> 2 2 -> 3 2 <= 3 - a
2 -> 4 3 -> 4 4 <= 4 - a
4 -> 6 4 -> 5 6 <= 5 - f

se afiseaza: 30
nr. ciclari: 3
valori finale: x = 6, y = 5

-> Sa se studieze urmatoarea secventa de cod:

int x = 0;
do
{
if (x % 2 == 1)
x += 2;
else
x++;
}
while (x <= 8);
cout << x << endl;

-> se intocmeste urmatorul tabel:

x x % 2 == 1 x <= 8
0 -> 1 0 % 2 == 1 - f 1 <= 8 - a
1 -> 3 1 % 2 == 1 - a 3 <= 8 - a
3 -> 5 3 % 2 == 1 - a 5 <= 8 - a
5 -> 7 5 % 2 == 1 - a 7 <= 8 - a
7 -> 9 7 % 2 == 1 - a 9 <= 8 - f
se afiseaza: 9
nr ciclari: 5
val fin: x = 9

-> Sa se studieze urmatoarea secventa de cod:

int i = 0;
do
if (i % 2 == 1)
i += 2;
else
i++;
while (i <= 6);

-> se intocmeste urmatorul tabel:

i i % 2 == 1 i <= 6
0 -> 1 0 % 2 == 1 - f 1 <= 6 - a
1 -> 3 1 % 2 == 1 - a 3 <= 6 - a
3 -> 5 3 % 2 == 1 - a 5 <= 6 - a
5 -> 7 5 % 2 == 1 - a 7 <= 6 - f

se afiseaza: -
nr ciclari: 4
valori finale: i = 7

-> Sa se studieze urmatoarea secventa de cod:

int c = 1;
do {
cout << c << " ";
c = 2;
cout << c << " ";
c--;
}
while (c != 0);

-> se intocmeste urmatorul tabel:

c c != 0
1 -> 2 -> 1 1 != 0
1 -> 2 -> 1 1 != 0

se afiseaza: 1_2_1_2_ ... (secventa principala de la afisare: 1_2_)


nr ciclari: infinit

Se citeste un numar natural n; sa se scrie un program C++ care:


p1 afiseaza suma cifrelor lui n
p2 afiseaza produsul cifrelor lui n
p3 afiseaza numarul cifrelor pare ale lui n
p4 afiseaza oglinditul lui n
p5 afiseaza un mesaj coresp daca n este palindrom
p6 afiseaza cea mai mare / mica cifra a lui n

Se citesc doua numere naturale nenule, m si n. sa se scrie un program


C++ care:
p1 afiseaza cmmdc-ul lor
p2 afiseaza cmmmc-ul lor
p3 in plus, daca m si n sunt numaratorul si numitorul
unei fractii f, f se afiseaza in forma ireductibila

Sa se construiasca o aplicatie cu meniu

n = 213 -> s = 6
n = 103 -> s = 4
n = 5 -> s = 5

! cifrele unui nr natural (intreg) pot fi extrase / introduse pe la unitati


! s - suma cifrelor, trebuie sa aiba o valoare initiala, s = 0
s = 0
n = 123 c = 3 n = 12 s = s + 3 = 3
n = 12 c = 2 n = 1 s = s + 2 = 5
n = 1 c = 1 n = 0 s = s + 1 = 6
n = 0 c = 0 n = 0 s = 6
c = n % 10 n = n / 10 s = s + c

cat timp n != 0
-> c = n % 10
-> n = n / 10
-> s = s + c

- se da: n - nr
- se cere: s - suma cifrelor

-> solutia pt p1, folosind do-while:

#include <iostream>
using namespace std;
int main()
{
int n,c,s;
s=0;
cout<< "nr este: ";
cin>> n;
do
{
c=n%10;
n=n/10;
s=s+c;
} while(n!=0);
cout<< "suma este: " <<s <<endl;
return 0;
}

-> solutia folosind while:

#include <iostream>
using namespace std;
int main()
{
int n,c,s;
s=0;
cout<< "nr este: ";
cin>> n;
while(n!=0)
{
c=n%10;
n=n/10;
s=s+c;
}
cout<< "suma este: " <<s <<endl;
return 0;
}

-> solutie fara variabila c:

#include <iostream>
using namespace std;
int main()
{
int n,s;
s=0;
cout<< "nr este: ";
cin>> n;
while(n!=0)
{
s = s+ n % 10;
n = n / 10;
}
cout<< "suma este: " <<s <<endl;
return 0;
}

-> produsul cifrelor unui numar natural:

#include <iostream>
using namespace std;
int main()
{
int n,p;
p=1;
cout<< "nr este: ";
cin>> n;
while(n!=0)
{
p = p * (n % 10);
n = n / 10;
}
cout<< "produsul este: " <<p <<endl;
return 0;
}

#include <iostream>
using namespace std;
int main()
{
int n,p;
p=1;
cout<< "nr este: ";
cin>> n;
do
{
p = p * (n % 10);
n = n / 10;
}
while(n != 0);
cout<< "produsul este: " <<p <<endl;
return 0;
}

-> numarul cifrelor pare dintr-un nr natural:

#include <iostream>
using namespace std;
int main()
{
int n, c, s;
s = 0;
cout << "nr este: ";
cin >> n;
while(n != 0)
{
c = n % 10;
n = n / 10;
if (c % 2 == 0)
s += 1;
}
cout << "nr cifre pare: " << s << endl;
return 0;
}

#include <iostream>
using namespace std;
int main()
{
int n, c, s;
s = 0;
cout << "nr este: ";
cin >> n;
while(n != 0)
{
c = n % 10;
n = n / 10;
if (c % 2 == 0)
s += 1;
}
if (s != 0)
cout << "nr cifre pare: " << s << endl;
else
cout << "fara cifre pare!" << endl;
return 0;
}
!no - variabila in care se construieste oglinditul, are valoare
initiala, no = 0
no = 10 * no + c
n = 123 c = 3 n = 12 no = 10 * 0 + 3 = 3
n = 12 c = 2 n = 1 no = 10 * 3 + 2 = 32
n = 1 c = 1 n = 0 no = 10 * 32 + 1 = 321
n = 0 c = 0 n = 0 no = 321
c = n % 10 n = n / 10

#include <iostream>
using namespace std;
int main()
{
int n, c, no;
no = 0;
cout << "nr este: ";
cin >> n;
while(n != 0)
{
c = n % 10;
n = n / 10;
no = 10 * no + c;
}
cout << "oglinditul: " << no << endl;
return 0;
}

Teorema: n este palindrom daca si numai daca n = no.

-> testul de numar palindrom:

#include <iostream>
using namespace std;
int main()
{
int n, c, no, nc;
no = 0;
cout << "nr este: ";
cin >> n;
nc = n;
while(n != 0)
{
c = n % 10;
n = n / 10;
no = 10 * no + c;
}
cout << "oglinditul: " << no << endl;
if (nc == no)
cout << "este paindrom!" << endl;
else
cout << "nu este palindrom!" << endl;
return 0;
}

-> cmmdc-ul a doua numere naturale, nenule: m si n


m = 12, n = 14

12 = 14 * 0 + 12
14 = 12 * 1 + 2
12 = 2 * 6 + 0
cmmdc(12,14) = 2

m = 24
n = 16
24 = 16 * 1 + 8
16 = 8 * 2 + 0

cmmdc(24, 16) = 8

op care se repeta:
-> r = m % n
-> m = n
-> n = r
cat timp (m % n != 0)

#include <iostream>
using namespace std;
int main ()
{
int m, n, r;
cout << "primul nr: ";
cin >> m;
cout << "al doilea nr: ";
cin >> n;
if (m != 0 && n != 0)
{
while (m % n != 0)
{
r = m % n;
m = n;
n = r;
}
cout << "cmmdc: " << n << endl;
}
return 0;
}

Tema: sa se scrie un program C+++ care afiseaza cmmdc-ul numerelor


x y si z citite de la tastatura.

cmmdc(x,y,z) = cmmdc(cmmdc(x,y),z)

Tema: sa se scrie unprogram C++ care afiseaza cmmmc-ul al numerelor


naturale si nenule x si y, citite de la tastatura.

x * y = cmmdc(x,y) * cmmmc(x,y).

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