
- •Оглавление
- •Предисловие
- •Введение
- •1. Общие сведения о языках программирования
- •1.1. Краткая история эвм и языков программирования
- •1.2. Трансляторы
- •1.3. Основные понятия алгоритмических языков
- •2. Интегрированная среда borland pascal
- •2.1. Краткая характеристика. Запуск программы
- •2.2. Основы работы в редакторе
- •2.3. Система меню
- •2.3.1. Меню опции file
- •2.3.2. Меню опции edit
- •2.3.3. Меню опции search
- •2.3.4. Меню опции run
- •2.3.5. Меню опции compile
- •2.3.6. Меню опции debug
- •2.3.7. Меню опции tools
- •2.3.8. Меню опции options
- •2.3.9. Меню опции window
- •2.3.10. Меню опции help
- •3. Синтаксис языка borland pascal
- •3.1. Элементы языка
- •3.2. Служебные (зарезервированные слова), директивы и идентификаторы
- •3.3. Основные элементы программирования
- •3.4. Структура программы
- •4. Типы данных
- •4.1. Простые типы
- •4.1.1. Целые типы.
- •4.1.2. Логический тип
- •4.1.3. Символьный тип
- •4.1.4. Перечисляемый тип
- •4.1.6. Вещественные типы
- •4.2. Структурированные типы
- •4.2.1. Массивы
- •4.2.2. Записи
- •4.2.3. Множества
- •4.2.4. Файловый тип
- •Процедуры и функции ввода-вывода
- •4.3. Указатели
- •4.4. Строки
- •4.5. Совместимость и преобразование типов
- •4.6. Константы и константные выражения
- •5. Операторы и процедуры языка
- •5.1. Поразрядные оператоpы. Логические оператоpы. Опеpатоpы отношения
- •5.2. Оператор присваивания
- •5.3. Процедуры ввода и вывода
- •5.4. Условные операторы
- •5.4.1. Оператор If
- •5.4.2. Оператор case
- •5.5. Операторы цикла
- •5.5.1. Оператор while (цикл с предусловием )
- •5.5.2. Оператор repeat..Until (Цикл с постусловием)
- •5.5.3. Оператор цикла For (цикл с заданным количеством повторений)
- •5.6. Оператор безусловного перехода
- •5.7. Функции и процедуры для работы со строковыми и символьными данными
- •5.8. Комментарии в программе
- •6. Процедуры и функции
- •6.1. Параметры подпрограмм
- •7. Использование графики в borland pascal
- •7.1. Константы модуля Graph
- •7.1.1. Константы цвета
- •7.1.2. Константы типов и толщины линий
- •7.1.3. Константы шаблона штриховки
- •Заключение
- •Библиографический список
- •Решение задач на языке программирования Паскаль
- •Пример 9. Определить, имеются ли в массиве а[5,4] столбцы, состоящие из одних и тех же элементов, если такие есть, выдавать номера одинаковых столбцов, если нет – выдать сообщение.
- •Варианты заданий для самостоятельной работы Вычисление значений выражений
- •Вычислить значение функции с использованием условных операторов
- •Программирование циклических алгоритмов с заданным числом повторений
- •Программирование циклических алгоритмов с предусловием
- •Программирование циклических алгоритмов с постусловием
- •Программирование алгоритмов обработки одномерных массивов
- •Программирование алгоритмов обработки двумерных массивов
- •Программирование с использованием функций
- •Программирование с использованием процедур
- •Обработка символьных и строковых данных
- •Графика
- •Оператор
6.1. Параметры подпрограмм
В Паскале существует 4 вида параметров: значение, константа, переменная и нетипизованное значение. Они характеризуются следующим:
Группа параметров без предшествующего ключевого слова и завершенная указанием типа является списком параметров-значений.
Группа параметров, предваренных словом const и завершенная определением типа, является списком параметров-констант.
Группа параметров, предваренная словом var и завершенная указанием типа, является списком параметров-переменных.
Группа параметров, предваренная словами var или CONST и не имеющая указания на тип, является списком нетипизованных значений.
Если значения формальных параметров 1-й группы будут изменены в подпрограмме, то новые значения не будут переданы обратно вызывающей программе.
Параметры-константы доступны только для чтения.
Если в подпрограмме будет изменен параметр, описанный с ключевым словом VAR, то его значение изменится и там, откуда была вызвана подпрограмма.
Когда компилятор обрабатывает вызов подпрограмм, то для параметров-значений он резервирует область памяти (в стеке) соответственно типу переданных параметров и записывает туда значения переданных переменных.
В остальных случаях запоминаются не значения, а адреса переданных параметров.
Ниже приводится вариант программы РF, в котором используется процедура для получения двух значений и функция для вычисления отношения:
program РF;
var A,B: integer;
Ratio : real;
procedure GetData(var X,Y : integer);
begin
Write('Введите два числа: ');
Readln(X,Y);
end;
function GetRatio(I,J : integer) : real;
begin
GetRatio := I/J;
end;
begin
GetData(A,B);
Ratio := GetRatio(A,B);
Writeln('Отношение равно ',Ratio);
Readln;
end.
Эта программа иллюстрирует использование процедур и функций.
При компиляции и запуске программы первым в теле программы выполняется оператор GetData(A, В). Этот тип оператора называется вызовом процедуры. При обработке этого вызова программа выполняет операторы в GetData, заменяя Х и Y (формальные параметры) на A и В (фактические параметры). Ключевое слово var перед Х и Y в операторе вызова процедуры GetData указывает, что фактические параметры должны быть переменными, и что значения переменных могут быть изменены и переданы обратно вызывающей программе. Поэтому процедуре GetData нельзя передавать литералы, константы, выражения и так далее. При завершении выполнения GetData управление передается в основное тело программы оператору, следующему за вызовом GetData.
Этим следующим оператором является вызов функции GetRatio. Отметим здесь некоторые важные отличия. Во-первых, GetRatio возвращает значение, которое затем должно быть где-нибудь использовано. В данном случае это значение присваивается Ratio. Во-вторых, в основном теле функции значение присваивается GetRatio. Таким образом функция определяет, какое значение следует возвратить. В-третьих, перед формальными параметрами I и J здесь отсутствует ключевое слово var. Это означает, что фактические параметры могут быть любыми целочисленными выражениями, например, Ratio := GetRatio(A+В, 300), и что даже если значения формальных параметров в теле функции будут изменены, новые значения не будут переданы обратно вызывающей программе. Это, кстати, не является различием между процедурами и функциями. Вы можете использовать оба типа параметров с любым видом подпрограммы [8,9].
Вопросы:
Какие типы параметров могут передаваться в подпрограммы?
В чем их отличия?