Documente Academic
Documente Profesional
Documente Cultură
CatedraInformatic i TehnologiiInformaionale
Aelaborat:
Polevoi Denis
A verificat:
LiubomirChiriac,
dr. hab. prof. univ.
Chisinu, 2012
Cuprins
1
1. Numerele Fibonacci (Pascal i C).
6. Algoritmullui Euclid.
7. Calculareavalorilor a 2 funcii.
9. Mediiartimeticeigeometrice.
11. FunciaHermite.
12. FunciaCebev.
13.Funcia Manna-Pnuelle
20.Generarea Permutarilor
21.Generarea Aranjamentelor
23.Problema comis-voiajorului
25.Problema fotogtafiei(FILL)
26.Problema individuala
27.Genararea combinarilor
2
Rezolvarea problemelor n varianta recursiv i nerecursiv.
1. Se cere s se afle primele n numere fibonaci, unde n ia valori de la 1..n. S se scrie varianta
recursiv i nerecursiv n Pascal i C.
Rezultatul: Rezultatul:
3
Variantarecursiv C Variantanerecursiv C
#include<stdio.h> #include<stdio.h>
#include<conio.h> #include<conio.h>
int main() int main()
{ {
clrscr(); clrscr();
int f[20]; int f[20];
int n=0; int n=0;
int k; int k;
printf("introdu n="); printf("Introdu n=");
scanf("%d",&n); scanf("%d",&n);
f[0]=1; f[1]=1; f[0]=1; f[1]=1;
for(k=2; k<n; k++) for(k=2; k<n; k++)
f[k]=f[k-1]+f[k-2]; f[k]=f[k-1]+f[k-2];
printf("SirulFibonacieste:"); printf("SirulFibonacieste:");
for ( k=0; k<n; k++) for ( k=0; k<n; k++)
printf("\n%d",f[k]); printf("\n%d",f[k]);
getch(); getch();
return 0; } return 0; }
Rezultatul: Rezultatul:
4
2. Sa se afle primelen numere Master 2012, unde 1..n. S se scrie varianta recursiv i
nerecursiv n Pascal i C. irul de numere Masterat 2011 se definete 1,1,1,3,5,9,17,31,
6
3. Sa se calculeze suma urmtorului ir de numere: 1, 5, 9, 13, 17, 4n-3, unde n=1..n. S se
scrie varianta recursiv i nerecursiv n Pascal i C
7
Variantarecursiv C Varianata nerecursiv C
Rezultatul:
Rezultatul:
5. Sa se determine cmmdc a 2 numere naturale prin algoritmul lui Euclid.
Variantarecursiv C Variantanerecursiv C
Rezultatul:
Rezultatul:
Variantarecursiv C Variantanerecursiv C
#include<stdio.h> #include<stdio.h>
#include<conio.h> #include<conio.h>
#include<iostream.h> #include<iostream.h>
intcmmdc(inta,intb,int c){ inta,b,c,i,k;
if (a==b) return a; void main(){
else if(a>b) return cmmdc(a-b,b,c); clrscr();
else return cmmdc(a,c,b-a); printf("Introdu a sib,c");
if (a==c) return a; scanf("%d%d%d",&a,&b,&c);
else if(a>c) return cmmdc(a-c,c,b); if((a>=b)&&(a>=c))k=a;
else return cmmdc(a,b,c-a);} if((b>=a)&&(b>=c))k=b;
void main(){ if((c>=b)&&(c>=a))k=c;
clrscr(); for(i=k;i>=1;i--)
intb,a,c; if((a%i==0)&&(b%i==0)&&(c%i==0)){
printf("Introdu a sib,c"); printf("cmmdc=%d",i);
scanf("%d%d%d",&a,&b,&c); break;}
printf("cmmdcdintre a si b si c getch();}
%d",cmmdc(a,b,c));
getch();}
Rezultatul:
Rezultatul:
Recursivitatea indirect.
0 1 2
1 1 3
1 2 4
2 1 5
2 2 7
3 0 5
3 1 13
3 2 29
3 3 61
3 4 125
4 0 13
Rezultatul:
0 1 1
Rezultatul:
1 0 0
1 1 2
2 1 2
1 2 4
2 2 14
3 1 -4
1 3 6
3 2 40
2 3 34
3 3 180
5 7 25032
Rezultatul:
12. Sa se alcatuiasc un program utiliznd recursia pentru calcularea formulei Cebisev:
0 1 1
1 0 0
1 1 0
2 1 -1
1 2 0
2 2 -1
3 1 -2
1 3 0
3 2 -4
2 3 -1
3 3 -6
5 7 -2716
Rezultatul:
13. S se alcatuiasc un program utiliznd recursia pentru calcularea funciei Manna Pnueli
14. S se alcatuiasc un program utiliznd recursia pentru calcularea funciei Manna Pnueli2
15. Scrierea unui numar intr-o baza : Se citeste un numar natural nenul n,sa se transforme in baza
b, b=2..9
cout<<n<<"->";
baza(n,b);
getch();
}
Rezultatul:
0 129 4901
1 3 -16123
2 3 29
3 31771 29
4 5883 29
5 3 29
Rezultatul:
18. Se da un numar natural n. Sa se determine toate descompunerele numarului n.
Se citete n numrul natural care are semnificaie de numr de mulimi, Se citesc de asemenea
numerele natural n1, n2,,nn unde ni reprezint numrul de elemente Ai. Se cere s se calculeze
produsul cartezian al mulimilor A1xA2xxAn. Se consider c elementele mulimii i sunt i {1,2,
,n}.
Rezultatul:
O fotografie alb-negru este prezentat sub forma unei matrice binare. Ea nfiseaz unul sau mai multe
obiecte. Poriunile corespunztoare obiectului n matrice au valoarea 1. Se cere s se determine dac
fotografia reprezint unul sau mai multe obiecte.
Varianta recursiv C
#include <iostream.h>
int a[10][10],i,j,m,n,x,y,gasit;
void compact(int x, int y,int a[10][10]){
if (a[x][y]){
a[x][y]=0;
compact (x-1,y,a);
compact (x-1,y+1,a);
compact (x,y+1,a);
compact (x+1,y=1,a);
compact (x+1,y,a);
compact (x=1,y-1,a);
compact(x,y-1,a);
compact(x-1,y-1,a);}}
void main(){
cout<<"m="; cin>>m;
cout<<"n="; cin>>n;
for (i=1; i<=m;i++)
for (j=1; i<=n;j++){
cout<<"a["<<i<<','<<j<<"]";
cin>>a[i][j];}
for (i=1; i<=n;i++){
a[0][i]=0;
a[m+1][i]=0;}
for (i=1; i<=m;i++){
a[i][0]=0;
a[i][n+1]=0;}
x=0; do{ x++;
y=0;
do{
y++;}
while ((y!=n) && (a[x][y]!=1));}
while ((x!=m)&& (a[x][y]!=1));
compact (x,y,a);
gasit=0;
for (i=1;i<=m;i++)
for (j=1; j<=n;j++)
if (a[i][j]==1) gasit=1;
if(gasit) cout<<"mai multe obiecte";
else cout<<"un obiect";}
Rezultatul:
26. Problem individual
Rezultatul: