
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Лабораторная работа
- •Лабораторная работа
- •Задания
- •Лабораторная работа
- •Описание процедур начинается со строки:
- •Задания I уровень
- •Задания II уровень:
- •Задания
- •Лабораторная работа
- •Задания
- •II уровень
- •Задания I уровень
- •Задания II уровень
- •Петров л.Л 9 9 9 Барановичи
- •Лабораторная работа
- •Задания I уровень
- •II уровень
- •Самостоятельная работа
- •Литература
Лабораторная работа
ТЕМА: Программирование с использованием массивов. Поиск наибольшего (наименьшего) элемента в массиве.
ЦЕЛЬ: Закрепить умение учащихся работать с массивами. Овладевать навыками поиска нужного элемента в массиве.
ПО:TURBO PASCAL.
ТЕОРИЯ:
Для поиска наибольшего элемента последовательности можно применить следующий метод решения: в некоторой переменной М запоминаем первое число. Остальные элементы последовательности сравниваем с числом, хранящимся в М. Записываем в M большее из этих чисел (т.е. сохраняем в M прежнее число - если оно больше, - либо записываем вместо него следующее).
Повторяем операцию сравнения до тех пор, пока не дойдем до конца данной последовательности (последовательный перебор).
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
Изучить описание лабораторной работы
Войти в режим редактирования и набрать текст программы.
Запустить программу на трансляцию и выполнение (<Ctrl+F9>) (выполнение по шагам –клавиши <F7> или <F8>. Ввод данных для выполнения программы по шагам: <Ctrl+F7>). Просмотр результатов: <Alt+F5>.
Проверить работоспособность программы на других исходных данных.
Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ:
Имеется 6 (1000) пронумерованных слитков золота. Вам можно выбрать самый тяжелый. Как Вы будете действовать?
(Cоставить программу нахождения наибольшего из 6 (1000) элементов последовательности):
На Интале |
На Паскале |
Комментарии |
Программа Описание A:Массив[6] Целый i, m:Целый Конец_Описания a[1]:=5 a[2]:=1 a[3]:=7 a[4]:=13 a[5]:=8 a[6]:=21 m:=a[1] Повторять_ Для i от 2 до 6 Если a[i]>m то m:=a[i] Конец_Если Завершить Вывод(m) Конец_Программы |
const n=6; a: array[1..n] of integer = (5,1,7,13,8,21); var i ,m : integer;
begin m:=a[1]; for i:= 2 do n do if a[i]>m then m:=a[i]; writeln ('max=', m) end.
|
В переменной m запоминаем первое число. Остальные элементы последовательности сравниваем с числом, хранящимся в m. Записываем в m большее из этих чисел (т.е. сохраняем в m прежнее число - если оно больше, - либо записываем вместо него следующее). Повторяем операцию сравнения до тех пор, пока не дойдем до конца данной последовательности. |
а) Тут как тут объявился черт, который подменил слитки на булыжники, а выбирать необходимо, такова иногда жизнь. Как бы Вы сейчас действовали?
(можно поменять знак '... ' на '...').
2. Действия черта были замечены и обманные слитки помечены знаком “-“, а настоящие – знаком ”+”. Вам нужно сделать выбор среди слитков, помеченных знаком ”+”(«-»). (Найти наибольшее из положительных / (отрицательных) элементов массива). Можно добавить структуру выбора:
Если а [i ] >0 и a[i]> max
То max:=a[i] if (а[ i ] > 0) and (max<a[i]) then max:= а[i ]
Конец_Если
Для отрицательных элементов эта структура будет записываться …
3. Вы по-прежнему выбираете один из пронумерованных слитков. Но теперь Вы должны принести на финиш не только самый тяжелый слиток, но и записать его номер. (В массиве из N элементов найти наименьший из элементов массива и его порядковый номер. Необходимо ввести дополнительную переменную k, дать ей начальное значение, равное 1, а в цикле, как только найдется элемент, превышающий max, запомнить его значение в переменной мах и одновременно в переменной k запомнить значение переменной i, т.е. порядковый номер наименьшей на момент просмотра величины).
4. Интересно, а сколько слитков наибольшего веса есть в наборе? (В массиве из N элементов найти количество наибольших элементов массива (сколько циклов в Вашей программе?).)
5. Вам необходимо выбрать теперь уже два слитка: самый тяжелый и самый легкий. (В массиве из N элементов найти наибольший и наименьший из элементов массива.) Как бы сделать так, чтобы выполнить задачу за один проход?
6. Придумайте свои занимательные задачи.
ЗАДАЧИ II УРОВНЯ
У жильцов дома изменились обстоятельства и они затеяли переезд. В частности, жильцы квартиры с наибольшей площадью хотят поменяться с жильцами квартиры с наименьшей площадью. Составьте алгоритм (программу) такого обмена.
Дана последовательность из 100 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами (в сумму можно включить и сами эти два числа).
В ЭВМ поступают результаты N участников соревнований по плаванию. Выдать на печать результаты трех лучших участников (Если результаты нескольких участников, например, претендующих на первое место, одинаковы, то выдавать на печать только одно значение).
В ЭВМ поступают фамилии и результаты N участников соревнований по плаванию и их фамилии. Выдать на печать результаты трех лучших участников и их фамилии. Считать, что результаты регистрирует фотофиниш и результаты спортсменов различны.
В ЭВМ поступают результаты N участников соревнований и фамилии спортсменов. Выдавать на печать лучший результат после выступления очередного участника. После окончания соревнования напечатать итоговое сообщение о победителе.
В соревнованиях по фигурному катанию выступление каждого спортсмена независимо оценивается несколькими судьями, а затем из набора оценок удаляются наиболее высокая и наиболее низкая. Вывести на печать новое распределение оценок данного спортсмена.
Дано некое число. Выбросить из него наибольшую и наименьшую цифру. Если наиболее высокая цифра не одна, выбросить их все, аналогично поступить с наименьшей цифрой.
В соревнованиях по фигурному катанию выступление каждого спортсмена независимо оценивается несколькими судьями, а затем из набора оценок удаляются наиболее высокая и наиболее низкая, а для оставшихся оценок вычисляется среднее арифметическое, которое и идет в зачет спортсмену. Если наиболее высокую оценку выставило несколько судей, то удаляется только одна такая оценка; аналогично поступают с наиболее низкими оценками. Определить оценку, которая пойдет в зачет спортсмену (два знака после запятой).
В соревнованиях по фигурному катанию участвуют N спортсменов. Выступление каждого спортсмена независимо оценивается несколькими судьями, а затем из набора оценок удаляются наиболее высокая и наиболее низкая, а для оставшихся оценок вычисляется среднее арифметическое, которое и идет в зачет спортсмену. Если наиболее высокую оценку выставило несколько судей, то удаляется только одна такая оценка; аналогично поступают с наиболее низкими оценками. Определить оценку, которая пойдет в зачет каждому спортсмену.
В соревнованиях по фигурному катанию участвуют N спортсменов. Выступление каждого спортсмена независимо оценивается несколькими судьями, а затем из набора оценок удаляются наиболее высокая и наиболее низкая, а для оставшихся оценок вычисляется среднее арифметическое, которое и идет в зачет спортсмену. Если наиболее высокую оценку выставило несколько судей, то удаляется только одна такая оценка; аналогично поступают с наиболее низкими оценками. Определить оценку, которая пойдет в зачет каждому спортсмену после первого дня соревнований. Вывести список спортсменов для второго дня соревнований вместе с полученными очками (начинают катание фигуристы, получившие наименьшее количество баллов).
У прилавка в магазине выстроилась очередь из N покупателей. Известно время обслуживания продавцом каждого покупателя. Определить время пребывания каждого покупателя в очереди. Указать номер покупателя, для обслуживания которого продавцу понадобилось меньше всего времени.
САМОСТОЯТЕЛЬНАЯ РАБОТА:
В сказочном магазине «Матматика» цены на игрушки были простыми числами.(Всего N игрушек) Хрюша решил удивить своих друзей Степашу и Каркушу и купить самую дорогую игрушку. У него с собой P рублей. Может ли он выполнить свое желание? Если нет, то какой стоимости игрушку он может купить?
Поменять местами наибольший элемент с последним элементом массива, а наименьший элемент - с первым элементом массива.
ВОПРОСЫ ДЛЯ ЗАКРЕПЛЕНИЯ:
Сколько циклов нужно для поиска наибольшего элемента в наборе однотипных элементов?
Сколько циклов нужно для поиска количества наибольших элементов?
Известны цены на один и тот же товар в нескольких магазинах. Определите, в каком магазине товар можно купить дешевле всего? Приведите формализованное описание условия.
Великан Гигабайт поймал семь малышей - семь братьев Чипов. Желая повеселиться, великан заявил, указывая на рычажные весы без гирь: "Если вы найдете способ, как найти самого легкого из семи братьев за шесть взвешиваний, я отпущу его?" Как это сделать?
Если братья найдут шесть способов поиска самого легкого из братьев, великан обещал отпустить всех. Вы поможете братьям?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ДВУМЕРНЫХ МАССИВОВ.
ЦЕЛЬ: Познакомить учащихся с массивами, научить вводить и выводить, обрабатывать данные, занесенные в массив, т.е. усвоить правила работы с переменными типа массив языка программирования Паскаль.
ПО:TURBO PASCAL.
ТЕОРИЯ: Под массивом понимается упорядоченная совокупность (последовательность, набор) конечного числа данных одного типа, объединенных под общим именем. Имена массивов образуются так же, как и имена простых переменных. Двумерные массивы можно описать следующим образом:
var имя массива ; array [размер] of тип, где в "размере" указывается на первом месте количество строк, а на втором месте – количество столбцов;
Например: var f: array[1..n,1..m] of real; {- массив, состоящий из n строк и m столбцов и в нем -n*m элементов вещественного типа}.
a:array [1..10,1..5] of integer {-массив, состоящий из 10 строк и 5 столбцов и в нем -10*5 элементов целого типа}.
Вводить, выводить данные в массив и из массива, обрабатывать данные удобно с помощью циклов, например:
один из способов ввода данных в массив |
вывод данных из массива (таблицей) |
for i:=1 to n do for j:=1 to m do read(а[i,j]); |
for i:=1 to n do begin for j:=1 to m do write(а[i,j],’ ‘); writeln; end; |
Итак, а[i,j] - значение элемента массива a, первым указывается i - порядковый номер строки, вторым j - порядковый номер столбца, на пересечении которых находится данный элемент.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
Изучить описание лабораторной работы
Войти в режим редактирования и набрать текст программы (см. пункт 1 задания).
Запустить программу на трансляцию и выполнение (ctrl-<F9>).
Эту же программу выполнить по шагам с использованием Турбо - отладчика (при выполнении очередного шага нажимать клавиши <F7> или <F8>).В окно Watch можно занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав<Ctrl+F7>)
Проверить работоспособность программы на других исходных данных.
Составить программы для других пунктов задания.
Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ:
Дана программа нахождения суммы элементов массива:
На Интале |
На Паскале |
Программа summa Описание A: Массив[2,10] Целый i,j, S: Целый Конец_Описания Повторять Для i от 1 до 2 Для j от 1 до 10 Ввод(A[i,j],'элемент=') Завершить s:=0; Повторять Для i от 1 до 2 Для j от 1 до 10 s:=s+A[i,j]; Завершить Вывод(s) Конец_Программы |
а)const a: array[1..2,1..10] of integer= ((5,7,0,3,-5,4,-5,7,0,1), (2,3,6,0,1,1,1,2,9,7)); var i, j, S, : integer; begin S:= 0; for i:= 1 to 2 do for j:= 1 to 10 do S:= S + a [i,j] ; Writeln ( S ) End. б) var i, j, S, : integer; a: array[1..2,1..10] of integer; begin for i:= 1 to 2 do for j:= 1 to 10 do read(a[i,j]);
S:= 0; for i:= 1 to 2 do for j:= 1 to 10 do S:= S + a [i,j] ;
Writeln ( S ) End. |
а) изменить программу так, чтобы она находила среднее арифметическое чисел, входящих в массив.
б) изменить программу так, чтобы она находила произведение элементов массива. Чему произведение равно? Если 0, то как исправить программу?
2. Найти сумму положительных элементов массива, добавив структуру:
Если а [i,j ] >0
То S:= S+а [i,j] if а[ i,j ] > 0 then S:= S+а [i,j ];
Конец_Если
3. Известны цены на 5 товаров в 3 магазинах. Определить товар наибольшей стоимости.
4. Известны следующие данные по магазинам:
№ магазина |
Товарооборот за март |
Товарооборот за апрель |
Товарооборот за май |
1 |
45 |
47 |
41 |
2 |
55 |
58 |
50 |
3 |
62 |
55 |
55 |
Создайте программу, вычисляющую суммарный товарооборот по каждому магазину за 3 месяца. Выведите таблицу результатов вычислений на экран, используя оператор WRITELN(A:n, B: m), где А – номер магазина, В–выводимые значения суммарного товарооборота, n,m - количество позиций, которое отводится под переменную на экране пользователя.
5. Известны цены на 5 товаров в 3 магазинах. Определить количество единиц товара наибольшей стоимости.
ЗАДАНИЯ II УРОВНЯ
1. Найти наибольший элемент а заштрихованной части матрицы размерности n*n (см. рис. 1)
2. Заполнить матрицу n*n по стрелке (cм. рис.– по часовой стрелке либо против ее).
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Как описывается двумерный массив?
Какова размерность массива с[1..21,1..3] of real?
Как вводить данные в двумерные массивы?
Как выводить данные из двумерного массива?
Почему удобно пользоваться циклами при работе с массивами?
ЛАБОРАТОРНАЯ РАБОТА
Тема: АЛГОРИТМ ПОСЛЕДОВАТЕЛЬНОГО ПОИСКА(1 вариант)
ЦЕЛЬ: Учащиеся должны освоить алгоритмы поиска элемента с заданными свойствами в одномерном массиве.
ПО:TURBO PASCAL
ТЕОРИЯ:
Перед нами стоит задача - найти заданный элемент (есть ли он) в наборе. Такая задача называется задачей поиска. Большинство задач поиска сводится к поиску в некотором массиве данных элемента с заданным значением. Если нет дополнительной информации о разыскиваемом элементе или о данных, среди которых ведется поиск, то приходится последовательно просматривать весь массив и сравнивать очередной элемент из массива с заданным. Если значение очередного элемента совпадает с разыскиваемым, то запоминаем его номер. Можно высказанную идею выразить следующим циклом:
(1)
Интал Pascal (примечание)
Повторять
Для i от 1 до n for i:=1 to n do i-параметр цикла,
Если a[i]=R if a[i]=R then k:=i; R–разыскиваемый элемент,
То k:=i k–переменная, где находится
Конец_Если порядковый номер
Завершить искомого элемента в
в случае удачного поиска.
Алгоритм поиска объекта во множестве, состоящем из n объектов, последовательно перебирает объекты множества. Сложность худшего случая равна n (искомый объект может оказаться последним); средняя продолжительность поиска равна сумме всех номеров от 1 до n, деленной на n, что составляет (n+1)/2. В обоих случаях функция сложности имеет вид a*n+b, т.е. является линейной.
Недостатки этого алгоритма:
если значение R встречается несколько раз, то найдено будет последнее из них.
в любом случае массив просматривается до конца.
Улучшить алгоритм можно, если будем прерывать поиск после обнаружения нужного элемента.
Число сравнений при этом неизвестно, надо использовать цикл с предусловием (идею можно реализовать двумя вариантами):
Интал |
Pascal |
|
k:=0; i:=1; Повторять_Пока i<=n Если a[i]=R То k:=i i:=n Конец_Если i:=i+1; Завершить |
k:=0; i:=1; while i<=n do begin
if a[i]=R then begin k:=i; i:=n end; i:=i+1; end; |
Если находится элемент, равный R, то его номер запоминается в переменной k, а параметру цикла присваивается значение, равное номеру конечного элемента n, чтобы выйти из цикла и закончить поиск.
(2а) |
i:=1; Повторять_Пока (i<=n) и (a[i]<>R) i:=i+1 Завершить |
i:=1; while (i<=n) and (a[i]<>R) do inc(i); |
поиск до конца массива или до обнаружения искомого элемента. В этой конструкции важен порядок вхождения простых условий в составное условие цикла. (2б) |
ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ ЗАДАНИЯ:
1. Изучить необходимые сведения (см. выше).
2. Изучить задания. По каждому– разработать и ввести программу в память ЭВМ.
3. Отладить программу с помощью отладчика TP (клавиши <F7> или <F8>)
4. Выполнить программу, используя команду Run в меню RUN (ctrl+F9).
5. Выполнить остальные пункты задания.
6. Оформить отчет, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1. Реализовать идею (1) алгоритмом или программой. Можно проверить исполнение алгоритма в режиме пошагового просмотра.
2. Реализовать идею (2а) алгоритмом или программой (можно модифицировать предыдущую).
Если в массиве несколько элементов, совпадающих с разыскиваемым, какой из них будет найден после исполнения программы?
3. Реализовать идею (2б) алгоритмом или программой. Проверьте работу и этой программы при различных n, например. Какая из программ Вас больше устроила? (Кстати, как еще можно реализовать данную идею?)
4. Измените программу (1 или 2), для поиска разыскиваемого элемента массива, равного R, с наибольшим номером.
5. Недостаток идеи (2б) – сложное условие в заголовке цикла, что замедляет поиск. Измените программу так, чтобы в заголовке цикла осталось лишь простое условие a[i]<>R. (Можно ввести барьер (дополнительный элемент) в массив a[n+1]=R).
ЗАДАНИЯ II УРОВНЯ:
(для 1-6 задач) Известны ежемесячные средние температуры за 10 лет в городе N.
В массиве данных найти номер (имя) месяца каждого года, когда температура была максимальной. (промежуточная задача: получить линейный массив, элементами которого являются максимальные значения температуры за каждый год).
В массиве данных найти номер (имя) месяца каждого года, когда температура была минимальной. (промежуточная задача: получить линейный массив, элементами которого являются минимальные значения температуры за каждый год).
В массиве данных найти самый теплый год (по сумме температур)
В массиве данных найти самый холодный год (по сумме температур).
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы максимальной.
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы минимальной.
На мячиках в магазине игрушек изображены буквы и цифры. Нужно отобрать для детского сада мячики с буквами и цифрами, причем в детском саду одинаковых мячей быть не должно. Сформировать нужный набор и распечатать его.
На мячиках в магазине игрушек изображены английские и русские буквы и цифры. Нужно отобрать для детского сада мячики с русскими буквами и цифрами, причем в детском саду одинаковых мячей быть не должно. Сформировать нужный набор и распечатать его
КОНТРОЛЬНЫЕ ВОПРОСЫ:
В каких случаях применяется поиск?
Когда он будет эффективнее?
Что является условием окончания поиска?
Какие способы поиска элемента в массиве по какому-либо критерию Вы знаете?
Как найти минимальный элемент в массиве? Максимальный?
Задания 1 уровня выполняются все, задания II уровня – учащимся дается своя задача.