![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Полная форма объявления одномерного массива
Описание типа задаётся следующим образом: TYPE <имя_типа> = ARRAY [ < нач_индекс..кон_индекс > ] OF <тип_данных>; VAR <Имя_массива> : < имя_типа >; Здесь <имя_типа> - правильный идентификатор; ARRAY, OF – зарезервированные слова (массив, из); [ < нач_индекс..кон_индекс > ] – список из одного или нескольких индексных типов, разделённых запятыми; <тип_данных> - базовый тип. Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов. В общем случае диапазон допустимых значений индекса задаётся любым конечным скалярным типом. Например, Type mass = array [1..5] of integer; Var R : Mass; Данный способ описания массива применяется при работе с подпрограммами: для передачи процедуре или функции параметров одного типа. Доступ к элементам массива Выполнить операцию над массивом означает выполнить действия над элементами этого массива. Элементы массива называются также переменными с индексами. Получить доступ к каждому элементу-ячейке массива можно путём указания индекса в квадратных скобках. Например, k := R[1] + R[5]; R[3] := 34; Здесь, в первом случае переменной k присваивается сумма значений элементов массива R с порядковыми номерами 1 и 5. Во втором примере элементу массива R с порядковым номером 3 присваивается значение 34. В качестве индекса может использоваться выражение, результатом которого является целое число. Например, R[2*I] – элементы массива с чётным индексом; R[2*I-1] – элементы массива с нечётным индексом. Все операции по формированию элементов массива, обработке массива, выводу на печать выполняются в цикле с параметром. В частности, для ввода и вывода числовых значений массива используются циклы: FOR I := 1 TO 10 DO READ (A[I]); FOR I := 1 TO 10 DO WRITE (A[I]); В операторах присваивания можно использовать не только элементы массивов, но и массивы в целом. Оператор вида A := B выглядит лаконичнее и выполняется быстрее цикла for i :=1 to n do A[i] := B[i]. Используя в операторах присваивания массивы, следует помнить, что такая конструкция приводит к копированию всего массива! Массивы в целом можно использовать в логических отношениях равенства (=) и неравенства (<>). Другие операции отношения применяются только к отдельным элементам массива. Элементы массива могут вводиться с клавиатуры или формироваться случайным образом. В последнем случае используется функция – генератор случайных чисел Random. Эта функция согласно определённому алгоритму при каждом обращении к ней возвращает случайное число – либо вещественное, из интервала [0..1], если аргумент отсутствует, либо целое, если задан целочисленный аргумент. Чтобы эта функция работала корректно, рекомендуется вначале её инициализировать, вызвав процедуру Randomize без параметров. Например, randomize; for i := 1 to 10 do R[i] := random; (из интервала [0..1]) или randomize; for i := 1 to 10 do R[i] := random(11); (из интервала [0..10]) Условия чётности и нечётности элемента массива: If R[i] mod 2 = 0 then … If odd (R[i]) then …или If odd (R[i]) = false then … If R[i] mod 2 <>0 then … If not odd (R[i]) then …или If odd (R[i]) = true then …
Задача 7.1.В массиве, состоящем из пяти элементов подсчитать количество положительных и отрицательных элементов. Положительные элементы записать в один одномерный массив, а отрицательные – в другой. Блок-схема алгоритма Листинг программы PROGRAM TASK1; USES CRT; CONST N = 50; VAR A, B, C : ARRAY [1..N] OF INTEGER; I, K, L : INTEGER; BEGIN CLRSCR; WRITE (‘Введите размерность массива <=50’); READLN (N); FOR I := 1 TO N DO READLN (A[I]); K := 0; L := 0; FOR I :=1 TO N DO BEGIN IF A[I] < 0 THEN BEGIN K := K + 1; B[K] := A[I]; END ELSE BEGIN L:= L + 1; C[L] := A[I]; END; END; WRITELN (‘Отрицательные элементы массива ’); FOR I := 1 TO K DO WRIETLN (B[I]); WRITELN (‘Положительные элементы массива’); FOR I := 1 TO L DO WRIETLN (C[I]); WRITELN (‘Кол-во отрицательных элементов ’); WRITELN (K); WRITELN (‘Кол-во положительных элементов ’); WRITELN (L); READLN; END. Задача 7.2.Найти максимальный элемент и значение индекса этого максимального элемента целочисленного одномерного массива, сформированного случайным образом. Примечание.Данная задача решается перебором всех элементов массива и сравнением их с «пробным» значением, избранным на роль максимального элемента. Если сравниваемый элемент при этом окажется больше по величине, он становиться «пробным» и все последующие значения сравниваются именно с ним. Алгоритм решения программы №1: 1. Сформировать случайный целочисленный массив R; 2. Присвоить вспомогательной переменной max значение первого элемента массива; 3. Для каждого элемента массива, начиная со второго и заканчивая последним, проверить выполнение условия max > R[i]. Если оно выполнено, то продолжать перебор, иначе присвоить max := R[i]и index = i и продолжать перебор.
Блок-схема алгоритма Листинг программы PROGRAM TASK2; USES CRT; CONST N = 100; VAR R : ARRAY [1..N] OF INTEGER; I, MAX, INDEX : INTEGER; BEGIN CLRSCR; RANDOMIZE; FOR I:=1 TO N DO R[I]:=random(11); MAX := R[1]; INDEX := 1; FOR I l= 2 TO N DO IF MAX < R[I] THEN BEGIN MAX := R[I]; INDEX := I; END; WRITELN (‘Значение ’, INDEX, ‘-го максимального элемента равно ’, R[INDEX]); WRITELN (‘Для завершения работы нажмите <Enter>’); READLN; END. Алгоритм решения программы №2: 1. Сформировать случайный целочисленный массив R; 2. Присвоить вспомогательной переменной index порядковый номер первого элемента массива, то есть 1; 3. Для каждого элемента массива, начиная со второго и заканчивая последним, проверить выполнение условия R[index] > R[i]. Если оно выполнено, то продолжать перебор, иначе присвоить index:=i и продолжать перебор. Листинг программы PROGRAM TASK2; USES CRT; CONST N = 100; VAR R : ARRAY [1..N] OF INTEGER; I, INDEX : INTEGER; BEGIN CLRSCR; RANDOMIZE; FOR I := 1 TO N DO R[I] := random (11)-5; INDEX := 1; FOR I= 2 TO N DO IF R[INDEX] < R[I] THEN INDEX := I; WRITELN (‘Значение ’, INDEX, ‘-го максимального элемента равно ’, R[INDEX]); WRITELN (‘Для завершения работы нажмите <Enter>’); READLN; END.
Блок-схема алгоритма Задача 7.3.Сформировать элементы массива случайным образом и вывести на экран в обратном порядке. Листинг программы USES CRT; VAR A : ARRAY [1..100] OF INTEGER; I : INTEGER; BEGIN CLRSCR; RANDOMIZE; WRITELN (‘Сформированный массив: ’); FOR I := 1 TO 100 DO BEGIN A[I] := RANDOM (11) - 6; {[-6..4]} WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2); END; READLN; {Enter} WRITELN (‘Изменённый массив: ’); FOR I := 100 DOWNTO 1 DO WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2); READLN; END. Задача 7.4.Сформировать массив случайным образом, состоящим из 1000 элементов, числа находятся в диапазоне от 150 до 250. Сосчитать количество чисел больших 200. Листинг программы USES CRT; VAR A : ARRAY [1..1000] OF INTEGER; I, K: INTEGER; BEGIN CLRSCR; RANDOMIZE; WRITELN (‘Сформированный массив:’); FOR I := 1 TO 1000 DO BEGIN A[I] := RANDOM (101) +150; {[150..250]} WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2); END; READLN; {Enter} K := 0; FOR I := 1 TO 1000 DO IF A[I] > 200 THEN K := K +1; WRITELN (‘Количество элементов >200 = ’, K:2); READLN; END. Вопросы для самопроверки 1. Дайте определение массива? 2. Как осуществляется объявление массива в разделе Var (1 способ)? 3. Каким образом можно объявить массив в разделе Var, если создан новый тип массива в разделе Type (2 способ)? 4. Что необходимо знать, чтобы обратиться к определённому элементу массива? 5. Объясните назначение 2-го способа объявления массива? 6. Как организовать ввод и вывод элементов массива? 7. Как можно реализовать формирование элементов массива случайным способом? Лабораторная работа №7_1
![]() |