47-50 урок, 10 класс – практика
Учитель: Брух Т.В.
Дата:_________
Тема урока: «Массивы. Перебор элементов массива. Линейный поиск в массиве. Отбор элементов массива по условию. Сортировка массивов»
Цель: формирование у детей знаний и умений работы с языком программирования Pascal, организация работы по усвоению детьми основных понятий, принципов работы с данным языком.
Ход урока:
1. Организационный момент
2. Проверка домашнего задания
3. Изучение нового материала
Массив - это упорядоченный набор однотипных элементов, обозначаемых одним именем; доступ к элементу массива осуществляется по его номеру.
Для записи элементов массива в память компьютера нужно выделить для их хранения необходимое количество ячеек памяти, которое определяется размером массива.
В программе для каждого массива должны быть указаны его параметры: имя, размерность и размер. Бывают одномерные, двумерные и т.д. массивы. Это называется размерностью.
Одномерный массив (вектор) - имеет одну размерность.
При обращении к отдельному элементу массива необходимо указать его индекс (местонахождение в массиве):
A[7] i:=7; A[i]
Здесь i - индекс элемента массива, может быть только целого или натурального типа.
Двумерные массивы (матричные) - имеют две размерности, m*n.
Доступ к отдельному элементу массива осуществляется путем определения двух его координат: номера строки i=1..m и столбца j=1..n
Операции предоставления выполняются аналогично:
a[3,9]=8; B:=A[1,1]
В трехмерном массиве для доступа к элементу необходимо указать три индекса A[i,j,k].
Можно создавать массивы с большей размерностью, но работа с массивами, размерность которых превышает 3, существенным образом усложняет алгоритм, поэтому, по возможности, необходимо избегать организации подобных структур данных.
Описание массивов.
Var A:array[1..30] of byte;
S: array[1..30] of string; {или}
SO:array[1..30] of string[12];
Присвоение значений элементам массива:
“A”- A[1]:=5; A[2]:=4; и т.д.
“S” – S[1]:=’Иванов’; S[2]:=’Петров’; и т.д.
Приведём таблицу обозначений и соответствия элементам массива, их значений и индексов:
Номер элемента индекса | 1 | 2 | 3 | 4 | … | I | … | 30 |
Элементы массива “S” | S[1] | S[2] | S[3] | S[4] | … | S[I] | … | S[30] |
Значения элементов | Иванов | Петров | Сидоров | Титов | … | | … | Яковлев |
Элементы массива “A” | A[1] | A[2] | A[3] | A[4] | … | A[I] | … | A[30] |
Значения элементов | 5 | 4 | 5 | 5 | … | | … | 4 |
Если известна зависимость, по которой изменяются значения элементов массива, то присвоение значений удобно проводить в операторах цикла с параметром или с условием.
Например, присвоим значения элементам массива ”y” по зависимости: y=sin(x), где x=Pi*i/180, 0i
For i:=0 to 180 Do y[i]:=sin(Pi*i/180);
Присвоим случайные значения в диапазоне от -30 до +40 ста элементам массива “R”:
Randomize;
For i:=1 to 100 Do R[i]:=-30+Random(71);
Присвоим значения семи элементам массива “A” оператором Readln;
For i:=1 to 7 Do
begin
Write(‘Введите A[‘,i,’]= ’);
Readln(A[i]);
end;
При выводе массива на экран удобно размещать данные в виде таблицы – в несколько колонок.
Для вывода обозначений переменных («шапки таблицы») можно использовать операторы вывода символов в цикле, например,
For j:=1 to 66 do Write(‘-’); Writeln;
For j:=1 to 3 do Write(‘| Фамилия | оценка |’); Writeln;
For j:=1 to 66 do Write(‘-’); Writeln;
Шапка для вывода в три пары колонок значений переменных “S” и “A”. Шапка занимает 66 позиций (по ширине экрана в текстовом режиме размещается 79 символов и пробел). Оператор Writeln; переводит курсор на новую строчку.
Вывод значений ста элементов массивов “S” и “A” в три пары колонок произведём операторами:
for j:=1 to 100 do
Begin
Write(‘|’,s[i]:11,’|’,a[i]:8,’|’);
if (i mod 3) = 0 Then Writeln;
if (i mod 60) = 0 Then Readln;
end;
В этом случае данные таблицы полностью не умещаются на экране и можно задержать прокрутку экрана при выводе данных, применяя оператор Readln после вывода, например, 20 строк.
4. Практическая работа
Одномерные массивы (последовательности).
A: 3,-4,0,3,-5,10,0
A[1]=3, A[3]=0, A[7]=0
I - номер элемента, A[I] - элемент массива, стоящий на I-ом месте
Сформировать и вывести на экран последовательность из n элементов, заданных датчиком случайных чисел на интервале [-23, 34].
Program posled;
Var a: array[1..100] of integer;
i, n: integer;
Begin
Write (‘Сколько элементов? ’); Readln (n);
For i=1 to n do
begin
a[i]:= Random(58)-23;
writeln (a[i],’ ‘);
end;
End.
2. Найти произведение элементов одномерного массива, состоящего из n элементов. Элементы вводятся с клавиатуры.
Program proisveden;
Var a: array[1..100] of integer;
i, n, p: integer;
Begin
Write (‘Сколько элементов? ’); Readln (n);
p:=1;
For i:=1 to n do
begin
write (‘введите число’); readln (a[i]);
p:=p*a[i];
end;
writeln(‘произведение элементов равно: ‘,p);
End.
3. Найти сумму элементов одномерного массива. Размер произвольный. Элементы вводятся с клавиатуры.
Program summa;
Var a: array[1..100] of real;
i, n: integer;
s: real;
Begin
Write (‘n=’); Readln (n);
s:=0;
For i:=1 to n do
begin
write (‘введите число’); readln (a[i]);
s:=s+a[i];
end;
writeln(‘сумма элементов равна ‘,s);
End.
4. Задан массив А, состоящий из n чисел. Найти среднее арифметическое его элементов. Элементы вводятся с клавиатуры.
Program srednee;
Var a: array[1..100] of real;
i, n: integer;
s,sred: real;
Begin
Write (‘n=’); Readln (n);
s:=0;
For i:=1 to n do
begin
write (‘введите число’); readln (a[i]);
s:=s+a[i];
end;
sred:=s/n;
writeln(‘среднее арифметическое элементов: ‘,s);
End.
5. Найти сумму элементов массива с четными номерами, содержащего N элементов. Элементы вводятся с клавиатуры.
Program sumshet;
Var a: array[1..100] of real;
i, n: integer;
s,sred: real;
Begin
Write (‘n=’); Readln (n);
s:=0;
For i:=1 to n do
begin
write (‘введите число’); readln (a[i]);
if i mod 2 = 0 then s:=s+a[i];
end;
writeln(‘сумма элементов с четными номерами: ‘,s);
End.
6. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-19, 26] (размер произвольный). Найти произведение элементов с нечетными номерами.
Program proisvednechet;
Var a: array[1..100] of integer;
i, n, p: integer;
Begin
Write (‘Сколько элементов? ’); Readln (n);
P:=1;
For i=1 to n do
begin
a[i]:= Random(46)-19;
writeln (a[i],’ ‘);
if i mod 2 0 then P=P*a[i];
end;
Writeln(‘Произведение элементов с нечетными номерами:’, P);
End.
7. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-56, 47] (размер произвольный). Найти произведение элементов с четными номерами, которые превосходят некоторое число t.
Program proisvedchetbolt;
Var a: array[1..100] of integer;
i, n, p, t: integer;
Begin
Write (‘Сколько элементов? ’); Readln (n);
P:=1;
For i=1 to n do
begin
a[i]:= Random(104)-56; writeln (a[i],’ ‘);
if (i mod 2 = 0) and (a[i]t) then P=P*a[i];
end;
Writeln(‘Произведение элементов с четными номерами, превосходящие число t:’, P);
End.
8. Найти наименьший элемент одномерного массива, состоящего из n элементов. Элементы вводятся с клавиатуры.
Program minim;
Var a: array[1..100] of real;
i, n: integer;
min: real;
Begin
Write (‘n=’); 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]
Writeln(‘наименьшее число: ‘,min);
End.
9. Найти номер наименьшего элемента в массиве, заданного датчиком случайных чисел на интервале [-20, 25]. Размер произвольный.
Program numberminim;
Var a: array[1..100] of integer;
i, n, num, min: integer;
Begin
Write (‘n=’); Readln (n);
For i:=1 to n do
begin
a[i]:= Random(46)-20;
writeln (a[i]);
end;
min:=a[1];
num:=1;
For i:=2 to n do
If a[i]
begin
min:=a[i];
num:=i;
end;
Writeln(‘ номер наименьшего элемента: ‘,num);
End.
10. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество нулей.
Program kolv0;
Var a: array[1..100] of integer;
i, n, k: integer;
Begin
Write (‘n=’); Readln (n);
For i:=1 to n do
begin
Write(‘a[‘,i,’]=’); readln (a[i]);
if a[i]=0 then k:=k+1;
end;
Writeln(‘количество 0 равно ’, k);
end.
11. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество четных элементов.
Program kolvсchet;
Var a: array[1..100] of integer;
i, n, k: integer;
Begin
Write (‘n=’); Readln (n);
For i:=1 to n do
begin
Write(‘a[‘,i,’]=’); readln (a[i]);
if a[i] mod 2=0 then k:=k+1;
end;
Writeln(‘количество четных элементов: ’, k);
end.
12. Найдите среднее арифметическое элементов массива, состоящего из 10 чисел, которые превышают по величине число С. Элементы вводятся с клавиатуры.
Program sredarifmet;
Var a: array[1..10] of real;
i, k: integer;
C, S, sred: real;
Begin
For i:=1 to 10 do
begin
write(‘a[‘,i,’]=’); readln (a[i]);
end;
write(‘введите С: ‘); readln (C );
For i:=1 to 10 do
begin
If a[i]C then
begin S=S+a[i]; K=K+1; end;
end;
sred=S/k;
Writeln(‘среднее арифметическое чисел, превосходящих ‘,C,’ равно ‘,sred);
End.
13. Найти произведение элементов целочисленного одномерного массива с четными номерами, состоящего из n элементов. Элементы вводятся с клавиатуры.
Program proizved_chet;
Var a: array [1..100] of integer;
i, n, p: integer;
Begin
p:=1;
write ('n='); readln (n);
for i:=1 to n do
begin
write ('a[',i,']='); readln (a[i]);
if i mod 2=0 then p:=p*a[i];
end;
Writeln ('произведение элементов массива с четными номерами равно ',p);
End.
14. Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из четных элементов массива А. Элементы вводятся с клавиатуры. Размер n.
Program newmasiv;
Var a: array[1..100] of integer;
b: array[1..100] of integer;
n, i, k: integer;
Begin
kol:=0; k:=0;
write ('n='); readln (n);
For i:=1 to n do
begin
write(‘a[‘,i,’]=’); readln (a[i]);
if a[i] mod 2=0 then
begin
k:=k+1; b[k]:=a[i]; kol:=kol+1;
end;
if kol=0 then writeln(‘четных элементов нет’) else
for k:=1 to kol do write(‘b[‘,k,’]=’,b[k]);
end;
Задачи для самостоятельной работы
Массив А вводится с клавиатуры. Найти сумму его элементов. Размер произвольный.
Найти произведение элементов, кратных 3 в массиве, заданном датчиком случайных чисел на интервале [-28, 27]. Размер произвольный.
Массив А вводится с клавиатуры. Найти среднее арифметическое его элементов с нечетными номерами. Размер произвольный.
Массив А вводится с клавиатуры. Найти сумму его элементов с четными номерами, произведение отрицательных элементов, количество нечетных элементов. Размер произвольный.
Найти наибольший элемент и его номер в последовательности, элементы которой вводятся с клавиатуры. Размер произвольный.
Найти средне арифметическое элементов последовательности, превосходящих некоторое число С. Массив задан датчиком случайных чисел на интервале [-44, 35]. Размер произвольный. Значение С вводится с экрана.
Массив А вводится с клавиатуры. Вывести только нечетные элементы. Размер произвольный.
Упорядочить данную последовательность по убыванию. Элементы вводятся с клавиатуры. Размер произвольный.
Упорядочить данную последовательность по убыванию. Массив задан датчиком случайных чисел на интервале [-54, 33]. Размер произвольный.
Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из положительных элементов массива А. Размер произвольный.
Массив задан датчиком случайных чисел на интервале [-31, 45]. Сформировать новый массив В, состоящий из нечетных элементов массива А. Размер произвольный.
Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из положительных элементов массива А и найти в нем наибольший элемент. Размер произвольный.
Массив задан датчиком случайных чисел на интервале [-37, 66]. Найти наименьший нечетный элемент. Размер произвольный.
Двумерные массивы (матрицы)
1. Сформировать с помощью датчика случайных чисел и вывести на экран матрицу, размером МхN. Элементы задаются на интервале [-20, 25].
Var a: array[1..50,1..50] of integer;
i, j, n, m: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
a[i,j]:=int(rnd*46)-20;
write(a[i,j],’ ‘);
end;
writeln;
end;
End.
2. В двумерном массиве, состоящем из n целых чисел, найти сумму элементов в каждой строке. Размер произвольный.
Program summastrok;
Var a: array[1..50,1..50] of integer;
i, j, n, m,S: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
For j:=1 to n do
begin
write(‘a[‘,i,’,’,j,’)=’); readln (a[i,j]);
end;
For i:=1 to m do
begin
S:=0;
For j:=1 to n do
S:=S+a[i,j];
Writeln(‘сумма элементов в ‘,i,’ строке равна ‘,S);
end;
End.
3. Найти наименьший элемент двумерного массива. Размер MXN. Элементы задаются на интервале [-30, 45].
Program minim;
Var a: array[1..50,1..50] of integer;
i, j, n, m, min: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
a[i,j]:=int(rnd*76)-30; write(a[i,j],’ ‘);
end;
writeln;
end;
min:=a[1,1];
For i:=1 to m do
For j:=1 to n do
if a[i,j]
Writeln(‘наименьшее число ‘,min);
End.
4. В двумерном массиве, состоящем из целых чисел, найти наименьший элемент и номер строки, в которой он находится. Элементы вводятся с клавиатуры. Размер MXN.
Program minim;
Var a: array[1..50,1..50] of integer;
i, j, m, n, min, K: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
For j:=1 to n do
begin write(‘a[‘,i,’,’,j,’]=’); readln (a[i,j]); end;
min:=a[1,1]; K:=1;
For i:=1 to m do
For j:=1 to n do
If a[i,j]
begin
min:=a[i,j]; K:=i;
end;
Writeln(‘наименьшее число ‘,min,’ находится в ‘, k , ‘ строке’);
End.
5. Найти сумму элементов в каждой строке двумерного массива, состоящего из целых чисел. Размер MXN. Элементы задаются на интервале [-19, 30].
program sumstr;
Var a: array[1..50,1..50] of integer;
i, j, n, m,sum: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
a[i,j]:=int(rnd*50)-19; write(a[i,j],’ ‘);
end;
writeln;
end;
for i:=1 to m do
begin
sum:=0;
for j:=1 to n do sum:=sum+a[i,j];
writeln('сумма элементов в ',i,' строке: ',sum);
end;
end.
6. Подсчитать количество положительных элементов в каждой строке матрицы размером МхN, элементы которой вводятся с клавиатуры.
program kolpolvstr;
Var a: array[1..50,1..50] of integer;
i, j, m, n, kol: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin write(‘a[‘,i,’,’,j,’]=’); readln (a[i,j]); end;
for i:=1 to m do
begin
kol:=0;
for j:=1 to n do if a[i,j]0 then kol:=kol+1;
writeln('количество положительных элементов в ',i,' строке: ',kol);
end;
writeln;
end;
end.
7. Сформировать матрицу типа 1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
program formir;
Var a: array[1..50,1..50] of integer;
i, j, m, n: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
if i=j then a[i,j]:=1 else a[i,j]:=0;
write(a[i,j]);
end;
writeln;
End.
8. Найти номер столбца массива размером МхN, в котором находится наибольшее количество отрицательных элементов. Элементы вводятся с клавиатуры.
program nomerstolb;
Var a: array[1..50,1..50] of integer;
b: array[1..50] of integer;
i, j, m, n, max, jmax: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
write(‘a[‘,i,’,’,j,’]=’); readln (a[i,j]);
end;
for j:=1 to m do
begin
b[j]:=0;
for i:=1 to n do
if a[i,j]
end;
max:=b[1]; jmax:=1;
For j:=2 to n do
begin
if b[j]max then
begin
max:=b[j]; jmax:=j;
end;
end;
writeln(‘Наибольшее количество отрицательных элементов в ‘;jmax ; ‘столбце’);
end;
end.
9. Упорядочить каждый столбец матрицы по возрастанию. Массив размером МхN, элементы которого задаются датчиком случайных чисел на интервале [-17;26].
program porydok;
Var a: array[1..50,1..50] of integer;
i, j, n, m,t,r: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
a[i,j]:=int(rnd*44)-17;
write(a[i,j],’ ‘);
end;
Writeln;
end;
For j:=1 to n do
For r:=1 to m do
For i:=1 to m-1 do
if a[i,j] a[i+1,j] then
begin
t:= a[i,j];
a[i,j]:= a[i+1,j];
a[i+1,j]:= t;
end;
For i:=1 to m do
begin
For j:=1 to n do write(a[i,j],’ ‘);
Writln;
end;
End.
10. Сформировать матрицу 1 1 1 1
2 2 2 2
3 3 3 3
program former;
Var a: array[1..3,1..4] of integer;
i, j: integer;
Begin
For i:=1 to 3 do
begin
For j:=1 to 4 do
begin
a[i,j]:=i; write(a[i,j]);
end;
writln;
end;
End.
11. Найти наибольшее нечетное число в матрице размером МхN, элементы которой задаются датчиком случайных чисел на интервале [-27, 38].
program maxnechet;
Var a: array[1..50,1..50] of integer;
b: array[1..50] of integer;
i, j, n, m, p, max, k: integer;
Begin
Write(‘сколько строк?’); Readln(m);
Write(‘сколько столбцов?’); Readln(n);
For i:=1 to m do
begin
For j:=1 to n do
begin
a[i,j]:=int(rnd*66)-27;
write(a[i,j],’ ‘);
end;
writeln;
end;
kol:=0; p:=0;
For i:=1 to m do
For j:=1 to n do
If a[i;j]mod 2 0 then
begin
p:=p+1; b[p]:=a[i,j]; k:=k+1:
end;
if k=0 then writeln(‘нечетных элементов нет’) else
begin
write(‘нечетные элементы:’);
max:=b[1];
for p:=1 to k do
begin
writ(b[p],’ ‘);
if b[p]max then max:=b[p];
end;
writeln(‘наибольшее нечетное число’, max);
end;
Задачи для самостоятельной работы
Подсчитать количество положительных элементов в каждом столбце матрицы размером МхN, элементы которой вводятся с клавиатуры.
Подсчитать количество отрицательных элементов в каждой строке матрицы размером МхN, элементы которой задаются с помощью датчика случайных чисел на интервале [-35; 65].
Подсчитать количество четных элементов в каждом столбце матрицы размером МхN, элементы которой задаются с помощью датчика случайных чисел на интервале [-98; 54].
Подсчитать количество четных отрицательных элементов в матрице размером МхN, элементы которой вводятся с клавиатуры.
5. Сформировать матрицу 1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
6. Сформировать матрицу 1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
7. Сформировать матрицу 0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
8. Найти номер наибольшего элемента массива размером МхN, элементы которого задаются датчиком случайных чисел на интервале [-67;23].
9. Найти номер наибольшего элемента массива размером МхN, элементы которого вводятся с клавиатуры.
10. Найти наибольший элемент массива размером МхN, элементы которого задаются датчиком случайных чисел на интервале [-25;19].
11. Найти наименьший элемент массива размером МхN, элементы которого вводятся с клавиатуры.
12. Найти сумму элементов в каждом столбце массива размером МхN, элементы которого задаются датчиком случайных чисел на интервале [-19;20].
13. Найти произведение элементов в каждом столбце массива размером МхN, элементы которого вводятся с клавиатуры.
14. Найти произведение элементов в каждой строке массива размером МхN, элементы которого вводятся с клавиатуры.
15. Найти произведение диагональных элементов массива размером МхN, элементы которого вводятся с клавиатуры.
16. Найти сумму элементов, стоящих на побочной диагонали массива размером МхN, элементы которого вводятся с клавиатуры.
17. Найти номер столбца массива размером МхN, в котором находится наименьшее количество положительных элементов. Элементы вводятся с клавиатуры.
18. Найти номер строки массива размером МхN, в котором находится наименьшее количество положительных элементов. Элементы вводятся с клавиатуры.
19. Найти номер строки массива размером МхN, в котором находится наибольшее количество четных элементов. Элементы задаются датчиком случайных чисел на интервале [-54;61].
20. Найти номер столбца массива размером МхN, в котором находится наибольшее количество элементов, кратных 5. Элементы задаются датчиком случайных чисел на интервале [-27;43].
21. Найти наименьшее четное число в матрице размером МхN, элементы которой задаются датчиком случайных чисел на интервале [-65, 45].
22. Найти наибольшее число, кратное 3, в матрице размером МхN, элементы которой вводятся с клавиатуры.
5. Подведение итогов. Домашнее задание
Учитель теорию массивы