Sunteți pe pagina 1din 13

Exercitii rezolvate - instructiuni

A. Scrieți programele C++ pentru implementarea următorilor algoritmi scriși în pseudocod !


1. Determină și afișează cel mai mare dintre două numere citite de la tastatură. citește a, b;

citeste a,b #include <iostream> using namespace std; int


main() { int a,b; cin>>a>>b; if(a>b) cout<<a; else
daca a>b atunci scrie a cout<<b; return 0; }
1.           altfel b >a

2. Determină și afișează cel mai mare dintre trei numere citite de la tastatură.

citește a, b, c Solutie
dacă a>b atunci daca a>c atunci scrie a
    altfel scrie c #include <iostream> using namespace std; int
  altfel daca b>c atunci scrie b main() { int a,d,c; cin>>a>>b>>c;
                altfel scrie c
if(a>b) if(a>c) cout<<a; else cout<<c; else
if(b>c)cout<<b; else cout<<c; return 0; }

3. Determină și afișează  suma cifrelor unui număr întreg citit de la tastatură.

citește n scrie s
s=0;
cat timp n<>0 executa Soluție: 
s=s+n MOD 10
n=n/10 #include <iostream> using namespace std; int
sfarsit cat timp main() { int n, s; cin>>n; s=0; while(n!=0)  {  s=s+n
%10; n=n/10; } cout<<s; return 0; }

4. Verifică dacă  un  număr citit de la tastatură este prim. 

citește n Soluție: 
prim=1
pentru i=2, n DIV 2, 1 execută #include <iostream> using namespace std;
dacă n MOD i=0 atunci prim=0
sfarsit pentru int main() { int n,i,sw; cin>>n; sw=1;
daca prim=1 atunci scrie ‘numarul este prim’ for(i=2;i<=n/2;i++) if(n%i==0) sw=0;
 altfel scrie ’numarul nu este prim’ if(sw==1)cout<<”numarul citit este prim”; else
cout<<”numarul nu este prim”; return 0; }

5. Determinarea și afișarea cmmdc pentru două numere citite de la tastură, folosind algoritmul lui Euclid.

citeste a, b Soluție: 
cat timp a MOD b <> 0 executa
r=a MOD b #include <iostream> using namespace std;
a=b
b=r int main() { int a,d; cin>>a>>d; while(a%d!=0)
sfarsit cat timp { r=a%d; a=d; d=r; } cout<<d; return 0; }
scrie b

B. Rescrieți următoarele secvențe de program C++, înlocuind structurile repetitive prezente prin alte structuri
repetitive cunoscute.

1. Determină și afișează toate  numerele impare dintre două valori citite.


cin>>a>>b; if(a>b) {aux=a; a=b; b=aux;} for(int cin>>a>>b; if(a>b) {aux=a; a=b; b=aux;} int i=a;
i=a;i<=b;i++) if(x % 2!=0) cout<<i<<’ ‘; while(i<=b) { if(x % 2!=0) cout<<i<<’ ‘; i++; }
Soluție: 

2. Verifică dacă cifrele unui număr dat sunt în ordine crescătoare.

cin>>n; s=-1; while(n!=0) { if(n%10>s) s=n%10; Soluție: 


else s=11; } if(s==11) cout<<”cifrele nu sunt in
ordine crescatoare” ; else cout<<”cifrele sunt in cin>>n; s=-1; do { if(n%10>s) s=n%10; else
ordine crescatoare” ; s=11; } while(n!=0); if(s==11) cout<<”cifrele nu
sunt in ordine crescatoare” ; else cout<<”cifrele
sunt in ordine crescatoare” ;

3. Calculează și afișează suma S=1-4+9-16+....+(-1)^n*n^2

cin>>n; if(n<0) n=-n; sum=0; for(i=1;i<=n;i++) if(i Soluție:


%2==0) sum-=i*i; else sum+=i*i; cout<<sum;
cin>>n; if(n<0) n=-n; sum=0; i=1; while(i<=n)
{ if(i%2==0) sum-=i*i; else sum+=i*i; i++; }
cout<<sum;

4. Determină și afișează cel mai mare divizor propriu al unui număr n, citit de la tastatură.

cin>>n; if(n<0) n=-1*n; d=1; for(i=2;i<=n/2;i++) Soluție:


if(n%i==0)d=i; if(i==n/2+1) cout<<”numarul nu
are divizori proprii”; else cout<<d; cin>>n; if(n<0) n=-1*n; d=n/2; while(n % d !
=0)d--; if(d==1)cout<<”numarul dat nu are divizori
proprii”; else cout<<d;

