Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_Лекции.doc
Скачиваний:
38
Добавлен:
29.05.2015
Размер:
2.42 Mб
Скачать

Структурированные типы данных: массивы

Массив - совокупность конечного числа данных одного типа, объединенных общим именем.

  • Одномерный массив - вектор

AA1, A2, A3, ... AN B B1, B2, B3, ..., BM

0.1, 0.5, 0.7, ..., 1.9 12, 34, 56, ..., 13

A[I],B[J] - элементы массива, где I - индексы, указывающие номер или место данного элемента в массиве.

Описание одномерного массива

Var <имя массива>: array [<диапазон изменения индекса>] of <тип элементов>;

Размерность массива может быть любой, элементы массива могут быть любого, в том числе и структурированнного типа, индекс может быть любого ординального типа, кроме типа Longint.

Пример

Var A: array [1..4] of real; Type MAS1=array[1..4] of real;

B: array [1..3] of integer; MAS2=array[1..3] of integer;

Var A: MAS1;

B: MAS2; или

Type I1=1..4;

I2=1..3;

MAS1=array[I1] of real;

MAS2=array[I2] of integer;

Var A: MAS1;

B: MAS2;

Пример

for I:=1 to 4 do for I:=1 to 4 do

Read(A[I]); или begin

Writeln(‘A[‘,I,’]=’);

Read(A[I])

end;

{Ввод элементов одномерного массива}

Пример

{Вывод элементов одномерного массива}

for J:=1 to 3 do for J:=1 to 3 do

Write(B[J]:3); Writeln(‘B[‘,J,’]=’,B[J]:3);

{в строку 12 34 56} {в столбец B[ 1]= 12

B[ 2]= 34

B[ 3]= 56}

  • Двумерный массив - матрица

D11 D12 D13 1 3 2

D=

D21 D22 D23 4 6 7

D[I,J] - элемент матрицы, I- номер строки, J- номер столбца.

Описание двумерного массивa

Var <имя массива>: array[<диапазон строк>,<диапазон столбцов>]

of <тип элементов>;

Пример

Var D:array[1..2,1..3] of integer; или Type MATR=array[1..2,1..3] of integer;

Var D: MATR;

Type ST=array[1..2] of integer;

MATR=array[1..3] of ST;

Var D: MATR;

Пример

for I:=1 to 2 do

for J:=1 to 3 do

Read(D[I,J]); {Последовательность ввода: 1 3 2 4 6 7}

{Ввод элементов двумерного массива}

Пример

{Вывод элементов двумерного массива}

for I:=1 to 2 do

for J:=1 to 3 do

Write(D[I,J]); {вывод в строку 1 3 2 4 6 7}

или

for I:=1 to 2 do

begin Writeln;{переход на новую строку}

for J:=1 to 3 do

Write(D[I,J]) {вывод элементов строки}

end; {результат вывода: 1 3 2

4 6 7 }

Процедуры и функции

В среде Turbo-Pascal имеются две разновидности подпрограмм - процедуры и функции. Структура подпрограммы аналогична структуре программы в целом.

Подпрограмма должна быть описана до того, как она будет использована в основной программе или другой подпрограмме. Все параметры, которые использует подпрограмма, можно разбить на две категории: локальные параметры, объявленные внутри подпрограммы и доступные только ей самой, и

глобальные- объявленные в основной программме и доступные как основной программе, так и всем ее подпрограммам.

  • Формальное описание функции

function <имя функции> (<список формальных параметров>):<тип функции>;

<секция описаний локальных переменных>;

begin

<секция операторов>

end;

где <имя функции> - идентификатор, к которому предъявляются те же требования, как к любому идентификатору в среде Turbo-Pascal;

<список формальных параметров> - все параметры в списке указываются вместе со своим типом (одного типа через запятую; различные типы через точку с запятой). Тип параметров в списке может быть любой. Как частный случай, функция может быть без параметров.

<тип функции> - задается обычным способом и может быть любым простым или String.

  • Вызов функции

Вызов функции может осуществляться из основной программы или другой подпрограммы.

< имя переменной>:= <имя функции>(<список фактических параметров>);

или в операторе вывода

Write( <имя функции>(<список фактических параметров>));

<cписок фактических параметров> - представляет собой, перечисленные через запятую значения, которые при обращении заменяют соответствующие формальные параметры в описании функции.

Следует обратить внимание на то, что количество, тип и порядок расположения фактических параметров в обращении к функции обязательно должен совпадать с количеством , типом и порядком расположения формальных параметров в описании функции.

Пример

Var XN : real;

NN : word;

{Подпрограмма-функция вычисления XN}

function Ipow(X: real; N: word) : real;

Var I : word;

M: real;

Begin

M:=1;

for I:=1 to N do

M:=M * X;

Ipow:=M

end;

{Основная программа}

Begin

Readln(XN,NN);

Writeln(‘Значение функции = ‘, IPow(XN,NN))

end.

Как ранее указывалось, тип формальных параметров может быть любым, однако в заголовке подпрограммы нельзя вводить новый тип, так нельзя писать:

function Max(A : array [1..50] of real): real;

Правильно в основной программе ввести новый тип, а затем использовать его в заголовке подпрограммы:

Type MASS = array [1..50] of real;

function Max(A : MASS) : real;

  • Формальное описание процедуры

procedure <имя процедуры>(<список формальных параметров>);

<секция описания локальных переменных>;

begin

<секция операторов>

end;

В отличие от формального описания функции, в заголовке процедуры отсутствует понятие <тип>, так как имя процедуры не является носителем формального результата. Результаты выполнения процедуры могут быть множественны и указываются в списке формальных параметров в качестве параметров-переменных.

В качестве формальных параметров наиболее часто встречаются параметры-значения и параметры-переменные.

Параметры-значения передаются основной программой в подпрограмму через стек в виде их копий и, следовательно, собственный параметр программы подпрограммой изменится не может.

При передаче параметров-переменных в подпрограмму фактически через стек передаются их адреса в порядке, объявленном в заголовке подпрограммы. Следовательно, подпрограмма имеет доступ к этим параметрам и может их изменять, поэтому результаты выполнения процедуры должны указываться в списке формальных параметров именно в качестве параметров-переменных.

Параметр-переменная указывается в заголовке процедуры аналогично параметру-значению, но только перед именем параметра записывается ключевое словоVar.

procedure MaxMin(A:MASS; Var Max,Min:real);

Здесь A - параметр-значение; Max, Min - параметры-переменные.

  • Вызов процедуры

Для вызова процедуры из основной программы или другой подпрограммы используется отдельный оператор следующего вида:

<имя процедуры>(<список фактических параметров>);

Требования к списку фактических параметров в процедуре предъявляются те же, что и в подпрограмме-функции.

Пример

Var N: integer;

S: real;

{Подпрограмма-процедура вычисления суммы ряда

1/3 + 1/5 + 1/7 + ... + 1/(2*I+1) }

procedure Summa(Kol:integer; Var Sum:real);

Var I:integer;

Begin

Sum:=0;

for I:=1 to Kol do

Sum:=Sum+1/(2*I+1)

end;

{Основная программа}

Begin

Readln(N);

Summa(N,S);{вызов процедуры}

Writeln(‘Сумма ряда =’, S)

end.