You are on page 1of 12

Laborator 3

Instructiuni repetitive
Instructiuni repetitive
a) cu un numar cunoscut de pasi: (FOR)
b) conditionate
i) cu conditie anterioara: (WHILE)
ii) cu conditie posterioara: (DO..WHILE)

Aplicația 1. Valoarea expresiei S=1+2+3+4+…+n.


a) Varianta clasică de scriere a problemei:

#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);
for (int i = 1; i <= n; i++) //i++ este i+=1 este i=i+1 este ++i (ptr. cazul de
fata)
S += i; //S=S+i;
cout << "Suma este: " << S << '\n';
return 0;
}

b) O altă formă de scriere (inițializare în afara instructiunii, test sub formă aritmetică și incrementare în
interiorul instrucțiunii ):
#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);
int i = 1;
for (;i-(n+1);)
S += i++; //{S=S+i; i++;}
cout << "Suma este: " << S << '\n';
return 0;
}

c) Doar numerele impare:


#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);
for (int i = 1; i <= n; i+=2)
S += i;
cout << "Suma este: " << S << '\n';
return 0;
}

d) Cu pornire din capatul superior:


#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);
for (int i = n; i >=1; i--)
S += i;
cout << "Suma este: " << S << '\n';
return 0;
}

e) Varianta de problema, prin utilizarea instrucțiunii while:


#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
cout << "Dati n: ";
cin >> n;

int i = 1;
while (i <= n)
S += i++; //{S = S + i; i++;}
cout << "Suma este: " << S << '\n';
return 0;
}

f) Varianta prin utlizarea lui do..while. Se va face și o testare asupra faptului dacă valoarea n este corect
introdusă, adică, o valoare mai mare sau egală decât 1.
#include<iostream>
using namespace std;

int main()
{
int n;
long long S = 0;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);

int i = 1;
do
S += i++;
while (i <= n);

cout << "Suma este: " << S << '\n';


return 0;
}

Aplicația 2. Se citeste un numar întreg, strict pozitiv. Sa se determine dacă numarul citit este
sau nu numar prim.
a) varianta 1
#include<iostream>
using namespace std;

int main()
{
int x;
int ok; //daca ok va fi 1, numarul este prim, daca este 0, numarul nu este prim
cin >> x;
x = abs(x);
if (x == 2)
ok = 1;
else
if (x == 0 || x == 1 || x % 2 == 0)
ok = 0;
else
{
ok = 1; //pornim de la premiza ca numarul citit este prim
for (int i = 3; i <= sqrt(x) && ok == 1; i += 2)
if (x % i == 0)
ok = 0;
}
if (ok) //ok!=0
cout << "Numarul este prim\n";
else
cout << "Numarul nu este prim\n";
return 0;
}

b) varianta 2
#include<iostream>
using namespace std;

int main()
{
int x;
cin >> x;
x = abs(x);
if (x == 2)
{
cout << "Numarul este prim\n";
return 1; //iese fortat din program
}
if (x == 0 or x == 1 or x % 2 == 0)
{
cout << "Numarul nu este prim\n";
return 2;
}
bool ok = true; //pornim de la premiza ca numarul citit este prim
for (int i = 3; i <= sqrt(x); i += 2)
if (x % i == 0)
{
ok = 0; //ok=false;
break; //iese fortat din structura
}
if (ok) //ok!=0
cout << "Numarul este prim\n";
else
cout << "Numarul nu este prim\n";
return 0;
}

Aplicația 3. Valoarea expresiei S=1!+2!+3!+4!+…+n!.


FOR – FOR
#include<iostream>
using namespace std;

int main()
{
int n;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);

int S = 0, f;
for (int i = 1; i <= n; i++)
{
f = 1;
for (int j = 1; j <= i; j++)
f *= j;
S += f;
}

cout << "Valoarea expresiei este: " << S << '\n';


return 0;
}

FOR – WHILE
#include<iostream>
using namespace std;

