- •Вопрос 1
- •Вопрос 2
- •Вопрос 3
- •Вопрос 4
- •Вопрос 5
- •Вопрос 6
- •Вопрос 8
- •Вопрос 9
- •Формальные свойства алгоритмов
- •Вопрос 10
- •Виды алгоритмов
- •Вопрос 12
- •Вопрос 13
- •3.2 Графический способ записи алгоритмов
- •Вопрос 14
- •Вопрос 15
- •Вопрос 16
- •Вопрос 20
- •Вопрос 21
- •Вопрос 62
- •Вопрос 22
- •Вопрос 23
- •Вопрос 24
- •Вопрос 25
- •Вопрос 26
- •Вопрос 27
- •Вопрос 28
- •Вопрос 29
- •Вопрос 30
- •Вопрос 31
- •Вопрос 32
- •Вопрос 33
- •Вопрос 34
- •Вопрос 35
- •Вопрос 37
- •Вопрос 39
- •Вопрос 40
- •Visual Basic. Типы данных в языке.
- •Вопрос 41
- •Вопрос 42
- •Вопрос 43
- •Вопрос 44
- •Вопрос 45 Математические функции
- •Функции преобразования данных
- •Функции даты и времени
- •Вопрос 46
- •Вопрос 47 Строковые функции
- •Вопрос 48
- •Visual Basic. Основные операторы.
- •Вопрос 49
- •Вопрос 50
- •Вопрос 51
- •Вопрос 52
- •Вопрос 53
- •Вопрос 54
- •Вопрос 55
- •Вопрос 57
- •Вопрос 59
- •Вопрос 60
- •Вопрос 61
- •Вопрос 62
- •Вопрос 63
- •1) Функция uBound служит для определения верхней границы (индекса самого последнего элемента) массива по заданному измерению.
- •2) Функция lBound (Lower Bound) служит для определения нижней границы (индекса самого первого элемента) массива по заданному измерению.
- •3) IsArray Служит для проверки, является ли переменная массивом. Применение функции IsArray особенно полезно для переменных типа Variant, содержащих массивы.
- •4) Функция Array служит для обработки массивов.
- •Вопрос 64
- •Характерные ошибки программирования
Вопрос 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.