Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
екция: Особенности использования массивов в качестве параметров Страница 2 из 2
[1] Оглавление [2] Параметры-массивы и параметры-строки [2.1] Контрольные вопросы |
Комбинированный урок №10
Тема: Метод пошаговой детализации. Особенности использования массивов в качестве параметров.
Цель: изучить приемы составления программ с использованием массивов в качестве параметров на примерах.
Может сложиться впечатление, что объявление переменных в списке формальных параметров подпрограммы ничем не отличается от объявления их в разделе описания переменных. Действительно, в обоих случаях много общего, но есть одно существенное различие: типом любого параметра в списке формальных параметров может быть только стандартный или ранее объявленный тип. Поэтому нельзя, например, объявить следующую процедуру:
Procedure S (a: array [1..10] of Real);
так как в списке формальных параметров фактически объявляется тип-диапазон, указывающий границы индексов массива.
Если необходимо передать какой-то элемент массива, то проблем, как правило, не возникает, но если в подпрограмму передается весь массив, то следует первоначально описать его тип. Например:
type atype = array [1..10]of Real;
Procedure S(a: atype);
.......
Поскольку строка является фактически своеобразным массивом, ее передача в подпрограмму осуществляется аналогичным образом:
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''2009';{ склеивание символов }
end;
begin
write('Vvedite famely: ');
readln(s);
writeln(st(s));
readkey;
end.
1. Как оформляются параметры-массивы и параметры-строки? Приведите примеры.
2. Дайте определение понятию «открытый массив».