Другие языки программирования и технологии

помогите составить программу, сокращающую обыкновенные дроби.на паскале заранее спасибо

Т. е. сокращение дроби?
program Drob;
var
a,b,c :longint;
a1,b1 :longint;

begin
Write('Введите а');Readln(a);
Write('введите b');Readln(b);
if b=0 then begin
Writeln('Нуль -знаменатель! ');
Readln;
Halt(1);
end;
if a=0 then begin
Writeln(a,'/',b,'=',0);
Readln;
Halt(1);
end;

a1:=a; b1:=b;
if b>a then begin
c:=a;
a:=b;
b:=c;
end;

while a mod b <> 0 do begin
c:=b;
b:=a mod b;
a:=c;
end;
Write(a1,'/',b1,'=',a1 div b);
if b1 div b<>1 then Writeln('/',b1 div b);
Readln;
end.
Андрей Бауер
Андрей Бауер
1 348
Лучший ответ
program Drobi;
var a,b,c :longint; d,e :real;

function NOD(x,y:longint):longint;
begin
if x<>0 then NOD:= NOD(y mod x,x) else NOD:= y;
end;

begin
writeln('Для создания использовался алгаритм Евклида (нахождение НОД) и алгаринт выученныйна уроке (Сокращение дроби)');
Write('Введите дробь (оба числа через пробел): ');
Readln(a,b);
c:=NOD(a,b);
d:=a/c;
e:=b/c;
writeln('Сокращённая дробь: ',d,'/',e);
writeln('Программу сделал Иван Никонов');
readln
end.

Алагиртм для нахоэдения нод сделан по Еквмлиду
Воспользуемся алгоритмом Евклида. В этом примере a=64, b=48.

Делим 64 на 48, получаем 64:48=1 (ост. 16) (при необходимости смотрите правила и примеры деления с остатком), что можно записать в виде равенства 64=48·1+16, то есть, q1=1, r1=16.

Теперь делим b на r1, то есть, 48 делим на 16, получаем 48:16=3, откуда имеем 48=16·3. Здесь q2=3, а r2=0, так как 48 делится на 16 без остатка. Мы получили r2=0, поэтому это был последний шаг алгоритма Евклида, и r1=16 является искомым наибольшим общим делителем чисел 64 и 48.
Иван Петров
Иван Петров
1 117