int main()
{
int n;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);

int S = 0, f;
for (int i = 1; i <= n; i++)
{
f = 1;
int j = 1;
while (j <= i)
f *= j++;
S += f;
}
cout << "Valoarea expresiei este: " << S << '\n';

return 0;
}

WHILE – WHILE
#include<iostream>
using namespace std;

int main()
{
int n;
do {
cout << "Dati n: ";
cin >> n;
} while (n < 1);

int S = 0, f;
int i = 1;
while (i <= n)
{
f = 1;
int j = 1;
while (j <= i)
f *= j++;
S += f;
i++;
}
cout << "Valoarea expresiei este: " << S << '\n';

return 0;
}

Aplicația 4. Se citesc valori intregi, până la întâlnirea valorii 0. Să se realizeze produsul valorilor
întâlnite.
Varianta de lucru WHILE
#include<iostream>
using namespace std;

int main()
{
int n;
int P = 1;

//primul numar citit


do {
cout << "Dati n: ";
cin >> n;
} while(n==0);
//urmatoarele numere citite
while (n != 0)
{
P *= n;
cout << "Dati n: ";
cin >> n;
}

cout << "Valoarea expresiei este: " << P << '\n';


system("pause");
return 0;
}

Varianta de lucru DO..WHILE


#include<iostream>
using namespace std;

int main()
{
int n;
int P = 1;
do {
cout << "Dati n: ";
cin >> n;
if (n)
P *= n;
} while (n != 0);
cout << "Valoarea expresiei este: " << P << '\n';
system("pause");
return 0;
}
Varianta de lucru FOR
#include<iostream>
using namespace std;

int main()
{
int n;
int P = 1;

//primul numar citit


do {
cout << "Dati n: ";
cin >> n;
} while (n == 0);
//urmatoarele numere citite
for (; n != 0;)
{
P *= n;
cout << "Dati n: ";
cin >> n;
}

cout << "Valoarea expresiei este: " << P << '\n';


system("pause");
return 0;
}

Aplicația 5. Se citește un text ce contine diverse mesaje. Citirea se va face pana la întâlnirea
caracterului ‚.’, cerându‐se contorizarea apariției fiecarei vocale și a tuturor consoanelor
întâlnite.
#include<iostream>
using namespace std;

int main()
{
char k; //caracterul ce va fi citit succesiv
int a, e, i, o, u, c;
a = e = i = o = u = c = 0;
cout << "Dati un mesaj: ";
do {
cin >> k;
switch (k)
{
case 'a':
case 'A': a++; break;
case 'e':
case 'E': e++; break;
case 'i':
case 'I': i++; break;
case 'o':
case 'O': o++; break;
case 'u':
case 'U': u++; break;
default:
if ((k > 'a' and k <= 'z') or (k > 'A' and k <= 'Z'))
c++;
}
} while (k!='.');

cout << "Numarul de aparitii a|A: " << a << '\n';


cout << "Numarul de aparitii e|E: " << e << '\n';
cout << "Numarul de aparitii i|I: " << i << '\n';
cout << "Numarul de aparitii o|O: " << o << '\n';
cout << "Numarul de aparitii u|U: " << u << '\n';
cout << "Numarul de consoane: " << c;

return 0;
}

Aplicația 6. Se citește un număr întreg de la tastatură. Se vor afisa piramide, de forma celor de
mai jos.
Presupunem numărul ca fiind 5, piramidele vor fi:
1
12
123
1234
12345
1234
123
12
1
respectiv,
1
21
321
4321
54321
4321
321
21
1
#include <iostream>
using namespace std;

int main()
{
int n;
cout << "Dati numarul: ";
cin >> n;
cout << '\n';

/*
1
1 2
1 2 3
1 2 3 4
1 2 3
1 2
1
*/

for (int i = 1; i <= n; i++) {


for (int j = 1; j <= i; j++) {
cout << j << ' ';
}
cout << '\n';
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << j << ' ';
}
cout << '\n';
}

