Одномерные массивы. Двумерные массивы

advertisement
Одномерные и двумерные
массивы
78
6
82
67
55
44
1
4
7
3
6
2
-5
0
15 10
8
9
11 12 20
В помощь сдающему ЕГЭ
34
Одномерный массив объединяет под одним именем фиксированное
количество элементов одного типа данных.
Каждый элемент массива имеет собственный номер.
Описание массива определяет имя, размер массива и тип элементов.
Var X:array[1..7] of integer; Y:array [1..10] of real;
1
2
3
78
6
82
4
5
6
67
55
44
7
34
X[1]=78, X[2]=6, X[3]=82, X[4]=67, X[5]=55, X[6]=44, X[7]=34
Задание с клавиатуры
For i:=1 to 10 do
Begin
Write ('A[',i,']='); Readln(A[i]);
End;
Задание типизированной константой
Const A: array [1..5] of integer = (5,6,2,0,-4);
С помощью генератора случайных чисел
For i:=1 to 20 do A[i]:= random(50);
Задание с помощью формулы
For i:=1 to 20 do A[i]:= i;
Чтение данных из файла
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
… … … … … … … …
close(input);
close(output);
Двумерный массив (матрица, таблица) объединяет под одним
именем фиксированное количество элементов одного типа данных.
Каждый элемент в двумерном массиве определяется номером
строки и номером столбца, на пересечении которых он находится.
Описание массива определяет имя, размер массива и тип элементов.
Var A: array [1..5,1..5] of integer; B: array [1..10,1..10] of real;
a11 a12 a13 a14 a15
1
4
7
3
a21 a22 a23 a24 a25
2
-5
0
15 10
a31 a32 a33 a34 a35
8
9
11 12 20
6
A[1,1]=1,
A[1,2]=4,…
A[2,2]=-5,…
A[3,2]=9,…
A[3,5]=20
Задание массива с клавиатуры
For i:=1 to n do
For j:=1 to m do
Begin
Write (‘A[‘,i,’,’,j,’]=‘); Readln (A[i,j]);
End;
Задание типизированной константой
Const A:array[1..2,1..2] of integer=((5,6),(2,0));
Задание с помощью генератора случ-х чисел
For i:=1 to n do
For j:=1 to m do A[i,j]:= random(50);
Формирование массива с помощью формулы
For i:=1 to n do
For j:=1 to m do A[i]:= i;
Чтение данных из файла input.txt
и запись в файл output.txt
assign (input,'input.txt');
assign (output,'output.txt');
reset (input);
rewrite (output);
… … … … … … … …
close (input);
close (output);
Вывод двумерного массива
For i:=1 to n do
begin
Writeln;
For j:=1 to m do
Write (A[i,j]:2,' ');
end;
Типовые операции
над массивами:
Вычисление значений
Поиск элементов
ОПЕРАЦИИ
Перестановка элементов массива
Копирование массивов
Сортировка массива
Типовые операции
над массивами:
Вычисление значений
Найти сумму и произведение элементов массива, состоящего
из 10 элементов
Program massiv;
Const A: array [1..10] of integer = (1, 0, -1, 0, 6, 2, 0, 4, 8, -7);
Var i, s: integer; p: longint;
BEGIN
s:=0;
p:=1;
For i:=1 to 10 do
begin
s:=s + A[i];
p:=p*A[i];
end;
Writeln (‘Сумма элементов =‘, s);
Writeln (‘Произведение элементов =‘, p);
END.
Размерность
массива
n=10
Исходный массив
1 0 -1 0 6 2 0 4 8 -7
Результат
Сумма элементов = 13
Произведение элементов =2688
Найти сумму всех отрицательных элементов массива, состоящего из
10 элементов
Program massiv;
Const A: array [1..10] of integer = (1, 0, -1, 0, 6, 2, 0, 9, 8, -7);
Var i, s: integer;
BEGIN
s:=0;
For i:=1 to 10 do if A[i]<0 then s:=s + A[i];
If s=0 then Writeln (‘отрицательных элементов нет‘)
else Writeln (‘Сумма отр-х элементов =‘, s);
END.
Размерность
массива
Исходный массив
n=10
1 0 -1 0 6 2 0 9 8 -7
Результат
Сумма отр-х элементов = -8
В двумерном массиве, элементами которого являются целые числа,
подсчитать сумму элементов с k1 строки по k2.
Program d2;
Var A: array[1..10,1..10] of integer;
i, j, k1, k2, s, m, n : integer;
Begin
Writeln (‘Введите размерность массива');
Readln (n, m);
{Ввод массива}
S:=0;
Writeln (k1,k2); ReadLn (k1,k2);
If (k1>k2) or (k2>n) then Writeln ('ошибка') else
Begin
For i:=k1 to k2 do
For j:=1 to m do S:=S+A[i,j];
Write ('S=', S);
End;
End.
Пусть n=4, m=4
k1=2, k2=3
Исходный массив
5
4
3
1
8
7
8
9
0
3
3
8
Результат
S=32
1
1
3
4
В матрице A размерностью 4*4 найти сумму ее положительных элементов,
произведение элементов, значения которых попадают в интервал [2, 5], а
также отношение этих двух величин.
Program massiv;
Var A: array [1..4,1..4] of integer; i, j, s: integer;
BEGIN
{Ввод массива}
s:=0; p:=1;
For i:=1 to 4 do
For j:=1 to 4 do
begin
If A[i,j]>0 then s:=s+A[i,j];
If (A[i,j]>=2) and (A[i,j]<=5) then p:=p*A[i,j];
end;
Writeln ('Сумма=',s:6:2);
Writeln ('Произведение=',p:6:2);
If p=0 then Writeln ('Отношение вычислить нельзя')
else Writeln ('Отношение=',s/p:6:3)
END.
4x4
Исходный массив
5
4
0
1
-8
-7
-8
-9
0
3
3
2
1
1
0
0
Результат
Сумма=20
Произведение=360
Отношение=0.055
Задача. Найти скалярное произведение двух массивов. Скалярным
произведением двух массивов одинаковой размерности называется сумма
произведений соответствующих элементов (a[1]*b[1] +a[2]*b[2]+...+ a[n]*b[n]).
Program mm;
Var A, B: array[1..5] of integer;
n, I, s: integer;
BEGIN
S:=0;
For i:=1 to n do
Begin
Write ('A[',i,']='); Readln (A[i]);
End;
For i:=1 to n do
Begin
Write (‘B[',i,']='); Readln(B[i]);
End;
For i:=1 to n do S:= S+A[i]*B[i];
Writeln(‘вывод результата');
WriteLn (S);
END.
Исходный массив
A:5 2 3 5 4
B: 1 5 5 4 0
Результат:
50
В одномерном массиве,
элементами которого являются
целые числа, подсчитать сумму
элементов, кратных 9.
Начало
ввод
n,
А[1..n
]
s:=0
i:=1, n
нет
A[i] mod
9=0
да
s:=s+A[i]
Program mass2;
Var A:array[1..100] of integer;
n, i, S: integer;
Begin
s:=0;
Write ('число элементов массива =');
Readln (n);
Randomize;
For i:=1 to 20 do
begin
A[i]:= random(50);
Write (A[i]:4);
end;
For i:=1 to n do
If A[i] mod 9=0 then s:=s+A[i];
Writeln; Writeln ('s=',s);
End.
s
Размерность
массива
Исходный массив
Результат
Конец
n=8
0 9 18 7 -6 5 -4 9
s=36
Дан целочисленный массив из 18 элементов. Элементы могут принимать
значения от 0 до 100 – баллы, полученные на ЕГЭ. Составьте программу,
которая подсчитывает и выводит средний балл учащихся, сдавших экзамен
(получивших оценку более 20 баллов). Гарантируется, что хотя бы один
ученик в классе успешно сдал экзамен.
Исходный массив
10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55
Program Srball;
Const N = 20;
Var A: array[1..N] of integer;
i, x, y: integer;
S: real;
Begin
{Ввод массива}
x:=0; y:=0;
For i:= 1 to N do
If A[i]>20 then
begin
x:= x+1; y:= y+A[i];
end;
S:= y/x;
Writeln('Sredniy ball=',S:4:1);
End.
Размерность массива
N=18
Результат
Sredniy ball=50.0
В двумерном массиве, элементами которого являются целые числа,
подсчитать среднее арифметическое четных элементов массива.
Program mass2;
Var A: array [1..10 , 1..10] of integer;
i, j, s, n, m, k: integer; sr: real;
BEGIN
S:=0; k:=0;
Writeln (‘введите размерность массива');
Readln (n,m);
{Ввод массива}
For i:=1 to n do
For j:=1 to m do
If A[i,j] mod 2=0 then
Begin
S:=S+A[i,j];
k:=k+1;
End;
Sr:=s/k;
Writeln(‘Сред. ариф. чёт. эл. =', sr:4:1);
END.
Пусть размерность
массива
5x5
Исходный массив
51 22 34 58 91
13 6 19 34 26
20 15 25 33 85
56 3 44 35 16
65 27 85 15 34
Результат
Сред. ариф. чёт. эл.=31.8
В данном одномерном массиве, элементами которого являются целые числа,
подсчитать среднее арифметическое отрицательных элементов.
Исходный массив
-10 57 51 68 74 -27 31 2 5 50 100 12 13 -23 21 29 45 55 10 10
Program A1;
Var A:array[1..100] of integer; k, n, i: integer; s: real;
Begin
Write ('число элементов массива ='); Readln (n);
k:=0; s:=0;
For i:=1 to n do
Begin
Write ('A[',i,']=');
Readln (A[i]);
If A[i]<0 then
Begin
k:=k+1;
s:=s+A[i];
End;
End;
If k=0 then writeln ('отрицательных элементов нет') else
Begin
s:=s/k;
Writeln ('s=',s:8:1);
End;
End.
Пусть размерность
массива
N=20
Результат
-20.0
В данном одномерном массиве, элементами которого являются целые числа,
подсчитать среднее арифметическое элементов, попадающих в интервал [1, 25].
Количество элементов массива ввести с клавиатуры.
Исходный массив
10 57 51 68 74 27 31 5 5 50 100 12 13 23 22 9 45 55 10 10
Program A2;
Var A:array[1..100] of integer; k, n, i: integer; s: real;
Begin
Write ('число элементов массива ='); Readln (n);
k:=0; s:=0;
For i:=1 to n do
Begin
Write ('A[',i,']=');
Readln(a[i]);
If (A[i]>=1) and (A[i]<=25) then
Begin
k:=k+1;
s:=s+A[i];
End;
End;
If k=0 then Writeln ('элементов нет') else
Begin
s:=s/k;
Writeln ('s=', s:6:1);
End;
End.
Пусть размерность
массива
N=20
Результат
10.0
У квадратной матрицы есть замечательные свойства:
1. Индексы элементов, лежащих на главной диагонали равны, т.е. i = j.
2. Первый индекс всех элементов выше главной диагонали меньше второго,
т.е. i < j.
3. Первый индекс всех элементов ниже главной диагонали больше второго,
т.е. i > j.
a11
a22
a33
a44
ann
Дана квадратная матрица, элементами которой являются вещественные
числа. Подсчитать сумму элементов главной диагонали.
Program diag1;
Var A:array [1..10,1..10] of real;
i, j, n: integer; s: real;
BEGIN
S:=0;
Writeln (‘введите размерность массива');
Readln (n);
{Ввод массива}
For i:=1 to n do
For j:=1 to n do
If i=j then S:=S+A[i,j];
Writeln('S=',S:4:1);
END.
Пусть размерность
массива
n=4
Исходный массив
0.5
-5.4
-9.3
7.1
8
7
8
9
0
-3
3
8
Результат
S=16.9
9.1
-2.1
-8.3
6.4
1. Для элементов побочной диагонали сумма первого и второго индексов равна
«нарощенному» на единицу порядку матрицы, т.е. i + j = n+1.
2. Для элементов, находящихся над побочной диагональю: i+j<n+1
3. Для элементов, находящихся
под побочной диагональю: i+j>n+1
a1n
a24
a33
a42
an1
Дана квадратная матрица, элементами которой являются вещественные
числа. Подсчитать сумму элементов, находящихся выше побочной
диагонали.
Program diag2;
Var A:array [1..10,1..10] of real;
i, j, n: integer; s: real;
BEGIN
S:=0;
Writeln (‘введите размерность массива');
Readln (n);
{Ввод массива}
For i:=1 to n do
For j:=1 to n do
If i+j<n+1 then S:=S+A[i,j];
Writeln ('S=',S:4:1);
END.
Пусть размерность
массива
n=4
Исходный массив
0.5
-5.4
-9.5
7.1
8
7
8
9
0
-3
3
8
Результат
S=0.6
9.1
-2.1
-8.3
6.4
1. Для элементов над пересечением диагоналей должны одновременно выполняться
два неравенства: i+j<n+1 и i<j;
2. Для элементов под пересечением диагоналей должны одновременно выполняться
два неравенства: i+j>n+1 и i>j;
i+j<n+1 и i<j
a1n
a24
i+j<n+1 и i>j
a33
i+j>n+1 и i<j
a42
an1
i+j>n+1 и i>j
Дана квадратная матрица, элементами которой являются целые числа.
Подсчитать сумму элементов, находящихся над и под пересечением диагоналей .
Program diag3;
Var A:array [1..10,1..10] of integer; i, j, n, s: integer;
BEGIN
S:=0;
Writeln (‘введите размерность массива');
Readln (n);
Randomize;
For i:=1 to n do
begin
Writeln;
For j:=1 to n do
begin
A[i,j]:=random(10); Write (A[i,j]:2,' ');
end;
end;
For i:=1 to n do
For j:=1 to n do
If (i+j<n+1) and (i<j) then
If (i+j>n+1) and (i>j) then S:=S+A[i,j];
Writeln('S=',S:4);
END.
Пусть размерность
массива
n=5
Исходный массив
i+j<n+1 и i<j
6
4
1
5
8
8
7
8
9
7
0
3
3
8
0
5
2
8
6
5
5
0
8
6
4
i+j>n+1 и i>j
Результат
S=36
Типовые операции
над массивами:
Поиск элементов
Задача.
Найти в массиве максимальный элемент.
Найти наибольший элемент одномерного массива
Program mass2;
Var A: array [1..100] of integer;
i, max, n: integer;
Begin
Writeln (’введите число элементов массива ’);
Readln (n);
For i:=1 to n do
begin
Write (’A[’, i , ’]=’);
Readln (A[i]);
end;
max:=A[1];
For i:=2 to n do if A[i]>max then max:=A[i];
Writeln (’ max =’, max);
End.
Пусть размерность
массива
n=5
Исходный массив
10 1 2 6 99
Результат
max = 99
Дан двумерный массив, элементами которого являются целые числа.
Найти значение максимального элемента массива.
Program massiv;
Var A:array [1..10,1..10] of integer;
i, j, max, n, m: integer;
BEGIN
Writeln (‘введите размерность массива');
Readln (n,m);
{Ввод массива}
max:=A[1,1];
For i:=1 to 5 do
For j:=1 to 5 do
If A[i,j]>max then max:=A[i,j];
Writeln('max=', max);
END.
Пусть размерность
массива
5x5
Исходный массив
51 22 34 58 91
13 90 19 34 24
14 15 25 34 85
56 3 45 35 16
64 27 85 18 34
Результат
max=91
Найти наименьший элемент одномерного массива
Program mass2;
Var A: array [1..100] of integer;
i, min, n: integer;
Begin
Writeln (’введите число элементов массива ’);
Readln (n);
For i:=1 to n do
begin
Write (’A[’, i , ’]=’);
Readln (A[i]);
end;
min:=A[1];
For i:=2 to n do if A[i]<min then min:=A[i];
Writeln (’ min =’, min);
Readln;
End.
Пусть размерность
массива
n=5
Исходный массив
10 1
2
6
Результат
min = 1
99
В двумерном массиве, элементами которого являются целые числа,
вычислить сумму максимальных элементов из каждой строки, если
предполагается, что в каждой строке такой элемент единственный.
Program MAX1;
Var A:array [1..10,1..10] of integer;
S, i, j, max, n, m: integer;
BEGIN
Writeln (‘введите размерность массива');
Readln (n,m);
{Ввод массива}
S:=0;
For i:=1 to n do
begin
max:=A[i,1];
For j:=1 to m do
If A[i,j]>max then max:=A[i,j];
S:=S+max;
end;
Writeln('S=',S);
END.
Пусть размерность
массива
n=4, m=4
Исходный массив
0 8 0 9
-5 7 -3 -2
-9 -8 3 -8
7 9 8 6
Результат
S=28
В двумерном массиве, элементами которого являются целые числа,
подсчитать количество элементов равных минимальному.
Program d5;
Var A:array [1..10,1..10] of integer;
n, m, i, j, k, min: integer;
BEGIN
Writeln ('Введите размерность массива');
Readln (n,m);
{Ввод массива}
k:=0;
min:=A[1,1];
For i:=1 to n do
For j:=1 to m do
If A[i,j]<min then min:=A[i,j];
For i:=1 to n do
For j:=1 to m do
If min=A[i,j] then k:=k+1;
Write (‘Число эл-в равных мин.=', k);
END.
Пусть размерность
массива
5x5
Исходный массив
51 22 34 58 0
13 0 19 34 26
20 15 25 33 85
56 3 0 0 0
65 27 85 15 34
Результат
Число эл-в
равных мин.=5
Опишите алгоритм подсчета числа элементов, равных максимальному,
в числовом массиве из 20 элементов.
Исходный массив
10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55 100 100
Program maksi2;
Var A:array[1..20] of integer;
k, i, max: integer;
BEGIN
Размерность
массива
N=20
{Ввод массива}
k:=1; max:=A[1];
For i:=2 to 20 do
Begin
If A[i]=max then k:=k+1;
If A[i]>max then
begin
max:=A[i]; k:=1;
end;
End;
Writeln (k);
END.
Результат
3
Дан двумерный массив целых положительных чисел размером 5 на 5.
Найти сумму элементов строки, в которой расположен элемент с
максимальным значением. Вывести значение суммы на печать, если
предполагается, что такой элемент единственный.
Program mas32;
Const n:=5;
Var A:array[1..n,1..n] of integer;
max, s, imax, i, j: integer;
BEGIN
{Ввод массива}
max:=A[1,1]; S:=0; imax:=1;
For i:=1 to n do
For j:=1 to n do
If A[i,j]>max then
begin
max:=A[i,j]; imax:=i;
end;
For j:=1 to n do S:=S+A[imax,j];
Writeln ('S=',S);
End.
Размерность массива
5х5
Исходный массив
5
4
3
1
6
8
7
8
9
4
0
3
3
8
1
1
1
3
4
5
Результат
S=30
0
3
3
8
0
Опишите алгоритм подсчета максимального количества подряд идущих
совпадающих элементов в целочисленном массиве длины 25.
Исходный массив
10 50 8 8 50 6 41 40 2 50 7 5 5 5 5 5 5 29 45 55 3 2 2 2 3
Program sovpad;
Var A: array[1..25] of integer;
k, k1, i: integer;
BEGIN
k1:=1; k:=1;
For i:=1 to 25 do
begin
Write ('A[',i,']=');
Readln (A[i]);
end;
For i:=2 to 25 do
begin
If a[i] = a[i-1] then k:=k+1 else k:=1;
If k > k1 then k1:=k;
end;
Writeln (‘max кол-во совп. элем. =',k1);
END.
Размерность
массива
N=25
Результат
max кол-во совп. элем. =6
Найдите номер первого из двух последовательных элементов в
целочисленном массиве из 25 элементов, сумма которых максимальна (если
таких пар несколько, то можно выбрать любую из них).
Исходный массив
10 50 8 8 50 6 41 40 2 50 7 5 5 5 5 5 5 29 45 55 3 2 2 2 3
Program mas;
Сonst n=25;
Var A:array[1..n] of integer;
i, i1, s: integer;
BEGIN
For i:=1 to n do Readln (A[i]);
i1:=1;
S:=A[1]+A[2];
For i:=2 to n-1 do
If A[i]+A[i+1]> S then
begin
i1:=i;
s:=A[i]+A[i+1];
end;
Writeln(i1);
End.
Размерность
массива
N=25
Результат
19
Дан прямоугольный массив целых полож-х чисел 4х5. Опишите алгоритм
поиска строки с наименьшей суммой элементов. Вывести на печать номер
строки и сумму ее элементов. Предполагается, что такая строка единственна.
Program minsum;
Const n=4 ; m=5;
Var A:array [1..n,1..m] of integer;
min, sum, imin, i, j: integer;
BEGIN
{Ввод массива}
Sum:=0;
For j:=1 to m do sum:=sum+A[1,j];
Min:=sum; imin:=1;
For i:=2 to n do
Begin
Sum:=0;
For j:=1 to m do sum:=sum+A[i,j];
If sum<min then
Begin
min:=sum;
imin:=i;
End;
End;
Writeln (‘№ строки=', imin, ‘, sum=', min);
END.
Размерность массива
4х5
Исходный массив
5
1
3
6
0
4
5
4
8
0
0
1
1
2
7
5
0
3
8
0
Результат
№ строки=2, sum=10
Найти количество положительных и отрицательных элементов в массиве
в числовом массиве из 20 элементов.
Исходный массив
10 50 50 68 74 26 32 2 5 50 -10 12 13 20 21 29 45 55 -90 -60
Program d4;
Const n=20;
Var A:array [1..n] of integer;
i, k1, k2: integer;
Begin
For i:=1 to n do
Begin
Write('A[',i,']='); Readln (A[i]);
End;
k1 :=0; k2 :=0;
For i := 1 to n do
if A[i] > 0 then Inc(k1)
else
if A[i] < 0 then Inc(k2);
Writeln(k1:5, ‘ , ‘,k2:5);
End.
Размерность
массива
N=20
Результат
17, 3
Дан одномерный массив. состоящий из 10 элементов. Составить
программу определения количества элементов массива, значение
которых меньше заданного действительного числа t.
Program mas3;
n=10, t=5.5
Var A: array [1..10] of real;
i,k: integer; t: real;
BEGIN
Write ('Введите число t=');
Исходный массив
Readln (t);
k:=0;
For i:=1 to 10 do
1 0.5 -1 0 6 2 0 9 8 -7
begin
Write ('Введите значение элемента A(', i, ') = ');
Readln (A[i]);
Результат
If A[i]<t then k:=k+1
end;
Writeln ('Ответ: Количество элементов, меньших
K=7
заданного числа‘,t:3:1);
Writeln('k=', k);
END.
В данном одномерном массиве, состоящем из 8
элементов, заменить отрицательные элементы
на противоположные по знаку. Элементами
массива являются целые числа.
Начало
Program mass1;
Var A:array [1..8] of integer;
i: integer;
Begin
For i:=1 to 8 do
Begin
Write ('A[',i,']='); Readln (A[i]);
End;
For i:=1 to 8 do if A[i]<0 then A[i]:=-A[i];
For i:=1 to 8 do write (A[i]:5);
End.
Исходный массив
0 9 -8 7 -6 5 -4 3
Изменённый массив
0 9 8 7 6 5 4 3
ввод
А[1..8]
i:=1, 8
нет
A[i]<0
да
A[i]:=-A[i]
вывод
А[1..8]
Конец
Найти и вывести на экран номера четных элементов в числовом массиве из 20
элементов.
Исходный массив
10 57 51 68 74 27 31 2 5 50 100 12 13 21 21 29 45 55 100 100
Program d3;
Var A:array [1..20] of integer;
i, n: integer;
Begin
For i:=1 to 20 do
Begin
Write ('A[',i,']='); Readln (A[i]);
End;
For i:=1 to n do if A[i] mod 2 =0 then Write(i:5);
End.
Размерность
массива
N=20
Результат
1 4 5 8 10 11 12 19 20
В данном одномерном массиве, состоящем из 8
элементов, заменить нулями все
отрицательные элементы.
Элементами массива являются целые числа.
Начало
Program mass1;
Var A:array [1..8] of integer;
i: integer;
Begin
For i:=1 to 8 do
Begin
Write ('A[',i,']='); Readln (A[i]);
End;
For i:=1 to 8 do if A[i]<0 then A[i]:=0;
For i:=1 to 8 do write (A[i]:5);
End.
Исходный массив
0 9 -8 7 -6 5 -4 3
Изменённый массив
0 9 0 7 0 5 0 3
ввод
А[1..8
]
i:=1, 8
нет
A[i]<
0
да
A[i]:=0
вывод
А[1..8
]
Конец
Как переставить элементы?
Задача.
Поменять местами содержимое двух чашек.
Нужна 3-я чашка,
чтобы в нее перелить содержимое первой.
В данном одномерном массиве, элементами которого являются целые числа,
поменять местами первый минимальный и последний максимальный элементы.
Число элементов массива запрашивается с клавиатуры.
Program d3;
Var a:array[1..100] of integer;
nmin,nmax,min,max,n,i:integer;
Begin
Write ('число элементов массива =');
Readln(n);
For i:=1 to n do
Begin
Write ('A[',i,']='); Readln(A[i]);
End;
min:=a[1]; nmin:=1;
max:=a[1]; nmax:=1;
Размерность
массива
n=5
Исходный массив
10 1
1
6
99
For i:=2 to n do If A[i]>=max then
Begin
max:=A[i]; nmax:=i;
End;
For i:=2 to n do If A[i]<min then
Begin
min:=A[i]; nmin:=i;
End;
A[nmin]:=max; A[nmax]:=min;
Write ('Готовый массив: ');
For i:=1 to n do write (A[i],'; ' );
End.
Изменённый
10 99 1 6
1
Типовые операции
над массивами:
Копирование массивов
Дана прямоугольная матрица, элементами которой являются целые числа.
Для каждого столбца подсчитать среднее арифметическое его нечетных
элементов и записать полученные данные в новый массив
Program mmm2;
Var A:array[1..5,1..5]of integer;
B:array[1..5] of real; k, n, m, i , j: integer; s: real;
BEGIN
Writeln ('Введите размерность массива А');
Readln (n,m);
{Ввод двумерного массива А}
For j:=1 to m do
begin
s:=0; k:=0; B[j]:=0;
For i:=1 to n do
If A[i,j] mod 2<>0 then
begin
s:=s+A[i,j]; k:=k+1;
end;
If k<>0 then B[j]:=s/k ;
end;
For j:=1 to m do Write (B[j]:5:1,’ ‘);
END.
Пусть размерность
массива A :
5x5
Исходный массив A
51 22
13 0
20 15
56 3
50 44
34 58
11 34
35 43
0 1
32 22
0
26
85
0
11
Тогда размерность
массива В:
5
Результат
32.0 9.0 23.0 22.0 48.0
Дан двумерный массив А и одномерный массив B
соответствующих размерностей.
Нечетные строки массива А заменить элементами
массива B.
Program mmm2;
Var A:array[1..5,1..5]of integer; B:array [1..5] of integer;
n, m, i, j: integer;
BEGIN
Writeln ('Введите размерность массива А');
Readln (n,m);
Writeln ('Введите элементы массива А');
{Ввод двумерного массива А}
Writeln('Введите элементы массива В');
{Ввод одномерного массива В}
For i:=1 to n do
For j:=1 to m do
If i mod 2<>0 then A[i,j]:=B[j];
Writeln (Вывод изменённого массива');
For i:=1 to n do
begin
For j:=1 to m do Write(A[i,j]:5);
Writeln;
end;
END.
Пусть размерность
массива A :
4x5
Исходный массив A
51 22 34 58 0
13 0 19 34 26
20 15 25 33 85
56 3 0 0 0
Тогда размерность
массива В:
5
Исходный массив В
55 44 33 22 11
Результат
55 44 33 22 11
13 0 19 34 26
55 44 33 22 11
56 3 0 0 0
Дана прямоугольная матрица 5 на 5, элементами которой являются целые
числа. Для каждого столбца подсчитать сумму элементов кратных 7 и
полученные данные записать в новый массив.
Program mm;
Var A:array[1..5,1..5] of integer;
B:array[1..5] of integer;
i, j, s: integer;
BEGIN
{Ввод двумерного массива А }
For j:=1 to 5 do
begin
s:=0; B[j]:=0;
For i:=1 to 5 do
If A[i,j] mod 7=0 then s:=s+A[i,j];
B[j]:=s;
end;
Writeln(‘вывод результата');
For j:=1 to 5 do WriteLn (’B[’, j , ’]=’, B[j]:4);
END.
Размерность
массива А
5x5
Исходный массив
51 22 34 58 49
13 90 19 34 21
14 15 25 34 80
56 3 35 35 16
64 25 85 14 34
Результат: массив В
70 0 35 49 70
Типовые операции
над массивами:
Сортировка массива
Сортировка массива
Сортировка – это расстановка
элементов массива в заданном
порядке
(по
возрастанию,
убыванию, последней цифре, …).
метод
«пузырька»
метод
выбора
«пузырек воздуха в стакане воды
поднимается со дна вверх»
найти миним. элемент и поставить
на первое место
Метод пузырька
1-ый проход
5
5
5
1
2
2
1
5
1
1
2
2
3
3
3
3
Идея – пузырек воздуха в стакане
воды поднимается со дна вверх.
Для массивов – самый маленький
(«легкий» элемент перемещается
вверх «всплывает»).
2-ой проход
1
1
1
5
5
2
2
2
5
3
3
3
• Начиная снизу, сравниваем два
соседних элемента; если они стоят
«неправильно», меняем их местами;
• За 1 проход по массиву один элемент
(самый маленький) становится на
свое место;
3-ий проход
1
1
2
2
5
3
3
5
Для сортировки массива из N элементов
нужен N-1 проход (достаточно поставить на
свои места N-1 элементов).
СОРТИРОВКА МАССИВА МЕТОДОМ ПУЗЫРЬКА
Program Sorti1;
Const n=10;
Var A:array[1..n] of integer;
i, c, j: integer;
BEGIN
{Ввод массива}
For i:=1 to n-1 do
begin
For j:=n-1 downto i do
If A[j]>A[j+1] then
begin
c:=A[j];
A[j]:=A[j+1];
A[j+1]:=c;
end;
end;
For i:=1 to n do Write(A[i]:4);
END.
Размерность массива
n=10
Исходный массив
12 10 15 3 6 9 11 7 1 5
Результат
1 3 5 6 7 9 10 11 12 15
СОРТИРОВКА МАССИВА МЕТОДОМ ВЫБОРА
Program Sorti2;
Const n=10;
Var A:array[1..n] of integer; i, c, j: integer;
BEGIN
{Ввод массива}
For i:=1 to n-1 do
begin
min:=i;
For j:=i+1 to n do
If A[j]>A[min] then min:=j;
If min<>i then
begin
c:=A[i];
A[i]:=A[min];
A[min]:=c;
end;
end;
For i:=1 to n do Write(A[i]:4);
END.
Размерность массива
n=10
Исходный массив
12 10 15 3 6 9 11 7 1 5
Результат
1 3 5 6 7 9 10 11 12 15
Метод выбора
Действия:
• найти минимальный элемент и поставить на
первое место (поменять местами с A[1]);
• из оставшихся найти минимальный элемент и
поставить на второе место (поменять местами
с A[2]), и т.д.
10
1
1
1
5
5
2
2
1
10
10
5
2
2
5
10
Определим правило
заполнения
Задача.
Заполнить массив А
размером n x m "змейкой"
следующим образом:
1 2 3 4 5 6 7
14 13 12 11 10 9 8
15 16 17 18 19 20 21
28 27 26 25 24 23 22
Program mmm;
Var A: array [1..10,1..10] of integer; i, j, n, m: integer;
BEGIN
S:=0;
Writeln (‘введите размерность массива');
Readln (n,m);
For i := 1 to n do
For j := 1 to m do
If i mod 2 =1 then A[i, j] := (i-1)*m+j
else A[i, j] := i*m-j+1;
END.
A[i, j]=(i-1)*m+j,
если ряд нечётный
A[i, j]=i*m-j+1,
если ряд четный
Download