Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Табулирование сложной функции


Автор: Upgrader 1.10.2008, 03:14
В задании есть такая функция: http://ipicture.ru/Gallery/Viewfull/7396225.html

А само задание: табулирование сложной функции с использованием вложенных циклов. Язык Pascal.

Начал писать программу:
Код

Program prog;
  var
   x,y,xo,xn,hx: real;
  Begin
    Writeln('ввод границ интервалов:');
    Read(xo,xn);
    Writeln('Ввод шага изменения:');
    Read(hx);
    x:=xo;
    Repeat {основной цикл}
      if ???
        then
         ???
      else
       if ???
          else
            WriteLn('Функция не определена');

      Writeln('X=',x:6:3,' Y=',y:6:3);
      x:=x+hx;
      Until x>xn+hx/2
  end.

Но вот проблема.. так и не дописал. Помогите пожалуйста!

Автор: TwisT_X 1.10.2008, 23:46
Upgrader, вот примерный код только я немного подзабыл синтаксис паскаля так что могут быть ошибки в мат фунциях  smile 

Код

program prog1;
var x, y: real;
      n: integer;
begin
  writeln('Vvedite x ');
  readln(x);
  y:= 0;
  if ((x>0,1) and (x<0,5)) then
    for n:= 0 to 10 do
      y:= y+ power(x, n+1)/(2*n+3);
   else if ((x>0,5) and (x<1)) then
      begin
        y:= (x+1)/3;
        for n:= 1 to 7 do y:=y+(power(x,4) + power(x, 2n))/(8*n+1);
      end;
   // И тут вывод результата :)
end.

Автор: Upgrader 2.10.2008, 02:42
TwisT_X,      спасибо!!! 
Примерно так и думал, но все равно бы ошибся  smile 
Да, кстати. В паскале нет встроенной функции power, и вообще никакие функции (для этого конкретного задания) не нужно использовать. А как бы сделать просто, но и без подобных функций? Как-то умножением в том цикле что-ли как-то вроде бы... никак не доеду  smile

Автор: volvo877 2.10.2008, 08:59
Цитата(Upgrader @  2.10.2008,  02:42 Найти цитируемый пост)
А как бы сделать просто, но и без подобных функций? Как-то умножением в том цикле что-ли как-то вроде бы...
Вот так:
Код
program prog1;
var x, dx, y: real;
    x_start, x_finish: real;
    n: integer;
    is_ok: boolean;

    x_nplus1, x_2n: real; { <--- здесь будут храниться значения X^(n+1) и X^(2n) }
begin
  write('Xst = '); readln(x_start);
  write('Xfn = '); readln(x_finish);
  write('DX = '); readln(dx);

  x := x_start;
  repeat

    y := 0;
    is_ok := true;
    if ((x > 0.1) and (x < 0.5)) then begin
      x_nplus1 := x;
      for n := 0 to 10 do begin
        y := y+ x_nplus1 / (2*n + 3);
        x_nplus1 := x_nplus1 * x;
      end
    end
    else
      if ((x >= 0.5) and (x < 1)) then begin { <--- здесь было неправильное условие }
        x_2n := sqr(x);
        for n:= 1 to 7 do begin
          y:=y+(sqr(sqr(x)) + x_2n) / (8*n+1);
          x_2n := x_2n * sqr(x);
        end;
        y := y * (x+1)/3; { <--- сначала посчитали сумму, потом домножили ее... }
      end
      else is_ok := false;

    Write('X=',x:6:3, ' Y=');
    if is_ok then writeln(y:6:3)
    else writeln(' (N/A)');

    x := x + dx;
  until x > x_finish;
end.
Кстати, на картинке в первом случае в числителе написано X^(n + 1). Это опечатка? Или у тебя там еще N где-то потерялось?

Автор: Upgrader 2.10.2008, 12:40
volvo877, Спасибо большое!
Цитата

Кстати, на картинке в первом случае в числителе написано X^(n + 1). Это опечатка? Или у тебя там еще N где-то потерялось?

Это уже не так важно, главное понял как оно написано, а сам изменю если нужно будет  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)