Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2015, 17:39   #1
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию Исправить ошибку

Здравствуйте, помогите исправить ошибку
Код:
program FormLagr;

const
Nmax = 50;

type
massiv = array[0..Nmax] of real;

var
X,Y,D: massiv;
P,x0: Real;
i,j,n: Integer;
exit:String;

function Lagr(x0:real):Real;
var
s:real;
begin
s:=0;
for i:=0 to n do
s:=s+Y[i]/((x0-X[i])*D[i]+0);
lagr:=P*s;
end;

begin
Write('n= ');
ReadLn(n);
for i:=0 to n do begin
Write('x',i,'= ');
ReadLn(X[i]);
Write('y',i,'= ');
ReadLn(Y[i]);
end;
{D}
for i:=0 to n do begin
D[i]:=1;
for j:=0 to n do
if j<>i then
D[i]:=D[i]*(X[i]-X[j]);
end; {D}
repeat
Write('x= ');
ReadLn(x0);
{P}
P:=1;
for i:=0 to n do
P:=P*(x0-X[i]); {P}
WriteLn('y= ',lagr(x0):3:3);
until false;
end.
Ошибка
Код:
Program1.pas(20) : Переменная цикла for должна описываться в том же блоке, что и цикл for
Camelot_2012 вне форума Ответить с цитированием
Старый 30.09.2015, 17:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так выполните то, что от вас просят на русском.
Код:
function Lagr(x0:real):Real;
var
s:real;
begin
s:=0;
for i:=0 to n do
s:=s+Y[i]/((x0-X[i])*D[i]+0);
lagr:=P*s;
end;
Где здесь описание i?
p51x вне форума Ответить с цитированием
Старый 30.09.2015, 18:17   #3
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну так выполните то, что от вас просят на русском.
Код:
function Lagr(x0:real):Real;
var
s:real;
begin
s:=0;
for i:=0 to n do
s:=s+Y[i]/((x0-X[i])*D[i]+0);
lagr:=P*s;
end;
Где здесь описание i?
Код:
var
s:real;
но for же зарезервирована системой, как исправить?
Camelot_2012 вне форума Ответить с цитированием
Старый 30.09.2015, 19:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но for же зарезервирована системой, как исправить?
Ты неверно понял ошибку )
Цитата:
Переменная цикла for должна описываться в том же блоке, что и цикл for
Означает, что ему в качестве счетчика нужна локальная переменная.
Т.е. "i" должна быть описана внутри function Lagr, а не как глобальная.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2015, 19:16   #5
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты неверно понял ошибку )

Означает, что ему в качестве счетчика нужна локальная переменная.
Т.е. "i" должна быть описана внутри function Lagr, а не как глобальная.
два раза ее описать?
ведь она еще используется в основной процедуре
Код:
program FormLagr;

const
Nmax = 50;

type
massiv = array[0..Nmax] of real;

var
X,Y,D: massiv;
P,x0: Real;
i,j,n: Integer;
exit:String;

function Lagr(x0:real):Real;
var
s:real;
i:integer;
begin
s:=0;
for i:=0 to n do
s:=s+Y[i]/((x0-X[i])*D[i]+0);
lagr:=P*s;
end;

begin
Write('n= ');
ReadLn(n);
for i:=0 to n do begin
Write('x',i,'= ');
ReadLn(X[i]);
Write('y',i,'= ');
ReadLn(Y[i]);
end;
{D}
for i:=0 to n do begin
D[i]:=1;
for j:=0 to n do
if j<>i then
D[i]:=D[i]*(X[i]-X[j]);
end; {D}
repeat
Write('x= ');
ReadLn(x0);
{P}
P:=1;
for i:=0 to n do
P:=P*(x0-X[i]); {P}
WriteLn('y= ',lagr(x0):3:3);
until false;
end.
Camelot_2012 вне форума Ответить с цитированием
Старый 30.09.2015, 19:17   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

локальная и глобальная переменная это две разные переменные
p51x вне форума Ответить с цитированием
Старый 30.09.2015, 19:58   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
два раза ее описать?
Да..........
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2015, 09:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

и, чтобы обезопасить себя от невольного использования глобальных переменных в процедурах/функциях я рекомендую перенести блог с глобальными переменными ПОСЛЕ описания всех процедур/функций, непосредственно перед begin самой программы:

Код:
program FormLagr;

const
Nmax = 50;

type
massiv = array[0..Nmax] of real;

function Lagr(x0:real):Real;
var
s:real;
i:integer;
begin
  s:=0;
  for i:=0 to n do
       s:=s+Y[i]/((x0-X[i])*D[i]+0);
  lagr:=P*s;
end;


var
X,Y,D: massiv;
P,x0: Real;
i,j,n: Integer;
exit:String;
например, сразу вылезет ошибка, что переменные массивов X[], Y[], D[] и переменная n не определены.

Последний раз редактировалось Serge_Bliznykov; 01.10.2015 в 10:04.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибку,с++ RedFox94 Помощь студентам 0 05.12.2012 23:08
Исправить ошибку imworld Помощь студентам 1 20.02.2012 19:54
исправить ошибку Дмитрий Solov Паскаль, Turbo Pascal, PascalABC.NET 1 03.12.2011 13:26