Существенным отличием объявления переменных в списке формальных параметров подпрограммы от объявления их в разделе описания переменных является то, что типом любого параметра в списке формальных параметров может быть только стандартный или ранее объявленный тип. Поэтому нельзя объявлять следующую процедуру:
PROCEDURE S (A: ARRAY [1..10] OF REAL);
так, как в списке формальных параметров фактически объявляется тип-диапазон, указывающий границы индексов массива.
Если в подпрограмме передается массив, то необходимо первоначально описать его тип:
TYPE AT = ARRAY [1..10] OF REAL;
PROCEDURE S (A: AT);
Рассмотрим пример, который соответствует пункту 4 домашнего задания.
Пример 8. Задать три последовательности случайных чисел , , , где , , . Все числа последовательности кратные 2 умножить на , числа кратные 3 умножить на , числа кратные 5 умножить на .
На экран вывести заданные и преобразованные последовательности , , .
PROGRAM PR8;
TYPE Mas=ARRAY [1..12] OF REAL;
VAR N, M, L: Mas;
i: BYTE;
A, B, C: REAL;
PROCEDURE ZAD (t: BYTE; VAR Mt: Mas);
BEGIN
RANDOMIZE;
FOR i:=1 TO t DO
Mt[i]:=RANDOM (20);
END;
PROCEDURE VIVOD (t: BYTE; Mt: Mas);
BEGIN
FOR i:=1 TO t DO
WRITE (Mt[i]:5:0);
WRITELN;
END;
PROCEDURE PREOB (t, p: BYTE; s: REAL; VAR Mt: Mas);
BEGIN
FOR i:=1 TO t DO
IF TRUNC(Mt[i]) MOD p=0 THEN Mt[i]:=s*Mt[i];
END;
BEGIN
WRITELN ('задать значения A, B, C ');
READ (A, B, C);
ZAD (12, N);
WRITELN ('исходная послед. N ');
VIVOD (12, N);
PREOB (12, 2, A, N);
WRITELN ('преобразованная послед. N ');
VIVOD (12, N);
ZAD (10, M);
WRITELN ('исходная послед. M ');
VIVOD (10, M);
PREOB (10, 3, B, M);
WRITELN ('преобразованная послед. M ');
VIVOD (10, M);
ZAD (8, L);
WRITELN ('исходная послед. L ');
VIVOD (8, L);
PREOB (8, 5, C, L);
WRITELN ('преобразованная послед. L ');
VIVOD (8, L);
END.
В результате выполнения программы на экран будет выведено:
задать значения , , .
2 3 4
исходная послед.
3 12 6 9 4 0 13 17 14 10 7 8
преобразованная послед.
3 24 12 9 8 0 13 17 28 20 7 16
|
исходная послед.
5 10 9 6 3 11 12 7 15 8
преобразованная послед.
5 10 27 18 9 11 36 7 45 8
исходная послед.
9 11 5 7 2 13 15 18
преобразованная послед.
9 11 20 7 2 13 60 18
Пояснения к программе: В данной программе задается тип Mas, который соответствует массиву 12 чисел типа REAL. Это сделано для того, чтобы использовать этот тип в качестве формальных параметров при описании процедур. Поскольку наибольшее количество элементов в последовательностях , , равно 12, то и тип Mas содержит 12 элементов.
Процедура ZAD используется для получения последовательности случайных чисел, которые заносятся в массив Mt. Используемая стандартная процедура RANDOMIZE инициализирует датчик псевдослучайных чисел, а с помощью стандартной функции RANDOM образуются случайные числа в диапазоне 0-20. Формальными параметрами процедуры ZAD являются: – количество элементов в последовательностях; Mt – имя массива, в который заносятся элементы последовательностей.
Процедура VIVOD осуществляет вывод в строку – элементов массива Mt. Формальные параметры процедуры VIVOD аналогичны формальным параметрам процедуры ZAD.
Процедура PREOB производит преобразование – элементов массива Mt по следующему правилу: те элементы массива Mt, которые кратны значению умножаются на значение . Кратность элементов массива Mt проверяется с помощью операции MOD, которая позволяет получить остаток от целочисленного деления элемента Mt[i] на число . Если этот остаток равен 0, то элемент Mt[i] кратен числу .
В процессе выполнения самой программы сначала задаются значения , , . В результате выполнения процедуры ZAD получаем последовательность случайных чисел , . С помощью процедуры VIVOD эта последовательность выводится на экран. Процедура PREOB осуществляет преобразование последовательности по заданному правилу. Процедура VIVOD выводит уже преобразованную последовательность на экран. Аналогичные действия выполняются для последовательностей и . В результате выполнения программы на экране будут значения , , и шесть последовательностей чисел.
|
СПИСОК ЛИТЕРАТУРЫ
1. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. – М.: Изд-во МГТУ, 1990. –580 с.
2. Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров / Пер. с польск. Д.И. Юренкова. – М.: Машиностроение, 1991. –320 с.
ЗАДАНИЕ
1. Описать функцию для определения (вид функции для каждого варианта задания приведен в столбце 2 таблицы).
2. Задать конкретные значения , и вычислить и (формулы для определения и приведены в столбце 2 таблицы).
3. Описать рекурсивные функции для определения , . Задать значение и вычислить (формулы для определения рекурсивных функций и для определения с приведены в столбце 3 таблицы).
4. Задать три последовательности случайных чисел , , и произвести действия над каждым элементом этих последовательностей, используя процедуру (количество элементов последовательностей , , и соответствующие действия для каждого варианта задания приведены в столбце 4 таблицы).
На экран вывести: значения переменных , , , заданные и преобразованные последовательности , , (каждую последовательность чисел вывести в одну строку).
№ | Вид функции . Задать , . Вычислить , . | Вид функций , . Задать . Вычислить . | Значения , , . Произвести действия над элементами последовательностей. |
; ; | ; ; ; ; | ; ; все числа умножить на ; все числа умножить на ; все числа умножить на | |
; ; | ; ; ; ; | ; ; все четные умножить на ; все четные умножить на ; все четные умножить на | |
; ; | ; ; ; ; ; ; | ; ; числа кратные 3 умножить на ; числа кратные 5 умножить на ; числа кратные 2 умножить на | |
; ; | ; ; ; ; | ; ; все нечетные умножить на ; все нечетные умножить на ; все нечетные умножить на | |
; ; | ; ; ; ; | ; ; числа кратные 3 умножить на ; числа кратные 3 умножить на ; числа кратные 3 умножить на | |
; ; | ; ; ; ; | ; ; положительные: умножить на ; умножить на ; умножить на | |
; ; | ; ; ; ; | ; ; числа больше 10: умножить на ; умножить на ; умножить на | |
; ; | ; ; ; ; ; | ; ; числа меньше 12: умножить на ; умножить на ; умножить на | |
; ; | ; ; ; ; | ; ; положительные числа: разделить на ; разделить на ; разделить на | |
; ; | ; ; ; ; | ; ; четные числа , , заменить нулем | |
; ; | ; ; ; ; | ; ; отрицательные числа: умножить на ; умножить на ; заменить нулем | |
; ; | ; ; ; ; | ; ; числа кратные 2 разделить на ; числа кратные 5 разделить на ; числа кратные 3 разделить на | |
; ; | ; ; ; | ; ; все нечетные разделить на ; все нечетные разделить на ; все нечетные разделить на | |
; ; | ; ; ; ; | ; ; числа больше 15: умножить на ; разделить на 10; умножить на | |
; ; | ; ; ; ; ; | ; ; числа кратные 5 разделить на ; числа кратные 5 разделить на ; числа кратные 5 разделить на | |
; ; | ; ; ; ; | ; ; все четные умножить на ; все четные умножить на ; все четные умножить на | |
; ; | ; ; ; ; | ; ; кратные 3 умножить на ; кратные 5 умножить на ; кратные 2 умножить на | |
; ; | ; ; ; ; | ; ; числа кратные 5 разделить на ; числа кратные 5 разделить на ; числа кратные 5 разделить на | |
; ; | ; ; ; | ; ; числа больше 10: умножить на ; умножить на 10; умножить на | |
; ; | ; ; ; ; | ; ; все числа умножить на ; все числа умножить на ; все числа умножить на | |
; ; | ; ; ; ; | ; ; все нечетные умножить на ; все нечетные умножить на ; все нечетные умножить на | |
; ; | ; ; ; ; ; | ; ; числа кратные 3 умножить на ; числа кратные 3 умножить на ; числа кратные 3 умножить на | |
; ; | ; ; ; ; | ; ; четные числа , , заменить нулем | |
; ; | ; ; ; ; | ; ; числа меньше 12: умножить на ; умножить на ; умножить на | |
; ; | ; ; ; ; | ; ; все нечетные разделить на ; все нечетные разделить на ; все нечетные разделить на | |
; ; | ; ; ; ; ; | ; ; числа больше 15: умножить на ; разделить на 10; умножить на | |
; ; | ; ; ; ; | ; ; числа кратные 2 разделить на ; числа кратные 5 разделить на ; числа кратные 3 разделить на | |
; ; | ; ; ; ; | ; ; положительные числа: умножить на ; умножить на ; умножить на |
СОДЕРЖАНИЕ
|
ВВЕДЕНИЕ. 3
1. ПРОЦЕДУРЫИ ФУНКЦИИ.. 3
2. ОПИСАНИЕ ФУНКЦИИ ЗАДАННОГО ВИДА.. 8
3. РЕКУРСИЯ.. 9
4. ИСПОЛЬЗОВАНИЕ ПАРАМЕТРОВ-МАССИВОВ В ПОДПРОГРАММАХ 10
СПИСОК ЛИТЕРАТУРЫ.. 14
ЗАДАНИЕ. 15