cout << "\n\n";

/*
1
2 1
3 2 1
4 3 2 1
3 2 1
2 1
1
*/

for (int i = 1; i <= n; i++) {


for (int j = i; j >= 1; j--) {
cout << j << ' ';
}
cout << '\n';
}
for (int i = n - 1; i >= 1; i--) {
for (int j = i; j >= 1; j--) {
cout << j << ' ';
}
cout << '\n';
}

return 0;
}

Aplicația 7. Se citesc două numere întregi. Sa se calculeze catul si restul impartirii lui a la b,
fara a folosi operatori pentru cât și rest.
Exemplu 1: a=9, b=3

a b i
9 3 0

6 3 1

3 3 2

0 3 3

i=3 (catul impartirii)

a=0 (restul impartirii)

Exemplu 2: a=13, b=4

a b i

13 4 0

9 4 1

5 4 2

1 4 3

i=3 (catul impartirii)

a=1 (restul impartirii)


#include<iostream>
using namespace std;

int main()
{
int a, b, i;
cout << "Dati a: ";
cin >> a;
cout << "Dati b: ";
cin >> b;
for (i = 0; a >= b; i++)
a = a - b;
cout << "Catul este: " << i << '\n';
cout << "Restul este: " << a << '\n';
system("pause");
return 0;
}

Aplicații folosind instrucțiuni repetitive


8. Să se calculeze următoarea expresie: 1‐2+3‐4+...±n, unde n este un întreg dat de la tastatură,
>=1.
9. Se citesc două numere naturale m și n. Calculați nm.
10. Se citesc două numere întregi. Să se calculeze produsul lor fără a folosi operatorul pentru
înmulțire.
11. Se citesc de la tastatura n numere întregi nenule. Să se calculeze suma celor de rang par si
produsul celor de rang impar.
12. Se citește un numar natural n. Să se determine toate perechile de numere naturale a și b
care verifică relația a2+b2=n.
13. Calculați suma: S=12-22+32-42..(-1)n+1*n2.
14. Se citesc mai multe numere,pana cand utimul numar citit este zero. Să se afle cate numere
sunt pozitive si cate sunt negative.
15. Să se scrie un algoritm care verifică dacă un numar n este prim.
16. Se dă un numar natural n>5. Să se scrie un algoritm care returnează toate numerele patrate
perfecte mai mici decat n, dar impare.
17. Se dă un numar n. Sa se scrie un algoritm care calculeaza si returneaza suma cifrelor impare
din numar.
18. Se da un numar natural n. Se cere sa se scrie un algoritm care returneaza de cate ori apare,
in numar, ultima cifra a acestuia.
19. Se va determina valoarea expresiei S: 1+(1+2)+(1+2+3)+…(1+2+…+n), unde n este un numar
întreg, >=1, dat de la tastatură.
20. Se citește numărul natural n, număr impar. Să se afișeze următoarea piramidă de caractere
‘*’. Pentru cazul de față nr. citit va fi 5.

*
***
*****
***
*

21. Se citește numărul natural n, şi un caracter c. Să se afișeze următoarea piramidă:


c

cc

ccc

....

ccc...c
....

ccc

cc

21. Se citește numărul natural n, şi două caractere c şi d. Să se afișeze următorul pătrat, format
din n linii şi n coloane:
ccc...cc

cdd...dc

....

cdd...dc

ccc...cc

22. Se citește numărul natural impar n, şi două caractere c şi d. Să se afișeze următorul pătrat,
format din n linii şi n coloane, în care cele două caractere alternează:
cdc...dc

dcd...cd

....

dcd...cd

cdc...dc

23. Suma cifrelor unui număr.


24. Inversul unui număr.
25. Să se transforme un număr din baza 10 într-o bază b oarecare, cu proprietatea 2<=p<=10.

You might also like