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

*daca a>b atunci scrie a*

1. *altfel b >a*

#include <iostream>
using namespace std;
int main()
{
 int a,b;
 cin>>a>>b;
 if(a>b) cout<<a;
 else cout<<b;
 return 0;
}

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

*citește a, b, c*

*dacă a>b atunci daca a>c atunci scrie a*

*altfel scrie c*

*altfel daca b>c atunci scrie b*

*altfel scrie c*

Soluție:

#include <iostream>
using namespace std;
int main()
{
 int a,d,c;
 cin>>a>>b>>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*

*s=0;*

*cat timp n<>0 executa*

*s=s+n MOD 10*

*n=n/10*

*sfarsit cat timp*

*scrie s*

Soluție:

#include <iostream>
using namespace std;
int 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*

*prim=1*

*pentru i=2, n DIV 2, 1 execută*

*dacă n MOD i=0 atunci prim=0*

*sfarsit pentru*

*daca prim=1 atunci scrie ‘numarul este prim’*

*altfel scrie ’numarul nu este prim’*

Soluție:

#include <iostream>
using namespace std;

int main()
{
int n,i,sw;
cin>>n;
sw=1;
for(i=2;i<=n/2;i++)
 if(n%i==0) sw=0;
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*

*cat timp a MOD b <> 0 executa*

*r=a MOD b*

*a=b*

*b=r*

*sfarsit cat timp*

*scrie b*

Soluție:

#include <iostream>
using namespace std;

int main()
{
 int a,d;
 cin>>a>>d;
 while(a%d!=0)
 {
 r=a%d;
 a=d;
 d=r;
 }
 cout<<d;
return 0;
}

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 i=a;i<=b;i++)
if(x % 2!=0) cout<<i<<’ ‘;

Soluție:

cin>>a>>b;
if(a>b) {aux=a; a=b; b=aux;}
int i=a;

while(i<=b)
 {
 if(x % 2!=0) cout<<i<<’ ‘;
 i++;
 }

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;
 else s=11;
}
if(s==11) cout<<”cifrele nu sunt in ordine crescatoare” ;
 else cout<<”cifrele sunt in ordine crescatoare” ;

Soluție:

cin>>n;
s=-1;
do {
if(n%10>s) s=n%10;
 else 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%2==0) sum-=i\*i;
 else sum+=i\*i;
cout<<sum;

Soluție:

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++)
 if(n%i==0)d=i;
if(i==n/2+1) cout<<”numarul nu are divizori proprii”;
 else cout<<d;

Soluție:

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;
 n=n/10;
}
while(n!=0);
cout<<max;

Soluție:

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;
}