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

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

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

> Продцедурный тип, Не могу нати ошибку
Selena
сообщение 3.10.2006 15:16
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 39
Пол: Женский
Реальное имя: Ольга

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


Помогите пожайлуста, при компеляции выдается ошибка, я ее не могу исправить, потому что не понимаю в чем она заключается
Код

Program MPD;
Uses WinCrt;
Type
  func=function(xa:Real):Real;
  Function F(xa:Real):Real;Far;
  Procedure MrPD(Aa,Ba,Ea:Real; F:func; Var xa:Real);

  Var
   A,B,Exp,x:Real;
   F:func;
   w:text;
{функция y=f(t)}
  Function F;
   Begin
    F:=(Sqr(xa)*xa)+3*xa+5;
   End;
{метод половинного деления}
  Procedure MrPD;
   Var z,x,y:Real;
    Begin
     x:=F(Aa);
     Repeat
      xa:=(Aa+Ba)/2;
      y:=F(xa);
      If y*z>0
       Then begin Aa:=xa; z:=y; end
       Else Ba:=xa;
     Until Abs(Ba-Aa)<Ea;
    End;

Begin
Assign(w,'C:\Rezlab\MPD.doc'); ReWrite(w);
WriteLn(w,'Определение корней уравнения методом половинного деления');
WriteLn(w);
WriteLn('Введи значение левой границы интервала А');Read(A);
WriteLn('Введи значение правой границы интервала В');Read(B);
WriteLn('Введите погрешность Exp');Read(Exp);
MPD(A,B,Exp,f,x);
WriteLn(w,'Корень по методу половинного деления равен', x:7:4);
Close(w);
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 1)
volvo
сообщение 3.10.2006 15:32
Сообщение #2


Гость






Цитата
не понимаю в чем она заключается
Компилятор считает, что у тебя функция MrPD является вложенной в функцию F, но тогда синтаксически это реализовано неверно.

Если же MrPD НЕ вложена в F, то реализация F должна быть либо известна ПЕРЕД началом реализации MrPD, либо должна применяться директива Forward, показывающая что реализация F будет позже...

Скорее всего, ты имела в виду вот это:

Program MPD;
Uses WinCrt;
Type
func=function(xa:Real):Real;

Function F(xa:Real):Real;Far;
Begin
F:=(Sqr(xa)*xa)+3*xa+5;
End;

Procedure MrPD(Aa,Ba,Ea:Real; F:func; Var xa:Real);
Var z,x,y:Real;
Begin
x:=F(Aa);
Repeat
xa:=(Aa+Ba)/2;
y:=F(xa);
If y*z>0
Then begin Aa:=xa; z:=y; end
Else Ba:=xa;
Until Abs(Ba-Aa)<Ea;
End;

Var
A,B,Exp,x:Real;
w:text;

Begin
Assign(w,'C:\Rezlab\MPD.doc'); ReWrite(w);
WriteLn(w,'Определение корней уравнения методом половинного деления');
WriteLn(w);
WriteLn('Введи значение левой границы интервала А');Read(A);
WriteLn('Введи значение правой границы интервала В');Read(B);
WriteLn('Введите погрешность Exp');Read(Exp);
MrPD(A,B,Exp,f,x);
WriteLn(w,'Корень по методу половинного деления равен', x:7:4);
Close(w);
End.

?
 К началу страницы 
+ Ответить 

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

 



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