Метод пошаговой детализации (последовательного уточнения) разработки алгоритмов. Особенности использования массивов в качестве параметров

Оглавление

Параметры-массивы и параметры-строки. 1

Контрольные вопросы.. 2

Комбинированный урок №10

Тема:Метод пошаговой детализации (последовательного уточнения) разработки алгоритмов. Особенности использования массивов в качестве параметров.

Цель: изучить приемы составления программ с использованием массивов в качестве параметров на примерах.

Параметры-массивы и параметры-строки

так как в списке формальных параметров фактически объявляется тип-диапазон, указывающий границы индексов массива. Если необходимо передать какой-то элемент массива, то проблем, как правило, не… type atype = array [1..10]of Real;

.......

Поскольку строка является фактически своеобразным массивом, ее передача в подпрограмму осуществляется аналогичным образом:

type intype = String [15] ;

outype = String [30] ;

Function St (s : intype): outype;

.......

Открытый массив представляет собой формальный параметр подпрограммы, описывающий базовый тип элементов массива, но не определяющий его размерности и границы:

Procedure MyProc(OpenArray: array of Integer);

Внутри подпрограммы такой параметр трактуется как одномерный массив с нулевой нижней границей. Верхняя граница открытого массива возвращается функцией HIGH. Используя минимальный индекс как «ноль», и значение, возвращаемое функцией HIGH, как максимальный индекс, подпрограмма может обрабатывать одномерные массивы произвольной длины:

Пример 1: Иллюстрация использования открытых массивов: программа выводит на экран содержимое двух одномерных массивов разной длины с помощью одной процедуры ArrayPrint .

 

Procedure ArrayPrint(aArray: array of Integer);

var k: Integer;

begin

for k := 0 to High(aArray) do Write(aArray[k]:8);

WriteLn

end;

const A:array [-1..2] of Integer = (0,1,2,3);

B: array [5..7] of Integer = (4,5,6);

begin

ArrayPrint(A);

ArrayPrint(B)

end.

 

Как видно из этого примера, фактические границы массивов А и В, передаваемых в качестве параметров вызова процедуре ArrayPrint, не имеют значения. Однако размерность открытых массивов (количество индексов) всегда равна 1. За этим следит компилятор. Если бы, например, добавить в программу двумерный массив С

var

С: array [1..3,1..5] of Integer;

то обращение

ArrayPrint(С);

 

вызывало бы сообщение об ошибке

Error26: Type mismatch.

(Ошибка 26: Несоответствие типов.)

Пример 2: Программа вводит фамилию и выводит на экран фамилию с прописной буквы

uses crt;

type intype =string[15];

outype = string[25];

var s : intype;

i : integer;

function st(w: intype):outype;

begin

w[1]:=upcase(s[1]); { изменение первого символа со строчного на прописной }

st:=w+' TBiP''2010';{ склеивание символов }

end;

begin

write('Vvedite famely: ');

readln(s);

writeln(st(s));

readkey;

end.

Контрольные вопросы

1. Опишите оформление параметров-массивов и параметров-строк. Приведите примеры.

2. Дайте определение понятию «открытый массив».