программа должна определять скократима дробь или нет, елси да то должно быть сообщение "дробь сократима" иначе "дробь нескоратима"
вот код:
program bh;
var c,zn:integer; c1,zn1:real;
procedure Dr(Ch,z:integer; var ch1:real; var Z1:real);
var d:integer; t,j:real;
label 10;
begin
d:=1;
repeat
if abs(ch) > abs(z) then d:=ch else d:=z;
t:=ch/d;
j:=z/d;
if (frac(t)=0) and (frac(j)=0) then d:=d-1;
else
begin
Ch1:=ch/d;
z1:=z/d;
writeln('dro6b sokr');
goto 10;
end;
until (d=1);
z1:=z;
ch1:=ch;
writeln('dro6b ne sokr');
10:end;
begin
writeln('vvedite 4islitelb c, u znavenatelb zn');
readln(c,zn);
dr(c,zn,c1,zn1);
readln
end.
14 марта 2009 в 9:01
спс всем, что помогли, а особенно Михаилу, да только я там не много исправил и все работает)))
14 марта 2009 в 1:03
Метки не стоит использовать.
Дальше, раз в процедуру на вход поступают целые значения, то если дробь сократима, то и на выходные параметры должныбыть целые и все вычисления должны быть с целочисленными переменными. Использование вещественных вообще говоря некорректно из-за погрешностей вычислений.
Для определения, сократима ли дробь лучше использовать алгоритм Евклида для нахождения НОД.
Если НОД = 1, то дробь несократима. Иначе – сократима.
Что-то в таком духе (пишу по памяти, без проверки в паскале, могут быть ошибки), ввод/вывод взят из оригинала
var ch, z, n: integer;
function nod(var a, b:integer):integer;
begin
while (a<>0) and (b<>0) do
if a >= b then a := a mod b
else b := b mod a;
nod:=a+b;
end;
begin
writeln('vvedite 4islitelb c, u znavenatelb zn');
readln(c,zn);
n := nod(c, zn);
if n = 1 then
writeln('dro6b ne sokr')
else
writeln('dro6b sokr');
readln;
end.
Если нужны еще и сами значения числителя и знаменателя после сокращения – то нужно исходные значения целочисленно (div) разделить на полученный НОД.
14 марта 2009 в 1:02
начал разбирать и к середине стало влом…Коля… мой тебе совет – не используй goto, это плохой тон. И давай осмысленные названия переменным – напрягает разбираться в этой мешанине.
З.Ы. по теме – похоже в условиях не стоят begin и end, алгоритм вообще не продуман