На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> расчет корней биквадратного уравнения
    написал прогу по расчету корней биквадратного уравнения, при компиляции проекта ошибок не выдает, вот код программы:

    ExpandedWrap disabled
      procedure TForm1.btn1Click(Sender: TObject);
      var x1, x2, y1, y2, x3, x4, a, b, c, d: Real;
      begin
       Edt4.Text := '';
       Edt5.Text := '';
       Edt6.Text := '';
       Edt7.Text := '';
       
        a := StrToFloat(Edt1.Text);
        b := StrToFloat(Edt2.Text);
        c := StrToFloat(Edt3.Text);
        d := b * b - 4 * a * c;
        if (a = 0) then
        begin
          if (b = 0) then
            lbl1.Caption := 'Нет решений'
          else
           begin
            lbl1.Caption := 'Два корня';
            y1 := -c / b;
            if (y1<0) then
            lbl1.Caption := 'Нет решений'
            else
            if (y1>0) then
            x1 := Sqrt(y1);
            x2 :=-Sqrt(y1);
            Edt4.Text := FloatToStr(x1);
            Edt5.Text := FloatToStr(x2);
          end;
        end
        else
        begin
         if (d=0) then
         begin
            if (y1<0) then
            lbl1.Caption := 'Нет решений'
            else
            if (y1>0) then
            y1 := (-b)/(2 * a);
            lbl1.Caption := 'Два корня';
            x1 := Sqrt(y1);
            x2 := -Sqrt(y1);
            Edt4.Text := FloatToStr(x1);
            Edt6.Text := FloatToStr(x2);
            end
         else
       
          if (d < 0) then
            lbl1.Caption := 'Дискриминант меньше нуля,нет корней'
          else
            if (d > 0) then
            y1 := (-b + Sqrt(d)) / (2 * a);
            y2 := (-b - Sqrt(d)) / (2 * a);
            if (y1<0) and (y2<0) then
            lbl1.Caption := 'Нет решений';
            if (y1>0) and (y2<0) then
             lbl1.Caption := 'Два корня';
             x1 := Sqrt(y1);
             x3 := -Sqrt(y1);
             Edt4.Text := FloatToStr(x1);
             Edt6.Text := FloatToStr(x3);
            if (y1<0) and (y2>0) then
             lbl1.Caption := 'Два корня';
             x2 := Sqrt(y2);
             x4 := -Sqrt(y2);
             edt5.Text := FloatToStr(x2);
             edt7.Text := FloatToStr(x4);
            if (y1>0) and (y2>0) then
             lbl1.Caption := 'Четыре корня';
            x1 := Sqrt(y1);
            x2 := Sqrt(y2);
            x3 := -Sqrt(y1);
            x4 := -Sqrt(y2);
            Edt4.Text := FloatToStr(x1);
            edt5.Text := FloatToStr(x2);
            Edt6.Text := FloatToStr(x3);
            Edt7.Text := FloatToStr(x4);
       
      end;
       
      end;
      end.

    после запуска программы, например с коэффициэнтами (а=1, в=4, с=-21) выдает ошибку invalid floating operation

    в чём может быть ошибка? Заранее спасибо за помощь.
    Сообщение отредактировано: Shaggy -
      M
      Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила!
        Цитата Artem812 @
        в чём может быть ошибка?
        Во втором случае (когда d>0) увас вычисляется y1=3 и y2=-7. И вот в строках
        ExpandedWrap disabled
                 if (y1<0) and (y2>0) then
                 lbl1.Caption := 'Два корня';
                 x2 := Sqrt(y2);
                 x4 := -Sqrt(y2);
        в if'е происходит ЛОЖЬ, а слова begin после него нету, а потому Caption то не пишется, но идёт попытка извлечь корень из -7, что не получается и
        Цитата Artem812 @
        выдает ошибку invalid floating operation
          То есть нужно поставить бегите после условия?

          Добавлено
          Бегин?
            Поправил все в программе, теперь когда а=1, в=1, с=1 пишет ivalid floating operation, мож кто подскажет, в чем дело?
            Прикреплённый файлПрикреплённый файлProject1.dpr (223 байт, скачиваний: 87)
              Цитата Artem812 @
              Поправил все в программе
              Основной код расчёта приведите здесь. :blush:
                Цитата Славян @
                Цитата Artem812 @
                Поправил все в программе
                Основной код расчёта приведите здесь. :blush:

                ExpandedWrap disabled
                  procedure TForm1.btn1Click(Sender: TObject);
                  var x1, x2, y1, y2, x3, x4, a, b, c, d: Real;
                  begin
                   Edt4.Text := '';
                   Edt5.Text := '';
                   Edt6.Text := '';
                   Edt7.Text := '';
                   
                    a := StrToFloat(Edt1.Text);
                    b := StrToFloat(Edt2.Text);
                    c := StrToFloat(Edt3.Text);
                    d := b * b - 4 * a * c;
                    if (a = 0) then
                    begin
                      if (b = 0) then
                      lbl1.Caption := 'Íåò ðåøåíèé'
                      else
                       begin
                        lbl1.Caption := 'Äâà êîðíÿ';
                        y1 := -c / b;
                        end
                        else
                        if (y1<0) then
                        begin
                        lbl1.Caption := 'Íåò ðåøåíèé'
                        end
                        else
                        if (y1>0) then
                        begin
                        x1 := Sqrt(y1);
                        x2 :=-Sqrt(y1);
                        Edt4.Text := FloatToStr(x1);
                        Edt5.Text := FloatToStr(x2);
                      end;
                    end
                    else
                    begin
                     if (d=0) then
                     begin
                        if (y1<0) then
                        lbl1.Caption := 'Íåò ðåøåíèé'
                        else
                        if (y1>0) then
                        y1 := (-b)/(2 * a);
                        lbl1.Caption := 'Äâà êîðíÿ';
                        x1 := Sqrt(y1);
                        x2 := -Sqrt(y1);
                        Edt4.Text := FloatToStr(x1);
                        Edt6.Text := FloatToStr(x2);
                        end
                     else
                   
                      if (d < 0) then
                      begin
                        lbl1.Caption := 'Äèñêðèìèíàíò ìåíüøå íóëÿ,íåò êîðíåé'
                        end
                      else
                        if (d > 0) then
                        y1 := (-b + Sqrt(d)) / (2 * a);
                        y2 := (-b - Sqrt(d)) / (2 * a);
                        if (y1<0) and (y2<0) then
                        begin
                        lbl1.Caption := 'Íåò ðåøåíèé';
                        end
                        else
                        if (y1>0) and (y2<0) then
                        begin
                         lbl1.Caption := 'Äâà êîðíÿ';
                         x1 := Sqrt(y1);
                         x3 := -Sqrt(y1);
                         Edt4.Text := FloatToStr(x1);
                         Edt6.Text := FloatToStr(x3);
                         end
                         else
                        if (y1<0) and (y2>0) then
                        begin
                         lbl1.Caption := 'Äâà êîðíÿ';
                         x2 := Sqrt(y2);
                         x4 := -Sqrt(y2);
                         edt5.Text := FloatToStr(x2);
                         edt7.Text := FloatToStr(x4);
                         end
                         else
                        if (y1>0) and (y2>0) then
                        begin
                         lbl1.Caption := '×åòûðå êîðíÿ';
                        x1 := Sqrt(y1);
                        x2 := Sqrt(y2);
                        x3 := -Sqrt(y1);
                        x4 := -Sqrt(y2);
                        Edt4.Text := FloatToStr(x1);
                        edt5.Text := FloatToStr(x2);
                        Edt6.Text := FloatToStr(x3);
                        Edt7.Text := FloatToStr(x4);
                        end;
                   
                  end;
                   
                  end;
                  end.
                  У вас опять не всюду begin'ы/end'ы расставлены. Скажем, здесь же явно не хватает:
                  ExpandedWrap disabled
                      if (d > 0) then
                          y1 := (-b + Sqrt(d)) / (2 * a);
                          y2 := (-b - Sqrt(d)) / (2 * a);
                  и тут:
                  ExpandedWrap disabled
                      if (y1>0) then
                          y1 := (-b)/(2 * a);
                          lbl1.Caption := 'Два корня';
                          x1 := Sqrt(y1);
                          x2 := -Sqrt(y1);
                          Edt4.Text := FloatToStr(x1);
                          Edt6.Text := FloatToStr(x2);
                    Цитата Славян @
                    У вас опять не всюду begin'ы/end'ы расставлены. Скажем, здесь же явно не хватает:
                    ExpandedWrap disabled
                        if (d > 0) then
                            y1 := (-b + Sqrt(d)) / (2 * a);
                            y2 := (-b - Sqrt(d)) / (2 * a);
                    и тут:
                    ExpandedWrap disabled
                        if (y1>0) then
                            y1 := (-b)/(2 * a);
                            lbl1.Caption := 'Два корня';
                            x1 := Sqrt(y1);
                            x2 := -Sqrt(y1);
                            Edt4.Text := FloatToStr(x1);
                            Edt6.Text := FloatToStr(x2);

                    ExpandedWrap disabled
                      procedure TForm1.btn1Click(Sender: TObject);
                      var x1, x2, y1, y2, x3, x4, a, b, c, d: Real;
                      begin
                       Edt4.Text := '';
                       Edt5.Text := '';
                       Edt6.Text := '';
                       Edt7.Text := '';
                       
                        a := StrToFloat(Edt1.Text);
                        b := StrToFloat(Edt2.Text);
                        c := StrToFloat(Edt3.Text);
                        d := b * b - 4 * a * c;
                        if (a = 0) then
                        begin
                          if (b = 0) then
                          lbl1.Caption := 'Íåò ðåøåíèé'
                          else
                           begin
                            lbl1.Caption := 'Äâà êîðíÿ';
                            y1 := -c / b;
                            end;
                            if (y1<0) then
                            begin
                            lbl1.Caption := 'Íåò ðåøåíèé'
                            end
                            else
                            if (y1>0) then
                            begin
                            x1 := Sqrt(y1);
                            x2 :=-Sqrt(y1);
                            Edt4.Text := FloatToStr(x1);
                            Edt5.Text := FloatToStr(x2);
                          end;
                        end
                        else
                        begin
                         if (d=0) then
                         begin
                            if (y1<0) then
                            begin
                            lbl1.Caption := 'Íåò ðåøåíèé';
                            end
                            else
                            if (y1>0) then
                            begin
                            y1 := (-b)/(2 * a);
                            lbl1.Caption := 'Äâà êîðíÿ';
                            x1 := Sqrt(y1);
                            x2 := -Sqrt(y1);
                            Edt4.Text := FloatToStr(x1);
                            Edt6.Text := FloatToStr(x2);
                            end;
                            end
                         else
                       
                          if (d < 0) then
                          begin
                            lbl1.Caption := 'Äèñêðèìèíàíò ìåíüøå íóëÿ,íåò êîðíåé';
                            end
                          else
                            if (d > 0) then
                            begin
                            y1 := (-b + Sqrt(d)) / (2 * a);
                            y2 := (-b - Sqrt(d)) / (2 * a);
                            end
                            else
                            if (y1<0) and (y2<0) then
                            begin
                            lbl1.Caption := 'Íåò ðåøåíèé';
                            end
                            else
                            if (y1>0) and (y2<0) then
                            begin
                             lbl1.Caption := 'Äâà êîðíÿ';
                             x1 := Sqrt(y1);
                             x3 := -Sqrt(y1);
                             Edt4.Text := FloatToStr(x1);
                             Edt6.Text := FloatToStr(x3);
                             end
                             else
                            if (y1<0) and (y2>0) then
                            begin
                             lbl1.Caption := 'Äâà êîðíÿ';
                             x2 := Sqrt(y2);
                             x4 := -Sqrt(y2);
                             edt5.Text := FloatToStr(x2);
                             edt7.Text := FloatToStr(x4);
                             end
                             else
                            if (y1>0) and (y2>0) then
                            begin
                             lbl1.Caption := '×åòûðå êîðíÿ';
                            x1 := Sqrt(y1);
                            x2 := Sqrt(y2);
                            x3 := -Sqrt(y1);
                            x4 := -Sqrt(y2);
                            Edt4.Text := FloatToStr(x1);
                            edt5.Text := FloatToStr(x2);
                            Edt6.Text := FloatToStr(x3);
                            Edt7.Text := FloatToStr(x4);
                            end;
                       
                      end;
                       
                      end;
                      end.

                    теперь ругается на invalid floating operation когда а=1, в=1, с=1
                      Пока немножко уход в сторону, - если у вас a=0, b=1, то y1 расчитываться не будет, а вот проверяться условие с ним будет, что неправильно.
                        Цитата Славян @
                        Пока немножко уход в сторону, - если у вас a=0, b=1, то y1 расчитываться не будет, а вот проверяться условие с ним будет, что неправильно.

                        это где а = 0 и в=0?
                          А, в остальном, у меня ваш код работает нормально, - так (как у вас) не ругается. :-?
                            Цитата Славян @
                            А, в остальном, у меня ваш код работает нормально, - так (как у вас) не ругается. :-?

                            То есть без ошибок? Подскажите, где проверяется условие с а?
                              Цитата Artem812 @
                              это где а = 0 и в=0?
                              Что-то я ошибся. Это если a=0 и b=0, то напишет что надо, но потом всё равно пойдёт проверять y1, что неверно (там end после вычисления y1 лишний, думается).
                                Тогда почему высказывает ошибка, или у Вас все работает без ошибок?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0513 ]   [ 19 queries used ]   [ Generated: 23.04.24, 15:08 GMT ]