Sunteți pe pagina 1din 8

Probleme propuse pentru teza sem2-Info Intensiv

1. Se citeste un vector a cu n elemente numere naturale. Sa se calculeze elementul maxim

din vector. Se va folosi o functie recursiva pentru citire si una recursiva pentru determinarea elementului maxim.

#include<iostream> using namespace std;

int max(int a[100], int i, int j){ if(i==j) return a[i]; else { int m=(i+j)/2; int m1=max(a,i,m); int m2=max(a,m+1,j); if(m1<m2) return m2;

 

else return m1;

}}

void citire(int a[100], int n)

{

 

if(n>0) { citire(a,n-1); cin>>a[n];

}

}

void afis(int a[100],int n){ if(n>0) { afis(a,n-1); cout<<a[n]<<" ";

int main()

}

}

{

int n,a[100]; cin>>n; citire(a,n); afis(a,n);

cout<<max(a,1,n);

system("pause"); return 0;

}

2.

Sa se calculeze CMMDC al doua numele naturale folosind o functie recursiva.

#include<iostream> using namespace std;

int cmmdc(int x, int y) { if(x%y==0) return y; else return cmmdc(y,x%y);

}

int main(){

cout<<cmmdc(15,55);

system("pause"); return 0;}

3. Sa se determine cifra maxima a unui numar natural folosind o functie recursiva.

#include<iostream> using namespace std;

int max(int n)

{ if ( n <= 9 ) return n; else

{

int m = max(n/10); if ( m > n%10 ) return m; else

}}

return n%10;

int main(){ cout << max(23614); system("pause"); return 0;}

4. Sa se scrie o functie recursiva pentru calculul rasturnatului unui numar natural.

using namespace std;

int rast(int n, int r)

{ if ( n == 0 ) return r; else return rast(n/10,r*10+n%10);}

int main(){ cout <<rast(23456,0); system("pause"); return 0;

}

5.

Sa se scrie o functie recursiva care calculeaza cate cifre are un numar natural.

#include<iostream> using namespace std;

int NC(int n){ if ( n <= 9 ) return 1; else

return NC(n/10)+1;}

int main()

{

cout << NC(2405); system("pause"); return 0;}

6.

Sa se calculeze recursiv suma 1 + 1/2 + 1/3 +

+1/n.

#include<iostream.h>

using namespace std;

float suma(int n)

{ if (n==0) return 0; else return suma(n-1) + 1.0/n;}

int main(){

cout<<suma(5);

system("pause");; return 0;

}

7.

Sa se calculeze recursiv suma 1*2 + 2*3 +

+ n*(n+1).

#include<iostream.h>

using namespace std;

int suma(int n)

{ if (n==0) return 0; else return suma(n-1) + n*(n+1);}

int main(){

cout<<suma(3);

system("pause");; return 0;}

8. Sa se calculeze recursiv suma

1
1

/1 + 2/2 + 3/3 + 5/4 + 8/5 +

+ fib(n)/n

unde fib(n) este al n-lea termen din sirul lui Fibonacci. #include<iostream.h>

using namespace std;

int fib(int n)

{ if(n==1 || n==2) return 1; else return fib(n-1)+fib(n-2);}

float suma(int n) { if (n==0) return 0; else return suma(n-1) + (float)fib(n)/n;}

int main(){

cout<<suma(5);

system("pause");; return 0;}

9. Sa se calculeze recursiv suma primelor n patrate perfecte. #include<iostream>

using namespace std; int suma(int n){ if(n==0) return 0; else return suma(n-1)+n*n;}

int main(){ int n; cin>>n; cout<<suma(n); system("pause"); return 0;}

10. Sa se calculeze recursiv 2 la puterea n. #include<iostream>

using namespace std;

int putere(int n){ if(n==0) return 1; else return putere(n-1)*2;}

int main(){ int n; cin>>n; cout<<putere(n); system("pause"); return 0;

}

