search
main
0

Явный перебор! Использование методов программирования для решения задач

Цель урока: обобщить и закрепить полученные ранее знания и умения по технологии работы над программой и методах программирования.
Задачи:
. Обучающие – использовать процедурно-модульный принцип построения программы; применить на практике метод перебора, операцию транспонирования матрицы, поиск элемента в массиве.
. Воспитательные – умение работать в группе, индивидуально, коллективно; организовать и координировать работу групп для достижения общей цели.
. Развивающая – развитие способности продуцировать оригинальные идеи; умения оценить процесс и результат деятельности; гибкости мышления.
Продолжительность – 2 академических часа.
План урока:
1. Организационный момент.
2. Создание проблемной ситуации.
3. Практическая работа:
– постановка задачи;
– определение методов программирования, необходимых для решения данной задачи;
– разработка алгоритма;
– выдача групповых заданий на программирование;
– сборка программы, редактирование;
– выполнение программы на тестовом примере.
4. Подведение итогов урока.
Оборудование:
. наглядное пособие – выполненный на прозрачной пленке квадрат 4 х 4, в клетки которого вписаны символы:

. непрозрачный квадрат 4 х 4 с вырезанными “окнами”:

. кодоскоп для демонстрации способа прочтения шифровки (если кодоскоп отсутствует, наглядные пособия могут быть изготовлены на ватмане);
. файлы данных:
– codlet.dat – текстовый файл –
бомодаьовк
рченлн-жеа
елото-ронс
-дааведшаы
кр-ркиумми
геабазркар
рвдрйап-от
чаеатшасио
жтьдз-кная
имлокьость
– maska.dat – текстовый файл –
**********
* *******
* ** *****
**** *****
**********
* ***** **
******* **
**********
*** ******
*** ******
Ход урока
Организационный момент. Объявление темы и цели урока.
Создание проблемной ситуации. Существует наука криптография, которая занимается шифровкой и расшифровкой текстов, разрабатывает принципы кодирования информации. Нередко с закодированными сообщениями мы встречаемся в литературных произведениях, например, в рассказах Артура Конан Дойла о Шерлоке Холмсе. Конечно, вы читали эти рассказы, напомните мне, как герои Конан Дойла шифровали свои послания (“пляшущие человечки”, принцип кодирования – положение рук и ног фигурок). В одном из рассказов информация “пряталась” среди беспорядочного расположения букв и могла быть прочитана только с помощью специальной “маски”-листа бумаги с прорезями, который накладывается поверх текста. (Информация читается в прорезях). (Показываю на наглядном пособии, читается текст “вас ждет успех”). Пример такого прочтения мы видели в титрах фильма “Шерлок Холмс и доктор Ватсон”. А можно ли с помощью компьютера прочесть зашифрованный таким образом текст?
Постановка задачи. Имеются закодированный текст, вписанный в квадрат 10 х 10, и ключевая матрица – “маска”. Известно, что в исходном тексте слова взяты из набора слов d1, d2, … d15. Слова в тексте не содержат пробелов и заканчиваются символом “-“. Требуется написать программу дешифровки исходного текста. [1]
Определение входных и выходных данных. Входными данными для программы являются:
– текстовый файл codlet.dat, в котором хранится закодированный текст в виде символьной матрицы размера 10 х 10;
– текстовый файл maska.dat, в котором хранится ключевая матрица размером 10 х 10. В ней символ ⌠■ (пробел) соответствует прорези маски;
– словарь допустимых слов из 15 элементов: ребенок, должен, играть, человек, не, а, погода, он, работать, и, базар, отдыхать, думать, помогать, машина.
Результатом работы программы должна быть выведенная на экран монитора расшифрованная фраза.
Разработка модели. В совместном с учениками рассуждении определяем методы программирования, которые будем использовать для решения задачи:
. метод перебора (для нахождения первоначального положения маски);
. транспонирование матрицы (для поворота маски по часовой стрелке);
. поиск элемента в массиве; так как размер массива невелик, можно использовать прямой поиск (при необходимости усложнить задачу можно поставить условие использовать бинарный поиск) – для проверки вхождения слов в словарь;
. метод последовательной детализации алгоритма (для разработки алгоритма решения задачи).
Разработка алгоритма в соответствии с требованиями процедурно-модульного принципа создания программы.
В совместном обсуждении выделяем основные модули алгоритма. Работа проходит следующим образом: ребята предлагают и аргументированно доказывают необходимость именно этого модуля. В результате получаем следующее (рис. 1):
– модуль ввода данных из файлов codlet.dat и maska.dat;
– модуль эхо-печати введенных данных;
– модуль поворота матрицы по часовой стрелке;
– модуль проверки вхождения расшифрованного слова в словарь допустимых слов;
– основная программа.
Далее определяем входные и выходные данные и детализируем алгоритмы каждого модуля.
Выдача групповых заданий на программирование. Класс разбивается на группы по 2-3 человека в соответствии с количеством модулей (5 групп).

