|
Методика преподавания основ алгоритмизации на базе системы "КуМир". Контрольная работа № 2Уважаемые коллеги! Предлагаем вам выполнить вторую контрольную работу по нашему курсу. Решения задач должны быть присланы в электронном виде, в формате kum-файлов, подготовленных в системе “КуМир”. Полностью выполненная работа должна включать 8 файлов: Z1a.kum, Z1b.kum, Z2a.kum, Z2c.kum, Z3b.kum, Z4b.kum, Z5.kum и Z6.kum (описание содержимого каждого из файлов приведено ниже в условиях задач). Все файлы мы просим поместить в один архив с именем NNN-NNN-NNN, соответствующий вашему идентификатору слушателя. Оценивание всей работы будет производиться по системе “зачет/незачет”. Решение каждой задачи будет оцениваться по трехбалльной шкале: 0 — задача не решена (не решалась или представленное “решение” не содержит ни одной правильной идеи); 1 — задача решена частично (в решении задачи имеются существенные недостатки, не позволяющие считать решение полным); 2 — задача решена полностью. Для получения зачета в сумме за все задачи необходимо набрать не менее 5 баллов. Желаем вам успехов! Задача 1 Нахождение числа максимальных среди трех данных чисел без использования массивов и циклов. алг число максимальных . надо | напечатано: число максимальных | среди чисел a,b,c равно ... нач вещ a,b,c . цел n, вещ M . ввод a,b,c . если a > b то M := a иначе M := b все . если M < c то ... все . утв (a <= M и b <= M и c <= M) . n := 0 . если ... то ... все . если ... то ... все . если ... то ... все . вывод "... ",a," ",b," ",c, " равно ",n кон а) Введите приведенный выше текст программы в системе “КуМир” и допишите алгоритм в местах, отмеченных многоточиями. Обратите внимание, что в алгоритме требуется напечатать не просто одно число, а строку “число максимальных среди чисел”, за которой следуют введенные числа, затем слово “равно”, и только потом печатается ответ. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z1a.kum. б) Модифицируйте алгоритм для нахождения числа максимальных из четырех чисел. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z1b.kum. Задача 2 Нахождение сумм, произведений элементов данной конечной числовой последовательности (массива). использовать Файлы алг сумма последовательности . дано | Элементы последовательности | находятся в файле | C:\Program Files\Kumir\2.txt . надо | Напечатать: сумма элементов | последовательности |... |равна ... нач цел Ключ, вещ а,сум . сум := 0 . открыть на чтение("2.txt", Ключ) . вывод "Сумма элементов последовательности", нс . начать чтение(Ключ) . нц пока не конец файла(Ключ) . . ф_ввод Ключ,а . . вывод а, " " . . сум := сум + а . кц . вывод нс, "равна ", сум . закрыть(Ключ) кон а) Введите приведенный выше текст и модифицируйте алгоритм так, чтобы он находил не только сумму, но и произведение элементов последовательности. Обратите внимание, что в алгоритме требуется не только изменить его тело, но и исправить дано-надо и название алгоритма. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z2a.kum. б) Модифицируйте алгоритм так, чтобы он искал сумму и произведение элементов одномерного массива. Oформитe этот алгоритм как вспомогательный. алг сумпро(цел N, вещтаб A[1:N], рез вещ сум, рез вещ про) . дано N >= 1 | Элементы | последовательности | находятся в массиве А . надо | величина сум равна сумме | элементов последовательности | величина про равна произведению | элементов последовательности нач цел Ключ, инд, вещ а . ... . ... . инд := 1 . нц пока инд <= N . . a := A[инд] . . сум := ... . . про := ... . . инд := ... . кц кон в) Замените в предыдущем алгоритме цикл пока на цикл для . Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z2c.kum. Задача 3 Нахождение двух наибольших по величине значений в последовательности вещественных чисел за один просмотр последовательности. использовать Файлы алг Два наибольших элемента последовательности . дано | Элементы последовательности | из двух или более целых чисел | находятся в файле | C:\Program Files\Kumir\3.txt . надо | найти и напечатать два | наибольших по величине элемента | последовательности, то есть найти | максимальное значение m1 | исходной последовательности и | максимальное значение m2 | последовательности, | полученной из исходной удалением | первого элемента, равного m1 нач цел Ключ, m1, m2, a . открыть на чтение("3.txt", Ключ) . вывод "два наибольших элемента последовательности", нс . ф_ввод Ключ, m1, m2 . вывод m1, " ", m2, " " . если m1 < m2 то a := m1; m1 := m2; m2 := a все . утв m2 <= m1 . нц пока не конец файла(Ключ) . . ф_ввод Ключ, a . . вывод a, " " . . выбор . . . при m1 <= a: m2 := m1; m1 := a . . . при m2 < a < m1: m2 := a . . . при а <= m2: | ничего не делать . . все . кц . вывод нс, "равны ", m1, " ", m2 . закрыть (Ключ) кон a) Введите приведенный алгоритм и, меняя файл "3.txt" , проверьте правильность его работы на последовательностях{1,0}, {0,1}, {1,1}, {2,1,0}, {0,1,2}, {0,1,1}, {1,1,0}, {1,0,1}, {0,0,1}, {1,1,1} . б) Модифицировав алгоритм Два наибольших элемента последовательности, составьте алгоритм Три наибольших элемента последовательности. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z3b.kum. Задача 4 Нахождение максимального четного элемента в массиве. использовать Файлы алг Нахождение максимального четного элемента . дано | Элементы последовательности | натуральных чисел (то есть | целых чисел, больших нуля) | находятся в файле | C:\Program Files\Kumir\4.txt . надо | Напечатать одно четное число: | максимальный четный элемент | последовательности или число 0, | если в последовательности нет | ни одного четного числа нач цел Ключ, a, макс . открыть на чтение ( "4.txt", Ключ) . макс := 0 . начать чтение(Ключ) . нц пока не конец файла(Ключ) . . ф_ввод Ключ, а . . если mod(a,2) = 0 и а > макс то макс := a все . кц . вывод макс . закрыть (Ключ) кон а) Введите приведенный выше
алгоритм и проверьте правильность его работы на
различных последовательностях, в том числе и на
последовательностях длины Пояснение. Встроенная функция “КуМира” цел mod(цел x, цел y) определена при y > 0 и находит остаток от деления x на y, лежащий в диапазоне от 0 до y - 1. В частности, целое число a четно тогда и только тогда, когда mod(a,2) = 0. б) Переделайте алгоритм Нахождение максимального четного элементатак, чтобы он искал максимальный четный элемент только среди членов последовательности с номерами, делящимися на 10 (считаем, что элементы последовательности нумеруются с 1). Не забудьте изменить название алгоритма и дано-надо. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z4b.kum. Задача 5 Подсчет частоты появления символа в строке. алг Подсчет частоты . надо | Подсчитать частоту появления | символа в строке нач сим симв, лит строк . ввод симв,строк . вывод "символ ",симв," встречается в строке ",строк . вывод нс, Число Символов(симв,строк), " раз" кон алг цел Число Символов(арг сим х, лит стр) . надо | знач = число вхождений символа х | в строку стр нач цел инд . знач := 0.нц для ... .... .... .... .кц кон Введите приведенный выше текст и допишите вспомогательный алгоритм в местах, отмеченных “...”. Подсказка. Используйте встроенную функцию “КуМира”цел длин(лит S), которая возвращает количество символов в строке S. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z5.kum. Задача 6 Число слов в строке. Cловом будем называть любую непустую подстроку подряд идущих непробелов, окаймленную разделителями, где под разделителем понимается либо пробел, либо начало строки, либо конец строки. Для пустой строки (длины 0) и строки, состоящей из одних пробелов, результат должен быть равен нулю. алг Число слов в строке нач лит строка, цел Отв . ввод строка . Найти Число Слов(строка, Отв) . вывод "Число слов в строке", нс, строка, нс . вывод "равно ", Отв кон алг Найти Число Слов(арг лит строка, рез цел Ответ) . дано | Последовательность символов, | состоящая из пробелов и непробелов . надо | Ответ = число слов | в последовательности нач цел инд, лит строка1 . | Идея решения: каждое слово, начиная | со второго, можно . | распознать по его началу, которое | является непробелом, . | следующим за пробелом. Чтобы | не пропустить первое слово в . | строке, "прижатое к началу строки", | добавим в начало строки . | пробел с помощью операции | "сложениe строк" . строка1 :=" "+строка . Ответ :=0 . нц для инд от 2 до длин(строка1) . ... . кц кон Введите приведенный выше текст и допишите строки вспомогательного алгоритма в месте, отмеченном многоточием. Используя команду из меню системы “КуМир” “Сохранить как”, сохраните алгоритм в файле Z6.kum.
Ан. Ге. Кушниренко ;
|