Sunteți pe pagina 1din 26

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și


Microelectronică
Departamentul Ingineria Software și Automatică

RAPORT
la lucrarea de laborator nr. 3

la Programarea Calculatoarelor

Tema: utilizarea funcțiilor si funcții recursive

A efectuat: Cojucari Dumitru

A verificat: Barnaz Andrei

Chişinău 2022
Scopul lucrării
1
Scopul lucrării este de a familiariza studentul cu scrierea și utilizarea funcțiilor și a
recursiei, utilizînd limbajul C.

Obiectivele temei
Scrierea și utilizarea funcțiilor și a recursiei, utilizînd limbajul C.

⦁ Rezolvare

Probleme pentru utilizarea funcțiilor:

⦁ Scrieți un program C pentru a găsi cubul oricărui număr folosind funcția.


#include <stdio.h>
#include <math.h>

int cub(int a, int b){


b=pow(a, 3);
return b;
}

int main(){
int a;
int b;
printf ("Introdu numarul:\n");
scanf("%d", &a);
cub(a, b);
printf("Numarul %d la cub este %d", a, cub(a, b));
return 0;
}

2
⦁ Scrieți un program C pentru a găsi diametrul, circumferința și aria cercului folosind
funcțiile.
#include <stdio.h>
#include <math.h>
int diametr(int a, int b){
b=2*a;
return b;
}
double aria(int a, double c){
c=pow(a, 2)*3,14;
return c;
}
double circ(int a, double d){
d=2*a*3,14;
return d;
}

