Documente Academic
Documente Profesional
Documente Cultură
F(x)=
F(F(x+2)), x<12
0, n=0
1, n=1
Un-1+Un-2, altfel
0, n=0
1, n=1
Un-1+Un-2, altfel
Rezolvari
1) S se calculeze n! in varianta iterativa.
#include<stdio.h>
long int factorial (int n)
{
long int f=1;
for (int i=1; i<=n;i++)
f=f*i;
return f;
}
void main()
{
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
else
printf("0!=1\n");
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
else
printf("0!=1\n");
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
getchar();
int var;
scanf("%d", var);
4) Scrieti o functie proprie care realizeaza calculul recursiv al sumei elementelor unui vector, de
n<=10, de nr reale. Scrieti functia main care citeste datele de la tastatura, calculeaza suma,
utilizand functia recursiva anterior definita si afiseaza valoarea obtinuta.
#include <stdio.h>
#include <conio.h>
int a[10], n;
int Suma (int n, int a[10])
{
if(n==0) return 0;
else return(a[n]+Suma(n-1,a));
}
void main()
{
// Citire date de intrare
printf("Introduceti nr de elemente: ");
scanf("%d", &n);
for (int i=1; i<=n; i++)
{
printf("Elementul [%d] = ", i);
scanf("%d", &a[i]);
}
// Afisarea rezultatelor
printf("Suma = %d", Suma(n,a));
}
getch();
5) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr semn
(pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta iterativa.
#include <stdio.h>
#include <conio.h>
getch();
6) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr semn
(pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
recursiva.
#include <stdio.h>
#include <conio.h>
void main()
{
unsigned int x,y;
printf("Introduceti x: ");
scanf("%u",&x);
printf("Introduceti y: ");
scanf("%u",&y);
if(!x || !y)
//daca x=0 sau y=0
printf("cmmdc(%u,%u) = 1\n",x,y);
else
printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y));
getch();
}
getch();
ca am
//sumarea elementelor
printf("\nSuma elementelor: %d",suma(x,n-1)); /* am apelat cu n-1, ptr
reprezinta
sir */
//produsul elementelor
printf("\nProdusul elementelor: %d",produs(x,n-1));
//numarul elementelor negative din sir
printf("\nNumarul elementelor negative: %d",numar_negative(x,n-1));
//produsul componentelor pozitive
printf("\nProdusul elementelor pozitive: %d",produs_pozitive(x,n-1));
//media componentelor din sir
printf("\nMedia componentelor din sir: %.2f",media(x,n-1,n)); /*
primul parametru - sirul,
9) Sa se scrie o functie recursiva pentru determinarea sumei cifrelor unui numar natural.
Indicatie: Se izoleaza ultima cifra, iar lui n i se atribuie ctul ntreg dintre vechea valoare i 10.
#include<stdio.h>
#include<conio.h>
int suma(int n)
{
if(!n) return 0;
else return n%10+suma(n/10);
}
void main()
{
int n;
printf("Introduceti numarul: ");
scanf("%d", &n);
//!n=daca nu exista n
10) Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 n baza k
(1<k<=10). Indicatie: Numarul se mparte la k, se retine restul, ctul se mparte la k, se retine
restul... pna cnd ctul este mai mic dect mpartitorul. Rezultatul se obtine prin scrierea n
ordine inversa a resturilor obtinute. Tiparirea restului se face dupa autoapel.
#include<stdio.h>
#include<conio.h>
void transform(int n,int b)
{
int rest=n%b;
if (n>=b) transform(n/b,b);
printf("%d",rest);
}
void main()
{
int n,b;
printf("n="); scanf("%d",&n);
printf("baza="); scanf("%d",&b);
transform(n,b);
getch();
}
F(x)=
x-1, x>=12
F(F(x+2)), x<12
#include<stdio.h>
#include<conio.h>
int F(int x)
{
if (x>=12) return x-1;
return F(F(x+2));
}
void main()
{
int x;
printf("x="); scanf("%d",&x);
printf("Valoarea functiei este: %d",F(x));
}
getch();
0, n=0
1, n=1
Un-1+Un-2, altfel
0, n=0
1, n=1
Un-1+Un-2, altfel
int U (int n)
{
if (!n) return 0;
else
if (n==1) return 1;
else
return U(n-1)+U(n-2);
}
void main()
{
int n;
printf("Introduceti n=");
scanf("%d",&n);
printf("Valoarea sirului in n este: %d",U(n));
getch();
}