5. Determină și afișează cea mai mare cifră care apare intr-un număr întreg, citit de la tastatură.

cin>>n; max=0; do { if(max < n%10) max=n%10; Soluție:


n=n/10; } while(n!=0); cout<<max;
cin>>n; max=0; while(n!=0) { if(max < n%10)
max=n%10; n=n/10; } cout<<max;

C.Scrieți programele C++  corespunzătoare algoritmilor de rezolvare a următoarelor probleme !

Fie funcția f:R→R, definită prin f(x)={(x^2,x≤0; x+1,0<x≤10; -x^2+2,x>10. Determinați valoarea funcției într-
un punct x, dat de la tastatură.  Soluție: 

#include <iostream> using namespace std; int main() { float x, f; cin>>x; if(x<=0) f=x*x; else if(x<=10)
f=x+1;  else f=-x*x+2 cout<<”f(”<<x<<”)=”<<f; return 0; }

2. Se introduc de la tastatură patru numere reale, a, b, c, d. Se cere să se verifice dacă numerele a și b, respectiv
c și d formează intervale și, dacă da, să se verifice dacă acestea sunt disjuncte.  Soluție: 

#include <iostream> using namespace std; int main() { float a,b,c,d; if((a<b)&&(c<d)){ if((a>d)||(c>b))
cout<<”Formeaza intervale disjuncte”;   else cout<<”Intervalele nu sunt disjuncte”; } else cout<<”Nu pot
forma intervale”; return 0; }

3. Să se verifice dacă un număr natural, introdus de la tastatură, este pefect (egal cu suma divizorilor mai mici
ca el, spre exemplu 6=1+2+3).  Soluție: 

#include <iostream> using namespace std; int main() { unsigned int n, s=1, d; cin>>n; for(d=2;d<=n/2;d++)
if(n%d==0)s=s+d; }

if(s==n) cout<<”numarul este perfect !”; else cout<<” numarul nu este perfect !”; return 0; }
4. Să se calculeze și să se afișeze suma S=1+1*2+1*2*3+…+1*2*3*…*n, unde n este un număr natural, citit
de la tastatură.  Soluție: 

#include <iostream> using namespace std; int main() { unsigned int n, termen=1; unsigned long sum=0;
cin>>n; for(i=1;i<=n;i++) { termen=termen*i;  sum=sum+termen; } cout<<sum; return 0; }

5. Să se determine și să se afișeze toate numerele mai mici decât un numar întreg n, citit de la tastatură, care au
proprietatea de a fi egale cu suma pătratelor cifrelor lor.  Soluție: 

#include <iostream> using namespace std; int main() { int n, i, ic, s; cin>>n; for(i=1;i<n;i++) { s=0; ic=i;
while(ic) { s=s+(ic%10)*(ic%10); ic=ic/10; } if(s==i) cout<<”Numarul”<<i<<” este egal cu suma patratelor
cifrelor sale \n”;} return 0; }

IF

Program care va afisa numarul maxim din 2 numere intregi introduse de la tastatura.

Program If2;
var a, b : integer ;
Procedure Introducere;
begin
readln (a,b);
end;
Procedure Comparatie;
begin
If a>b then
writeln (a,' este mai mare')
else writeln (b,' este mai mare');
end;
begin
Introducere;
Comparatie;
readln
end.

Case

Alcatuiti un program care va afisa numele/ prenumele de pe locul intodus.

Program Case1;
var a:integer;
begin
writeln ('Introduce-ti a=');
readln (a);
case a of 
1: writeln ('Popa Daniela');
2: writeln ('Mircea Eliade');
else writeln('Error');
end;
readln
end.
For

Program care va calcula suma , produsul , media aritmetica


numerelor de la 1 la n , unde n<=100.

Program For2;
var sum , prod , n , i:integer; med:real;
Procedure Operatiuni;
begin
sum:=0;
i:=1;
prod:=1;
n:=100;
For i:=1 to n do begin
sum:=sum+i;
prod:=prod*i;
end;
med:=sum/n;
end;
begin
Operatiuni;
Writeln ('Suma=',sum);
Writeln ('Produsul=',prod);
Writeln ('Media Aritmetica=',med:2:2);
readln
end.
While

Program care va calcula suma, produsul si media aritmetica


numerelor de la 1 la n.

