Problema 1: cmmdc(a, b)
#include<stdio.h>
#include<conio.h>
//algoritmul lui Euclid
//cel mai mare divizor comun pentru doua numere strict pozitive
void citire_cu_validare(int&, int&);
int cmmdc(int, int);
int cmmdc1(int x, int y);
int cmmdc_recursiv(int, int);
void main(void) {
int a, b;
clrscr();
citire_cu_validare(a, b);
printf("n cmmdc(%d,%d)=%d",a, b, cmmdc(a, b));
printf("n cmmdc_recursiv(%d,%d)=%d",a, b, cmmdc_recursiv(a, b));
getch();
}
void citire_cu_validare(int& a, int& b) {
int aux; //folosita pentru interschimbare cand a < b
for(;;) {
printf("n Introduceti numerele:n");
if(scanf("%d%d",&a, &b) != 2) {
printf("nNumere introduse incorect");
continue;
}
//evit impartirea la 0
if(a <= 0 || b <= 0) {
printf("n Numerele nu sunt strict pozitive");
continue;
}
//interschimbare daca a < b
if(a < b) {
aux = a;
a = b;
b = aux;
}
break;
}
}
int cmmdc1(int x, int y) {
int rest;
while(y != 0) {
if(x%y == 0) break;
rest = x % y;
x = y;
y = rest;
}
return y;
}
int cmmdc(int x, int y) {
int cmmdc = 0, rest;
while(rest = (x % y)) {
x = y;
y = rest;
}
cmmdc = y;
return cmmdc;
}
int cmmdc_recursiv(int x, int y) {
if(y == 0) return x;
else
cmmdc_recursiv(y, x%y);
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.