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

Вопрос 24

Элементы массива размещаются в памяти в последовательных ячейках. Массив занимает количество байт, равное произведению количества элементов массива на размер одного элемента:

SizeOfArray = NumElement * SizeOfElement, где SizeOfArray – размер массива NumElement – количество элементов в массиве SizeOfElement – размер одного элемента.

Адрес первого (по порядку) элемента массива является адресом массива (будем обозначать

его AdrArray). Адрес i-го элемента массива (его будем обозначать AdrI) можно вычислить по

формуле:

AdrI = AdrArray + (i – нижняя_граница_индекса) * SizeOfElement

Для примера рассмотрим массив B, определенный выше. Нижняя граница индекса этого массива = 5. Первый (по порядку) элемент массива - B[5]. Пусть его адрес = 100. Размер каждого элемента 6 байт, поскольку тип элементов - Real.

Вычислим адреса остальных элементов массива

Adr6 = 100 + (6-5)*6 = 100 + 1*6 = 106                                                                                                                                                                                                                                                  

Adr7 = 100 + (7-5)*6 = 100 + 2*6 = 112

Adr8 = 100 + (8-5)*6 = 100 + 3*6 = 118

Графически покажем взаимное расположение элементов этого массива:

Адрес элемента

Элемент

100

B[5]

106

B[6]

112

B[7]

118

B[8]

Замечание: Один массив может занимать в памяти не более 65520 байт. Нельзя, например,  определить такой массив C:

Var C: array[1..50000] of integer; - каждый элемент этого массива занимает в памяти 2 байта, элементов 50000, значит весь массив занимает 100000 байт > 65520 байт.

Вопрос 25

Ввод массивов

  • Метод присваивания элементам массива определенных значений  с помощью оператора присваивания " : = ".

... begin a[1]:=25; a[2]:=-346; a[3]:=0; ... a[10]:=-938; ...

  • Прямое заполнение массива через ввод с клавиатуры используя функцию Read/Readln;

... begin repeat write('Введите количество элементов массива '); read(n); until (n>1) and (n<=max); for i:=1 to n do begin write('a[',i,'] '); readln(a[ i ]); end; ...

  • Заполнение массива посредством генератора случайных чисел;

begin a[1]:=2; a[2]:=3;{процедура инициализации ( раскачки) генератора случайных чисел} for i:=1 to 10 do begin a[ i ]:=random(19) {функция генерирующая случайное число то 0 до 18} ... end; ... Краткая информация об используемых функциях Randomize - инициализирует генератор случайных чисел случайными значениями  Random - возвращает случайное число в интервале  (0..Num-1). Чтобы получить значение отличное от предыдущего то необходимо задать смещение. Пример: необходим интервал [-50..50].  В этом случае длина интервала составляет 101, смещение для целых чисел будет записано как random(101)-50, для вещественных -random*101-50. Еще пример: необходим интервал [20..30].  В этом случае длина интервала составляет 11, смещение для целых чисел будет записано как random(11)+20, для вещественных -random*11+20.

  • Заполнение массива по определенному закону, т.е. с помощью формул;

Пусть очередной элемент массива буде равен разности квадратов двух предыдущих элементов - a[ i ]=sqr(a[ i-1]-sqr(a[ i-2]): ... begin a[1]:=2; a[2]:=3; {т.к. формула заполнения a[ i ]=sqr(a[ i-1]-sqr(a[ i-2]), то соответственно 1-й и 2-й элементы не будут иметь двух предыдущих элементов, поэтому они заполняются с помощью оператора присваивания} write(a[1],'  ',a[2],'  '); for i:=3 to 10 do begin a[ i ]:=sqr(a[ i-1]-sqr(a[ i-2]) {функция генерирующая случайное число то 0 до 18} ... end; ...

  • Заполнение  файлов (двоичный типизированный/ нетипизированный, текстовый).На примере заполнения типизированного файла

var a : file of integer; i: integer;        mas:array[1..15] of integer; n:=byte; begin assign(a,' file.bin '); {установка связи файловой переменной типа integer  с двоичным типизированным файлом ( типизированный потому, что  уже содержит элементы integer, т.е. тип данных  определен)} rewrite(a); {открытие файла посредством файловой переменной для записи} write('Введите количество элементов массива '); read(n); for i:=1  to n do begin  read(mas[ i ]); {вводим значения элементов в ячейки массива} write(a, mas[ i ]); {записываем значения элементов массива в файл} end; close(a); {обязательно закрываем файл после работы с ним} end.

  • Заполнение  матрицы ( двумерный массив).

Заполнение двумерного массива  производится  с помощью вложенного цикла. Например: внешний цикл перебирает строки, а вложенный  заполняет столбцы. ... begin read(m,n); for i:=1 to m do  for i:=1 to m do  read(a[ i ]); ...

Вывод массивов

  • Вывод одномерного массива

...

begin ... write (' Исходный массив '); for i:=1 to n do  write (a[ i ],'   '); ...

  • Вывод двумерного (матрицы) массива.

...

begin ... write (' Исходная  матрица '); for i:=1 to m do {перебор строк} begin for j:=1 to n do  write (a[ i , j ],'   '); {вывод элементов в столбцах} writeln;  {функция writeln  во внешнем цикле осуществляет переход  на новую строку} end; ...

  • Считывание данных из  файла в ячейки массива и вывод на экран (двоичный типизированный/ нетипизированный, текстовый).

На примере типизированного файла  var a : file of integer; i: integer;        mas:array[1..10] of integer; begin assign(a,' file.bin ');  reset(a); {открытие файла для чтения} for i:=1  to 15 do {считываем очередное значение элемента файла в ячейку  массива и выводим его на экран} begin read(a, mas[ i ]); write(mas[ i ],'  ');{вывод на экран} end; close(a); {обязательно закрываем файл после работы с ним} end.