int main(){
int a;

3
double b;
double c;
double d;

printf("Introdu raza cercului:\n");


scanf("%d", &a);
printf("Diametrul cercului este:%d\nAria cercului este:%.1lf\nIar circumferinta cercului
este:%.1lf", diametr(a, b), aria(a, c), circ(a, d));
return 0;
}

⦁ Scrieți un program C pentru a găsi maxim și minim între două numere folosind
funcții.
#include <stdio.h>
#include <math.h>
void rar(int a, int b){
if (a>b)
{
printf("Numarul max este:%d\nIar numarul min este:%d", a, b);
}

4
else{
printf("Numarul max este:%d\nIar numarul min este:%d", b, a);
}
}

int main(){
int a;
int b;
printf("Introdu cele doua numere\n");
scanf("%d", &a);
scanf("%d", &b);
rar(a, b);

return 0;
}

⦁ Scrieți un program C pentru a verifica dacă un număr este par sau impar folosind
funcțiile.
#include <stdio.h>
#include <math.h>

5
void vfv(int a){
if (a%2!=0)
{
printf("Numarul %d este impar", a);
}
else{
printf("Numarul %d este par", a);
}
}

int main(){
int a;
printf("Introdu numarul\n");
scanf("%d", &a);
vfv(a);

return 0;
}

⦁ Scrieți un program C pentru a verifica dacă un număr este prim, Armstrong sau un

6
număr perfect folosind funcții.
#include <stdio.h>
#include <math.h>

void ouo(int a, int b){


for (int i; i<=a/2 ; i++)
{
if (a%i==0)
{
printf("Numarul nu este prim\n");
b=1;
break;
}
}
if (b<1)
{
printf("Numarul este prim\n");
}
}
void klk(int a, int c, int e, int d){
a==d;
while (a>0)
{
e=a%10;
c+=e*e*e;
a/=10;
}
if (d==c)
{
printf("Numarul este numar Armstrong\n");
}

7
else{
printf("Numarul nu este numar Armstrong\n");
}
}
void tyt(int a, int f, int g){
for (int i = 1; i < a; i++)
{
f=a%i;
if (f<1)
{
g+=i;
}

}
if (g==a)
{
printf("Numarul este perfect\n");
}
else{
printf("Numarul nu este perfect\n");
}
}

int main(){
int a;
int b;
int c;
int d;
int e;
int f;
int g;

8
printf("Introdu numarul:\n");
scanf("%d", &a);
ouo(a, b);
klk(a, c, e, d);
tyt(a, f, g);

return 0;
}

⦁ Scrieți un program C pentru a găsi toate numerele prime între intervalul dat folosind
funcțiile.
#include <stdio.h>
#include <math.h>
int mnm(int a){
for (int i=2; i<=a/2 ; i++){
if (a%i==0){
return 0;
}
else{
return 1;

9
}
}
}
void pop(int a, int b, int c){
printf("Numerele prime din sir sunt:\n");
while(a <= b){
if(mnm(a)){
printf("%d\n", a);
}
a++;
}
}

int main(){
int a;
int b;
int c;
printf("Introdu inceputul si sfarsitul intervalului:\n");
scanf("%d", &a);
scanf("%d", &b);
pop(a, b, c);

return 0;
}

10
⦁ Scrieți un program C pentru a imprima toate numerele puternice între intervalul dat
folosind funcțiile.
#include <stdio.h>
#include <math.h>
void ygy(int a, int b){
int c;
int d;
while(a != b){
c = 0;
d = a;
while(d != 0){
c+= fact(d % 10);
d /= 10;}
if(a == c){
printf("%d, ", a);}
a++;}
}
int fact(int e){
if(e == 0)

11
return 1;
else
return (e * fact(e-1));
}
int main(){
int a;
int b;
printf("Introdu un nr puternic minim: ");
scanf("%d", &a);
printf("Introdu un nr puternic maxim ");
scanf("%d", &b);
printf("Toate nr puternice de la %d la %d sunt: \n", a, b);
ygy(a, b);
return 0;
}

⦁ Scrieți un program C pentru a imprima toate numerele Armstrong între intervalul


dat folosind funcțiile.
#include <stdio.h>
int lol(int a, int d, int e, int s){

12
d = a;
s = 0;
while(d != 0){
e = d % 10;
s += e * e * e;
d /= 10;
}
if(a == s)
return 1;
else
return 0;
}
void mnm(int a, int b, int c, int d, int e, int s){
while(a <= b){
if(lol(a, d, e, s)){
printf("%d, ", a);
}
a++;
}
}
int main(){
int a;
int b;
int c;
int d;
int e;
int s;
printf("Indica intervalul de numere:\n");
scanf("%d", &a);
scanf("%d", &b);
printf("Toate numerele Armstrong din interval sunt:\n");

13
mnm(a,b,c,d,e,s);
return 0;
}

⦁ Scrieți un program C pentru a imprima toate numerele perfecte între intervalul dat
folosind funcțiile.
#include <stdio.h>

int bnb(int a, int c, int s){


int i;
c = a;
s = 0;
for(i=1; i<c; i++){
if(c % i == 0){
s += i;
}
}
if(s == c)
return 1;
else

14
return 0;
}

void vbv(int a, int b, int c, int s){


while(a <= b){
if(bnb(a,c,s)){
printf("%d, ", a);
}
a++;
}
}

int main(){
int a;
int b;
int c;
int i;
int s;
printf("Indica intervalul de numere:\n");
scanf("%d", &a);
scanf("%d", &b);
printf("Toate numerele Armstrong din interval sunt:\n");
vbv(a, b, c, s);
return 0;
}

15
Probleme pentru utilizarea funcțiilor recursive:
⦁ Scrieți un program C pentru a găsi puterea oricărui număr folosind recursivitatea.
#include <stdio.h>

double alk(double a, int b){


if(b == 0)
return 1;
else if(b > 0)
return a * alk(a, b-1);
else
return 1 / alk(a, -b);
}

int main(){
double a;
double c;
int b;
printf("Introdu baza si exponentul\n");

16
scanf("%lf", &a);
scanf("%d", &b);
c = alk(a, b);
printf("%.2lf ^ %d = %f", a, b, c);
return 0;
}

⦁ Scrieți un program C pentru a imprima toate numerele naturale cuprinse între 1 și n


folosind recursivitatea.
#include <stdio.h>

void olo(int a, int b){


if(a > b)
return;
printf("%d, ", a);
olo(a + 1, b);
}

int main(){
int a;

17
int b;
printf("Limita minima:");
scanf("%d", &a);
printf("Limita maxima:");
scanf("%d", &b);
printf("Nr naturale de la %d la %d sunt:", a, b);
olo(a, b);
return 0;
}

⦁ Scrieți un program C pentru a imprima toate numerele pare sau impare în intervalul
dat folosind recursivitatea.
#include <stdio.h>
void gtg(int c, int b){
if(c > b)
return;
printf("%d, ", c);
gtg(c + 2, b);
}
int main(){

18
int a;
int d;
printf("Introdu nr minim a limitei: ");
scanf("%d", &a);
printf("Introdu nr maxim a limitei: ");
scanf("%d", &d);
printf("Nr pare de la %d la %d sunt: ", a, d);
gtg(a, d);
return 0;
}

⦁ Scrieți un program C pentru a găsi suma tuturor numerelor naturale cuprinse între 1
și n folosind recursivitatea.
#include <stdio.h>
int iji(int n){
if (n != 0)
return n + iji(n - 1);
else
return n;
}

19
int main(){
int a;
printf("Introdu un iji: ");
scanf("%d", &a);
printf("Sum = %d", iji(a));
return 0;
}

⦁ Scrieți un program C pentru a găsi suma tuturor numerelor pare sau impare în
intervalul dat folosind recursivitatea.
#include <stdio.h>
int nbn(int a, int b){
if(a > b)
return 0;
else
return (a + nbn(a + 2, b));
}
int main(){
int a;
int b;

20
int c;
printf("Introdu nr par minim: ");
scanf("%d", &a);
printf("Introdu nr par maxim: ");
scanf("%d", &b);
printf("Suma nr pare de la %d la %d = %d\n", a, b, nbn(a, b));
return 0;
}

⦁ Scrieți un program C pentru a găsi inversarea oricărui număr folosind recursivitatea.


( Ex: 2021 -> 1202)
#include <stdio.h>
#include <math.h>
int eae(int a){
int i = (int) log10(a);
if(a == 0)
return 0;
return ((a%10 * pow(10, i)) + eae(a/10));
}

21
int main(){
int a;
int b;
printf("Introdu un nr: ");
scanf("%d", &a);
b = eae(a);
printf("Inversa este %d = %d", a, b);
return 0;
}

⦁ Scrieți un program C pentru a verifica dacă un număr este palindrom folosind


recursivitatea.
#include <stdio.h>
#include <math.h>
int aln(int a){
if(a == tgt(a)){
return 1;}
return 0;
}
int tgt(int a){

22
int k = (int)log10(a);
if(a == 0)
return 0;
else
return ((a%10 * pow(10, k)) + tgt(a/10));
}
int main(){
int a;
printf("Introdu un nr: ");
scanf("%d", &a);
if(aln(a) == 1){
printf("%d este palindrom.\n", a);}
else{
printf("%d nu este palindrom.\n", a);}
return 0;
}

⦁ Scrieți un program C pentru a găsi suma cifrelor unui număr dat folosind
recursivitatea.
#include <stdio.h>

23
int uju(int a){
if(a == 0)
return 0;
return ((a % 10) + uju(a / 10));
}
int main(){
int a;
int b;
printf("Introdu un numarul: ");
scanf("%d", &a);
b = uju(a);
printf("Suma nr %d = %d", a, b);
return 0;
}

⦁ Scrieți un program C pentru a găsi factorialul oricărui număr folosind recursivitatea.


#include<stdio.h>
int fact(int b){
if(b==0)

24
return 1;
return(b*fact(b-1));
}
int main(){
int a;
int b;
printf("Introdu nr :");
scanf("%d",&b);
a=fact(b);
printf("Factorial de %d este %d",b,a);
return 0;
}

⦁ Scrieți un program C pentru a genera al n-lea termen Fibonacci folosind


recursivitate.
#include <stdio.h>
int iji(int b){
if(b==0){
return 0;}
if(b==1||b==2){

25
return 1;}
return iji(b-1)+iji(b-2);
}
int main(){
int b;
printf("Introdu nr:");
scanf("%d",&b);
printf("Al %d termen din sirul Fibonace este: %d ",b,iji(b));
}

Concluzie

In acest laborator am studiat ce este o functie si aplicarea


lor. Dar am mai si studiat recursivitatea functiei.

26

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