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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 18:34   #11
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Описание и вызов процедур и функций

Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.

Формат описания процедуры имеет вид:
Код:
procedure имя процедуры (формальные параметры);
  раздел описаний процедуры
begin

  исполняемая часть процедуры

end;
Формат описания функции:
Код:
function имя функции (формальные параметры):тип результата;
  раздел описаний функции
begin

  исполняемая часть функции

end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя праметра: имя типа

и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);

Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.

Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.

Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
имя функции := результат;

При вызове процедур и функций необходимо соблюдать следущие правила:
количество фактических параметров должно совпадать с количеством формальных;
соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.

Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
Код:
var x,y,m,n: integer;

procedure MaxNumber(a,b: integer; var max: integer);
begin
   if a>b then max:=a else max:=b;
end;

begin
   write('Введите x,y ');
   readln(x,y);
   MaxNumber(x,y,m);
   MaxNumber(2,x+y,n);
   writeln('m=',m,'n=',n);
end.
Аналогичную задачу, но уже с использованием функций, можно решить так:
Код:
var x,y,m,n: integer;

function MaxNumber(a,b: integer): integer;
   var max: integer;
begin
   if a>b then max:=a else max:=b;
   MaxNumber := max;
end;

begin
   write('Введите x,y ');
   readln(x,y);
   m := MaxNumber(x,y);
   n := MaxNumber(2,x+y);
   writeln('m=',m,'n=',n);
end.
есть что то что ты не знаеш, есть что то что я не знаю,
но поверь в етои теме туговато с твоими знаниями,
вот достал для тебя инфы, читаи, а я в свою тему пока поиду
ах да, незачто
VirusN13

Последний раз редактировалось ArtGrek; 22.02.2011 в 18:39.
ArtGrek вне форума Ответить с цитированием
Старый 22.02.2011, 18:42   #12
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
Canvas.MoveTo(0, Tsin1.TMySin(0)); //в этой строке ошибка
TMySin — это свойство, зачем тут ещё 0 втулен?

Надо или

Код:
Tsin1.TMySin := 0;
или

Код:
Canvas.MoveTo(0, Tsin1.TMySin); //в этой строке НЕТ ошибки ))
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 18:47   #13
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

все разобрался, попробовал на домашнем компе метод заработал, код этот же и через свойство разобрался я лепил так
Canvas.MoveTo(0, Tsin1.TMySin:=0); и естественно ошибка
а нужно было так
Tsin1.TMySin:=0;
а потом уже
Canvas.MoveTo(0, Tsin1.TMySin);
fate вне форума Ответить с цитированием
Старый 22.02.2011, 18:48   #14
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

veniside спасибо, но я уже сам догнал
fate вне форума Ответить с цитированием
Старый 22.02.2011, 18:49   #15
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

ArtGrek ну ты выдал. Читать не буду слишком много, лень ))))
но меня твои сообщение до этого убили ))) так что думаю нечего нового не подчерпну из твоей поэмы
fate вне форума Ответить с цитированием
Старый 22.02.2011, 19:06   #16
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

скажи ето когда вернешся и прочтеш ее )))
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 22.02.2011, 19:12   #17
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

какой тут может быть разговор, ты повнимательней посмотри на свое сообщение
http://www.programmersforum.ru/showp...06&postcount=2
нагородил черт знает что. Лишнюю функцию прилепил, а это вообще без комментариев
Canvas.MoveTo(0, GetMySin(0));
fate вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
missing operator or semicolon - Как получить секунды [Delphi] bulldog5293 Помощь студентам 8 10.12.2010 16:30
ошибкa "missing operator or semicolon" Дим@@ Помощь студентам 3 11.11.2010 15:14
Почему возникает ошибка? Aleksey1989 Помощь студентам 1 05.10.2010 18:16
Возникает ошибка..... MyXa Общие вопросы .NET 12 31.08.2010 14:29
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38