Автор: Клещунова Марина Анатольевна Образовательное учреждение: МОУ «Зональненская СОШ» Томского района. п. Зональная станция Предмет: Информатика. Класс: 10 Тема занятия: Базовый алгоритм нахождения максимального (минимального) элемента массива. Необходимое оборудование и материалы для занятия: компьютер, программная среда TurboPascal 7.0. Время реализации занятия: 45 мин. (1 урок). Задачи занятия: 1. Сформировать навыки поиска поиск минимума и максимума; 2. Закрепить навыки работы с одномерными массивами; 3. Сформировать навыки выполнения технологической цепочки разработки программ средствами языка программирования Pascal; 4. Активизировать познавательный процесс, направленный на формирование у учащихся навыков поиска собственного решения поставленной задачи. Педагогические технологии: проблемная, информационные. План занятия: Блок урока Организация начала урока. Рассказ сказки. Постановка проблемы Поиск решения Обобщение и выводы Домашнее задание Практическая работа на компьютере Время реализации 3 мин 1 мин. 18 мин. 2 мин. 1 мин. 20 мин. Ход занятия Учитель: Ребята, сегодня начнем урок с того, что я расскажу вам сказку В одном селе жил был храбрый кузнец. Он ничего не боялся, был справедливым и добрым малым. Недалеко от села находились развалины какого-то старого замка. По легенде, в этих развалинах хранились несметные сокровища. Много смельчаков пыталось добыть эти сокровища, но никто так и не вернулся живым с этих развалин. Как-то раз у кузнеца сильно заболел отец, а денег на лечение не было. Решил кузнец добыть денег в развалинах старого замка. Собрал он с собой котомку с запасом еды и отправился в путь. К развалинам кузнец подошел, когда уже стемнело. Там он нашел комнату, где был камин, развел огонь, сварил похлебку и сел ужинать. Тут раздался страшный гром и на пороге появился еле живой дряхлый старик. Кузнец подбежал к старику, скорее посадил его за стол поближе к огню, налил похлебки. После ужина старик повеселел и говорит: «Спасибо тебе добрый человек. За то, что ты меня обогрел и накормил, я тебя за это щедро награжу. Пойдем со мной». Пришли они в подвал, и кузнец увидел в нем целую гору золотых монет. А старик ему говорит: «Здесь 18000 монет разного номинала. Если ты к утру найдешь в этой куче монету самого большого номинала, то возьмешь с собой столько золота, сколько сможешь унести. Если же ты не успеешь этого сделать, то так и останешься в этом подвале навечно». Кузнец подумал, почесал голову, и приступил к работе. К утру, он отыскал нужную монету, взял награду и отправился домой, спасать своего больного отца. Ребята, представьте себя на месте кузнеца, как бы вы искали эту монету? Самый распространенный ответ: Разложу монеты в кучки по возрастанию. Комментарий учителя: так найти можно, но очень долго. А в подвале мало места и время ограничено. Подумайте еще. Иногда, ученики сами находят правильный алгоритм, если этого не происходит, то учитель задает наводящий вопрос: 1. Учитель берет в руку два разных предмета и спрашивает: «Какой предмет больше?». Ученики отвечают. А как вы это определили? Сравнили. А если, я возьму еще один предмет, какой из них будет больше? Сравним больший из двух с третьим и снова выберем который больше. 2. А теперь давайте сформулируем данный алгоритм для любого количества предметов (монета тоже предмет). Учитель выслушивает формулировки обучающихся для каждого этапа и выбирает подходящую. Словесная формулировка нахождения монеты наибольшего номинала: 1. Берем в одну руку первую монету; 2. Берем в другую руку - следующую монету; 3. Сравниваем монеты и оставляем в руке большую, а другую откладываем на новое место. 4. Повторяем предыдущие действия (п.2, п.3.), пока не закончатся все монеты. 5. В результате, в вашей руке останется монета наибольшего номинала. Учитель: «Давайте, формализуем данный алгоритм. Скажите, с помощью какого составного типа в языке программирования Turbo-Pascal мы можем представить в памяти компьютера наши монеты?» Предполагаемый ответ – массива. А какая размерность массива? Предполагаемый ответ – 18000. Нам еще нужны какие-нибудь переменные? Предполагаемый ответ – да, переменная цикла. Обозначим ее i. И переменная для хранения максимального значения номинала монеты. Обозначим ее MAX. Итак, в разделе описания переменных мы должны описать следующие переменные: VAR A:array[1..18000] of integer; {массив, который содержит номиналы монет} I: integer; {параметр цикла} MAX: integer; {переменная для хранения максимального значения} Учитель: Скажите, какой способ заполнения массива наиболее подходит для этой задачи? Предполагаемый ответ: массив удобнее всего заполнить случайными значениями. Учитель: Предположим, что номинал монет находится в диапазоне от 1 до 100. Как мы его запишем? Предполагаемый ответ: random(100)+1; Итак, в теле программы мы запишем: BEGIN For i:=1 to 18000 do Begin A[i]:=random(100)+1; Write(a[i]:5); End; Теперь формализуем ранее записанный словесный алгоритм нахождения монеты наибольшего номинала: Как запишется на формальном языке каждый пункт данной формулировки? Предполагаемый ответ: 1. Присвоить переменной max первый элемент массива; 2. Сравнить max со следующим элементом массива, если следующий элемент больше max, то max присвоить значение этого элемента. 3. Пункт 2. Повторить n-1 раз. (начальное значение переменной цикла 2). Итак, продиктуйте мне, пожалуйста, как я должна записать этот алгоритм на языке программирования Turbo-Pascal. (Ученики диктуют, учитель записывает, если возникает проблема, то она решается совместно учителем и учениками). В итоге получится следующий алгоритм нахождения максимального элемента массива: max:=A[1]; For i:=2 to 18000 do If max<a[i] then max:=a[i]; Скажите, мы увидим результат работы программы на экране монитора? Предполагаемый ответ: нет. Почему? Предполагаемый ответ: Потому, что мы не вывели значение переменной max. Как это сделать? Предполагаемый ответ: writeln(‘max=’,max); Таким образом, получилась программа: Program xx; Uses crt; VAR A:array[1..18000] of integer; {массив, который содержит номиналы монет} I: integer; {параметр цикла} max: integer; {переменная для хранения максимального значения} BEGIN For i:=1 to 18000 do Begin a[i]:=random(100)+1; Write(a[i]:5); End; max:=a[1]; For i:=2 to 18000 do If max<a[i] then max:=a[i]; writeln(‘max=’,max); readkey end. Ребята скажите, данную программу можно использовать только для нахождения монеты наибольшего номинала? Предполагаемый ответ: нет. Приведите примеры, где можно в нашей жизни использовать данный алгоритм? Наиболее часто приводимые примеры: 1. Данную программу можно использовать для определения победителя соревнований (кто набрал наибольшее количество очков); 2. Данную программу можно использовать для нахождения не только максимального, но и минимального значения элемента массива. 3. Данную программу можно использовать для определения максимальной или минимальной температуры окружающей среды за определенный период времени и т.д. Вывод: Таким образом, данный алгоритм можно использовать для решения не только одной задачи, но и целого ряда однотипных задач с разными входными значениями. Вопрос ученикам: Скажите, как называется это свойство алгоритма? Предполагаемый ответ: массовость. Вопрос ученикам: Что нужно изменить в программе, чтобы она работала для любой размерности массива? Предполагаемый ответ: Ввести n с клавиатуры и заменить 1800 на n. Второй способ задать n в разделе описания констант. А теперь наберите и отладьте данную программу на компьютере для n элементов массива, а затем модифицируйте данный алгоритм, выполнив следующее задание: 1) исправить программу так, чтобы найти минимальный элемент массива. 2) дописать программу, чтобы запоминался порядковый номер минимального элемента массива. Домашнее задание: придумайте задачу, для решения которой подходит данный алгоритм нахождения минимального (максимального элемента массива). Литература: 1) Н.Е. Тимошевская, Е.А. Перышкина «Основы алгоритмизации и программирования на языке Pascal». Справочник. Учебное пособие. Томск 2005. - 135с. 2) Тимошевская, Н. Е., Перышкина, Е. А. Основы алгоритмизации и программирование на языке Pascal. Рабочая тетрадь: Учеб. пособие. — Томск, 2005. — 116 с. Пособия рекомендованы Российской академией образования к использованию в образовательных учреждениях, реализующих образовательные программы общего образования и допущены ДОО Томской области. Пояснение к сказке: Сказка составлена по мотивам старинной итальянской сказки «Храбрый мельник». Сказку «Храбрый мельник» я читала очень давно, еще в детстве, книга была библиотечная, поэтому автора сборника сказок восстановить не представляется возможным. Сказка была очень длинная со многими подробностями, и в этой сказке проблема была поставлена перед мельником другая – нужно было разделить монеты пополам, а количество монет было нечетным. Мельник для решения проблемы разрубил монету пополам. При прохождении темы нахождения максимального (минимального) элемента массива мне пришла в голову мысль, а что если переделать сказку так, чтобы герою пришлось искать монету максимального номинала. А так как в русских сказках мельники всегда состоятельные люди, а герой был беден, то я изменила героя сказки на кузнеца.