Подпрограммы.
Параметры - сложные типы данных
Рассмотренные в предыдущей
лабораторной работе категории параметров не исчерпывают всех вопросов
передачи информации в Pascal программах. Использование в качестве
параметров сложных типов данных имеет свои конкретные особенности.
Рассмотрим особенности использования в качестве параметра подпрограмм данных
типа массив.
Массивы и строки
открытого типа
В Turbo Pascal 7.0 в
качестве параметров можно использовать массивы и строки открытого типа.
Открытым массивом (строкой) называется массив без указания типа индекса
(размера массива). Например
PROCEDURE Atts(Var mas: array of integer);
В качестве фактического параметра в данной процедуре
можно использовать массив любого размера, содержащий элементы того же типа
что и формальный открытый массив (в нашем случае integer).
Не зависимо от того, какой
массив используется в качестве фактического параметра, индексация
элементов открытого массива всегда начинается с нуля. Индекс последнего
элемента в массиве можно определить с помощью функции для величин
порядкового типа High(x).
Такие массивы введены для
того, чтобы подпрограмма могла обрабатывать массив любого размера.
Пример 4.
---------
PROGRAM EX_26_4;
{Программа сортировки массива}
Uses Crt;
VAR
m: array[11..20] of integer;
Procedure Vvod (var mas: array of integer);
{Процедура заполнение линейного массива произвольного размера}
Var i: integer;
Begin
ClrScr;
For i:=0 to high(mas) do begin
Write('Введите эл-т массива N ',i,' ');
Readln(mas[i]);
end;
End;
Procedure Sort (var mas: array of integer);
{Процедура упорядочивания линейного массива произвольного размера}
Var
ind: boolean;
buf: integer;
i: integer;
Begin
Repeat
ind:=true;
For i:=0 to high(mas)-1 do
if mas[i]<mas[i+1] then begin
buf:=mas[i];
mas[i]:=mas[i+1];
mas[i+1]:=buf;
ind:=false;
end;
Until ind;
End;
Procedure Vyvod ( const mas: array of integer);
{Процедура вывода на экран содержимого
произвольного линейного массива}
Var i: integer;
Begin
Writeln ('Упорядоченный массив');
For i:=0 to High(mas) do Write(mas[i]:5);
Repeat Until Keypressed;
End;
BEGIN {Главная программа}
Vvod(m);
Sort(m);
Vyvod(m);
END.
В этой программе
используются три процедуры с параметром массив открытого типа. Эти процедуры
могут быть использованы без изменений для обработки любого одномерного
массива целых чисел в любой программе.
Для работы с многомерными
массивами в Turbo Pascal 7.0 такой возможности нет. Если вы желаете создать
подпрограмму для работы с многомерным массивом, или просто с конкретным
линейным массивом, необходимо помнить следующее: Описание в качестве
формального параметра массива с указанием его индексов невозможно. Например
процедура
Prim (var m: array[1..10,1..5] of byte);
объявлена быть не может. Необходимо использовать
тип-массив. Например:
PROGRAM Ex_26_5;
{Программа определения минимального элемента матрицы }
USES Crt;
TYPE mas=array[1..4,1..4] of integer; {Тип-массив}
VAR tab: mas;
min: integer;
Procedure Vvodmt (var m: mas);
{процедура с использованием типа-массив}
Var
Begin
ClrScr;
For i:=1 to 4 do
For j:=1 to 4 do begin
Write('Введите эл-т массива N ',i,' ',j,' ');
Readln(m[i,j]);
end;
End;
Procedure Tmtab (m: mas; var rez: integer);
Var i,j: byte;
Begin
rez:=m[1,1];
for i:=1 to 4 do
for j:=1 to 4 do
if m[i,j]<rez then
rez:=m[i,j];
End;
BEGIN
Vvodmt (tab);
Tmtab (tab, min);
Writeln ('Минимальный элемент в массиве = ', min);
Repeat Until Keypressed;
END.
EXIT Как вы знаете
оператор безусловного перехода GOTO нельзя использовать для досрочного
выхода из подпрограммы. С этой целью используется процедура EXIT.
Контрольные вопросы
- Сформулируйте правила использования открытых
массивов и строк.
- Как индексируются открытые массивы?
- Сформулируйте правила использования параметров
типа массив.
- Как используются в качестве параметров
подпрограмм многомерные массивы?
- Где применяется процедура EXIT?
Задания для
самостоятельного выполнения.
- Дан целочисленный массив, состоящий из 10
элементов. Все положительные элементы массива увеличить вдвое.
- Дан символьный массив, состоящий из 10
элементов. Преобразовать все маленькие латинские символы в большие.
- Дан символьный массив А, состоящий из 8
элементов. Получить целочисленный массив В, элементы которого имеют
номера, соответствующие элементам массива А.
- Дан целочисленный массив, состоящий из 12
элементов. Определить сумму элементов с чётными индексами и сумму
элементов с нечётными индексами.
- Дан целочисленный массив размером 5x4.
Отсортировать столбцы данного массива.
- Дан целочисленный массив размером 3x5.
Определить максимальный элемент данного массива.
- Дан линейный массив из 15 целых чисел.
Пересортировать массив по закону: первый меняется с последним, второй с
предпоследним и т.д.
- Дан линейный массив из 25 целых чисел.
Определить сумму положительных и сумму отрицательных элементов данного
массива.
- Составить программу преобразования строки в
"строку наоборот".
- Составить программу удаления лишних пробелов в
строке.
НАЗАД
ДАЛЕЕ
|