Program While1; 
var i,n,s,p:integer; m:Real;
Procedure Operatii;
begin
i:=0; p:=1; s:=0;
while i < n do begin
i:=i+1;
s:=s+i;
p:=p*i;
end;
m:=s/n;
end;
begin
writeln ('Introduceti valoare lui n');
readln (n);
Operatii;
writeln ('Suma este',s);
writeln ('Produsul este',p);
writeln ('Media este',m:2:2);
readln
end.
Repeat

Program care va calcula suma,produsul si media aritmetica


numerilor de la 1 la n ,unde n<=100.
Program Repeat2; 
Var sum, prod, n, i: integer; med:real;
Procedure Introducere;
begin
sum:=0;
i:=1;
prod:=1;
Write('n='); Readln(n);
end;
Procedure Operatii;
begin
Repeat
sum:=sum+i;
prod:=prod*i;
i:=i+1;
Until i>=n;
med:=sum/n;
end;
begin
Introducere;
Operatii;
writeln ('suma: ',sum);
writeln ('produsul: ',prod);
writeln ('media aritmetica: ',med:2:2);
readln
End.

String

Alcatuiti un program care va afisa cite caractere ‘A’,’a’ sint


intr-un string.

Program String2; 
var t:string; i,n:Integer;
Procedure Kiks;
begin
For i:=1 to Length(t) do
If ((t[i]='A') or (t[i]='a')) then n:=n+1;
end;
begin
writeln ('Introduceti textul');
readln (t);
n:=0;
Kiks;
writeln ('Am gasit ',n,' A sau a');
readln
end.
Array

Program care va calcula suma elementelor dintr-un vector.  

Program Array1;
type matrice=array [1..100] of integer;
var A:matrice;
suma,i,n:integer;
Procedure Introducere;
begin
write('introduceti lungimea vectorului=');
readln(n);
for i:=1 to n do begin
writeln ('A[',i,']=');
readln (A[i]);
end;
end;
Procedure Afisare;
begin
for i:=1 to n do begin
write (A[i]:5);
end;
end;
Procedure Sumam;
begin
suma:=0;
for i:=1 to n do
suma:=suma+a[i];
end;
begin
Introducere;
Afisare;
Sumam;
writeln (' Suma este=',suma);
readln
end.

1. Să se verifice dacă un număr este pozitiv.


#include<iostream.h>
void main()
{
int a;
//citim numarul
cout<<„a=”;cin>>a;
//verificam daca numarul este pozitiv
if(a>=0) cout<<„numar pozitiv”;
else cout<<„numarul negativ”;
}
2. Să se verifice dacă un număr aparţine intervalului [a,b]. a şi b sunt numere reale citite de la tastatură.
#include<iostream.h>
void main()
{float a,b,n;
//citim datele de intrare: a,b si numarul dat
cout<<„a=”;cin>>a;
cout<<„b=”;cin>>b;
cout<<„n=”;cin>>n;
//verificam daca numarul n apartine intervalului [a,b]
if(n>=a and n<=b)cout<<n<<” apartine intervalului [a,b]”;
else cout<<n<<” nu apartine intervalului [a,b]”;
}
3. Să se verifice daca 3 numere citite de la tastatura sunt nule.
#include<iostream.h>
void main()
{float a,b,c;
//citim datele de intrare: a,b si numarul dat
cout<<„a=”;cin>>a;
cout<<„b=”;cin>>b;
cout<<„c=”;cin>>c;
//verificam daca numerele sunt nule
if(a==0 && a==0 && c==0)cout<<” toate numerele sunt nule”;
else cout<<” nu sunt toate nule”;
}
1. Se citesc de la tastatura n elemente. Cate dintre ele fac parte din intervalul [x,y]? x si y se citesc de la
tastatura.
#include<iostream.h>
int a[100],n,x,y,c;
void main()
{
cout<<„numarul de elemente: „;cin>>n;
cout<<„elementele\n”;
for(int i=1;i<=n;i++)
{
cout<<„a[„<<i<<„]=”;cin>>a[i];
}
cout<<„\ns-au citit elementele: „;
for(i=1;i<=n;i++) cout<<a[i]<<” „;
cout<<„\nx=”;cin>>x;
cout<<„\ny=”;cin>>y;
//contor pentru numerele cautate
c=0;
for(i=1;i<=n;i++)
if(a[i]>=x&&a[i]<=y)c++;
cout<<„\nnr=”<<c<<endl;\
}
2. Se citesc de la tastatura n numere. Care sunt pozitiile din vector unde se gasesc elemente pare?
#include<iostream.h>
int a[100],n;
void main()
{
cout<<„numarul de elemente: „;cin>>n;
cout<<„elementele\n”;
for(int i=1;i<=n;i++)
{
cout<<„a[„<<i<<„]=”;cin>>a[i];
}
for(i=1;i<=n;i++)
if(a[i]%2==0)cout<<i<<” „;
}
3. Se citesc n elemente reale. Care este suma elementelor aflate pe pozitii impare in vector?
#include<iostream.h>
int a[100],n,s=0;
void main()
{
cout<<„numarul de elemente: „;cin>>n;
cout<<„elementele\n”;
for(int i=1;i<=n;i++)
{
cout<<„a[„<<i<<„]=”;cin>>a[i];
}
//suma elementelor de pe pozitii impare
for(i=1;i<=n;i++)
if(i%2==1)s=s+a[i];
cout<<„s=”<<s;
}

