Тема раздела: Основы алгоритмизации и программирования
Тема урока: Преобразование элементов массива
Цели:
Познакомить учащихся с преобразованием элементов массива: замена элементов, удовлетворяющих определенному условию, перестановка (обмен местами) двух элементов; формировать умение выполнять преобразование элементов массива
Развивать у учащихся логико-алгоритмическое мышление, умение выделять главное в изученном материале, сравнивать, обобщать
Воспитывать дисциплинированность, собранность, сознательность, ответственность за сохранность школьного имущества
Оборудование: класс компьютерной техники, доска, карточки с заданиями
План урока:
Организационный момент (1 - 2 минуты)
Этап повторения изученного материала (5 - 7 минут)
Этап изучения нового материала (15 - 20 минут)
Домашнее задание (1 - 2 минуты)
Закрепление изученного материала (15 минут)
Подведение итогов (2 - 3 минут)
Ход урока.
Здороваюсь. Концентрирую внимание учащихся, предлагаю им сесть, проверяю отсутствующих.
Выполняют тестовое задание (до 3 мин.) Правильно выполненный тест оценивается в 3 балла. Одно правильно выполненное задание оценивается в 0,6 балла.
Что называют массивом?
Результат работы программы
Обозначаемая одним именем последовательность однотипных элементов
Диапазон индексов, определяющий максимально возможное количество элементов
Сколько элементов содержится в массиве var c: array [3..10] of integer;
8;
9;
10;
7;
3;
Как правильно сгенерировать целые случайные числа из промежутка [10,25]?
Random
Random (34)-10
Random (16)+10
Random (10)+random(25)
Из предложенного списка, выберите функцию округления, которая возвращает значения целого типа:
Random()
Writeln()
Round()
Integer
После выполнения программы с использованием функции round() в какой из предложенных массивов могут быть записаны полученные 9 элементов?
C: array [1..9] of integer
C: array [1…9] of integer
C: array [-1..6] of integer
C: array [1..9] of real
C: array [1…9] of real
После выполнения разбираем написанный тест и указываем правильные ответы(3 мин.)
Ребята, на прошлом занятии вы начали изучать тему «Преобразование элементов массива». Эти знания нам понадобятся сегодня, так как мы продолжаем изучать данную тему. В некоторых задачах требуется выполнить преобразования не всех элементов массива, а лишь удовлетворяющих определённым условиям, например с отрицательными, четными значения или значениями, кратными заданному числу.
Давайте рассмотрим задачу: Составить программу, которая формирует массив из 15 случайных чисел, принадлежащих промежутку [-8; 16], заменяет положительные числа на 17 и выводит значения элементов массива до и после замены.
Давайте составим код программы этой задачи на доске. С чего начинается любая программа, составленная на языке программирования Pascal ABC? (с служебного слова program и имени программы). Какие ограничения мы накладываем на имя программы? (не должно начинаться с цифры и должно содержать латинские символы).
Program zamena;
Далее рассуждаем по условию программы. Что мы делаем следующим шагом? (задаем массив) В каком блоке мы его задаем? (в блоке описания). Как мы его задаем?
Var C: array [1..15] of integer
Так как у нас 15 элементов массива, то что нам еще нужно? (счетчик). Где и как мы ее зададим? (так же в блоке описания)
i: integer;
Хорошо, что мы делаем дальше? (пишем операторные скобки begin end.) что дальше нам нужно сделать? (заполнить массив случайными числами) С помощью какого цикла мы будем заполнять массив? (с помощью цикла for). При помощи какой функции мы будем заполнять массив случайными числами? (random)
For i:=1 to 15 do C[i] := random(25)-8;
Теперь что нам надо сделать? (вывести элементы массива) как мы это будем делать? (при помощи процедуры write (чем отличается write от writeln? – writeln каждый символ выводит с новой строчки))
For i:=1 to 15 do write(C[i]:4); (означает, что между символами будет отступ на 4 отступа)
Далее мы заменяем положительные числа на 17. Как мы это будем делать? (при помощи оператора if)
If C[i]0 then C[i]:=17; а теперь выводим полученный массив.
For i:=1 to 15 do write(C[i]:4);
End.
(полный код программы)
Program zamena;
Var C: array [1..15] of integer
i: integer;
Begin
For i:=1 to 15 do C[i] := random(25)-8;
For i:=1 to 15 do write(C[i]:4);
If C[i]0 then C[i]:=17;
For i:=1 to 15 do write(C[i]:4);
End.
Может теперь вы приведете условие задачи с подобной заменой? (приводят примеры)
Аналогичным способом производится замена элементов массива по иным условиям, например:
Замена всех нечетных значений элементов массива квадратами их номеров: if A[i] mod 2 = 1 then A[i]:=sqr(i);
Замена всех отрицательных чисел их квадратами, а неотрицательных – значениями квадратного корня: if A[i]then A[i]:=sqr (A[i]) else A[i]:=sqrt (A[i]); но при использовании функции sqrt() какие значения получаются? (вещественные) Какой требуется для них тип массива? (требуется тип массива real). Что нужно сделать, чтобы можно было использовать тип integer? (использовать функцию округления round()).
Элементы массива мы можем не только заменять по определенному условию, но и переставлять. Как вы думаете, как мы будем переставлять (обменивать местами) 1 и 2-й элементы массива? (второму присваиваем значение первого, а первому присваиваем значение второго)
Тут привожу пример по их предложению, и показываю что это не правильно.
Как вы правильно заметили, перестановка (обмен местами) двух элементов массива сводится к обмену их значениями. Для этого используют дополнительную переменную (которую называют буфером обмена)
Рассмотрим нашу задачу, только немного поменяем условие: Составить программу, которая формирует массив из 15 случайных чисел, принадлежащих промежутку [-8; 16], меняет местами 4 и 11 элементы и выводит значения элементов массива на экран до и после обмена.
Что в нашей задаче нужно поменять, чтобы выполнялось новое условие? (If C[i]0 then C[i]:=17; заменить на B:=C[1]; C[1]:=C[2]; C[2]:=B и добавить в блок описания переменной В:integer;)
Домашнее задание: задание №3 в тетрадях написать программу (раздаю номера каждому отдельно)
А теперь давайте закрепим изученный нами материал. Я раздаю вам карточки, на которых написаны условия задач. Первую задачу нужно выполнить обязательно. Пока не выполнена первая задача, к следующей переходить нельзя. За полностью правильный выполненный в начале урока тест и правильно выполненную первую задачу вы можете получить 5 баллов, далее, если вы решаете следующую задачу вы можете получить +1,3 балла. В сумме, если вы правильно выполнили тест, и правильно решили задачи вы можете получит 9 баллов за урок. Кто претендует на 10 баллов, должен решить еще и дополнительную задачу.
Наберите программу н компьютере и заполните пропуски ввода и вывода 10 целочисленных элементов массива, заданных случайным образом на промежутке [10;30]:
Var D : array [1..__] of ______________;
i : integer;
begin
for i:=1 to ____ do
begin
D[i]:=random(___)+____;
Write(_____);
end__
end.
)
Составить программу, которая формирует массив из 20 случайных чисел от -15 до 11 и отрицательные числа заменяет на положительные, а из положительных извлекает квадратный корень.
Решение:
program hj;
var A: array [1..20] of integer;
i:integer;
begin
for i:=1 to 20 do A[i]:=random(27)-15;
for i:=1 to 20 do write(A[i]:7);
writeln;
for i:=1 to 20 do
if A[i]
for i:=1 to 20 do write(A[i]:7);
end.
Составить программу, которая формирует массив из 16 случайных чисел от -18 до 12 и числа, кратные 3 увеличивает в 2 раза, а остальные возводит в квадрат.
Решение:
program hj;
var A: array [1..16] of integer;
i:integer;
begin
for i:=1 to 16 do A[i]:=random(31)-18;
for i:=1 to 16 do write(A[i]:7);
writeln;
for i:=1 to 16 do
if A[i] mod 3=0 then A[i]:=A[i]*2 else A[i]:=round(sqr(A[i]));
for i:=1 to 16 do write(A[i]:7);
end.
Составить программу, которая формирует массив из 6 случайных чисел от 7 до 32 и меняет местами 2-й и 3-й элементы массива.
Решение:
program hj;
var A: array [1..6] of integer;
i,b:integer;
begin
for i:=1 to 6 do A[i]:=random(26)+7;
for i:=1 to 6 do write(A[i]:7);
writeln;
b:=A[2]; A[2]:=A[3]; A[3]:=b;
for i:=1 to 6 do write(A[i]:7);
end.
(дополнительная) Составить программу, которая формирует массив из 20 случайных чисел от -100 до 110 и меняет местами 5-й и 19-й элементы массива.
Решение:
program hj;
var A: array [1..20] of integer;
i,b:integer;
begin
for i:=1 to 20 do A[i]:=random(221)-100;
for i:=1 to 20 do write(A[i]:7);
writeln;
b:=A[5]; A[5]:=A[19]; A[19]:=b;
for i:=1 to 20 do write(A[i]:7);
end.
1. Какие преобразования элементов массивов возможны? (напр. преобразовывать единицы измерения, масштабы и координаты, изменять значения элементов в зависимости от выполнения некоторых условий, менять местами элементы в массиве )
2. С какой целью используют дополнительную переменную (буфер) при обмене местами элементов массива? (в буфер помещают значение заменяемого элемента, затем элементу присваивают значение второго(заменяющего его) элемента, которому в свою очередь присваивают значение буфера обмена)
Наш урок подошел к концу. Выставляю отметки за урок. До свиданья.
9