Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шереметев Информатика. Сборник домашних заданий 2009

.pdf
Скачиваний:
29
Добавлен:
16.08.2013
Размер:
944.56 Кб
Скачать

Федеральное агентство по образованию Российской Федерации

МОСКОВСКИЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ)

А.И. Шереметьев

Информатика

Сборник домашних заданий

Москва 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