Одномерные и двумерные массивы 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, если ряд четный