Основы алгоритмизации и программирования (массивы)

Download Report

Transcript Основы алгоритмизации и программирования (массивы)

Алгоритмизация и
программирование
Практическая работа в Pascal
Задача 1
Практическая работа в Pascal
Задача 2. Написать программу вычисления суммы N чисел, вводимых
с клавиатуры.
Одномерные массивы
Одномерный массив – пронумерованная конечная
последовательность однотипных величин a[i]
(a[1], a[2], … , a[i], … , a[n])
Ввод элементов одномерного массива с клавиатуры:
Program massiv;
Алг ввод массива
Const n=10;
Вещ таб a[1:10]
Цел i
нет
i:=1, 10
Нач
да
для i от 1 до 10 повторять
нц
вывод (“a[“,i,”]=“)
Ввод a[i]
Var a:array[1..n] of real;
i:integer;
Begin
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
ввод (a[i])
readln(a[i])
кц
end
кон
End.
Вычисление суммы элементов
одномерного массива
Program sum;
Uses
s:=0;
For i:=1 to n do
s:=s+a[i];
writeln;
write(‘sum=‘,s);
readln
crt;
Const n=7;
Var
a:array[1..n] of real;
i:integer; s: real;
end.
Begin
clrscr;
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
readln(a[i])
end;
Вычисление суммы элементов
одномерного массива (вариант 2)
Program sum;
Uses
crt;
Const n=7;
Var
a:array[1..n] of real;
i:integer;
s: real;
Begin
clrscr;
s:=0;
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
s:=s+a[i];
end;
writeln;
write(‘sum=‘,s); readln
end.
readln(a[i]);
Нахождение наибольшего элемента
одномерного массива
Program maximum;
Uses
max:=a[1];
For i:=2 to n do
if max < a[i]
then max := a[i];
write(‘max=‘,max);
readln
crt;
Const n=7;
Var
a:array[1..n] of real;
i:integer; max: real;
end.
Begin
clrscr;
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
readln(a[i])
end;
Нахождение наибольшего элемента одномерного
массива и его порядкового номера
Program maximum;
Uses
max:=a[1]; k:=1;
For i:=2 to n do
if max < a[i]
then begin
max:=a[i];
k:=i end;
writeln(‘max=‘,max);
writeln(‘k=‘,k);
readln
crt;
Const n=7;
Var
a:array[1..n] of real;
k,i: integer; max: real;
Begin
clrscr;
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
readln(a[i])
end;
end.
Поиск элемента в массиве
Задача 1. В массиве, сформированном из вещественных чисел, вводимых с
клавиатуры, найти некоторое число (его порядковый номер). Если чисел
несколько, то вывести порядковый номер последнего найденного числа.
write(‘X=‘); readln(x);
m:=0;
For i:=1 to n do
if x = a[i]
then m := i;
if m = 0
then writeln(‘No‘)
else writeln(m)
readln
Program poisk;
Uses
crt;
Const n=10;
Var
a:array[1..n] of real;
x:real; m,i:integer;
Begin
clrscr;
end.
For i:=1 to n do
begin
write(‘a[‘,i,’]=‘);
readln(a[i])
end;
Поиск элемента в массиве
Задача 2. Массив сформирован случайным образом из целых чисел в диапазоне
от 0 до 9. Определить, входит ли число X в массив и какое количество раз.
write(‘X=‘); readln(x);
m:=0;
For i:=1 to n do
if x = a[i]
then m := m+1;
if m = 0
then writeln(‘No‘)
else writeln(‘m=‘,m);
readln
Program poisk;
Uses
crt;
Const n=10;
Var
a:array[1..n] of integer;
x,m,i:integer;
Begin
clrscr; randomize;
For i:=1 to n do
begin
a[i] := random(10);
write(a[i]:3)
end;
writeln;
end.
Домашнее задание
Задачник-практикум § 4.4.4 стр. 260-261
Задача 1. Найти среднее значение элементов одномерного массива.
Задача 2. Найти среднее значение минимального и максимального
элементов одномерного массива.
Задача 3. Определить, входит ли число X в заданный массив. Если да, то
вывести на экран его порядковые номера.
Дополнительно:
"В мир информатики" № 200
КИТ 19 ноября (55 руб)
Дополнительные задачи
Одномерные массивы
(занятие 2)
Поиск элемента в массиве
Задача 4. Массив сформирован случайным образом из целых чисел в диапазоне
от 0 до 9. Определить, входит ли число X в массив и какое количество раз.
write(‘X=‘); readln(x);
m:=0;
For i:=1 to n do
if x = a[i]
then m := m+1;
if m = 0
then writeln(‘No‘)
else writeln(‘m=‘,m);
readln
Program poisk;
Uses
crt;
Const n=10;
Var
a:array[1..n] of integer;
x,m,i:integer;
Begin
clrscr; randomize;
For i:=1 to n do
begin
a[i] := random(10);
write(a[i]:3)
end;
writeln;
end.
Решение задач
Задача 5. Дан массив, состоящий из 10-ти чисел в диапазоне от -10
до +10 (элементы массива формируются случайным образом).
Вывести сформированный массив на экран и затем заменить все
отрицательные числа 0, а положительные 1.
Решение задач
Задача 6. Определить, входит ли число X в заданный массив. Если
да, то вывести на экран его порядковые номера.
Сортировка массива
A[1]
A[2]
A[3]
…
…
A[i]
A[n-1]
1 цикл
A[1] сравнивается с A[2], A[3] … A[i], … A[n]
2 цикл
A[2] сравнивается с A[3], A[4] … A[i], … A[n]
……………………………………………………………………………
i цикл
A[i] сравнивается с A[i+1], A[i+2] … A[n]
j
J+1
For i:=1 to n-1 do
For j:=i+1 to n do
if A[i] > A[j]
then begin C := A[i];
A[i] := A[j];
A[j] := C end;
A[n]
Сортировка массива
Задача. Массив сформирован случайным образом из целых чисел в диапазоне
от 0 до 9. Отсортировать его элементы в порядке возрастания значений.
Program sort;
Uses
crt;
Const n=10
Var
a:array[1..n] of integer;
c,i:integer;
Begin
clrscr; randomize;
For i:=1 to n do
begin
a[i] := random(10);
write(a[i]:3)
end;
writeln;
For i:=1 to n-1 do
For j:=i+1 to n do
if a[i] > a[j]
then begin c := a[i];
a[i] := a[j];
a[j] := c end;
For i:=1 to n do
write(a[i]:3);
readln
end.
Задания из ЕГЭ
1
Задача 1. Дан одномерный массив
X[1,-3,-1,0,4], где n=5
Чему будет равна переменная S после выполнения следующего
алгоритма:
S:=0;
for k:=1 to n do
if x[k] < 0
then s := s + x[k];
Задания из ЕГЭ
2
Задача 2. Дана строка A[1..6], состоящая из чисел:
1, -2, -3, 2, -4, 0
Какая строка C[1..6] получится в результате выполнения алгоритма:
in := 1;
infin := 6;
for i:=1 to 6 do
if A[i] > 0
then begin C[in] := A[i]; in := in + 1 end
else begin C[infin] := A[i]; infin := infin - 1 end;
Задания из ЕГЭ
3
Задача 3. Фрагмент программы обрабатывает массивы А[1..10] и В[1..10]
k:= 10;
For i:=1 to 10 do
begin
A[i] := k;
B[k] := A[i] - i;
k := k-1
end;
Записать элементы массива В.
-9 -7 -5 -3 -1
1
3
5
7
9
Задания из ЕГЭ
4
Задача 4. Массив В[1..10] формируется по следующему алгоритму:
For i:=1 to 10 do
A[i] := 10 - i;
For i:=1 to 10 do
B[i] := A[5] - A[i];
Сколько элементов массива будут иметь отрицательные значения?
Задания из ЕГЭ (самостоятельно)
Задача 5. Массив A[1..10] формируется по следующему алгоритму:
For i:=1 to 10 do
begin
A[i] := -i - i;
B[11-i] := A[i]
end;
For i:=1 to 10 do
A[i] := B[i] + 10;
Чему равен элемент массива A[8]?
5
Домашнее задание
Задачник-практикум § 4.4.4 стр. 260-261
Задачи 1, 2, 4 стр. 262
Решение задач из ЕГЭ
Дополнительно:
"В мир информатики" № 200
КИТ 19 ноября (55 руб)
Домашнее задание
Задача 1. Дан массив натуральных чисел. Найти сумму элементов,
кратных данному k (k вводится с клавиатуры)
Задача 2. В целочисленной последовательности есть нулевые
элементы. Создать массив из номеров этих элементов
Задача 4. Дана последовательность действительных чисел a1, a2,
…, an. Выяснить, будет ли она возрастающей.
Домашнее задание
Задача 1. Одномерный массив, содержащий 10 элементов, заполняется по
следующему закону:
A[1]=1;
A[2] =X;
A[i] = 2*X*A[i-2] – A[i-1]
где I = 3, 4, …,10
Чему будет равно значение A[5] при Х = № варианта?
Задача 2. В программе используется одномерный целочисленный массив A с
индексами от 0 до 10. Ниже представлен фрагмент программы, в которой
значения элементов сначала задаются, а затем меняются.
for i:=0 to 10 do
A[i]:=i;
for i:=0 to 10 do
begin
A[10-i]:=A[i];
A[i]:=A[10-i] end;
Чему будут равны элементы этого массива после выполнения фрагмента
программы?
Одномерные массивы
(занятие 3)
Решение задач
Задача 1. Дан массив натуральных чисел. Найти сумму элементов,
кратных данному k (k вводится с клавиатуры)
Задача 2. В целочисленной последовательности есть нулевые
элементы. Создать массив из номеров этих элементов
Задача 4. Дана последовательность действительных чисел a1, a2,
…, an. Выяснить, будет ли она возрастающей.
Дополнительное задание
Задача 4. Вычислить среднегодовую температуру по известным
среднемесячным значениям.
Для каждого месяца определить и вывести на экран отклонение
его средней температуры от среднегодовой величины.
Дополнительное задание
Задача 5. Дан целочисленный массив из 30 элементов.
Элементы массива могут принимать целые значения от 0 до 100 – баллы
учащихся выпускного класса за итоговый тест по информатике. Для
получения положительной оценки за тест требовалось набрать не менее
20 баллов. Напишите программу, которая позволяет найти и вывести
минимальный балл среди учащихся, получивших за тест положительную
оценку. Известно, что в классе хотя бы один учащийся получил за тест
положительную оценку.
Исходные данные объявлены так, как показано ниже. Запрещается
использовать переменные, не описанные ниже, но разрешается не
использовать часть из них.
Домашнее задание
Задачник-практикум § 4.4.4 стр. 260-261
Тематические тренировочные задания ЕГЭ-2014
Алгоритмизация и программирование (Решение задач)
Демонстрационные версии ЕГЭ (2010- 2014)
Индивидуальные задания
• Контрольная работа
• Индивидуальная практическая работа
Двумерные массивы (таблицы)
Таблица B, состоящая из n строк и m столбцов, называется
двумерным массивом размерностью [n,m]:
b[1,1]
b[1,2]
…
b[1,j] …
b[1,m]
b[2,1]
b[2,2]
…
b[2,j] …
b[2,m]
…
…
…
…
…
…
b[i,1]
b[i,2]
…
b[i,j]
…
b[i,m]
…
…
…
…
…
…
b[n,1]
b[n,2]
…
b[n,j] …
b[n,m]
Двумерные массивы (таблицы)
Формирование
элементов двумерного
массива, размером 3Х4
из целых чисел в
диапазоне от 0 до 9 :
Program mas2;
Uses
Const n=3; m=4;
Var
нач
crt;
b:array[1..n,1..m] of integer;
i,j:integer;
Begin
clrscr; randomize;
i:=1,n
For i:=1 to n do
begin
j:=1,m
For j:=1 to m do begin
b[i,j] := random(10);
b[i,j] := random(10);
write(b[i,j]:3) end;
вывод b[i,j]
writeln
end;
end.
Двумерные массивы (таблицы)
Задача 1. Найти наибольшие элементы каждой строки таблицы.
Массив результатов:
Пусть дана таблица:
b[1,1]
b[1,2]
…
b[1,j]
a[1]
b[2,1]
b[2,2]
…
b[2,j]
a[2]
…
…
…
…
…
b[i,1]
b[i,2]
…
b[i,j]
a[i]
Задача 1. Найти наибольшие элементы каждой строки таблицы.
Program max2;
For i:=1 to n do
Uses
begin
crt;
Const n=3; m=4;
a[i]:=b[i,1];
Var
For j:=2 to m do
b:array[1..n,1..m] of integer;
a:array[1..n] of integer; i,j:integer;
if a[i]<b[i,j]
Begin
then a[i]:=b[i,j]
clrscr; randomize;
end;
For i:=1 to n do
For i:=1 to n do
begin
writeln(a[i])
For j:=1 to m do begin
b[i,j] := random(10);
write(b[i,j]:3) end;
writeln
end;
end.
Двумерные массивы (блок-схема)
Задача 1. Найти наибольшие элементы каждой строки таблицы
нач
i:=1,n
i:=1,n
a[i]:=b[i,1];
i:=1,n
j:=1,m
j:=2,m
writeln(a[i])
b[i,j] := random(10);
вывод b[i,j]
a[i]<b[i,j]
да
a[i]:=b[i,j]
кон
Двумерные массивы (таблицы)
Задача 2. Найти сумму элементов столбцов таблицы.
Пусть дана таблица:
Массив результатов:
b[1,1]
b[1,2]
…
b[1,j]
b[2,1]
b[2,2]
…
b[2,j]
…
…
…
…
b[i,1]
b[i,2]
…
b[i,j]
s[1]
s[2]
…
s[j]
Задача 2. Найти сумму элементов столбцов таблицы
(массив вещественных чисел вводится с клавиатуры)
Program max2;
For j:=1 to m do
Uses
begin
crt;
Const n=3; m=4;
s[j]:=0;
Var
For i:=1 to n do
b:array[1..n,1..m] of real;
s:array[1..m] of real; i,j:integer;
Begin
s[j]:=s[j]+b[i,j]
end;
clrscr;
For j:=1 to m do
For i:=1 to n do
begin
For j:=1 to m do begin
write(‘ b[‘,i,’,’,y,’]=’;
read(b[i,j]) end;
writeln
end;
write(s[j]:12:1)
end.
Домашнее задание
Задачник-практикум § 4.4.4
стр. 270-271
Задача 1. Найти минимальные значения столбцов
таблицы.
Задача 2. Найти средние арифметические значения
элементов строк двумерного массива.
Задача 3. (Дополнительно) Вычислить сумму элементов
главной диагонали квадратной матрицы.
Двумерные массивы (решение задач)
1
Дан фрагмент алгоритма, использующий двумерный массив M[1..n,1..n],
два одномерных массива А[1..n], В[1..n] и переменную X:
X:= 0;
For i:=1 to n do
begin
A[i] := M[i,1]; B[i] := 1;
For j:=1 to m do
begin
if M[i,j] < A[i]
then begin A[i] := M[i,j];
B[i] := j end;
X := X + M[i,j]
end;
end;
Определить значения:
1. Массива А
2. Массива В
3. Переменной Х
Решение задач
2
Дан фрагмент программы, обрабатывающей двумерный массив А размера nxn:
For i:=1 to n-1 do
For j:=i+1 to n do
if A[i,1] < A[j,1]
then begin
k:= A[i,1];
A[i,1] := A[j,1];
A[j,1] := k end;
Какую задачу решает данная программа?
1
1
2
3
4
5
2
3
4
5
Решение задач
3а
Дан двумерный массив 5 x 5 из элементов, значения которых равны 0.
Как изменится значение В(2,4), если внести изменения в алгоритм:
For n:=1 to 5 do
for k:= 1 to n do
B[n,k] := n+k;
3б
Решение задач
4
1
1
2. Сколько элементов массива будут иметь
значения равные 2?
3. Сколько элементов массива будут иметь
значения равные 0?
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Решение задач
5
1
1
2. Сколько элементов массива будут иметь
отрицательные значения?
3. Сколько элементов массива будут иметь
значения равные 1?
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Решение задач
6
S:=0
Дан массив:
О 1 2
3 4 5
6 7 8
i:=2, N
j:=i-1, N-1
S:=S + A[i,j]
Вывод S1
Определить значение переменной S после выполнения данного алгоритма.
Самостоятельно:
Дан двумерный массив Т[(0,1,2),(1,2,0),(2,0,1)]. Вычислить значение
переменной Y после выполнения фрагмента программы:
S:=0; Y:=0; X:=K;
Wile X>0 do begin
S:=T[S, X mod 3];
Y:=Y * 3 + S;
X:=X div 3 end;
Writeln(Y)
1 вариант K=11
2 вариант K=13
Домашнее задание
Задачник-практикум § 4.4.4
стр. 270-271
Задача 1. Найти сумму элементов квадратной
матрицы, находящихся выше главной диагонали.
Задача 2. Найти сумму элементов каждой строки
квадратной матрицы, находящихся выше главной
диагонали.
Задача 3. (Дополнительно) Составить программу,
которая заполняет квадратную матрицу порядка N
натуральными числами 1, 2, 3, ….N², записывая их по
спирали (Задача №89 стр. 274 Задачника №1)
Практическая работа
Задача 1. Найти минимальные значения столбцов
таблицы.
Задача 2. Найти средние арифметические значения
элементов строк двумерного массива.
Дополнительно: Определить, является ли данная
квадратная матрица (элементы квадратной матрицы 3Х3
вводятся с клавиатуры) магическим квадратом.
Двумерные массивы (таблицы)
Задача 3. Переставить местами две строки в таблице.
Пусть дана таблица:
K–
L–
b[1,1]
b[1,2]
b[1,3]
b[1,4]
b[2,1]
b[2,2]
b[2,3]
b[2,4]
b[3,1]
b[3,2]
b[3,3]
b[3,4]
b[4,1]
b[4,2]
b[4,3]
b[4,4]
Перестановка строк двумерного массива
Program Obmen2;
write(‘k=‘); readln(k);
Uses
write(‘L=‘); readln(L);
crt;
Const n=4; m=4;
For j:=1 to m do
Var
begin
b:array[1..n,1..m] of real;
c:real;
i,j,k,L:integer;
Begin
c:=b[k,j];
b[k,j]:=b[L,j];
clrscr; randomize;
For i:=1 to n do
begin
For j:=1 to m do begin
b[i,j] := random(10);
write(b[i,j]:3) end;
writeln
end;
b[L,j]:=c;
end;
For i:=1 to n do
begin
For j:=1 to m do
write(b[i,j]:3);
writeln
end;
end.
Двумерные массивы (таблицы)
Задача 3. Переставить местами две строки в таблице (блок-схема)
нач
i:=1,n
j:=1,m
b[i,j] := random(10);
вывод b[i,j]
ввод K,L
i:=1,n
j:=1,m
j:=1,m
c:=b[k,j];
b[k,j]:=b[L,j];
b[L,j]:=c;
вывод b[i,j]
кон
Домашнее задание
1. Контрольная работа «Двумерные массивы»
2. Индивидуальная практическая работа
• Анализ решения задачи
• Блок-схема алгоритма
• Программа на языке Паскаль
Практическая работа
Задача 1. Найти средние арифметические значения
элементов строк двумерного массива.
Задача 2. Найти сумму элементов квадратной матрицы,
находящихся выше главной диагонали.
Задача 3. Найти сумму элементов каждой строки
квадратной матрицы, находящихся выше главной
диагонали.
Задача 4. Дополнительно: Определить, является ли данная
квадратная матрица (элементы квадратной матрицы 3Х3
вводятся с клавиатуры) магическим квадратом.
Контрольная работа
S1:=0
S2:=0
i:=2, N
i:=1, N-1
j:=1, i-1
j:=i+1, N
S1:=S1 + A[i,j]
S2:=S2 + A[i,j]
Вывод S1
Вывод S2
1
2
3
4
5
1 2 3
4 5 6
7 8 9
2 3 4
5 6 7
8 9 1
3 4 5
6 7 8
9 1 2
4 5 6
7 8 9
1 2 3
5 6 7
8 9 1
2 3 4
6
6 7 8
9 1 2
3 4 5
7
8
7 8 9
1 2 3
4 5 6
8 9 1
2 3 4
5 6 7