Рис. 1

Назначается руководитель проекта. В его обязанности входят выдача задания для каждой группы, согласование имен переменных, количества и типа параметров для каждого модуля. В каждой группе назначается руководитель, в задачи которого входит не только выполнить работу по написанию и отладке порученного модуля, но и организовать работу внутри группы, согласовать свои действия с руководителем проекта. Группа, работающая над основной программой, принимает уже отлаженные процедуры и функции, выполняет “сборку” программы и ее редактирование.
Проверка программы на тестовом примере. В результате правильной работы программы на экране монитора дети должны прочесть фразу:
“Человек должен думать а машина работать” (запятая в тексте не кодируется).
Текст программы на языке Паскаль 7.0

program decoder;
uses crt;
const n=10;
type tabl = array [1..n, 1..n] of char;
var cod, // массив для кодированного текста
m: tabl; // матрица маска
i, j, var_t: integer; // переменные – параметры циклов
slovo: string(8); // переменная для хранения прочитанного слова
fraza: string; // переменная для расшифрованной фразы
// ввод информации из файла
// входные данные – имя файла; выходные – символьный массив
procedure readfile (filename: string; var mas: tabl);
var f: file of char;
i, j: integer;
begin
assign (f, filename);
reset (f);
for i: = l to n do
for j: = l to n do
read (f, mas([i, j]);
end;
// эхо – печать
// входные данные – массив, прочитанный из файла
procedure echoprint (mas: tabl);
var i, j: integer;
begin
for i: = l to n do
begin
for j: = l to n do
write (mas [i, j], ⌠■);
writeln;
end;
end;
// поворот матрицы маски
// входные и выходные данные – массив маска
procedure trans (var mas: tabl);
var i, j: integer;
mt: array [l..n, l..n] of char; // массив для временного хранения повернутой
// матрицы
begin
for j: = l to n do
for i: = l to n do
mt [j, n – i + l]: mas [i, j];
for i: = l to n do
for j: l to n do
mas [i, j]: = mt [i, j];
end;
// проверка вхождения слова в словарь допустимых слов
// входные данные – слово, выходные – логическое значение
// словарь допустимых слов задается константой
function find (slovo: string): boolean;
const diction = (“ребенок”, “должен”, “играть”, “человек”, “не”, “а”, “погода”, “работать”, “и”, “базар”, “отдыхать”, “он”, “думать”, “помогать”, “игра”)
s = 15;
var i: integer;
b: boolean;
begin
b: = false;
for i: = l to s do
if if diction [i] = slovo then
b: = true;
find: = b;
end;
// основная программа
begin
// задание начальных установок и значений переменных
clrscr;
slovo: = ⌠■;
fraza: = ⌠■;
// ввод из файла шифрованного текста в матрицу cod
readfile (⌠codlet.dat, cod);
// эхо – печать шифрованного текста
writeln (⌠шифровка■);
echoprint (cod);
// ввод из файла маски в матрицу m
readfile (⌠maska. dat■, m);
// эхо – печать маски
writeln (⌠маска■);
// для положения маски от 1 до 4
for var _ t: = l to 4 do
begin // считывание слова из шифровки
for i: l to n do
for j: l to n do
if m[i, j] = ⌠■then
if cod[i, j] <> ⌠_■ then
slovo: = slovo + cod[i,j]
else
// слово считано, если входит в словарь
// допустимых слов, добавляется к фразе
begin
if find (slovo) then
fraza: = fraza + slovo;
slovo: = ⌠■;
end;
trans(m); // поворот маски по часовой стрелке
end;
// вывод результата
writeln (⌠закодированная фраза – ⌠);
writeln (fraza);
end.

Нина СЕРГЕЕВА,
педагог дополнительного образования Центра внешкольной работы и детского творчества
Кандалакша,
Мурманская область

Оценить:
Читайте также
Комментарии

Реклама на сайте