Действия над массивами
Как правило, в задачах необходимо обрабатывать массивы - последовательности чисел разных размеров и типов. В этом случае используется доступ к каждому элементу описанного массива по его номеру (индексу), определяющему местоположение конкретного элемента в массиве. Это можно сделать, указав идентификатор ( имя ) массива и индекс элемента в квадратных скобках.
< Пример >:
Массив А[1..15] вещественный (это значит, что массив А-последовательность вещественных
чисел)
. . .
А[1]:=1,3; А[2]:=2,1; А[3]:= -1,5 . . . – элементы массива А
< Пример >:
Массив А [1..10] целый; (это значит, что массив А - последовательность из 10 целых чисел)
. . .
А[1]:=1; А[2]:=2; А[3]:=А[1]+А[2]; . . .(элементы массива А)
Понятно, что при работе с двумерным массивом указываются два индекса.
< Пример >:
массив А [1..10,1..5] целый; (матрица из 10 строк и 5 столбцов)
. . .
А[1,1]:=1; (Элемент равен 1, стоит в 1 строке, 1 столбце матрицы)
А[2,1]:=4; (Элемент равен 4, стоит во 2 строке, 1 столбце матрицы)
А[1,2]:=А[1,1]+А[2,1]; (Элемент равен 1+4=5, стоит в 1 строке, 2 столбце матрицы)
Индексированные элементы массивов могут использоваться, как простые переменные соответствующего типа: использоваться в условных и циклических конструкциях, входить в качестве параметров операторов ввода/вывода, им можно присваивать любые значения, соответствующие их типу.
ПОИСК ЭЛЕМЕНТОВ - реализуется сочетанием операторов цикла и условных, задающих условие поиска. Иногда вводятся дополнительные переменные для подсчета или суммирования нужных элементов или их значений. В некоторых задачах такие дополнительные переменные могут понадобиться для запоминания местоположения нужных элементов, т.е. значений их индексов.
Рассмотрим пример 7.
Найти сумму отрицательных элементов массива А=A1;A2;A3…AN и их местоположение.. (здесь 1,2,3,… - индексы, указывающие местоположение элемента в массиве А. N – количество элементов в массиве)
Нам нужна дополнительная переменная, в которой будем накапливать сумму отрицательных элементов массива – назовем ее S. Еще нужна переменная – назовем ее В - это будет массив, состоящий из порядковых номеров отрицательных элементов массива А. Количество элементов в массиве В считаем с помощью переменной J. Просмотром элементов массива А управляет переменная I.
Рассмотрим пример на произвольном массиве А=2; -3,4; 1; 2; -2; 1,5; 4,4; -3; 10,8; 6, т.е. 10 произвольных чисел (N=10). Если массив будет состоять из 100 или 1000 чисел, алгоритм решения будет такой же, как и для 10 чисел, поэтому для простоты и визуального просмотра исходного массива мы ограничимся 10 элементами массива.
Для ввода и вывода произвольной последовательности чисел необходимо организовывать цикл.
Запишем словесный алгоритм примера 7.
Присвоим переменной I начальное значение, т.е. I = 1
Ввести очередной элемент массива А, т.е. А[I], (для нашего массива A[1]=2)
Проверить все ли элементы массива А введены, т.е. I <N. Если “да”, то перейти к пункту 4, иначе перейти к пункту 5.
Увеличить значение переменной I, т.е. I=I+1. Перейти к пункту 2. (В пунктах 1- 4 мы записали алгоритм (цикл) поэлементного ввода нашего массива А). Теперь с помощью индекса I, опять же поэлементно, начнем просматривать наш массив.
Присвоим начальные значения переменным S и J, т.е. S=0; J=0 (мы еще ничего не вычисляли, содержимое переменных пусто. Вспомним, что в этих переменных должны в конце решения получить!)
Присвоим I=1 (организуем цикл проверки на отрицательность, начиная с первого элемента массива А)
Проверить А[I]<0?. Если “нет”, то переходим к пункту 9. Если “да”, то переход к пункту 8
Прибавляем этот элемент к значению переменной S, а индекс I элемента A[I] занесем в массив В, предварительно увеличив индекс J, т.е. S=S+A[I]; J=J+1; B[J] = I. (Все эти действия в блок-схеме можно записать в одном блоке)
Увеличить значение переменной I, т.е. I=I+1. (Подготовка просмотра следующего элемента массива А)
Проверить все ли элементы массива А просмотрели на отрицательность, т.е. если I <=N. то перейти к пункту 7, иначе перейти к пункту 11.
Вывести на печать значение переменных S, J.(В нашем примере S= -3,4+(-2)+(-3)= -8,4; J=3, т.к. количество отрицательных элементов в массиве равно 3)
Вывести массив В. В нашем примере он будет состоять из элементов 2;5;8, т.к. на 2-м, 5-м, 8-м местах стоят отрицательные элементы в массиве А. Значение переменной J будет равно 3.
Так как В - массив, то для его вывода организуем цикл аналогичный вводу нашего массива A, для этого можно вновь использовать переменную I, т.к. с массивом А работа закончена,
т.е. присвоим I=1
Вывести на печать В[I]
Проверить все ли элементы массива В просмотрены, т.е. если I<J, то перейти к пункту 14, иначе к пункту 16
Увеличить значение переменной I, т.е. I=I+1. Перейти к пункту 13
Закончить счет.
Графический алгоритм примера 7.
I=1
N=10
Цикл ввода элементов массива А
да
I=I+1
нет
S=0
J=0
I=1
нет
Цикл проверки элементов массива А на знак, вычисление суммы (S) отрицательных элементов массива А, формирование массива В из порядковых номеров отрицательных элементов в массиве А
да
да
нет
Вывод S,J
I=1
Цикл вывода элементов массива В
Вывод В[i]
да
I=I+1
нет
Конец
счета
Рассмотрим Пример 8
В произвольном массиве найти максимальный и минимальный элементы и поменять их местами.
Возьмем тот же массив из примера 7.
А=2; -3,4; 1; 2; -2; 1,5; 4,4; -3; 10,8; 6
Переменную под максимальный элемент назовем Мax, его местоположение в массиве запишем в переменную Nmax, переменную под минимальный элемент назовем Min, его местоположение в массиве запишем в переменную Nmin. (наименование этих переменных совершенно произвольно, мы такие берем для наглядности).
На процедуре ввода останавливаться не будем, это подробно рассмотрели в примере 7.
(перейдя к пункту 1, мы перейдём к поиску максимума нашего массива и найдём на каком месте он стоит в нашем массиве)
Мах=A[1], Nmax=1 (этими действиями мы присвоили переменной Max значение первого элемента из нашего массива равного 2, а переменной Nmax значение равное 1, т.е. значение места, на котором он стоит. Так оно и будет, если бы на первом месте в массиве стояло самое большое число).
I=2 (переменной I присвоим значение 2, таким образом мы подготовимся к просмотру элемента массива, стоящего на втором месте).
Если A[I] > Max, то переходим к пункту 4, иначе п.5
Max=A[I], а Nmax=I, (т.е. если очередной элемент оказался больше содержимого переменной Max, то значение этого элемента записываем в Max, а значение индекса I, указывающего на каком месте стоит этот элемент в переменную Nmax и после этого переходим к п.5. Если A[I] окажется меньше содержимого Max, то сразу переходим к подготовке просмотра следующего элемента массива – пункт 5)
Увеличим значение переменной I, т.е. I=I+1 (подготовим следующий элемент)
Все ли элементы массива А проверены?, т.е. если I < =N, то перейти к пункту 3, иначе перейти к пункту 7. ( с пункта 7 начнем поиск минимального элемента аналогично поиску максимального)
Мin=A[1], Nmin=1 (этими действиями мы присвоили переменной Min значение первого элемента из нашего массива равного 2, а переменной Nmin значение равное 1, т.е. значение места, на котором он стоит).
I=2 (переменной I присвоим значение 2, таким образом мы подготовимся к просмотру элемента массива, стоящего на втором месте).
Если A[I] < Min, то пункт 10, иначе п.11
Min=A[I], а Nmin=I (т.е. если очередной элемент оказался меньше содержимого переменной Min, то значение этого элемента записываем в Min, а значение индекса I, указывающего на каком месте стоит этот элемент в переменную Nmin и после этого переходим к п.11. Если A[I] окажется больше содержимого Min, то сразу переходим к пункту 11, т.е. подготовке просмотра следующего элемента массива)
Увеличим значение переменной I, т.е. I=I+1 (подготовим следующий элемент)
Все ли элементы массива А проверены?, т.е. если I < =N, то перейти к пункту 9, иначе перейти к пункту 13.
Мы нашли максимальный и минимальный элементы, нашли их местоположение в нашем массиве. Теперь в пункте 13 надо поменять местами элемент массива A[Nmax] с элементом A[Nmin]. Это задача о двух стаканах. Если у нас 2 стакана с разным содержимым и нам надо поменять содержимое, то придется взять третий стакан. Для роли третьего стакана возьмем переменную V.
V= A[Nmax]; A[Nmax]= A[Nmin]; A[Nmin]= A[Nmin]=V (Поменяли местами максимум и минимум).
Вывести на печать значение переменных Max, Nmax, Min, Nmin (В нашем примере Max=10,8; Nmax=9; Min= -3,4; Nmin=2)
Еще нам надо организовать цикл на вывод массива A, т.к. мы его видоизменили (меняли местами два элемента. На выходе будет массив А=2; 10,8; 1; 2; -2; 1,5; 4,4; -3,4; -3; 6 ).
Присвоим I=1
Вывести на печать А[I]
Проверить все ли элементы массива А просмотрены, т.е. если I<N, то перейти к пункту 18, иначе к пункту 19
Увеличить значение переменной I, т.е. I=I+1. Перейти к пункту 16
Окончание счета
Графический алгоритм примера 8.
I=1
N=10
I=I+1
Цикл ввода элементов массива A
I<N
да
нет
Мах=A[1], Nmax=1
I=2
Нахождение максимального элемента и его местоположения в массиве
нет
да
Max=A[I]
Nmax=I
I=I+1
да
нет
Мin=A[1], Nmin=1
I=2
нет
да
Min=A[I]
Nmin=I
Цикл поиска минимального элемента и его местонахождения в массиве
I=I+1
да
нет
V=A[Nmax]
A[Nmax]=A[Nmin]
A[Nmin]=V
Вывод Max, Nmax, Вывод Min, Nmin
I=1
Вывод A[I]
Цикл вывода элементов массива A
I=I+1
да
нет
Конец счета
ЗАДАНИЕ 1
Разработать словесный и графический алгоритм для двух функций при х[-2,2] с шагом 0,2
Вариант 1
Y=sin(x)e-2x , g=
Вариант 2
Y= (1+x2) /(1+2x2) , z=
Вариант 3
Y=(2+sin2(x)) /(1+x2) ,
X1 = ( |C1| + ) /2*|C| ;
C1 изменяется от -3 до 5 с шагом 1; С-произвольно
Вариант 4
Y=(1+cos(x))/(1+e2x),
G=
Вариант 5
Y=,z=
Вариант 6
Y=,
H = ( sin(R) + sin(B) + sin(L) ) / (R ^2 + ) ;
R изменяется от 0.5 до -0.77 с шагом -0.01;
L,B- произвольно
Вариант 7
Y=,g=
Вариант 8
Y=,z=
Вариант 9
Y=
Z = ( F + 1 ) * 3 - B^2 * ( X1 + 2 )^2 ;
F изменяется от 5 до -3 с шагом 0,1; x1,B-произвольно
Вариант 10
Y=,g=
Вариант 11
Y=sin(x)e-2x
G=
Вариант 12
Y= (1+x2) /(1+2x2) ,
X = tn(Z1)
y1,P1- задаются произвольно
z1 изменяется от -3 до -5 с шагом -1
Вариант 13
Y=,g=
Вариант 14
Y=(2+sin2(x)) /(1+x2) ,
z=
Вариант 15
Y= ,
H = ( sin(R) + sin(B) + sin(L) ) / (R ^2 + ) ;
R изменяется от 0.5 до -0.77 с шагом -0.01;
L,B- произвольно
Вариант 16
Y=(1+cos(x))/(1+e2x),
z=
Вариант 17
Y=,g=
Вариант 18
Y= (1+x2) /(1+2x2) ,
R = K1 * Z1^2 - B * Z2 / ( K - Z3 ) ;
В изменяется от 10 до 1 с шагом -1
z1,z2,z3,k,K1-произвольно
Вариант 19
Y=,
z=
Вариант 20
Y= (1+x2) /(1+2x2) , g=
Вариант 21
Y=,
L = ( X2 + K + B )^2 - B^3;
K изменяется от 1 до 10 с шагом 1
B,X2-произвольно
Вариант 22
g=
z=
Вариант 23
Y=, g=
Вариант 24
g=Z=
Вариант 25
Y=
F = ( L - Z1 - M - Z2 ) / L * M ;
z2 изменяется от 10 до 5 с шагом -1
m,L,Z1-произвольно
Вариант 26
Y=,
z = 15,28y+cos(lny+S^2) -
x изменяется от 0.5 до 0.77 с шагом 0.01
S,y-произвольно
Вариант 27
Y=(2+sin2(x)) /(1+x2) ,
X1 = ( B + √( B^2 - 4*B*C )) / C ;
B изменяется от -1 до -8 с шагом -1
C изменяется от 0,8 до 25 с шагом 5
Вариант 28
Y=,
Z = ( Z1 / M - Z2 * P ) / Z1 ;
M изменяется от 2 до -6 с шагом -1
p изменяется от 2 до 6 с шагом 2
Вариант 29
Y=,
B = ( X1 / X - P * X2 ) * X √( X1 - X2 ) ;
X изменяется от 2 до 6 с шагом 1
P изменяется от 2 до 6 с шагом 2
X1,X2-произвольные
Вариант 30
Y=(2+sin2(x)) /(1+x2) ,
P = ( M * Z1 - L * Z2 ) / 5.85 ;
M изменяется от 1 до 10 с шагом 1
L изменяется от 0.1 до 1 с шагом 0.2