мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
pascal:procfandfun [20/09/2012 10:43] ocapascal:procfandfun [06/05/2019 03:50] (текущий) – [Функции] ybezrukov
Строка 5: Строка 5:
  
 **Процедура (подпрограмма)** -- большой (более или менее) фрагмент кода, который описан специальным образом один раз, но может вызываться из разных мест программы. Процедурами, а точнее -- **вызовами** стандартных процедур, являются многие "популярные" команды, такие, как команды ввода/вывода (//write//, //writeln//, //read// и //readln//).  **Процедура (подпрограмма)** -- большой (более или менее) фрагмент кода, который описан специальным образом один раз, но может вызываться из разных мест программы. Процедурами, а точнее -- **вызовами** стандартных процедур, являются многие "популярные" команды, такие, как команды ввода/вывода (//write//, //writeln//, //read// и //readln//). 
 +
 +==== Описание и вызов процедур ====
  
 Следует различать **описание** и **вызов** процедур. Следует различать **описание** и **вызов** процедур.
 +
 +**Описание процедуры** определяет, что именно и каким образом делает процедура, а также как её следует использовать в программе. Считается, что описание каждой процедуры (возможно - уже в виде готового программного кода) существует всегда, но может быть скрыто от разработчика. В соответствии с описанием процедуры, при порождается и встраивается в готовую программу реальный программный код, который исполняется в программе в момент вызова процедуры. 
 +
 +Не следует путать описание  процедуры в программе с описанием процедуры в справочной системе или в сопровождающей документации. Последнее -- просто текст, предназначенный для того, чтобы помочь программисту освоиться с применением процедуры. 
 +
 +**Вызов процедуры**  -- это применение процедуры в конкретном месте текста программы. В готовой программе ему соответствует некоторый стандартный механизм, который позволяет передать управление на код процедуры и затем вернуть его обратно коду самой программы.
 +
 +**Объявление процедуры** -- редко встречающаяся конструкция, которая провозглашает, что мы планируем использовать определённым образом некоторую процедуру, полное описание которой будет предоставлено позже  в соответствующий момент. Примером является "косвенная рекурсия", когда процедура А использует в своём описании вызовы процедуры В, а процедура В, в свою очередь, использует вызовы процедуры А. Объявление процедуры указывает, что обращение к некоторому неописанному полностью объекту не является ошибкой, если производится в соответствии с этим объявлением. В готовом программном коде, соответствия объявлению нет, это механизм, который позволяет согласовать код программы с кодом процедуры 
  
 ==== Функции ==== ==== Функции ====
Строка 12: Строка 22:
 **Функции** -- это специальный вид процедур, которые **возвращают** значения заранее оговоренного типа, т.е. вызовы функций могут заменять значения указанного типа в выражениях или в качестве параметров других процедур и функций. Например: **Функции** -- это специальный вид процедур, которые **возвращают** значения заранее оговоренного типа, т.е. вызовы функций могут заменять значения указанного типа в выражениях или в качестве параметров других процедур и функций. Например:
  
-y:=sin(x);                    // //+''y:=sin(x);''                    // //
  
-m:= round( i/j + frac(q) );   // //+''m:= round( i/j + frac(q) );''   // //
  
-writeln(round(y));            // //+''writeln(round(y));''            // //
  
 Их описание и применение несколько отличается от описания и применения просто "чистых" процедур. Их описание и применение несколько отличается от описания и применения просто "чистых" процедур.
Строка 22: Строка 32:
 Во многих современных версиях языков программирования, функции могут использоваться как процедуры. Например: Во многих современных версиях языков программирования, функции могут использоваться как процедуры. Например:
  
-while keypressed do readkey;     // //+''while keypressed do readkey;''     // //
  
 Обратное - неверно. Неверный пример: Обратное - неверно. Неверный пример:
  
-x:= z+read(z); //+''x:= z+read(z);'' //
  
  
Строка 56: Строка 66:
                             // Скорее всего - не существует в реальности.                             // Скорее всего - не существует в реальности.
                             // Содержит ВСЁ (происхождение чего мы не хотим объяснять)                             // Содержит ВСЁ (происхождение чего мы не хотим объяснять)
- 
 const  const 
   n=1000;                   // Размер массива. Выбран по принципу - "а почему бы и нет?"   n=1000;                   // Размер массива. Выбран по принципу - "а почему бы и нет?"
-   
 type type
   ArrayType = array[1..N] of integer;   ArrayType = array[1..N] of integer;
Строка 65: Строка 73:
 var var
   SortedA : ArrayType;      // Объявление самого сортируемого массива   SortedA : ArrayType;      // Объявление самого сортируемого массива
- 
 begin begin
   FillArray (SortedA);      // Заполняем наш массив начальными значениями   FillArray (SortedA);      // Заполняем наш массив начальными значениями
Строка 71: Строка 78:
   SortArray (SortedA);      // Сортируем наш массив "таинственным способом".   SortArray (SortedA);      // Сортируем наш массив "таинственным способом".
   PrintArray(SortedA);      // Показываем, что получилось   PrintArray(SortedA);      // Показываем, что получилось
- 
 end.   end.  
- 
 </code> </code>
  
Строка 98: Строка 103:
 минимизация включения повторяющегося кода - когда в программу включается в различных местах программы множество одинаковых или практически одинаковых фрагментов; минимизация включения повторяющегося кода - когда в программу включается в различных местах программы множество одинаковых или практически одинаковых фрагментов;
  
-  стандартизация кода+стандартизация кода