Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по информатике(ответы).docx
Скачиваний:
6
Добавлен:
20.09.2019
Размер:
93.57 Кб
Скачать

Передача данных через формальные параметры.

Формальные параметры могут быть трех разновидностей:

Параметры-значения, параметры - переменные, параметры - кон-

станты.

Параметры-значения описываются следующим образом:

имя(a,b:Тип1; c,d,e:Тип2; ...)

Для каждого формального параметра – значения транслятор внутри

подпрограммы резервирует дополнительные ячейки памяти в соответствии с

типом параметра. При вызове подпрограммы, происходит пересылка факти-

ческого параметра в эти ячейки памяти, после чего выполняется подпрограм-

ма. При этом значение ячейки, где находился сам фактический параметр, не

изменяется. Этот механизм обеспечивает, как, защищенность фактического

параметра, так и его универсальность, т.е. то, что фактическим параметром

может быть константа, переменная или арифметическое выражение.

Например:

Varx,u,zreal;

Function sqxy(x,y:real):real;

begin

if x<0 then x:=0;

if y<0 then y:=0;

Result:=sqrt(x)+sqrt(y);

end;

begin

...

x:=-0.5;

u:=4;

z:=sqxy(x,u);//вызовфункции

write(‘ x=’,x,‘ u=’,u,‘ z=’,z);

z:=sqxy(sin(u)+x,1.86);

...

end;

Здесь внутри функции ( х, у ) – формальные параметры, а в программе

( х, и ) и ( sin(u)+x, 1.86 ) фактические.

При работе данной программы будет напечатано

x= -0.5 u=4 z=2

хотя внутри подпрограммы будет вычислено х=0.

Недостатком формального параметра-значения является необходимость

дублирования ячеек памяти в вызывающей и в вызываемой программах, что в

65

случае, например, параметра-массива приводит к неоправданным затратам

памяти.

Параметры – константы описываются следующим образом:

имя(Consta,b:Тип1; Constc,d,e:Тип2; ...)

В этом случае фактическимпараметром может быть только имя пере-

менной. При вызове подпрограмм передается адрес ячейки переменной, в ко-

торой находится фактический параметр, и все действия производятся над

этой ячейкой. Поэтому после работы подпрограммы в ячейке фактического

параметра при необходимости будет находиться результат.

Например:

typevek = array[1..10] of integer;

procedure sab(n:byte; cоnsta,b:vek; var s:integer);

Var i:byte;

begin

s:=0;

for i:=1 to n do

s:=s+a[i]*b[i];

end;

...

Varx,y:vek;

sk:integer;

begin

Read(x,y);//вводмассивов

sab(5,x,y,sk);

Write(sk);

end;

В процедуре sab массивы a, b описаны как константы, а переменная s

описана как параметр-переменная. Это позволило для массивов x, y сэконо-

мить память, а через параметр-переменную s вывести результат. Ячейку, вы-

деляемую под параметр n, экономнее переслать саму, чем через её адрес, по-

этому для нее используется параметр-значение.

Локальные и глобальные идентификаторы

Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.

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

Основные правила работы с глобальными и локальными именами можно сформулировать так:

  • Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.

  • Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.

Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.

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

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

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

Билет №9 Понятие и основные характеристики массива. Описание и способы ввода массива в Паскаль-программе.

Понятие массива

Массив - это упорядоченный набор данных одного типа.

У массива есть имя и размерность (количество элементов в массиве).

Элемент массива представляет собой обычную переменную.

Описание массива

Массив описывается служебным словом Dim:

Dim A (n)-----Cоздаст массив на n элементов и присвоит ему имя А

...

Input A(3)----Запросит ввод третьего элемента массива А

1

2

3

4

5

------ Элементы

Чтобы описать массив с символьными элементами, надо к имени массива добавить "$":

DimSt$(10)---Массив на 10 переменных символьного типа.

Заполнение массива

Учитывая, что массив - это упорядоченный набор данных, то для его заполнения целесообразно использовать оператор цикла For.

Пример: заполнить массив на 5 элементов.

Dim A(5)

For i = 1 To 5

Input A(i)

Next i

Вместо № элемента массива можно использовать переменную, значение которой не будет выходить за границы массива. Также может использоваться математическое выражение, результатом которого является целое число, не выходящее за границы массива:

For i = -5 To -1

Input A(i+6)

Next i

За один раз можно описать несколько массивов разного типа и размера (их перечисляют через ","):

Dim A(5), St$(10)

Массивы бывают одномерные (вектор), двухмерные (матрица) или n-мерные.

Двухмерный массив.

Двухмерный массив в нашем представлении имеет вид таблицы (матрицы):

Линия I

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Линия J I-строка, J-столбец

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

Ввод данных в двухмерный массив происходит построчно:

For i = 1 To 3

For j = 1 To 5

Input A(i,j)

Next J

Next i

Массив, в котором количество столбцов равно количеству строк, называют квадратичной матрицей.

У квадратичной матрицы есть главная и побочная диагонали:

  • главная - с элемента (1,1) по (4,4)

  • побочная - с (1,4) по (4,1)

N - мерный массив заполняется как и двухмерный, но количество циклов разное.