IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Нахождение суммы через функцию, Не работает программа нахождения суммы..
ART
сообщение 22.05.2005 11:40
Сообщение #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.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
ART
сообщение 22.05.2005 11:42
Сообщение #2


Гость






Извините за 2 сообщения, кнопки заедает... sad.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2005 11:46
Сообщение #3


Гость






С какими значениями прогонялась программа? Отрицательных не было случайно?

Run-time Error 207 может возникать при извлечении корня или взятии логарифма отрицательного числа. Извлечения корня не вижу, а вот Ln есть...

Хотя скорее всего изначально отрицательных не было а вот тут:
x[i]:=x[i]-S1;

или тут:
x[i]:=x[i]-S2;

значение какого-то x[i] становится меньше 0... В таком случае придется переписывать функцию возведения в степень через умножение, Ln не пойдет...
 К началу страницы 
+ Ответить 
Дож
сообщение 22.05.2005 11:49
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


Попробуй так:
Код

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:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2005 11:51
Сообщение #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;
 К началу страницы 
+ Ответить 
Дож
сообщение 22.05.2005 11:59
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


blink.gif Что-то я глючу... unsure.gif


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ART
сообщение 22.05.2005 13:46
Сообщение #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 уже просто не хватает!
Но что же тогда делать, ведь задание-то дали (см. выше)... sad.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2005 13:48
Сообщение #8


Гость






Переходи на Extended вместо Real - у него гораздо больше диапазон значений.
Только {$n+} первой строкой программы не забудь поставить...
 К началу страницы 
+ Ответить 
Guest
сообщение 22.05.2005 14:31
Сообщение #9


Гость






Спасибо! :D Теперь все работает, только мы ето не проходили и надеюсь, что препод не возмутится из-за этого... smile.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 22.05.2005 14:44
Сообщение #10


Гость






Ну, будет возмущаться, покажи ему результаты при Real и объясни, что размерности не хватает smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 24.07.2025 2:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"