Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 23:09   #1
Иван=)
Пользователь
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию Ошибка в математической программе.

КАПЕЦ!!! Уже второй день ошибку ищу... Помогите, пожалуйста...
Это программа по сложению и сокращению дробей (сделан пока что только первый пункт). Суть в том, что если вводить, например, 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.
Ошибка, скорее всего, во втором блоке....
Иван=) вне форума Ответить с цитированием
Старый 07.11.2010, 12:50   #2
iBuTTHead
Пользователь
 
Регистрация: 05.11.2010
Сообщений: 35
По умолчанию

Строка 120
While (c mod b1<>0) and (c mod b2<> 0) do

изменить на

While (c mod b1<>0) or (c mod b2<> 0) do
iBuTTHead вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе. v1le Помощь студентам 3 26.10.2010 17:00
Ошибка пв программе aiktz Помощь студентам 0 24.10.2010 21:48
Ошибка в программе w6120w Общие вопросы C/C++ 3 04.10.2010 19:37
Ошибка в программе misher Общие вопросы Delphi 12 01.09.2010 19:11
С++ Ошибка в программе EwwwA Общие вопросы C/C++ 5 05.01.2009 23:12