КАПЕЦ!!! Уже второй день ошибку ищу... Помогите, пожалуйста...
Это программа по сложению и сокращению дробей (сделан пока что только первый пункт). Суть в том, что если вводить, например, 1/4 и 1/8, то она пишет, что "1/4 + 1/8 = 1/2"... Уже и пошагово проверял- ничего не получается.
Код:
Uses CRT;
Var
yn: Boolean;
a, b, c, ch1, zn1, ch2, zn2, a1, a2, b1, b2: integer;
menu, znak: char;
Begin
Clrscr;
Writeln(' Добро пожаловать=)');
Writeln(' Эта программа поможет Вам');
Writeln(' произвести элементарные операции с дробями');
Writeln(' и сократить полученный результат');
Readkey;
Clrscr;
Textcolor(12); {-----Предменю-----}
Writeln('Выберите, что Вы хотите сделать:');
Textcolor(14);
Writeln('*-Ввести данные самостоятельно');
Textcolor(15);
Writeln('2-Прочитать данные из файла');
Writeln('3-Ничего');
c:=1;
readkey;
Repeat {-----Начало цикла Меню-----}
begin
menu:=readkey;
if menu=#72 then c:=c-1;
if menu=#80 then c:=c+1;
if c=0 then c:=1;
if c=4 then c:=3;
if c=1 then begin
clrscr;
Textcolor(12);
Writeln('Выберите, что Вы хотите сделать:');
Textcolor(14);
Writeln('*-Ввести данные самостоятельно');
Textcolor(15);
Writeln('2-Прочитать данные из файла');
Writeln('3-Ничего');
end;
if c=2 then
begin
clrscr;
Textcolor(12);
Writeln('Выберите, что Вы хотите сделать:');
Textcolor(15);
Writeln('1-Ввести данные самостоятельно');
Textcolor(14);
Writeln('*-Прочитать данные из файла');
Textcolor(15);
Writeln('3-Ничего');
end;
if c=3 then
begin
clrscr;
Textcolor(12);
Writeln('Выберите, что Вы хотите сделать:');
Textcolor(15);
Writeln('1-Ввести данные самостоятельно');
Writeln('2-Прочитать данные из файла');
Textcolor(14);
Writeln('*-Ничего');
end;
end
Until menu=#13; {-----Мы вышли из меню-----}
If c=1 then {----- Ввод с клавиатуры----}
begin
Clrscr;
Writeln('...');
Writeln('Введите числитель первой дроби');
Readln(ch1);
Clrscr;
Writeln(ch1,'...');
Writeln('Введите знаменатель первой дроби');
Readln(zn1);
Clrscr;
Writeln(ch1,'/',zn1,'...');
Writeln('Введите знак операции');
Readln(znak);
If (znak<>'-') and (znak<>'+') and (znak<>'*') and (znak<>'/') then
begin
c:=3;
end;
If c<>3 then
begin
Clrscr;
Writeln(ch1,'/',zn1,' ',znak,'...');
Writeln('Введите числитель второй дроби');
Readln(ch2);
Clrscr;
Writeln(ch1,'/',zn1,' ',znak,' ',ch2,'...');
Writeln('Введите знаменатель второй дроби');
Readln(zn2);
Clrscr;
Writeln(ch1,'/',zn1,' ',znak,' ',ch2,'/',zn2);
Writeln('Поехали???');
Readkey;
end;
end;
{-----Начало чтения с клавиатуры-----}
If c=1 then
begin
If (zn1=0) or (zn2=0) or ((ch2=0) and (znak='/')) then {ОТСЮДА!!!}
begin
Writeln('Ошибка!');
end
Else
begin
a1:=ch1;
a2:=ch2;
b1:=zn1;
b2:=zn2;
If znak='+' then {Начало вычислений без ошибки}
begin
c:=1;
While (c mod b1<>0) and (c mod b2<> 0) do
begin
c:=c+1;
end;
a:=a1*c div b1 + a2*c div b2;
b:=c;
end;
If znak='-' then
begin
c:=1; {=)=)=)}
While (c mod b1<>0) and (c mod b2<> 0) do
begin
c:=c+1; {=)=)=)}
end;
a:=a1*c div b1 - a2*c div b2;
b:=c;
end;
If znak='*' then
begin
a:=a1*a2;
b:=b1*b2;
end;
If znak='/' then
begin
a:=a1*b2;
b:=b1*a2;
end;
c:=32767; {=)=)=)}
Repeat
begin
c:=c-1;
end
Until (c=1) or ((a mod c=0) and (b mod c=0));
If b div c<>1 then
Writeln(ch1,'/',zn1,' ',znak,' ',ch2,'/',zn2,'=',a,'/',b,'='
, a div c,'/',b div c);
If b div c=1 then
Writeln(ch1,'/',zn1,' ',znak,' ',ch2,'/',zn2,'=', a div c);
end; {И досюда!!!}
end;
READKEY{!!!Удали!!!};
end.
Ошибка, скорее всего, во втором блоке....