Program pentru aflarea celui mai mare divizor comun a două numere.
program cmmdc;
uses Crt;
var a,b,d,k1,k2:integer;
begin
ClrScr;
write('Dati 2 numere naturale,nenule:');
{*Pasul 1:Se citesc cele 2 numere introduse de la tastatura}
read(a,b);writeln;
{*Pasul 2: Verificam daca unul din numere este divizor al celuilalt}
if (a mod b=0) or (b mod a=0) then
begin
writeln('cmmdc al numerelor ',a,' si ',b,' este: ');
if a<b then writeln(a) else writeln(b);
end
{*Pasul 3:Daca Pasul 2 nu se verifica,calculam cmmdc al numerelor.Deoarece cmmdc este mai mic sau egal cu jumatatea numarului mai mic dintre
a si b, calculam cmmdc in cazurile a>b sau b>a. In ambele cazuri se afiseaza un mesaj cu divizorul gasit, atat timp cat acesta este diferit de 1}
else
begin
if a<b then
begin
d:=(a div 2);if d<>1 then
repeat
k1:=a mod d;k2:=b mod d;
if (k1=0) and (k2=0) then writeln('cmmdc al numerelor ',a,' si ',b,' este ',d)
else d:=d-1;
until ((k1=0) and (k2=0)) or (d<=1);
end
else
begin
d:=(b div 2);if d<>1 then
repeat
k1:=a mod d;k2:=b mod d;
if (k1=0) and (k2=0) then writeln('cmmdc al numerelor ',a,' si ',b,' este ',d)
else d:=d-1;
until ((k1=0) and (k2=0)) or (d<=1);
end;
{*Pasul 4:Se afiseaza mesajul in cazul in care numerele sunt prime intre ele}
if d=1 then writeln('cmmdc al numerelor ',a,' si ',b,' este 1.Numerele ',a,' si ',b,' sunt prime intre ele!');
end;
end.
OBSERVAȚIE: PROGRAMUL POATE FI TRANSCRIS UȘOR ÎN C SAU C++ ÎNLOCUIND CUVINTELE CHEIE ȘI PUNCTUAȚIA DIN PASCAL CU CELE DIN C SAU C++.