11
11

.Sa se calculeze recursiv de cate ori apare o valoare intreaga x intr-un vector a cu n

elemente intregi.

using namespace std;

int a[100],n,x;

int nrap(int n, int x){ if(n==0) return 0;

else if(a[n]==x) return 1+nrap(n-1,x);

else return nrap(n-1,x);

}

int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>x; cout<<nrap(n,x); system("pause"); return 0;}

12. Sa se scrie o functie recursiva care numara cate vocale mici are un cuvant transmis ca

parametru.

#include<iostream>

using namespace std;

int vocale(char s[20]){ if(strlen(s)==0) return 0; else if(strchr("aeiou",s[0])) return 1 + vocale(s+1); else return vocale(s+1);}

int main(){ cout<<vocale("anamaria"); return 0;}

13.

Sa se calculeze recusiv suma

 

S=1/2+2/1+2/3+3/2+

+n/(n+1)+(n+1)/n.

#include<iostream>

using namespace std;

float suma(int n) { if (n==0) return 0; else return suma(n-1) + (float)n/(n+1)+(float)(n+1)/n;}

int main(){ int n; cin>>n; cout<<suma(n); system("pause"); return 0;}

14. Sa se stearga din fiecare element al unui vector toate aparitiile cifrei maxime. Se vor folosi functii recursive pentru urmatoarele prelucrari:

- citirea elementelor vectorului

- determinarea cifrei maxime a unui numar

- stergerea tuturor aparitiilor unei cifre dintr-un numar

- parcurgerea vectorului si modificarea elementelor conform cerintei

- afisarea vectorului Ex: 7 37 443 13 160 31 11 140 se vor afisa valorile: 3 3 1 10 1 0 10 #include<fstream> using namespace std; ifstream fin("date.in"); ofstream fout("date.out");

int cmax(int n){ if(n<=9) return n; else if(cmax(n/10)>n%10) return cmax(n/10); else return n%10;}

int delcif(int n, int c){ if(n==0) return 0; else if(n%10==c) return delcif(n/10,c); else return delcif(n/10,c)*10+n%10;}

void s(int a[100], int n){

if(n>0)

{

s(a,n-1);

a[n]=delcif(a[n],cmax(a[n]));}}

void citire(int a[100], int n){

if(n>0)

{

citire(a,n-1);

fin>>a[n];

}}

void afis(int a[100], int n){

if(n>0)

int main(){ int a[100],n; fin>>n; citire(a,n); s(a,n); afis(a,n); fin.close();

fout.close();

{

afis(a,n-1);

fout<<a[n]<<" ";

}}

15.Sortare cu metoda bulelor - #include <fstream> using namespace std; ifstream is("date.in"); ofstream os("date.out");

void bule_rec(int a[], int n){ int gata=1; for(int i=0;i<n-1;i++)

if(a[i]>a[i+1])

{

int aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;

gata=0;

}

if(!gata) bule_rec(a,n-1);}

int main(){ int a[100],n; is>>n; for(int i=0;i<n;i++) is>>a[i]; bule_rec(a,n); for(int i=0;i<n;i++) os<<a[i]<<" "; is.close(); os.close(); return 0;}

16.Sortare cu metoda selectiei (metoda elevului)

#include <fstream> using namespace std; ifstream is("date.in"); ofstream os("date.out");

-

void elev_rec(int a[], int n, int i, int j){

if(i<n-1)

{

if(a[i]>a[j]) {int aux=a[i]; a[i]=a[j]; a[j]=aux;} if(j<n-1) elev_rec(a,n,i,j+1);

else elev_rec(a,n,i+1,i+2);

}}

int main(){

int a[100],n;

is>>n;

for(int i=0;i<n;i++) is>>a[i];

elev_rec(a,n,0,1);

for(int i=0;i<n;i++) os<<a[i]<<" "; is.close(); os.close(); return 0;}