Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с Паскаль программой.

Вера Шапошникова Знаток (329), на голосовании 8 лет назад
Задание №57(на фотографии), я составила программу, но преподавательница требует, чтобы значения S(массив суммы ряда) и F(массив функции) совпадали.

const C = 100;
type

arr = array [1..C] of real;

var
Km, L: integer;
x, s, F: arr;
a, eps: real;

Procedure Input (L: integer; var x: arr);
var
i: integer;
begin
for i := 1 to L do
read ( x [ i ] );
end;

Procedure Resh (x:arr; a, eps: real; Km: integer; var s: arr);
var
i: integer;
r: real;
begin
i := 1;
r := 1;
s[i] := 1;
Km := 0;
while abs(r) >= eps do
begin
s[i] := s[i] + r;
r := (r * x [ i ] )/ (a * i);
i := i + 1;
Km := Km + 1;
end;
writeln ('Число итераций Km = ', Km);
end;

Procedure Func ( x: arr; a: real; L: integer; var F: arr);
var
i: integer;
begin
for i := 1 to L do
F[ i ] := exp(x[ i ]/a);
end;

Procedure Output ( L: integer; x, s, F: arr);
var
i: integer;
begin
for i := 1 to L do
begin
write ('X = ', x [ i ] );
write ( ' s = ', s [ i ] );
writeln( ' F = ', F [ i ]:5:3 );
end;
end;

begin
writeln ('Введите L, a, eps');
readln (L, a, eps);
writeln ('Введите массив x');
Input (L, x);
Resh ( x, a, eps, Km, s);
Func ( x, a, L, F);
Output (L, x, s, F);
end.
Голосование за лучший ответ
Капитан Гугл Искусственный Интеллект (146199) 8 лет назад
И правильно требует - по условию должны совпадать с погрешностью eps.
Неправильно описана функция Resh. Есть L значений, каждое из которых должно вычисляться в цикле (сумма). Значит, должно быть два вложенных цикла - по i от 1 до L и while до достижения погрешности. А у тебя только один цикл, вот и выходит бред (первый элемент суммы берется для 1-го значения x, 2-й - для 2-го и т. д.).
Вера ШапошниковаЗнаток (329) 8 лет назад
А если вам не сложно, не могли бы исправить часть, где неправильно.
Капитан Гугл Искусственный Интеллект (146199) А что я непонятного написал-то?
Krab Bark Искусственный Интеллект (286507) 8 лет назад
Это ж надо было столько нагородить... :( Сначала делай просто, а потом уже усложняй :)
И не вводи кучу никому не нужных функций.

program r1;
function Func(x,a,eps:real):real;
var n:integer; s,p:real;
begin
s:=1; p:=1; n:=1; repeat p:=p*x/a/n; s:=s+p; n:=n+1 until abs(p)<eps; Func:=s
end;
var i,L:integer; a,eps:real; x:array[1..1000]of real;
begin
writeln('Введите L, a, eps'); readln (L,a,eps);
writeln('Введите ',L,' значений x'); for i:=1 to L do read(x[i]); readln;
for i:=1 to L do writeln(x[i]:20:8,Func(x[i],a,eps):20:8,exp(x[i]/a):20:8); readln
end.
Вера ШапошниковаЗнаток (329) 8 лет назад
Просто моему преподу нужно именно сложный вариант (
Krab Bark Искусственный Интеллект (286507) В задании этого нет :) Но в любом случае, когда пишешь программу, сначала сделай ее как можно проще, а потом усложняй под любые требования, время от времени проверяя, работает ли еще... ;)
Похожие вопросы