Цитата(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 где-то потерялось? |