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

Различия

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

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

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