Шереметев Информатика. Сборник домашних заданий 2009
.pdfФедеральное агентство по образованию Российской Федерации
МОСКОВСКИЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ)
А.И. Шереметьев
Информатика
Сборник домашних заданий
Москва 2009
ББК 32.81я7 УДК 004 (076) Ш49
Шереметьев А.И. Информатика. Сборник домашних заданий. – М.: МИФИ,
2009. – 56 с.
Представлены задачи по программированию на языке Си. Сборник предназначен для студентов, выполняющих домашние задания по курсу “Информатика” групп А1-04, 05; А2-04, 05 (специальность – 200600 «Электроника и автоматика физических установок»).
Рецензент проф. Ю.Г. Древс
Рекомендовано к изданию редсоветом МИФИ
ISBN 978-5-7262-1144-2
©Московский инженерно-физический институт (государственный университет), 2009
Задачи для групп А1-04, 05
Задача 1.1. "ТОРГОВЫЙ АВТОМАТ". Торговый автомат имеет бесконечный набор товаров стоимостью от 1 копейки до 99 копеек. Покупатель опускает в автомат монету (банкноту) достоинством 1 рубль и выбирает товар вводом значения его уникальной цены. После этого автомат выдает товар и сдачу минимальным количеством монет из набора монет достоинством 1, 2, 3, 5, 10, 15, 20 и 50 копеек (запасы монет для сдачи считать бесконечными). Написать программу, моделирующую работу такого автомата
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену минимальной и максимальной цены товара, а также достоинств монет (банкнот) в тексте программы.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два режима работы: ЗАРЯДКА и ПРОДАЖА. В режиме ЗАРЯДКА устанавливаются цены и количество единиц товара каждого типа (до 5 типов), а также достоинства и количество монет (банкнот) каждого достоинства (до 8 достоинств, до 50 монет одинакового достоинства). В режиме ПРОДАЖА моделируется эта процедура с разумной реакцией на любую ситуацию.
Задача 1.2. "РАЗМЕННЫЙ АВТОМАТ". Автомат имеет набор монет (банкнот) достоинством 1, 2, 3, 5, 10, 15, 20 и 50 копеек (запасы монет считать бесконечными) и разменивает их на более мелкие. Пользователь может указать свое предпочтение вводом достоинства монет, которых он жаждет получить больше всего; при вводе несуществующего достоинства монеты размен производится минимальным количеством монет. За свою сообразительность автомат взимает небольшую плату: монеты в 2, 3 и 5 копеек меняет бесплатно; за размен 10 и 15 копеек берет 1 копейку; за 20 копеек - 2 копейки; за 50 копеек - 3 копейки. Разумеется, взятая за размен плата показывается пользователю вместе с выдаваемыми монетами размена. Написать программу, моделирующую работу такого автомата.
3
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену достоинств монет (банкнот) и платы за размен в тексте программы.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два режима работы: ЗАРЯДКА и РАЗМЕН. В режиме ЗАРЯДКА устанавливаются достоинства и количество монет (банкнот) каждого достоинства (до 7 достоинств, до 100 монет одинакового достоинства), а также платы за размен. В режиме РАЗМЕН моделируется эта процедура с разумной реакцией на любую ситуацию.
Задача 1.3. "ОТГАДАЙ СЛОВО". В программе задается текстовая строка - слово, которое нужно отгадать пользователю. На экране печатается столько прочерков (знаков "-") сколько букв в этом слове. В каждый ход пользователь вводит одну букву. Если эта буква есть в слове, то она подставляется вместо соответствующих прочерков в слове. Иначе пользователь теряет одно очко. В начале сеанса игры у пользователя 15 очков. Написать программу, моделирующую эту игру.
УКАЗАНИЯ: Предусмотреть легкость смены слова и констант в тексте программы, обработку ошибочных ситуаций и наглядную форму вывода. Обратите внимание на функции из
<STRING.H>.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два режима работы: ЗАРЯДКА и ИГРА. В режиме ЗАРЯДКА пользователь вводит слово, стартовое количество очков и цену промаха в очках, а также предельное время для сеанса игры. В режиме ИГРА осуществляется эта процедура с выдачей остающегося времени в секундах, оставшихся очков и состояния с отгадыванием слова. Весь диалог протоколируется в текстовом файле.
4
Задача 1.4. "КРЕСТИКИ-НОЛИКИ". Написать програм-
му, моделирующую эту известную игру. В начале выводится игровое поле с координатами клеток:
|
1 |
2 |
3 |
+ |
---+ |
---+ |
---+ |
A ¦ |
¦ |
¦ |
¦ A |
+--- |
+--- |
+--- |
+ |
B ¦ |
¦ |
¦ |
¦ B |
+--- |
+--- |
+--- |
+ |
C ¦ |
¦ |
¦ |
¦ C |
+--- |
+--- |
+--- |
+ |
|
1 |
2 |
3 |
и предлагается сделать ход партнеру 0: он делает этот ход вводом координаты клетки, например, в виде "B2", что и отображается на экране в игровом поле. Затем предлагается сделать ход партнеру Х: он делает этот ход вводом координаты клетки, например, в виде "B3", что также отображается на экране. Игра продолжается до получения одинаковых символов на любой горизонтали, вертикали или диагонали (партнер-владелец этих символов выиграл) или до исчерпания свободных клеток игрового поля (ничья). Протокол сеанса игры ведется на экране.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода и диалога, например, использование цвета для разных символов, мигания для выигравших символов и др.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Расширить задачу так, чтобы одним из партнеров мог быть компьютер. Главное здесь - найти или изобрести алгоритм выигрыша. Право начального хода должно выбираться. Весь диалог протоколируется также в текстовом файле.
Задача 1.5. "ХОД КОНЕМ". Написать программу, показывающую все поля шахматной доски, которые бьет конь, стоящий на заданной клетке доски. В начале выводится пустая доска с координатами клеток:
5
1 2 3 4 5 6 7 8
a+---------------+
b+-+-+-+-+-+-+-+-¦
c+-+-+-+-+-+-+-+-¦
d+-+-+-+-+-+-+-+-¦
e+-+-+-+-+-+-+-+-¦
f+-+-+-+-+-+-+-+-¦
g+-+-+-+-+-+-+-+-¦
h+-+-+-+-+-+-+-+-¦ +---------------+
ипользователю предлагается поставить на нее коня: он делает это
вводом координаты клетки, например, в виде "С2", что и отображается на экране - в указанной клетке доски появляется символ "К". Затем после необходимых вычислений символом "*" помечаются все клетки доски, находящиеся под боем этого коня.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода и диалога.
РАЗВИТИЕ:
1. Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2. Предусмотреть ввод символов коня и клетки под боем, использование цвета для разных символов (разметки доски, координат, клеток, символа коня), мигания для полей под боем и др.
Задача 1.6. "УГРОЗА ФЕРЗЕМ". Написать программу, показывающую все поля шахматной доски, которые бьет ферзь, стоящий на заданной клетке доски. В начале выводится пустая доска с координатами клеток:
12 3 4 5 6 7 8
a+---------------+
b+-+-+-+-+-+-+-+-¦
c+-+-+-+-+-+-+-+-¦
d+-+-+-+-+-+-+-+-¦
e+-+-+-+-+-+-+-+-¦
f+-+-+-+-+-+-+-+-¦
g+-+-+-+-+-+-+-+-¦
h+-+-+-+-+-+-+-+-¦
+---------------+
6
и пользователю предлагается поставить на нее ферзя: он делает это вводом координаты клетки, например, в виде "А3", что и отображается на экране - в указанной клетке доски появляется символ "F". Затем после необходимых вычислений символом "!" помечаются все клетки доски, находящиеся под боем этого ферзя.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода и диалога.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть ввод символов ферзя и клетки под боем, использование цвета для разных символов (разметки доски, координат, клеток, символа ферзя), мигания для полей под боем и др.
Задача 1.7. "ПРОСТЫЕ ЧИСЛА". Простым называется целое положительное число, которое делится нацело только на 1 и на само себя. Например, числа 1, 2, 3, 5 - простые. Написать программу, которая после ввода числа N (0 < N < NMAX = 65535) находит и выводит все простые числа, меньшие или равные числу N.
УКАЗАНИЯ: На этапе проектирования потратить некоторые усилия на поиск в литературе эффективного по времени алгоритма поиска простых чисел (при неудаче проконсультироваться у преподавателя). Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода с использованием всей площади экрана.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два этапа работы: ДИАПАЗОН и ПОИСК. На этапе ДИАПАЗОН пользователь выбирает формат представления целого числа: unsigned char или unsigned int. На этапе ПОИСК после ввода числа N осуществляется эта процедура с выдачей затраченного времени в секундах, а затем постраничный вывод найденных чисел.
7
Задача 1.8. ”СЧАСТЛИВЫЙ БИЛЕТ”. Счастливым назы-
вают шестизначное число, у которого сумма трех первых цифр равна сумме трех последних цифр. Написать программу, которая, запросив у пользователя максимально 7 строк, в каждой из которых содержится число T (0 < T < 999999), анализирует их и выводит на экран сообщение счастливо ли каждое число.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и продумать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.
РАЗВИТИЕ:
1.Расширить эту задачу раскраской счастливых и несчастливых чисел разными цветами.
2.Расширить задачу п.1, добавив ввод изменяемой длины числа
(2...10 цифр).
Задача 1.9. ”НОД И НОК”. Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел основан на следующих свойствах этой величины. Пусть M и N - одновременно не равные нулю целые неотрицательные числа и M >= N. Тогда, если N = 0, то НОД(N, M) = M, а если N != 0, то для чисел M, N, R, где R - остаток от деления M на N, выполняется равенство НОД(M, N) = НОД(N, R). Например, НОД(15, 6) =
НОД(6, 3) = НОД(3, 0) = 3. Написать программу, которая, запросив у пользователя числа M и N, вычисляет и выводит на экран значение НОД(M, N), используя алгоритм Евклида.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и продумать наглядный диалог с пользователем.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Расширить задачу п.1, добавив вычисление наименьшего общего кратного (НОК) чисел M и N.
Задача 1.10. "ЗАПИСЬ ЧИСЛА В СИСТЕМЕ". Написать программу, осуществляющую перевод записи целого неотрицательного числа в системе с одним основанием в запись того же числа в системе с другим основанием. Ограничиться основаниями
8
2...16. Последовательно вводятся: основание исходной системы счисления, запись числа цифрами исходной системы счисления (для оснований более 10 принять обозначения цифр: 10 = A, 11 = B, 12 = C, 13 = D, 14 = E, 15 = F, все - латинские буквы); основание результата цифрами исходной системы счисления. Производятся преобразования и выводится запись числа в новой системе счисления, если это возможно.
УКАЗАНИЯ: Обратите внимание на тот факт, что требуются два типа преобразования: символьное (внешнее, текстовое) представление числа ==> внутреннее (двоичное) представление числа" при вводе и "внутреннее (двоичное) представление числа ==> символьное (внешнее, текстовое) представление числа" при выводе. Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода. Использование системных функций, прямо предназначенных для таких преобразований, в программе ЗАПРЕЩЕНО, но их применение для тестирования настоятельно рекомендуется. Обратите внимание на функции из <STRING.H>,
<STDLIB.H>.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Осуществить расширение оснований до 2...36. (для оснований
более 10 принять обозначения цифр: 10 = A, 11 = B, ..., 35 = Z, все - латинские буквы).
Задача 1.11. "ТЕКСТ В КОД МОРЗЕ". Написать програм-
му, преобразующую обычный текст в код азбуки Морзе. Вводится строка текста. Затем выводится ее представление в коде Морзе, то есть в виде точек "." и тире "-". При этом каждый символ кода Морзе отделяется один от другого пробелом.
УКАЗАНИЯ: Найти в литературе кодовые таблицы Морзе (при неудаче проконсультироваться у преподавателя). Ограничиться цифрами, русскими буквами и обычными знаками препинания. Обратите внимание на функции из <STRING.H>. Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода.
9
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два режима работы: РУССКИЙ и АНГЛИЙСКИЙ. В начале пользователь выбирает язык сообщения. В режиме РУССКИЙ работа описана выше. В режиме АНГЛИЙСКИЙ используются цифры, латинские буквы и те же знаки препинания.
Задача 1.12. "КОД МОРЗЕ В ТЕКСТ". Написать програм-
му, преобразующую код азбуки Морзе в обычный текст. Вводится строка в коде Морзе, то есть в виде точек "." и тире "-". При этом каждый символ кода Морзе отделяется один от другого пробелом. Затем выводится ее представление в виде обычного текста.
УКАЗАНИЯ: Найти в литературе кодовые таблицы Морзе (при неудаче проконсультироваться у преподавателя). Ограничиться цифрами, русскими буквами и обычными знаками препинания. Обратите внимание на функции из <STRING.H>. Предусмотреть обработку ошибочных ситуаций и наглядную форму вывода.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть два режима работы: РУССКИЙ и АНГЛИЙСКИЙ. В начале пользователь выбирает язык сообщения. В режиме РУССКИЙ работа описана выше. В режиме АНГЛИЙСКИЙ используются цифры, латинские буквы и те же знаки препинания.
Задача 1.13. "УСТНЫЙ СЧЕТ". Написать программу, осуществляющую четыре арифметических действия с небольшими целыми числами. Вводятся цифрами два числа, N1 и N2 (N1, N2 < 1000), а также одна из операций (сложение, вычитание, умножение, деление). Программа выполняет это действие с введенными числами и выводит результат русскими буквами. Например, при вводе N1 = 128, N2 = 11, действие - сложение, на экран выводится сообщение вида:
10