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

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

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

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


Гость






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


Гость






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

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

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

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

значение какого-то x[i] становится меньше 0... В таком случае придется переписывать функцию возведения в степень через умножение, Ln не пойдет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
Пол: Мужской

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


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


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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


Гость






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


Гость






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

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

 





- Текстовая версия 15.05.2024 10:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name