1. Se citeşte un text într-o variabilă de tip string, in care cuvintele se despart prin spaţii. Se cere:
a) Să se afişeze cuvintele în ordine alfabetică;
b) Să se numere cuvintele cu minim 4 vocale distincte
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char text[100],*p, separator[]=” „, cuv[10][10], cuvant[10], aux[10] ; int nrv=0,voc, nr, k, i, j;
cout<<„Dati sirul:”;cin.get(text,100);
strcpy(p,text) ;
p=strtok(p,separator) ;
while(p)
{
strcpy(cuv[++nr],p);
p=strtok(NULL,separator);
}
for(i=1;i<nr;i++)
for(j=i+1;j<=nr;j++)
if(strcmp(cuv[i],cuv[j])>0)
{
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
for(i=1;i<=nr;i++)
cout<<cuv[i];
for(i=1;i<=nr;i++)
{
voc=0;
strcpy(cuvant,cuv[i]);
k=strlen(cuvant) ;
for(j=0;j<k;j++)
{switch(cuvant[j])
{
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:{voc++; break;}
}}
if (voc>=4) nrv++ ;
}
cout<<nrv;
getch();
}

2. Fişierele cuv1.txt şi cuv2.txt conţin cuvinte, câte un cuvânt pe linie în ordine alfabetică. Să se construiască
fişierul cuv3.txt care să conţină toate cuvintele din cele două fişiere, în ordine alfabetică.

#include <iostream.h>
#include <conio.h>
#include <string.h>
#include<fstream.h>
#include<stdio.h>
void main()
{char a[10], b[10], cuv[10][20], aux[10]; int i,j,nr=0;
clrscr();
fstream f(„cuv1.txt”, ios::in);
while(f.getline(a,10))strcpy(cuv[++nr],a);
ifstream g(„cuv2.txt”);
while(g.getline(b,10))strcpy(cuv[++nr],b);

for(i=1;i<nr;i++)
for(j=i+1;j<=nr;j++)
if(strcmp(cuv[i],cuv[j])>0)
{
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
for(i=1;i<=nr;i++)
cout<<cuv[i]<<endl;
getch();}

3. În fişierul date.in sunt scrise mai multe cuvinte câte unul pe fiecare linie din fişier. Se cere:
a) Să se determine numărul de cuvinte din fişier;
b) Să se afişeze cuvintele care încep cu o vocală.

