Sunteți pe pagina 1din 5

Laborator – programarea calculatoarelor

Limbajul C++
Adrian Runceanu

Laborator nr. 7 - Func ii definite de utilizator

Probleme rezolvate:

1. Sa se scrie cate o functie care sa determine:


- cel mai mare divizor comun a doua numere intregi date ca parametri.
- cel mai mic multiplu comun a doua numere intregi date ca parametri
Indicatii:
- Pentru determinarea cmmdc se va folosi algoritmul lui Euclid prin impartiri
repetate.
- Pentru determinarea cmmmc se va folosi relatia dintre cmmmc si cmmdc:
cmmmc(a,b)=(a*b)/cmmdc(a,b)
2. Sa se scrie o functie care sa rezolve o ecuatie de gradul II, unde coeficientii
ecuatiei sunt dati ca parametri.
Functia principala va citi coeficientii a doua ecuatii si va afisa solutiile pentru fiecare
ecuatie in parte.
3. Sa se scrie o functie care sa calculeze si sa afiseze urma unei matrice patratice
date ca parametru.
Urma unei matrice patratice este suma elementelor aflate pe diagonala
principala.
4. Sa se scrie o functie care sa verifice daca un numar intreg este sau nu palindrom
(este egal cu rasturnatul sau).
5. Sa se scrie o functie care sa verifice daca un doua numere intregi sunt prime
gemene (sunt prime si diferenta in modul este egala cu 2).
6. Sa se scrie o functie care sa afiseze suma cifrelor unui numar intreg dat ca
paramentru.

Solutii:
Problema 1:

Sa se scrie cate o functie care sa determine:


- cel mai mare divizor comun a doua numere intregi date ca parametri.
- cel mai mic multiplu comun a doua numere intregi date ca parametri
Indicatii:
- Pentru determinarea cmmdc se va folosi algoritmul lui Euclid prin impartiri
repetate.
- Pentru determinarea cmmmc se va folosi relatia dintre cmmmc si cmmdc:
cmmmc(a,b)=(a*b)/cmmdc(a,b)

#include <iostream.h>
int cmmdc(int a, int b)
{
int r;
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;

1
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
}
int cmmmc(int a, int b)
{
return(a*b/cmmdc(a,b));
}
void main(void)
{
int x,y,divizor,multiplu;
cout<<"Dati primul numar ";cin>>x;
cout<<"Dati al doilea numar ";cin>>y;
divizor=cmmdc(x,y);
cout<<"C.m.m.d.c este "<<divizor<<endl;
multiplu=cmmmc(x,y);
cout<<"C.m.m.m.c este "<<multiplu<<endl;
}

Problema 2:
Sa se scrie o functie care sa rezolve o ecuatie de gradul II, unde coeficientii
ecuatiei sunt dati ca parametri.
Functia principala va citi coeficientii a doua ecuatii si va afisa solutiile pentru fiecare
ecuatie in parte.

#include <iostream.h>
#include <math.h>
void ecuatie(float a, float b, float c)
{
float delta,x1,x2;
delta=b*b-4*c;
if(delta<0) cout<<"ecuatia are solutii complexe";
else
if(delta==0)
{
cout<<"ecuatia are doua radacini egale"<<endl;
x1=x2=-b/(2*a);
cout<<"x1= "<<x1<<endl;
cout<<"x2= "<<x2<<endl;
}
else
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
cout<<"ecuatia are urmatoarele radacini: "<<endl;
cout<<"x1= "<<x1<<endl;
cout<<"x2= "<<x2<<endl;
}
return;
}
void main(void)
{
int a1,b1,c1,a2,b2,c2;
cout<<"Dati coeficientii primei ecuatii "<<endl;
cout<<"Dati coeficientul a1 ";cin>>a1;
cout<<"Dati coeficientul b1 ";cin>>b1;
cout<<"Dati coeficientul c1 ";cin>>c1;
ecuatie(a1,b1,c1);

2
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
cout<<endl;
cout<<"Dati coeficientii celei de-a doua ecuatie "<<endl;
cout<<"Dati coeficientul a2 ";cin>>a2;
cout<<"Dati coeficientul b2 ";cin>>b2;
cout<<"Dati coeficientul c2 ";cin>>c2;
ecuatie(a2,b2,c2);
}

