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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
pascal:subprograms [13/10/2011 10:34] ocapascal:subprograms [15/10/2011 11:36] oca
Строка 1: Строка 1:
 ====== Процедуры и функции ====== ====== Процедуры и функции ======
  
-Ниже сказанное относится не только к языку Паскаль, но и к большинству других языков программирования.+Ниже сказанное относится не только к языку Паскаль, но и к большинству других языков программирования, за исключением конкретных языковых конструкций (имён процедур), которые даны именно для Паскаля.
  
-Процедура (подпрограмма) -- большой (более или менее) фрагмент кода, который описан один раз, но вызывается из разных мест программы. Процедурами, вернее -- вызовами стандартных процедур, являются многие команды, такие, как команды ввода/вывода    +**Процедура (подпрограмма)** -- большой (более или менее) фрагмент кода, который описан один раз, но может вызываться из разных мест программы. Процедурами, вернее -- **вызовами** стандартных процедур, являются многие команды, такие, как команды ввода/вывода   //write////writeln////read// и //readln//.
-write, writeln, read и readln.+
  
-Процедуры можно разделять по нескольким критериям. В данном случае, говоря о стандартных процедурах, процедуры неявно различаются по месту расположения кода. А именно, стандартные добавляются автоматически, библиотечные требуют подключения внешних библиотек, локальные описываются в программе.+Процедуры можно разделять по нескольким критериям. В данном случае, говоря о стандартных процедурах, процедуры неявно различаются по месту расположения кода. А именно
  
-С помощью механизма передачи параметров, подобный фрагмент кода способен выполнять одни и те же действия с разными объектами, т.е. значениямионстантами), переменными и выражениями. Напримервычислять кубический корень из заданного числа, сортировать произвольный массив с элементами указанного типа, отбрасывать ненужные пробелы в указанной строке и т.д.+  * **стандартные** добавляются автоматически,   
 +  * **библиотечные**  требуют подключения внешних библиотек, т.енаборов дополнительных описаний различных объектов (пример -- keypressedreadkey, delay из CRT),  
 +  * **локальные** описываются в программе.
  
-Иначе говоря, вы можете описать некоторый маленький алгоритм (подпрограмму), решающий частную задачу, и включить его качестве простого действия в более сложный алгоритм (программу).  При этом, описание можно сделать таким образом, что ваш алгоритм будет применим к более или менее широкому набору объектов, с которыми работает общий алгоритм.+Библиотеки могут  
 +  * поставляться изначально как стандартные, в составе инструментов разработчика вместе с компилятором, отладчиком и т.д. 
 +  * создаваться программистом или его коллегами для себя;   
 +  * создаваться и распространяться некоторой третьей стороной.   
 + 
 +Иначе говоря, Вы можете описать самостоятельно или получить со стороны специальным образом оформленный  маленький алгоритм (подпрограмму), решающий частную задачу, и включить его качестве простого действия в свой более сложный алгоритм (программу).  При этом, описание можно сделать таким образом, что ваш алгоритм будет применим к более или менее широкому набору объектов, с которыми работает общий алгоритм
 + 
 +Пример, на примере сортировки массива по возрастанию значений с помощью сортировки выбором.  
 + 
 +Идея сортировки в следующем: 
 +Массив рассматриваем как состоящий  в каждый момент работы программы из двух частей - сортированной и несортированной. Сами части будут меняться! 
 +В начале считаем, что несортированная часть занимает весь массив, а сортированная - всё остальное,   
 +1) Находим максимальный во всём массиве элемент. 
 +В рассматриваемой части массива 
 + 
 +<code pascal | Крайне общий алгоритм программы сортировки массива> 
 +uses allForSorting;         // Библиотека "Всё для сортировки".  
 +                            // Скорее всего - не существует в реальности. 
 +                            // Содержит ВСЁ (происхождение чего мы не хотим объяснять) 
 + 
 +const  
 +  n=1000;                   // Размер массива. Выбран по принципу - "а почему бы и нет?" 
 +   
 +type 
 +  ArrayType = array[1..N] of integer; 
 +                            // Описание типа ("устройства") сортируемого массива 
 +var 
 +  SortedA : ArrayType;      // Объявление самого сортируемого массива 
 + 
 +begin 
 +  FillArray (SortedA);      // Заполняем наш массив начальными значениями 
 +  PrintArray(SortedA);      // Показываем, что получилось. 
 +  SortArray (SortedA);      // Сортируем наш массив "таинственным способом"
 +  PrintArray(SortedA);      // Показываем, что получилось 
 + 
 +end.   
 + 
 +</code> 
 + 
 + 
 +Важно то, что с помощью механизма **передачи параметров**, подобный фрагмент кода способен выполнять одни и те же действия с разными объектами, т.е. значениями(константами), переменными и выражениями. Например, вычислять кубический корень из заданного числа, сортировать произвольный массив с элементами указанного типа, отбрасывать ненужные пробелы в указанной строке и т.д.
  
 **Описание процедуры** -- это общее описание алгоритма, реализующегося в процедуре, средствами используемого языка программирования.  Многие системы программирования позволяют получить программу, собранную из фрагментов, написанных на нескольких языках программирования. Например - с ассемблерными вставками, т.е. фактически - с непосредственным использованием команд процессора.  **Описание процедуры** -- это общее описание алгоритма, реализующегося в процедуре, средствами используемого языка программирования.  Многие системы программирования позволяют получить программу, собранную из фрагментов, написанных на нескольких языках программирования. Например - с ассемблерными вставками, т.е. фактически - с непосредственным использованием команд процессора. 
Строка 28: Строка 69:
 Большинство языков программирования позволяют оформлять многократно используемый код в виде процедур и/или функций. Целью написания процедур может быть: Большинство языков программирования позволяют оформлять многократно используемый код в виде процедур и/или функций. Целью написания процедур может быть:
  
-  минимизация написания повторно используемого кода; +минимизация написания повторяющегося кода - когда программисту приходится несколько раз разрабатывать и описывать идентичные последовательности команд, решающих одинаковые задачи, подразумеваются излишние затраты времени разработчика; 
-  +минимизация включения повторяющегося кода - когда в программу включается в различных местах программы множество одинаковых или практически одинаковых фрагментов
   стандартизация кода   стандартизация кода