Доступ к элементам массива
Выполнить операцию над массивом означает выполнить действия над элементами этого массива. Элементы массива называются также переменными с индексами. Получить доступ к каждому элементу-ячейке массива можно путём указания индекса в квадратных скобках. Например, 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
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|