#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<conio.h>
void main()
{
char a[10]; int k, i, nr=0;
clrscr();
fstream f(„date.in”,ios::in);
while(f.getline(a,10))
{if(a[0]==’a’||a[0]==’e’||a[0]==’i’||a[0]==’o’||a[0]==’u’) cout<<a<<endl; nr++;
}
cout<<nr;
}
La o staţie de benzină există mai multe maşini caracterizate prin număr, marcă şi culoare. Se cere:
a) Să se determine numărul maşinilor Dacia;
b) Să se ordoneze maşinile după culoare.
#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{char marca[20],culoare[20],med[20];
int nr;}masina ;
masina a[20];
int n,x,k;
void citire()
{int i;
cout<<„n=”;cin>>n;
for (i=1;i<=n;i++)
{cout<<„a[i].marca: „;cin>>a[i].marca;
cout<<„a[i].culoare: „;cin>>a[i].culoare;
cout<<„a[i].numar: „;cin>>a[i].nr;
}
}
void nr_dacia()
{ int i;
int nr=0;
for (i=1;i<=n;i++)
{x=strcmp(a[i].marca,”dacia”);
if (x==0) nr=nr+1;}
cout<<„numarul de masini Dacia este „<<nr<<„\n”;
}
void sortare()
{ int i,j;masina aux;

for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{x=strcmp(a[i].culoare,a[j].culoare);
if(x>0)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
for (i=1;i<=n;i++)
cout<<a[i].culoare<<” „<<a[i].marca<<” „<<a[i].nr<<endl;
}

void main()
{
citire();
nr_dacia();
sortare();
}

Pentru evidenţa produselor cosmetice dintr-un depozit, se defineşte o structură cu următoarele informaţii: codul
produsului, denumire, preţul produsului. Citiţi informaţiile tuturor produselor şi afişaţi produsele cu noile
preţuri (valoarea lui x este 7 dacă codul produsului este mai mic decât 500. Şi 11 în caz contrar). Afişaţi
produsele cu cel mai mare preţ după scumpire.
#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{int cod,c,p,pret;
char den[20];}produse;
produse a[20];
int n,i,c,p;
void citire()
{
cout<<„Dati numarul de produse „;cin>>n;
for (i=1;i<=n;i++)
{cout<<„codul produsului „;cin>>a[i].cod;
cout<<„pretul produsului „;cin>>a[i].pret;
cout<<„denumirea produsului „;cin>>a[i].den;}
}
void rezolvare()
{
for (i=1;i<=n;i++)
if(a[i].cod<500) a[i].pret=7;
else a[i].pret=11;
for (i=1;i<=n;i++)
cout<<„pretul „<<a[i].den<<” este „<<a[i].pret<<„\n”;
cout<<endl;
for (i=1;i<=n;i++)
if(a[i].pret==11) cout<<a[i].den<<„\n”;
}
void main()
{
citire();
rezolvare();
}

Se citesc de la tastatură numele şi media generală a n elevi. Se cere să se afişeze lista elevilor în ordinea
descrescătoare a mediilor.

#include<iostream.h>
#include<string.h>
typedef struct elev{
char nume[50];
float medie;
};
elev a[100],aux;
int n;
void citire()
{int i;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{cout<<„a[i].nume: „;cin>>a[i].nume;
cout<<„a[i].medie: „;cin>>a[i].medie;
}
}
void sortare()
{int i,j;
for(i=1;i<n;i++)
{for(j=i+1;j<=n;j++)
if(a[i].medie<a[j].medie)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
}
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<a[i].nume<<” „<<a[i].medie<<endl;

}
void main()
{citire();
cout<<„lista de elevi\n”;
afisare();
sortare();
cout<<„dupa sortare\n”;
afisare();
}

Suma cifrelor
#include <iostream>
using namespace std;
int main() {
int n, S=0;
cin >> n;

while(n!=0) {
S += n%10;
n=n/10;
}
cout << S;
return 0;
}
Maximul
#include
<iostream Minimul
> #include
using namespace std; <iostream
int main(){ >
int a,b,max; using namespace std;
cin >> a>> b;
max = a;
if(b>max) int main(){
max = b; int a,b,c, min;
cout << max << endl; cin >> a>> b >> c;
return 0; min = a;
} if(b<min)
min = b;
if(c<min)
min = c;
cout << min << endl;
return 0;
}
r = sqrt(n);
cout << r;
Paritate return 0;
#include }
<iostream #include <iostream>
>
using namespace std;
int main() {
int n;
cin >> n; using namespace std;
if(n % 2 == 0)
cout << n << " este int main() {
par"; int a, b, R;
else char operatie;
cout << n << " nu cin >> a >> b >>
este par"; operatie;
return 0; switch(operatie) {
} case '+': {
Scadere R = a + b;
#include
<iostream
> cout << R;
break;
}
using namespace std;
case '-': {
if(a > b)
int main() { R = a - b;
else
R = b - a;
int a, b, diferenta=0; cout << R;
cin >> a >> b;
diferenta = a - b; break;
cout << diferenta; }

return 0; case '*': {


} R = a * b;
#include<iostream> cout << R;
using namespace std; break;
int a,b; }
int main() case '/': {
{ if(a > b)
cin>>a>>b; R = a / b;
else
cout<<a+b<<" "<<a-b<<" "<<a*b<<"
R = b / a;
"<<a/b;
cout << R;
return 0; break;
} }
#include default : cout <<
<iostream "Operatorul nu exista!";
> }

return 0;
using namespace std; }
int main() {
int a, b, c, suma=0;
cin >> a >> b;
suma = a+b;
c=suma%10;
cout << c;
return 0;
}
Radical
#include
<iostream
>
#include "math.h"
using namespace std;
int main() {
int n, r;
cin >> n;

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