Problema 3:
Sa se scrie o functie care sa calculeze si sa afiseze urma unei matrice
patratice date ca parametru.
Urma unei matrice patratice este suma elementelor aflate pe diagonala
principala.

#include <iostream.h>
#include <math.h>
int urma(int a[10][10],int n)
{
int suma=0,i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) suma+=a[i][j];
return suma;
}
void main(void)
{
int a[10][10],i,j,n,u;
cout<<"Dati numarul de linii si coloane n = ";cin>>n;
cout<<"Dati elementele matricei "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
cout<<"Matricea data este: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
u=urma(a,n);
cout<<"Urma matricei este "<<u;
}

Problema 4:
Sa se scrie o functie care sa verifice daca un numar intreg este sau nu
palindrom (este egal cu rasturnatul sau).

#include <iostream.h>
int palindrom(long int x)
{
long int z=0,y;
y=x;
while(x!=0){ z=z*10+x%10; x=x/10; }
if(z==y) return 1;

3
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
else return 0;
}

void main(void)
{
long int a,b;
cout<<"Dati numarul a= ";cin>>a;
if(palindrom(a)==1) cout<<"numarul "<<a<<" este palindrom"<<endl;
else cout<<"numarul "<<a<<" NU este palindrom"<<endl;
}

Problema 5:

Sa se scrie o functie care sa verifice daca un doua numere intregi sunt prime
gemene (sunt prime si diferenta in modul este egala cu 2).

#include <iostream.h>
#include <math.h>

int prim(long int x)


{
long int i,nr_prim=1;
for(i=2;i<=x/2;i++)
if(x%i==0) nr_prim=0;
if(nr_prim==1) return 1;
else return 0;
}

void main(void)
{
long int a,b;
cout<<"Dati primul numar a= ";cin>>a;
cout<<"Dati al doilea numar b= ";cin>>b;
if( (prim(a)==1) && (prim(b)==1) && (abs(a-b)==2) )
cout<<"numerele "<<a<<" si "<<b<<" sunt prime gemene"<<endl;
else cout<<"numerele "<<a<<" si "<<b<<" NU sunt prime gemene"<<endl;
}

Problema 6:

Sa se scrie o functie care sa afiseze suma cifrelor unui numar intreg dat ca
paramentru.

#include <iostream.h>
long int n;
void cifre(long int n)
{
int s=0;
while(n!=0) { s+=n%10; n=n/10; }
cout<<"Suma cifrelor este "<<s<<endl;;
return;
}

void main(void)
{

4
Laborator – programarea calculatoarelor
Limbajul C++
Adrian Runceanu
cout<<"Dati numarul n= ";cin>>n;
cifre(n);
}

Probleme propuse spre rezolvare

1. Realizati o func ie care s verifice dac un num r este “rotund“. Spunem c un


num r este “rotund“ dac are un num r egal de cifre de 0 i 1 în reprezentarea sa în
baza 2.
Exemplu : Num rul 910 = 10012 (are doua cifre de 0 si doua cifre de 1)

2. Realizati o functie care sa calculeze numarul de valori de 1 ale reprezentarii unui


numar dat in baza 2. Initial numarul se citeste de la tastatura, in baza 10 si apoi se
transforma in baza 2.

3. Numim platou de lungime k intr-un sir de numere intregi, o secventa de k


elemente identice (cu aceeasi valoare). Scrieti un program care afiseaza toate
platourile de lungime maxima existente intr-un sir dat cu n elemente.
Exemplu : In sirul (1, 2, 2, 2, 3, 4, 4, 5, 5, 5) intalnim platourile (2, 2, 2), (4, 4) si (5,
5, 5), iar cele de lungime maxima sunt primul si al treilea.

4. Se la tastatura un vector cu n elemente numere intregi. Sa se tipareasca toate


perechile de elemente (nu neaparat consecutive) cu proprietatea ca cel mai mare
divizor comun al elementelor perechii este o valoare data de la tastatura d.
Exemplu : Daca vectorul este v = {2, 3, 6, 5, 8} cu n=5 si d=2, atunci perechile
cautate sunt : (2, 6), (2, 8) si (6,8).

5. S se afi eze toate numerele superpalindroame mai mici sau egale cu o valoare
dat n. Numim num r palindorm un num r care este egal cu r sturnatul s u (num rul
cu cifrele de la dreapta la stânga din num rul ini ial). Numim superpalindrom un num r
care este palindrom atât el cât i p tratul s u.

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