![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
ART |
![]()
Сообщение
#1
|
Гость ![]() |
Здравствуйте!
Такая проблема: Цель программы посчитать через функцию сумму (X(i)^i)/i. И через эту функцию найти S1 = сумме(X(i)^i)/i,S3 = сумме((X(i)-S1)^i)/i и S3 = сумме((X(i)-S2)^i)/i. Программа нормально компилируется, но при запуске выдает ошибку "Runtime error 207 at 0000:007E". Причем выдает ее после вывода S1. Может я программу неправильно написал? Не могли бы вы посмотреть и объяснить, в чем проблема? Заранее благодарен... Код Program Lab8_2; Uses crt; Type mas = array [1..100] of real; Var n,i:integer; S1,S2,S3:real; x:mas; Function Sum_f(x1:mas; n1:integer):real; Var S:real; begin S:=x1[1]; For i:=2 to n1 do Begin S:=S+exp(i*ln(x1[i]))/i; End; Sum_f:=S; end; Begin clrscr; Write('Enter n:'); readln(n); writeln('n=',n); For i:=1 to n do Begin Writeln('Enter x[',i,']'); readln(x[i]); End; S1:=Sum_f(x,n); Writeln('S1=',S1); For i:=1 to n do x[i]:=x[i]-S1; S2:=Sum_f(x,n); Writeln('S2=',S2); For i:=1 to n do x[i]:=x[i]-S2; S3:=Sum_f(x,n); writeln('S3=',S3); readkey; End. |
![]() ![]() |
ART |
![]()
Сообщение
#2
|
Гость ![]() |
Извините за 2 сообщения, кнопки заедает...
![]() |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
С какими значениями прогонялась программа? Отрицательных не было случайно?
Run-time Error 207 может возникать при извлечении корня или взятии логарифма отрицательного числа. Извлечения корня не вижу, а вот Ln есть... Хотя скорее всего изначально отрицательных не было а вот тут: x[i]:=x[i]-S1;
или тут: x[i]:=x[i]-S2;
значение какого-то x[i] становится меньше 0... В таком случае придется переписывать функцию возведения в степень через умножение, Ln не пойдет... |
Дож |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 179 Пол: Мужской Репутация: ![]() ![]() ![]() |
Попробуй так:
Код Function Sum_f(x1:mas; n1:integer):real; Var S:real; begin S:=x1[1]; For i:=2 to n1 do Begin S:=S+exp(i*ln(abs(x1[i])))/i; End; Sum_f:=S; end; -------------------- Доброго времени суток.
:nnn: |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Дож,
ты подумал прежде чем написать? По-твоему (-2)^5 = (2)^5 ??? Если уж извращаться, то вот так: Function Sum_f(x1:mas; n1:integer):real;
Var S:real;
begin
S:=x1[1];
For i:=2 to n1 do
S:=S+(1 - 2*byte(x1[i] < 0)) * exp(i*ln(abs(x1[i])))/i;
Sum_f:=S;
end;
|
Дож |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 179 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() ![]() -------------------- Доброго времени суток.
:nnn: |
ART |
![]()
Сообщение
#7
|
Гость ![]() |
Переписал функцию вот так:
Код Function Sum_f(x1:mas; n1:integer):real; Var S:real; k:integer; Pr:real; begin S:=x1[1]; For i:=2 to n1 do Begin Pr:=x1[i]; For k:=1 to i do Pr:=Pr*x1[i]; S:=S+Pr/i; End; Sum_f:=S; end; Запустил, выводит уже другую ошибку. Результат на экране такой: Enter n:5 n=5 Enter x[1] 1 Enter x[2] 2 Enter x[3] 3 Enter x[4] 4 Enter x[5] 5 S1= 3.4130000000E+03 S2= 3.1323336732E+20 Runtime error 205 at 0000:00BF Я так понимаю, что памяти для S3 уже просто не хватает! Но что же тогда делать, ведь задание-то дали (см. выше)... ![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Переходи на Extended вместо Real - у него гораздо больше диапазон значений.
Только {$n+} первой строкой программы не забудь поставить... |
Guest |
![]()
Сообщение
#9
|
Гость ![]() |
Спасибо! :D Теперь все работает, только мы ето не проходили и надеюсь, что препод не возмутится из-за этого...
![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Ну, будет возмущаться, покажи ему результаты при Real и объясни, что размерности не хватает
![]() |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 2:19 |