Презентация "Одномерные и двумерные массивы. В помощь сдающему ЕГЭ" 11 класс


Подписи к слайдам:
О

Одномерные и двумерные массивы. В помощь сдающему ЕГЭ

  • Лицей-интернат естественных наук, г.Саратов.
  • Над презентацией к уроку работали:
  • Нестеренко В.В., учитель высшей категории,
  • Хазова Н.Б., учитель информатики ЛИЕН
  • 78
  • 6
  • 82
  • 67
  • 55
  • 44
  • 34
  • 1
  • 4
  • 7
  • 3
  • 6
  • 2
  • -5
  • 0
  • 15
  • 10
  • 8
  • 9
  • 11
  • 12
  • 20

  • Массивы
  • 1 2 3 4 5 6 7
  • X[1]=78, X[2]=6, X[3]=82, X[4]=67, X[5]=55, X[6]=44, X[7]=34
  • 78
  • 6
  • 82
  • 67
  • 55
  • 44
  • 34
  • Описание массива определяет имя, размер массива и тип элементов.
  • Var X:array[1..7] of integer; Y:array [1..10] of real;
  • Одномерный массив объединяет под одним именем фиксированное
  • количество элементов одного типа данных.
  • Каждый элемент массива имеет собственный номер.

  • Задание с клавиатуры
  • 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;
  • Двумерный массив (матрица, таблица) объединяет под одним
  • именем фиксированное количество элементов одного типа данных.
  • Каждый элемент в двумерном массиве определяется номером
  • строки и номером столбца, на пересечении которых он находится.
  • 1
  • 4
  • 7
  • 3
  • 6
  • 2
  • -5
  • 0
  • 15
  • 10
  • 8
  • 9
  • 11
  • 12
  • 20
  • a11
  • a12
  • a13
  • a14
  • a15
  • a21
  • a22
  • a23
  • a24
  • a25
  • a31
  • a32
  • a33
  • a34
  • a35
  • 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;
  • 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;
  • Чтение данных из файла input.txt и запись в файл output.txt

  • Найти сумму и произведение элементов массива, состоящего из 10 элементов
  • 1 0 -1 0 6 2 0 4 8 -7
  • Сумма элементов = 13
  • Произведение элементов =2688
  • Исходный массив
  • Результат
  • n=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.

  • Найти сумму всех отрицательных элементов массива, состоящего из 10 элементов
  • 1 0 -1 0 6 2 0 9 8 -7
  • Сумма отр-х элементов = -8
  • Исходный массив
  • Результат
  • n=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=4, m=4
  • В двумерном массиве, элементами которого являются целые числа, подсчитать сумму элементов с k1 строки по k2.
  • S=32
  • Исходный массив
  • 5
  • 4
  • 3
  • 1
  • 1
  • 1
  • 3
  • 4
  • 0
  • 3
  • 3
  • 8
  • 8
  • 7
  • 8
  • 9
  • Результат
  • 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.
  • k1=2, k2=3

  • 4 x 4
  • В матрице A размерностью 4*4 найти сумму ее положительных элементов, произведение элементов, значения которых попадают в интервал [2, 5], а также отношение этих двух величин.
  • Сумма=20
  • Произведение=360
  • Отношение=0.055
  • Исходный массив
  • 5
  • 4
  • 0
  • 1
  • 1
  • 1
  • 0
  • 0
  • 0
  • 3
  • 3
  • 2
  • -8
  • -7
  • -8
  • -9
  • Результат
  • 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.

  • Задача. Найти скалярное произведение двух массивов. Скалярным произведением двух массивов одинаковой размерности называется сумма произведений соответствующих элементов (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.
  • Исходный массив
  • 0 9 18 7 -6 5 -4 9
  • Результат
  • s=36
  • 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.
  • Размерность массива
  • n=8
  • Конец
  • s
  • да
  • A[i] mod 9=0
  • s:=0
  • Начало
  • ввод n, А[1..n]
  • i:=1, n
  • s:=s+A[i]
  • нет

  • Дан целочисленный массив из 18 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕГЭ. Составьте программу, которая подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен.
  • 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
  • Результат
  • Размерность массива
  • Исходный массив
  • 10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55

  • В двумерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое четных элементов массива.
  • 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.
  • Исходный массив
  • 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
  • Пусть размерность массива
  • 5 x 5

  • В данном одномерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое отрицательных элементов.
  • Результат
  • -20.0
  • Пусть размерность
  • массива
  • N=20
  • Исходный массив
  • -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.

  • В данном одномерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое элементов, попадающих в интервал [1, 25]. Количество элементов массива ввести с клавиатуры.
  • Результат
  • 10.0
  • Пусть размерность
  • массива
  • N=20
  • Исходный массив
  • 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.

  • a11
  • a22
  • a33
  • a44
  • ann
  • У квадратной матрицы есть замечательные свойства:
  • Индексы элементов, лежащих на главной диагонали равны, т.е. i = j.
  • 2. Первый индекс всех элементов выше главной диагонали меньше второго,
  • т.е. i < j.
  • 3. Первый индекс всех элементов ниже главной диагонали больше второго,
  • т.е. i > j.
  • i < j
  • i > j
  • i = j

  • Пусть размерность массива
  • n=4
  • Дана квадратная матрица, элементами которой являются вещественные числа. Подсчитать сумму элементов главной диагонали.
  • S=16.9
  • Исходный массив
  • 0.5
  • -5.4
  • -9.3
  • 7.1
  • 9.1
  • -2.1
  • -8.3
  • 6.4
  • 0
  • -3
  • 3
  • 8
  • 8
  • 7
  • 8
  • 9
  • Результат
  • 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.

  • a1n
  • a24
  • a33
  • a42
  • an1
  • i+j<n+1
  • i+j>n+1
  • i + j = n+1
  • 3. Для элементов, находящихся под побочной диагональю: i+j>n+1
  • Для элементов побочной диагонали сумма первого и второго индексов равна «нарощенному» на единицу порядку матрицы, т.е. i + j = n+1.
  • 2. Для элементов, находящихся над побочной диагональю: i+j<n+1

  • Пусть размерность массива
  • n=4
  • Дана квадратная матрица, элементами которой являются вещественные числа. Подсчитать сумму элементов, находящихся выше побочной диагонали.
  • S=0.6
  • Исходный массив
  • Результат
  • 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.
  • 0.5
  • -5.4
  • -9.5
  • 7.1
  • 9.1
  • -2.1
  • -8.3
  • 6.4
  • 0
  • -3
  • 3
  • 8
  • 8
  • 7
  • 8
  • 9

  • a1n
  • a24
  • a33
  • a42
  • an1
  • i+j<n+1 и i<j
  • i+j>n+1 и i>j
  • Для элементов над пересечением диагоналей должны одновременно выполняться два неравенства: i+j<n+1 и i<j;
  • 2. Для элементов под пересечением диагоналей должны одновременно выполняться два неравенства: i+j>n+1 и i>j;
  • i+j>n+1 и i<j
  • i+j<n+1 и i>j

  • Пусть размерность массива
  • n=5
  • Дана квадратная матрица, элементами которой являются целые числа. Подсчитать сумму элементов, находящихся над и под пересечением диагоналей .
  • S=36
  • Исходный массив
  • Результат
  • 6
  • 4
  • 1
  • 5
  • 8
  • 5
  • 2
  • 8
  • 6
  • 5
  • 0
  • 3
  • 3
  • 8
  • 0
  • 8
  • 7
  • 8
  • 9
  • 7
  • 5
  • 0
  • 8
  • 6
  • 4
  • i+j<n+1 и i<j
  • 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.

  • Задача.
  • Найти в массиве максимальный элемент.
  • m a x

  • 10 1 2 6 99
  • Пусть размерность массива
  • n=5
  • max = 99
  • Исходный массив
  • Результат
  • Найти наибольший элемент одномерного массива
  • 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.

  • Дан двумерный массив, элементами которого являются целые числа. Найти значение максимального элемента массива.
  • Исходный массив
  • 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
  • Пусть размерность массива
  • 5 x 5
  • 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.

  • 10 1 2 6 99
  • Пусть размерность массива
  • n=5
  • min = 1
  • Исходный массив
  • Результат
  • 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=4, m=4
  • В двумерном массиве, элементами которого являются целые числа, вычислить сумму максимальных элементов из каждой строки, если предполагается, что в каждой строке такой элемент единственный.
  • S=28
  • Исходный массив
  • 0
  • -5
  • -9
  • 7
  • 9
  • -2
  • -8
  • 6
  • 0
  • -3
  • 3
  • 8
  • 8
  • 7
  • -8
  • 9
  • Результат
  • 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.

  • В двумерном массиве, элементами которого являются целые числа, подсчитать количество элементов равных минимальному.
  • Исходный массив
  • 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
  • Результат
  • Пусть размерность массива
  • 5 x 5
  • 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.

  • Опишите алгоритм подсчета числа элементов, равных максимальному,
  • в числовом массиве из 20 элементов.
  • Результат
  • 3
  • Размерность
  • массива
  • N=20
  • Program maksi2;
  • Var A:array[1..20] of integer;
  • k, i, max: integer;
  • BEGIN
  • {Ввод массива}
  • 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.
  • Исходный массив
  • 10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55 100 100

  • 5 х 5
  • Дан двумерный массив целых положительных чисел размером 5 на 5. Найти сумму элементов строки, в которой расположен элемент с максимальным значением. Вывести значение суммы на печать, если предполагается, что такой элемент единственный.
  • S=30
  • Исходный массив
  • Результат
  • 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
  • 4
  • 3
  • 1
  • 6
  • 1
  • 1
  • 3
  • 4
  • 5
  • 0
  • 3
  • 3
  • 8
  • 1
  • 8
  • 7
  • 8
  • 9
  • 4
  • 0
  • 3
  • 3
  • 8
  • 0

  • Опишите алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 25.
  • Результат
  • max кол-во совп. элем. =6
  • Размерность
  • массива
  • N=25
  • 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.
  • Исходный массив
  • 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

  • Найдите номер первого из двух последовательных элементов в целочисленном массиве из 25 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них).
  • Результат
  • 19
  • Размерность
  • массива
  • N=25
  • 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.
  • Исходный массив
  • 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

  • Дан прямоугольный массив целых полож-х чисел 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
  • № строки=2, sum=10
  • Исходный массив
  • Результат
  • Размерность массива
  • 5
  • 1
  • 3
  • 6
  • 1
  • 2
  • 7
  • 5
  • 8
  • 0
  • 0
  • 1
  • 0
  • 4
  • 5
  • 4
  • 0
  • 3
  • 8
  • 0

  • Найти количество положительных и отрицательных элементов в массиве
  • в числовом массиве из 20 элементов.
  • Результат
  • 17, 3
  • Размерность
  • массива
  • N=20
  • 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.
  • Исходный массив
  • 10 50 50 68 74 26 32 2 5 50 -10 12 13 20 21 29 45 55 -90 -60

  • Дан одномерный массив. состоящий из 10 элементов. Составить программу определения количества элементов массива, значение которых меньше заданного действительного числа t.
  • 1 0.5 -1 0 6 2 0 9 8 -7
  • Исходный массив
  • n=10, t=5.5
  • Program mas3;
  • 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
  • begin
  • Write ('Введите значение элемента A(', i, ') = ');
  • Readln (A[i]);
  • If A[i]<t then k:=k+1
  • end;
  • Writeln ('Ответ: Количество элементов, меньших заданного числа‘,t:3:1);
  • Writeln('k=', k);
  • END.
  • Результат
  • K=7

  • В данном одномерном массиве, состоящем из 8 элементов, заменить отрицательные элементы на противоположные по знаку. Элементами массива являются целые числа.
  • Исходный массив
  • 0 9 -8 7 -6 5 -4 3
  • Изменённый массив
  • 0 9 8 7 6 5 4 3
  • 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.
  • Начало
  • ввод А[1..8]
  • A[i]<0
  • A[i]:=-A[i]
  • Конец
  • да
  • i:=1, 8
  • нет
  • вывод А[1..8]

  • Найти и вывести на экран номера четных элементов в числовом массиве из 20 элементов.
  • Результат
  • 1 4 5 8 10 11 12 19 20
  • Размерность
  • массива
  • N=20
  • 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.
  • Исходный массив
  • 10 57 51 68 74 27 31 2 5 50 100 12 13 21 21 29 45 55 100 100

  • В данном одномерном массиве, состоящем из 8 элементов, заменить нулями все отрицательные элементы. Элементами массива являются целые числа.
  • Исходный массив
  • 0 9 -8 7 -6 5 -4 3
  • Изменённый массив
  • 0 9 0 7 0 5 0 3
  • 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.
  • Начало
  • ввод А[1..8]
  • A[i]<0
  • A[i]:=0
  • Конец
  • да
  • i:=1, 8
  • нет
  • вывод А[1..8]

  • Как переставить элементы?
  • Задача.
  • Поменять местами содержимое двух чашек.
  • Нужна 3-я чашка,
  • чтобы в нее перелить содержимое первой.

  • Исходный массив
  • 10 1 1 6 99
  • Размерность массива
  • n=5
  • Изменённый
  • 10 99 1 6 1
  • 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.
  • В данном одномерном массиве, элементами которого являются целые числа, поменять местами первый минимальный и последний максимальный элементы. Число элементов массива запрашивается с клавиатуры.
  • 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;

  • Дана прямоугольная матрица, элементами которой являются целые числа. Для каждого столбца подсчитать среднее арифметическое его нечетных элементов и записать полученные данные в новый массив
  • Исходный массив A
  • 51 22 34 58 0
  • 13 0 11 34 26
  • 20 15 35 43 85
  • 56 3 0 1 0
  • Пусть размерность массива A : 5 x 5
  • 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.
  • 50 44 32 22 11
  • Результат
  • 32.0 9.0 23.0 22.0 48.0
  • Тогда размерность массива В: 5

  • Дан двумерный массив А и одномерный массив B соответствующих размерностей.
  • Нечетные строки массива А заменить элементами массива B.
  • Исходный массив A
  • 51 22 34 58 0
  • 13 0 19 34 26
  • 20 15 25 33 85
  • 56 3 0 0 0
  • Пусть размерность массива A : 4 x 5
  • 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.
  • Исходный массив В
  • 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 на 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.
  • Исходный массив
  • 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
  • Размерность
  • массива А
  • 5 x 5

Сортировка массива

  • метод «пузырька»
  • метод выбора
  • «пузырек воздуха в стакане воды
  • поднимается со дна вверх»
  • найти миним. элемент и поставить
  • на первое место
  • Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, …).

  • Метод пузырька
  • Идея – пузырек воздуха в стакане воды поднимается со дна вверх.
  • Для массивов – самый маленький («легкий» элемент перемещается вверх «всплывает»).
  • 5
  • 2
  • 1
  • 3
  • 5
  • 2
  • 1
  • 3
  • 5
  • 1
  • 2
  • 3
  • 1
  • 5
  • 2
  • 3
  • Начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами;
  • За 1 проход по массиву один элемент (самый маленький) становится на свое место;
  • 1
  • 5
  • 2
  • 3
  • 1
  • 5
  • 2
  • 3
  • 1
  • 2
  • 5
  • 3
  • 1-ый проход
  • 2-ой проход
  • 3-ий проход
  • 1
  • 2
  • 5
  • 3
  • 1
  • 2
  • 3
  • 5
  • Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).

  • СОРТИРОВКА МАССИВА МЕТОДОМ ПУЗЫРЬКА
  • Исходный массив
  • 12 10 15 3 6 9 11 7 1 5
  • Результат
  • Размерность массива
  • n=10
  • 1 3 5 6 7 9 10 11 12 15
  • 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.

  • СОРТИРОВКА МАССИВА МЕТОДОМ ВЫБОРА
  • Исходный массив
  • 12 10 15 3 6 9 11 7 1 5
  • Результат
  • Размерность массива
  • n=10
  • 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.

  • Метод выбора
  • Действия:
    • найти минимальный элемент и поставить на первое место (поменять местами с A[1]);
    • из оставшихся найти минимальный элемент и поставить на второе место (поменять местами с A[2]), и т.д.
  • 10
  • 5
  • 1
  • 2
  • 1
  • 5
  • 10
  • 2
  • 1
  • 2
  • 10
  • 5
  • 1
  • 2
  • 5
  • 10