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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 17:53   #1
Petruccioni
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 2
По умолчанию Помогите отладить программу Паскаль

Здравствуйте! При компиляции выдает ошибку 113. Мне не нравится как работает втрой while и расчет не производиться. Подскажите, пож-ста. Спасибо
Код:
program lab_8_1; {programa vydachi tablytsi zi znachenniamy x ta f(x)
                    dlia funktsii, de a i b mozhut' nabuvaty dovil'nyh
                    znachen' argument x zminiuiet'sia na dovil'no
                    zadanomy promizhku [x1;x2] z krokom h}
uses crt;
{opys zminnuch}
var p, n,an,i:integer; {i - lichyl'nyk}  {h - krok}
    x, x1,x2,h,y,s:real; {x1,x2 - granytsi promizhku, znachennia yakyh
                                                       my vvodymo}
     ind,prav:boolean;{indykatory}
const r1='----------------------------------------------------------';
      r2='|    x    |    f(x)';
      k=3; {k - kilkist' kolonok}
      eps=1E-8;
begin
  clrscr;
   prav:=false;
  writeln('Tabuliuvannia funktsii:');
  repeat {doky ne bude pravylno vvedeno vkhidni dani}
  writeln ('                     3   ');
  writeln ('y:=((ln(x-2)+2)/(x-3)E (5^n+x)/(4*n+3)+sqrt(ln(abs(x-9))');
  writeln ('                    n=2');
  writeln('Vkazhit promizhok: x1, x2, krok h');
  writeln('vvedit X1') ;
  readln(x1);
  writeln ('vvedit x2');
  readln(x2);
  writeln('vvedit krok h');
  readln (h) ;
    if (x1>x2) or (h>(x2-x1)) or (h<=0)
      then writeln ('Pomylka')
    else {Vydacha tablytsi}
      begin
        prav:=true;
        writeln (r1);
        writeln (r2,r2,r2,'|') ;
        writeln (r1);
        x:=x1;
        i:=0;
        while x<=x2+eps  do
          begin
            i:=i+1;
            ind:=true;
            while x1<=x2 do
              begin
                if ((x-2)<0) or ((x-3)=0) or ((ln (abs(x-9))<=0))
                  then writeln ('Pomylka')
                else
                  begin
                    s:=0;
                    an:=25;
                    for n:=2 to 3 do
                      begin
                        an:=an*5;
                        s:=s+((an+x)/(4*n+3));
                      end;
                    y:=((ln(x-2)+2)/(x-3))*s+sqrt(ln(abs(x-9)));
               end;
          end;
             begin
              if (i mod k=1) and (i>k) then writeln ('|');
              if ind then     if (abs(y)>10) then
                    write ('| ',x:7:3 ,' | perep  ')
               else write ('| ',x:7:3 ,' |',y:7:2,' ')
              else  write ('| ',x:7:3  ,' | ne vyzn');
                x:=x+h;
          end;
          writeln ('|');
          writeln (r1);
      end;
     until prav;
readkey;
end.

Последний раз редактировалось Stilet; 03.11.2013 в 17:57.
Petruccioni вне форума Ответить с цитированием
Старый 03.11.2013, 18:10   #2
Petruccioni
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 2
По умолчанию

Забыл дать условие. Должны быть рассчтитаны значения для ввденного с клавиатуры промежутка [x1...x2] с заданным шагом. В формуле присутствует расчет суммы с значений от 2 до 3.

Последний раз редактировалось Petruccioni; 03.11.2013 в 18:19.
Petruccioni вне форума Ответить с цитированием
Старый 03.11.2013, 22:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

формально - у Вас не хватало одного end перед until
Код:
program lab_8_1; {programa vydachi tablytsi zi znachenniamy x ta f(x)
                    dlia funktsii, de a i b mozhut' nabuvaty dovil'nyh
                    znachen' argument x zminiuiet'sia na dovil'no
                    zadanomy promizhku [x1;x2] z krokom h}
uses crt;
{opys zminnuch}
var p, n, an, i: integer; {i - lichyl'nyk} {h - krok}
  x, x1, x2, h, y, s: real; {x1,x2 - granytsi promizhku, znachennia yakyh
                                                       my vvodymo}
  ind, prav: boolean; {indykatory}
const r1 = '----------------------------------------------------------';
  r2 = '|    x    |    f(x)';
  k = 3; {k - kilkist' kolonok}
  eps = 1E-8;
begin
  clrscr;
  prav := false;
  writeln('Tabuliuvannia funktsii:');
  repeat {doky ne bude pravylno vvedeno vkhidni dani}
    writeln('                     3   ');
    writeln('y:=((ln(x-2)+2)/(x-3)E (5^n+x)/(4*n+3)+sqrt(ln(abs(x-9))');
    writeln('                    n=2');
    writeln('Vkazhit promizhok: x1, x2, krok h');
    writeln('vvedit X1');
    readln(x1);
    writeln('vvedit x2');
    readln(x2);
    writeln('vvedit krok h');
    readln(h);
    if (x1 > x2) or (h > (x2 - x1)) or (h <= 0)
      then writeln('Pomylka')
    else {Vydacha tablytsi}
    begin
      prav := true;
      writeln(r1);
      writeln(r2, r2, r2, '|');
      writeln(r1);
      x := x1;
      i := 0;
      while x <= x2 + eps do
      begin
        i := i + 1;
        ind := true;
        while x1 <= x2 do
        begin
          if ((x - 2) < 0) or ((x - 3) = 0) or ((ln(abs(x - 9)) <= 0))
            then begin 
               writeln('Pomylka');
               break;
            end
          else
          begin
            s := 0;
            an := 25;
            for n := 2 to 3 do
            begin
              an := an * 5;
              s := s + ((an + x) / (4 * n + 3));
            end;
            y := ((ln(x - 2) + 2) / (x - 3)) * s + sqrt(ln(abs(x - 9)));
          end;
        end;
        begin
          if (i mod k = 1) and (i > k) then writeln('|');
          if ind then if (abs(y) > 10) then
              write('| ', x: 7: 3, ' | perep  ')
            else write('| ', x: 7: 3, ' |', y: 7: 2, ' ')
          else write('| ', x: 7: 3, ' | ne vyzn');
          x := x + h;
        end;
        writeln('|');
        writeln(r1);
      end;
    end;
  until prav;
  readkey;
end.
но это чисто формальная правка. Ибо в вашей логике, когда проверка введённых значений "размазана" по всему коду вычислений - с таким я ещё не сталкивался (и не разобрался (...
Обычно блок ввода данных предшествует блоку вычислений...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите отладить программу twiss Помощь студентам 1 21.10.2009 23:40
Помогите отладить программу, плз!!! прога с пояснениями Gobl1n Паскаль, Turbo Pascal, PascalABC.NET 2 16.12.2008 20:09
Помогите отладить программу. TheKnyazz Паскаль, Turbo Pascal, PascalABC.NET 21 26.11.2008 17:51