Правильная ссылка на эту страницу
http://az-design.ru/Projects/AzBook/src/005/01TS060.shtml

Глава 6. 101 ЗАДАЧА ПО ПРОГРАММИРОВАНИЮ

  Если программу стоит писать, то следует это делать правильно. Ведь если вы не сделали ошибок, то получите правильный результат.
  Спешишь программировать — отлаживай в часы досуга.

6.1. ЧИСЛЕННЫЕ ЗАДАЧИ

       1. Автоморфными называются числа, которые содержатся в последних разрядах их квадрата, например:

52 = 25
252 = 625

       Напишите программу для нахождения нескольких автоморфных чисел.
       2. Выпишите все простые числа, находящиеся в интервале между 100 и 300. Простым называется число, которое делится только на единицу и на самое себя.
       3. Любое целое число может быть единственным образом разложено на простые сомножители. Напишите программу для выполнения такого разложения.
       4. Согласно гипотезе Гольдбаха, любое четное число может быть представлено в виде суммы двух простых чисел. Проверьте эту гипотезу для первых 500 четных чисел.
       5. Напишите программу, которая считывала бы два целых числа и определяла бы, являются ли они взаимно простыми. (Два числа называют взаимно простыми, если они не имеют общих делителей).
       6. Парные простые числа. Парными простыми числами называют два простых числа, разность которых равна двум, например:

3    5
11    13

       Напишите программу нахождения 15 таких пар.
       7. Числа Мерсенна. Простое число Мерсенна — это число, которое может быть представлено в виде

2p—1,

       где р — тоже простое число. Напишите программу для нахождения ряда таких чисел.
       8. Числа Пифагора определяются соотношением

c2=a2+b2,

       где a, b и с — целые числа. Напишите программу для нахождения пяти чисел Пифагора.
       9. Совершенным числом называется целое число, которое равно сумма всех его сомножителей, за исключением самого этого числа. Напишите программу получения трех совершенных чисел. Например:

28=1+2+4+7 + 14

       10. Напишите программу, которая считывала бы действительное число и печатала его в виде мантиссы и порядка, например:

123.42 --> .12342E+03

       11. Числа Фибонацчи. Формирование чисел Фибоначчи осуществляется но следующим правилам:

F1 = 1
F2 = 1
Fi+2 = Fi+1 + Fi(i>=1)

       Таким образом, F3=2, F4=3.
       а) Выдайте на печать первые 15 чисел Фибоначчи.
       б) Выдайте на печать значения частного от деления каждого последующего числа Фибоначчи на предыдущее.
       в) Было замечено, что если некоторое число Фибоначчи умножить на 1,618, то можно с определенной точностью получить следующее число Фибоначчи. Проверьте это предположение и. вычислите разность каждой пары чисел Фибоначчи.
       12. Напишите программу, которая считывает десятичное число и печатает его двоичный, восьмеричный и шестнадцатеричный эквиваленты.
       13. Составьте программу вычисления точной арифметической суммы и разности двух целых чисел, содержащих 100 разрядов.
       14. Разработайте программу, которая считывает два двоичных числа и выполняет двоичное сложение. Попробуйте также реализовать и двоичное деление.
       15. Напишите программу, которая считывает числа N и М и находит частное N/M с точностью до 25 знаков.
       16. Составьте программу, которая считывает два целых числа и находит их наибольший общий делитель (т.е. наибольшее число, на которое делятся оба исходных числа). Произведение двух чисел, деленное на их наибольший общий делитель, есть их наименьшее общее кратное. Сделайте так, чтобы программа определяла и наименьшее общее кратное считываемых чисел.
       17. Два числа называют дружественными, если каждое из них равно сумме всех делителей другого, кроме самого этого числа. Например, 220 и 284 есть дружественные числа, так как делителями первого являются числа1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110, сумма, которых равна 284, а делителями второго — числа 1, 2, 4, 71, и 142, которые в сумме дают 220. Напишите программу для отыскания некоторых других дружественных чисел.
       18. Напишите программу для нахождения всех собственных делителей целого числа N (т.е. всех чисел, меньших N, на которые оно делится).
       19. а) Составьте программу отыскания наименьшего целого числа, которое может быть представлено в виде суммы кубов двух чисел двумя различными способами. Например, если кубы чисел 13, 23, З3,..., то 9=13+23,однако это число не может быть представлено никакой другой суммой двух кубов чисел.
       б) Сделайте предыдущую задачу более общей, а именно напишите программу для нахождения наименьшего целого М, такого, что оно может быть
       представлено суммой n-х степеней двух чисел по крайней мере двумя различными способами. Например:

для n=1    M=2 = 01+21 = 11 + 11
для n=2    M=25 = 02 + 52 = 32 + 42, 
для n=3    M=?  = I2 + J2 = K3 + L3
для n=4    . . . .

       20. Напишите несколько таких программ, в которых возникало бы арифметическое переполнение:
       а) при выполнении арифметических операций над целыми числами;
       б) при выполнении арифметических операций над действительными числами.
       Один из возможных способов решения этой задачи — последовательное вычисление степеней двойки. Еще быстрее можно добиться переполнения если вычислять факториалы (например, 5!=5*4*3*2*1). Напишите также программу, приводящую к арифметической потере значимости при выполнении арифметических операции над действительными числами.
       21. Для целых значений I, J, K, L найдите несколько чисел, чтобы выполнялось равенство

I3—J3=(K2 + L2)2

6.2. ИГРОВЫЕ ЗАДАЧИ

       22. Вот список некоторых легко программируемых игр:
       а) тик-так-тоу (крестики и нолики) 1 {Подробное описание игр этого класса можно найти в книге Бенерджи Р., Теория решения задач. — М.: Мир, 1972. — Прим. перев.}
       б) Блэк-Джэк 2 {Описания этих игр в литературе по теории игр не встречаются. — Прим. перев.}
       и) Ханойская башня 3 {Подробное описание игр этого класса можно найти в книге Бенерджи Р., Теория решения задач. — М.: Мир, 1972. — Прим. перев.}
       г) Угадыванние слова путем постепеннгого добавления по одной букве ("Балда")
       д) Ним
       е) Кости
       ж) Игровые автоматы
       з) Рулетка
       и) Китайская игра в карты фэн-тэн4 {Описания этих игр в литературе по теории игр не встречаются. — Прим. перев.}
       к) Магические квадраты
       л) Бросание кубика с продвижением фишек
       м) Калах
       Можно составить программу игры так, чтобы человек вел ее с машиной или машины играли между собой. Интересно запрограммировать для одной играющей стороны какую-нибудь сложную стратегию, а для другой — совершенно иную стратегию или вообще случайные ходы. Выдавал ходы на печать, часто можно наблюдать при этом довольно интересную игру. Вопросы теории игр с вычислительными машинами обсуждаются в книге Д.Спенсера5 {Spencer D., Game Playing with Computers, Hayden Book Company, Rochelle Park, N. J., 197a.}.
       23. В урне находятся 10 черных шаров и 6 красных. Шары вытаскиваютпо одному и затем кладут обратно. При этом в урну каждый раз добавляется шар того же цвета, что и вынутый. Напишите программу для моделирования 100 извлечений шаров из урны.
       24. Миссионеры и людоеды. На одной стороне реки находятся три миссионера, три людоеда и одна лодка, которая вмещает не более двух человек. Если в какой-то момент времени на любом берегу число людоедов превысит количество миссионеров, последние будут съедены. Напишите программу, которая определяла бы стратегию перевозки через реку всех миссионеров и людоедов, обеспечивающую сохранение жизни миссионерам.
       25. Шахматные задачи.
       а) Пять ферзей. Пять ферзей можно расположить на шахматной доске таким образом, что каждое поле будет находиться под ударом по крайнеймере одного ферзя. Напишите программу, определяющую такую расстановку.
       б) Двенадцать коней. Двенадцать коней могут быть расставлены нашахматной доске так;, что каждое поле будет находиться под ударом одного из них. Напишите программу, реализующую подобное размещение коней.
       в) Восемь слонов. Напишите программу, аналогичную предыдущей, надля случая восьми слонов.
       26. Кроссворды. Хорошим считается такой кроссворд, который посвящен определенной теме и имеет минимум неиспользуемого пространства. Напишите программу, которая составляет кроссворд, исходя из заданного списка слов.
       27. Любителям шахмат. Напишите программу, реализующую передвижение коня по всем 64 клеткам доски так, чтобы он сходил на каждое поле по одному разу, или так, чтобы он прошел максимальное расстояние, непересекая собственных путей. Эти задачи называют “путешествием коня”.
       28. Представьте, что вы ректор учебного заведения и должны направить каждому студенту персональное письмо. Вам необходимо знать дляэтого фамилию студента, адрес, группу, в которой он обучается, и его специализацию. Напишите программу, которая считывает указанные данные о студентах и составляет приветственные письма с поздравлениями по случаю начала нового учебного года.
       29. Случайные числа. Один простой способ проверки случайности числовых последовательностей состоит в подсчете частоты появления в них каждой цифры. Если последовательность случайна, то вероятность появления каждой из цифр одинакова и равна 0,1. Напишите программу, считывающую 100 случайных цифр и печатающую относительную долю появления каждой из них в общей последовательности.
       30. Напишите простую программу, подбирающую брачные пары.
       31. Напишите программу, имитирующую 1000 бросаний пары игральных костей и подсчитывающую количество различных выпадающих комбинаций. Сравните результаты работы программы с теоретическими частотами.
       32. Напишите программу для вычисления шансов получить определенный расклад при игре в покер.
       33. Напишите программу, имитирующую раздачу карт при игре в покер. Промоделируйте 1000 раздач и накопите статистические данные по числу случаев, в которых на одной руке оказывались две, три, четыре и т.д. карточной масти. Сравните полученные машинные результаты с таблицей теоретических частот возможных раскладов.
       34. Любителям бриджа. Напишите программу, имитирующую раздачу карт при игре в бридж и объявляющую масть.
       35. Экологическая игра. В журнале Scientific American за февраль, 1971 г. описана следующая интересная модель.
       Клетка квадрата заполняется на шаге t в случае
       а) если на щаге t—1 она была пустой, но были заполнены три соседние клетки или
       б) если на шаге t—1 она была заполнена и были заполнены две или три соседние клетки.
       Во всех остальных случаях клетка остается незаполненной или становится пустой. Каждая клетка имеет восемь соседних, как показано на рисунке:

X X X
X Y X
X X X

       Здесь клетка Y граничит с восемью соседними клетками X, а вся структура: представляет собой уменьшенную модель шахматной доски. Важно при каждом просмотре наиболее эффективным способом определять пространственное положение занятых и свободных клеток. Напишите программу для моделирования поля размером 15X15 при условии что в исходной позиции заняты клетки с координатами (3, 8), (4, 7), (5, 7), (5, 8), (5, 9), (10, 7), (10, 8), (10, 9), (11, 7), (12, 8), (3, 2), (4, 3), (5, 1), (5, 2), (5, 3), (9, 1), (9, 2), (9, 3), (10, 3), (11, 2). Промоделируйте 5 шагов.
       36. Задача об инфекцци стригущего лишая. Промоделируйте процесс распространения инфекции стригущего лишая по участку кожи размером 11X11 клеток. Предполагается, что исходной зараженной клеткой кожи является центральная. В каждый интервал времени пораженная инфекцией клетка может с вероятностью 0,5 заразить любую из соседних здоровых; клеток. По прошествии шести единиц времени зараженная клетка становится невосприимчивой к инфекции, возникший иммунитет действует в течение последующих четырех единиц времени, а затем клетка оказывается здоровой. В ходе моделирования описанного процесса обеспечьте выдачу на печать текущего состояния моделируемого участка кожи в каждом интервале времени, отмечая зараженные, невосприимчивые к инфекции и здоровые клетки.

6.3. ГРАФИЧЕСКИЕ ЗАДАЧИ

       37. Рисунки и графики. С помощью построчно-печатающего устройства выполните следующие операции:
       а) начертите прямоугольник больших размеров;
       б) начертите треугольник;
       в) изобразите шахматную доску с клетками размером 25X25 мм; зачерните нужные клетки.
       г) считайте слово и напечатайте его буквами высотой 50 мм;
       д) постройте какую-нибудь простую кривую;
       е) по заданному радиусу начертите окружность;
       ж) используйте запечатку одних символов другими для создания шкалы полутонов; затем с помощью этой шкалы попытайтесь напечатать какую-нибудь простую картинку.
       38. Для фигуры

       запишите программу, которая впечатывает в ее клетки: цифры 1—8 (по рять цифр сразу) при соблюдении условия, что в смежных клетках не находятся последовательные цифры.
       39. Шахматистам. Известно, что ферзь может передвигаться по вертикали, по горизонтали и по диагонали на любое желаемое число полей шахматной доски. Напишите программу, которая считывает в качестве входных данных номера вертикали и горизонтали, определяющих местоположение ферзя, и отмечает соответствующее поле буквой Q. Поля, на которые ферзь может перемещаться, должны отображаться звездочками *, а все остальные клетки — знаками +. Например, шахматная доска с ферзем на пересечении второй горизонтали и третьей вертикали должна изображаться машиной следующим образом:

6.4. КРИПТОГРАФИЧЕСКИЕ ЗАДАЧИ

       40. Допустим, что вы шифровальщик-любитель и хотите прочесть какой-либо текст на английском языке, чтобы определить частоту, с которой встречается каждый символ. Напишите программу, которая считывает текст и выдает на печать вычисленные частоты появления каждой из 26 букв английского алфавита и пробела. В английском языке наиболее распространены буквы ETOANIRSH, указанные здесь в порядке убывания частот их появления. Сравните полученные вами результаты с приведенной здесь последовательностью букв.
       41. ЭВМ представляет собой идеальное устройство для кодирования и декодирования секретных сообщений. Напишите программу, выполняющую эти действия с использованием следующих алгоритмов:
       а) цезаревской подстановки, при которой буква А заменяется буквой С, буква В заменяется буквой D, буква С заменяется буквой Е и т.д.;
       б) транспозиции по типу “частокола”, состоящей в том, что выбираются 1, 4, 7-й и т.д. символы и располагаются единой группой; за ними помещаются символы 2, 5, 8-й и т.д.; затем идут символы 3, 6, 9-й и т.д.;
       в) метода Гронсфельда, основанного и а использовании некоторого цифрового ключа и модификации обычной цезаревской системы. Так, например, применяя в качестве ключа число 31206, можно получить шифрограмму слова ПРОГРАММИРОВАНИЕ следующим образом:

Ключ 31206 31206 31206 3
Шифрируемый текст ПРОГР АММИР ОВАНИ Е
Шифр ТСРГЦ ГНОИЦ СГВНО 3

       Для того чтобы зашифровать букву П с использованием цифры 3, отсчитывается третья по порядку после П буква алфавита Т и подставляется вместо буквы П; шифрование буквы Р с помощью цифры 1 выполняется посредством отсчета одной буквы после Р и подстановки ее вместо Р. Для того чтобы дешифрировать (полученный набор символов, достаточно вести обсчет букв в обратном направлении. Очевидны преимущества этого метода по сравнению с цезаревской подстановкой: во-первых, для каждой буквы возможны 10 разных замен (0—9), а не одна и, во-вторых, труднее подобрать ключ для дешифрирования;
       г) транслитерации при которой для перемешивания символов сообщения используются прямоугольные матрицы. Например, можно вписать алфавит в прямоугольник, расположив буквы следующим образом:

1    АДЗЛПУЧЫЯ
2    БЕИМРФШЬ
3    ВЁИНСХЩЭ
4    ГЖКОТЦЪЮ

       Шифрирование осуществляется путем последовательной выборки элементов т строк матрицы в определенном порядке. Например, если выбираются элементы строк 2, 4, 3, 1, получается следующее зашифрованное сообщение:

БЕИМР ФШЬГЖ КОТЦЪ ЮВЕЙН СХЩЭА ДЗЛПУ ЧЫЯ

       Ключом в данном случае являются размеры прямоугольника и порядок перестановки строк. Напишите программу для кодирования и декодирования сообщений этим методом.

6.5. ЗАДАЧИ НА ФОРМИРОВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ СИМВОЛОВ

       42. Напишите программу, считывающую строку символов и печатающую ее в обратной последовательности.
       43. Напишите программу, считывающую последовательности из пяти букв и печатающую все возможные их перестановки.
       44. Задан список студентов, который отперфорирован ща картах по следующему образцу: фамилия, имя, отчество.
       Напишите программу, считывающую эти карты и печатающую элементы списка в последовательности: имя, отчество, фамилия.
       45. Напишите программу, которая считывает цепочку символов и конкретный заданный символ, а выдает число, характеризующее количество появлений данного символа в цепочке. Модифицируйте затем программу таким образом, чтобы она решала ту же задачу не для одного символа, а некоторой совокупности символов.
       46. Напишите программу, которая считывает цепочку чисел и печатает наиболее длинную, монотонно возрастающую их подпоследовательность.
       47. а) Операции с римскими цифрами. Напишите программу сложения N числел, записанных римскими цифрами. Сделайте то же самое для операции умножения. Таблица взаимного соответствия чисел, записанных в римской нотации и десятичной системе, приводится ниже.

Римская нотация Десятичная запись
I 1
II 2
III 3
IV 4
V 5
VI 6
VII 7
VIII 8
IX 9
X 10
L 50
С 100
D 500
М 1000

       Ограничьтесь числами, не превышающими МММ (3000), Исходные данные и результаты должны представляться в римской нотации.
       б) Действия с кодом Морзе. Напишите программу, которая считывала бы точки и тире, представляющие код Морзе, и переводила бы их в соответствующие буквенные символы. Сделайте то же самое для обратного перевода,

6.6. СТАТИСТИЧЕСКИЕ ЗАДАЧИ

       48. а) Напишите программу, которая считывает заданное числе N, затем вводит N чисел и печатает среднее арифметическое, стандартное отклонение, максимальное и минимальное значения и размах выборки.
       б) Дополните предыдущую программу так, чтобы она выдавала на печать моду, первый квартиль, второй квартиль (медиану) и третий квартиль,
       49. Напишите программу для получения статистических данных о клиентах. Вид исходных перфокарт показан на стр.302.
       Обеспечьте выдачу на печать
       а) процента клиентов в возрасте до 21 года;
       б) процента клиентов в возрасте 21 года и старше;
       в) процента мужчин и женщин;
       г) процента одиноких;
       д) процента состоящих в браке;
       е) процента разведенных или проживающих раздельно. Снабдите все результаты какими-либо метками.

Поле данных Позиции перфокарты
Учетный номер клиента 1-4
Возраст (в годах) 6—7
Пол (0—женский, 1—мужской) 9
Семейное положение (0— одинок, 1— состоит в браке, 2— разведен или проживает отдельно от семьи) 11

       50. Группа студентов проходит тестовую проверку, по результатам которой выставляются баллы от 0 до 100. Напишите программу, которая выдавала бы гистограмму распределения числа студентов, получивших оценки от 0 до 10, от 11 да 20 и т.д.
       51. Напишите программу, (считывающую массив фамилий студентов и полученных ими оценок. Группа студентов состоит из 15 человек; каждый студент имеет пять оценок. Вычислите среднюю оценку по каждому тесту, затем определите среднюю оценку каждого студента по всем тестам. Подсчитайте также средний балл всех студентов с учетом лишь четырех лучших результатов. В заключение выдайте на печать фамилии студентов, средняя оценка которых превышает общий средний балл, вычисленный по четырем лучшим результатам.

6.7. ЗАДАЧИ НА КОМПИЛИРОВАНИЕ

       52. Напишите программу для компилятора, которая считывает с перфокарт арифметические выражения и выявляет несогласованные скобки.
       53. Напишите программу для компилятора, которая считывает арифметические выражения и определяет их правильность. Ограничьтесь переменными, состоящими только из одной буквы. Для Проверки программы используйте три неверных выражения, приводимых ниже:

А = В/*С
D = E*(A—B
F=G+5+

       54. Напишите программу, которая считывает арифметические операторы и затем выполняет их в правильном порядке.
       Набор операций определяется знаками

() = -+[*/

       Например, если задано выражение

А = 5*3—4/2

       то первой должна выполняться операция умножения, потом деления и в последнюю очередь операция вычитания.

6.8. ЗАДАЧИ ПО СОРТИРОВКЕ

       55. Напишите программу, которая считывает три числа, расположенныхв любой последовательности, упорядочивает их и печатает результат упорядочения.
       После этого модифицируйте программу таким образом, чтобы она считывала константу N, затем вводила N чисел, выполняла их сортировку и выдавала на печать упорядоченную последовательность.
       56. Напишите программы сортировки, реализующие следующие методы:
       а) пузырьковый, заключающийся в том, что вначале берется минимальный элемент массива и помещается по адресу A1, затем выбирается второй минимальный элемент и помещается по адресу А2, после этого отыскивается третий минимальный элемент и пересылается по адресу A3 и т.д.;
       б) слияния, при котором требуются четыре массива А, В, С, D; сортировка по методу слияния начинается с записи всех элементов в массив А; затем каждый элемент ai начиная с первого, сравнивается с элементами ai+1 и осуществляется пересылка ai в массив С до тех пор, пока не окажется, что ai>ai+1. Как только это произойдет, элемент ai+1 засылается в массив D и последующие ai записываются в этот же массив до тех пор, пока не окажется, что ai>ai+1 после чего снова осуществляется переключение на массив С. Когда массив А будет исчерпан, в массивах С и D будет находиться ряд отсортированных подпоследовательностей элементов. Затем берутся первые по счету подпоследовательности массивов С и D, объединяются в соответствующем порядке и записываются в массив А. После этого объединяются вторые по счету подпоследовательностимассивов С и D и записываются в массив В. Затем выбираются; третьи подпоследовательности элементов массивов С и D и после слияния помещаютсяв массив 0. Описанный процесс поочередного занесения подпоследовательностей в массивы А и В продолжается до тех пор, пока не будут исчерпаны массивы С и D. Как только это произойдет, аналогичным образом объединяются массивы А и В, пока все сортируемые элементы не окажутся сосредоточенными в единственном массиве.
       в) цифровой, состоящий в том,, что упорядочение начинается с младших двоичных разрядов сортируемых чисел; далее то же самое проделывается со следующим, более старшим разрядом без нарушения предыдущего порядка. Для упрощения задачи используйте только положительные целые числа; если вы хотите усложнить проблему, последнее ограничение можно снять. В программах карточной сортировки применяется именно этот метод;
       г) какой-либо метод, придуманный вами;
       д) сравните различные методы сортировки по скорости.
       Один из возможных способов сравнения заключается в том, чтобы сформировать 1000 случайных чисел, отсортировать их различными методами и определить, какой из них быстрее всего приводит к конечному результату.

6.9. ВЫЧИСЛИТЕЛЬНЫЕ ЗАДАЧИ

       57. Напишите программу, которая считывает три числа и определяет:
       а) не являются ли эти числа длинами сторон треугольника,
       б) не является ли треугольник равносторонним,
       в) не является ли треугольник равнобедренным,
       г) не является ли треугольник правильным.
       58. Напишите программу, считывающую четыре числа, и определяющую, могут ли они быть длинами сторон четырехугольника, квадрата, прямоугольника, параллелограмма или ромба.
       59. Напишите программу, которая считывает коэффициенты трех линейных уравнений и находит значения трех неизвестных.
       60. Знаменитый ученый в области вычислительной техники профессор Неудачников занимается испытаниями своей новой машины, пытаясь найти с ее помощью 81*109 возможных вариантов решения задачи восстановления показанной ниже операции деления, в которой все цифры, кроме одной цифры частного, заменены звездочками:

       Каждая звездочка обозначает цифру от 0 до 9, а делимое и делитель не содержат нулей.
       а) Найдите какое-нибудь решение этой задачи.
       б) Определите, сколько решений имеет приведенная задача.
       61. Напишите программы для вычисления 20 членов следующих рядов:
       а) π=4(1—1/3+1/5—1/7+ ...)
       б) е=1 + 1/1 + 1/2! + 1/3! + 1/4! + ...
       в) shx = x1/1! + x3/3! + x5/5! + ...
       г) ex=1+x/1!+x2/2!+x3/3!+x4/4!+ ...
       д) sin-1x=x+1/2*x3/3 + 1/2*3/4*x5/5 + 1/2*3/4*5/6*x7/7 + ...
       62. Напишите четыре отдельные подпрограммы, которые выполняли бы арифметические действия с комплексными числами: сложение, вычитание, умножение и деление.
       63. Напишите программу, которая может производить сложение, вычитание и умножение многочленов. Для хранения коэффициентов каждого многочлена используйте векторную форму записи.
       64. Meтод Ньютона—Рафсона. Квадратный корень из числа А можно найти с помощью итерационной формулы

       где А — положительное число, хi — текущее приближение квадратного корня, xi+i — очередное приближенное значение квадратного корня из числа А.
       Примените эту формулу для нахождения квадратных корней из заданных чисел, предусмотрев прекращение итеративного процесса при

       Сопоставьте полученные результаты с ответами которые мы имеем при использовании функции SQRT.
       65. Напишите программу, определяющую корни уравнения

2х— 1— 2sinx = 0

       с помощью следующих методов: а) половинного деления, б) итеративного и в) Ньютона — Рафсона.
       66. а) Напишите программу вычисления приведенного ниже интегралапо методу Симпсона

       б) Напишите программу, вычисляющую приведенный ниже интеграл по методу трапеций

       для а=1,0; 1.1; 1.2;...2,0.

6.10. ЗАДАЧИ С МАССИВАМИ

       67. Напишите программу, которая считывает массив мощностью 100 элементов. Определите с помощью этой программы, сколько содержится в массиве групп из трех последовательных положительных чисел. Группы из пятипоследовательных чисел считать группами из трех чисел.
       68. Напишите программу, которая считает вектор-строку, состоящую из 30 элементов. Каждый элемент должен быть преобразован по следующему алгоритму:
       а) если значение элемента меньше, чем значение индекса, значение элемента возводится в квадрат;
       б) если значение элемента равно значению индекса, изменяется знак элемента;
       в) если значение элемента больше, чем значение индекса, из значения элемента вычитается единица.
       69. Напишите программу, вычисляющую определитель массива.
       70. Напишите программу сложения массивов любых мощностей. Составьте также программу перемножения массивов.

6.11. ЗАДАЧИ С ПРОЦЕНТНЫМИ ДОХОДАМИ

       71. Определите новое состояние счета, на который внесены 1000 долл. сроком на 10 лет под 5% ежеквартальных с начислением сложных процентов. Проделайте то же самое при условии ежемесячного и ежедневного начислений процентов. Сравните полученные результаты.
       72. Определите, каким должен быть ежегодный вклад, если вы хотите накопить 1000 долл. к концу пятого года и банк выплачивает 5% годовых, начисляемых один раз в год (проценты сложные). Вклады вносятся равными суммами в начале каждого года.
       73. Остров Манхэттен был приобретен поселенцами за 24 долл. в 1926 г. Каково было бы в настоящее время состояние их счета, если бы эти 24 долл.были помещены тогда в банк под 6% годового дохода (проценты сложные)?
       74. Предположите, что вы служащий банка, клиентом которого является миллиардер. Напишите программу ежемесячного начисления сложных процентов (при ставке 6%) по его счету. Примите во внимание то обстоятельство, что если этот вкладчик получит не всю полагающуюся ему сумму он переведет свой счет в другой банк, а вас уволят.
       75. Если некто берет ссуду в размере 500 долл. на условиях выплаты 1,5% в месяц, какая сумма долга окажется погашенной по истечении года и сколько он еще останется должен, если платежи вносятся равными долями по 7,5 долл. в месяц? Как изменится положение, если ежемесячно будет вноситься по 10 долл.?
       76. Для условий предыдущей задачи определите, сколько месяцев потребуется получившему ссуду для погашения долга, если он будет выплативать по 10 долл. в месяц?

6.12. ЗАДАЧИ, СВЯЗАННЫЕ С ДЕЛОВОЙ И БЫТОВОЙ СФЕРАМИ

       77. Определите размер подоходного налога служащего при условии уменьшения налога на 750 долл. на каждого иждивенца и стандартного налогового удержания 10%. В качестве входных данных используйте фамилию, регистрационный номер в системе социального обеспечения” размер ежегодного заработка и количество иждивенцев.
       78. Напишите программу вычисления среднего расхода бензина на один километр пробега автомобиля. В качестве входных данных используйте показания спидометра в момент остановки и начала движения и количество литров приобретенного бензина.
       79. Принимая во внимание скудость своих доходов, вы можете составить программу собственных расходов. Проанализируйте с помощью такой программы расходы за три месяца. Очевидные статьи затрат — это питание, квартирная плата, транспорт и культурные нужды; дополните этот список по своему усмотрению,
       а) Определите общие затраты за каждый месяц по каждой статье расходов.
       б) Найдите среднюю, максимальную и минимальную величины затрат по каждой статье расходов за весь трехмесячный период.
       80. Напишите программу ведения банковских счетов на основании чеков. Структура исходных записей такова:
       Фамилия клиента — 20 букв
       Номер счета — 5 цифр
       Текущее состояние счета — 6 цифр
       Сведения об операциях содержат следующие данные:
       Номер счета клиента — 6 цифр
       Сумма прихода или расхода — 6 цифр
       Если сообщаемая сумма положительна, это означает вклад, отрицательный знак суммы свидетельствует о выдаче ее по чеку. За каждый выписанный чек с клиентов удерживается сбор в размере 15 центов при общей плате за предоставление банковских услуг не более 3 долл. С клиентов, на счету которых имеется не более 300 долл., чековый сбор не взимается. Напишите программу, которая балансирует счета, фиксируя все производимые клиентами операции. Если окажется, что какой-либо чек выписан на сумму, превышающую остаток счета, программа должна печатать соответствующее уведомление, удерживать с клиента 5 долл, за неправомерную выписку чека и не производить обработку чека.
       81. Напишите программу, которая начисляет еженедельную заработную плату на основании следующих данных, вводимых с перфокарт:

Имя и фамилия служащего 20 буквенных позиций,
Табельный номер 9 цифровых позиций,
Число проработанных часов 4-позиционное поле формата 99.9
Почасовой тариф 5-позиционное поле формата 99.99
Количество иждивенцев 2-позиционное поле формата 99

       Рабочее время свыше 40 ч в неделю считается сверхурочным и оплачивается в полуторном размере. Программа должна производить отчисления на социальное обеспечение в размере 5%, но не более 20 долл. за каждую неделю, а также удерживать налог в размере 2%, взимаемый властями штата, и налог, взимаемый федеральным правительством в соответствии со следующей шкалой:

Количество иждивенцев Процент налогообложения, %
0 16
1 12
2 9
3 6
4 и более 5

       Предусмотрите выдачу на печать отчета, содержащего всю существенную информацию.
       82. Фирма “Щедрость”, обеспечивающая водоснабжением население, установила следующие размеры платы за воду:
       1) 0,004 долл. за литр для. первых 100 л,
       2) 0,003 долл. за каждый очередной литр.
       Напишите программу, выдающую на печать следующую информацию:
       — Фамилию потребителя
       — Регистрационный номер потребителя
       — Прежнее показание расходомера
       — Новое показание расходомера
       — Потребленное количество воды
       — Размер платы по первому тарифу
       — Размер платы по второму тарифу
       — Общую плату
       Структура считываемых входных данных такова:
       Фамилия потребителя — 20 букв
       Регистрационный номер потребителя — 4 цифры
       Прежнее показание расходомера — 4 цифры
       Новое показание расходомера — 4 цифры
       При появлении отрицательного номера потребителя программа должна прекращать работу и печатать общие итоги:
       Суммарное потребленное количество воды
       Суммарная плата за воду по первому тарифу
       Суммарная плата за воду по второму тарифу Итоговая плата
       83. Некоторая компания выписывает счета своим заказчикам в последний день каждого месяца. Если счет оказывается оплаченным до 10-го числа следующего месяца, заказчик получает скидку в размере 1% от суммы счета, но не более 2 долл. В случае платежа от 10-го до 20-го числа следующего месяца с заказчика взимается полная сумма счета. При оплате после 20-го числа следующего месяца с заказчика удерживаются пени в размере 1% от суммы счета, но не менее 1 долл. Напишите программу, вычисляющую сумму необходимых платежей и выдающую на печать разность между фактически уплаченной суммой и суммой счета. Выходные данные имеют следующую структуру:

Номер заказчика 5 цифр
Дата выписки счета 6 цифр (число, месяц, год)
Дата фактического платежа 6 цифр (число, месяц, год)
Сумма по счету ххх.хх
Уплаченная сумма XXX XX

       84. Окружное налоговое управление нуждается в услугах по определению размеров налогообложения земельной собственности, зависящих от типа земельных участков. Управлением установлена следующая налоговая ставка:

Тип земельного участка Налоговая ставка(в долларах на гектар)
1 2,50
2 2,98
3 3,67
4 4,61
5 5,70

       Входные данные включают:
       — Номер земельного участка
       — Тип участка
       — Длину в метрах
       — Ширину в метрах
       Вычислите и выдайте на печать суммы налогов по каждому земельному участку, указав его площадь в квадратных метрах и гектарах. Затем напечатайте сведения о суммарном налоге по участкам каждого типа, включающие:
       — Тип земельного участка
       — Количество участков
       — Общую площадь в квадратных метрах
       — Общую площадь в гектарах
       — Общую сумму налогообложения
       — Процент от всей площади, находящейся в пользовании
       85. Национальное общество содействия потерпевшиим убытки выделяет поощрительные стипендии студентам университетов и колледжей, утратившим возможность продолжать учебу. Минимальный перечень требований, которым должен удовлетворять претендент на такую стипендию, следующий:
       а) индекс доходов равен или ниже среднего,
       б) возраст — свыше 30 лет,
       в) наличие собственной семьи (семейные имеют в анкетных данных признак 1, одинокие — 0),
       г) курс — предпоследний (третий) или старше.
       Напишите программу, которая считывает фамилии студентов (20 буквенных символов), перечень установленных требований и выдает на печать фамили и всех тех, кто может претендовать на получение поощрительной стипендии.
       86. Торговая фирма выплачивает продавцам комиссионное вознаграждение в размере 5%, если товара продано на сумму менее 1000 долл., и 6%, если выручка составляет 1000 долл. и выше. Продавцы, проработавшие вфирме более 10 лет, получают комиссионные на 1% больше, их отличительным признаком служит четный табельный номер. Данные о продавце включают его имя и фамилию, табельный номер и общую сумму выручки. Напишите программу начисления комиссионного вознаграждения. Выдайте на печать все входные данные и размер комиссионных по каждому продавцу, а также общие итоги по сумме выручки и сумме комиссионного вознаграждения.
       87. Пара носков стоит 1,05 долл.; при покупке дюжины пар взимается плата в размере 10,215 долл., а при покупке 12 дюжин пар г - 110 долл. Напишите программу, которая рассчитывает стоимость закупаемых партий носков. (Например, 13 пар должны стоить 10,25 долл.+ 1,05 долл.= 11,30 долл.). Владельцы этого товара настроены благожелательно по отношению к покупателям и хотят предупреждать их обо всех случаях нерациональных объемов закупок, таких, как приобретение 11 пар носков, что обходится дороже, чем покупка 12 пар. Составьте программу таким образом, чтобы она печатала предупреждающие сообщения о каждом случае выбранного объема закупок.
       Напишите программу обработки данных, связанных с учетом денежных средств, находящихся в обращении. Состав входных данных:

Номер счета 5 цифр
Имя и фамилия владельца 20 букв
Домашний адрес 20 букв
Город и штат 20 букв
Почтовый индекс 5 цифр
Прежний баланс 5 цифр
Платежи 5 цифр
Стоимость покупок 5 цифр

       Если за клиентом обнаруживается долг, то в каждом таком случае е него взимается плата за услуги, равная 1,5% от предшествующей суммы текущего счета, но не менее 50 центов. Программа должна печатать новое-состояние счетов для рассылки этой информации соответствующим клиентам.
       89. Фирма обрабатывающей промышленности покупает оборудование, намереваясь использовать его в течение года для производства товаров широкого потребления. Источником дошдов фирмы является реализация произведенных изделий. Определение прибыли от капиталовложений осуществляется путем вычитания суммы всех затрат из суммы доходов. Деление полученной разности на первоначальную величину капиталовложений дает коэффициент окупаемости затрат. Стоимость оборудования предполагается равной 8000 долл., доходы от продажи изделий составляют 12000 долл., а производственные затраты, включая стоимость обслуживания агрегата, 10800 долл. Напишите программу, которая определяет и печатает величину прибыли и коэффициент окупаемости затрат, а также выдает на печать информацию о капиталовложениях, доходах и общих производственных затратах в следующей форме:

Стоимость оборудования Доход от реализации продукции Производственные затраты Прибыль Коэффициент окупаемости затрат
8000.00 12000.00 10800.00 1200.00 0.15

       90. Рассмотрите задачу 89 в расширенной постановке, когда намеченный к покупке агрегат должен служить более одного года. При таком варианте задачи системный аналитик вынужден иметь дело с неопределенностью, характерной для оценок величин будущих объемов реализации затрат.
       Из паспортных данных и прошлого опыта использования оборудования известно, что его срок службы равен 10 годам, объем реализации продукции увеличивается ежегодно в среднем на 5%, а производственные затраты возрастают на 8% в год. Хотя указанные цифры и верны в среднем для длительного периода времени, действия конкурентов, экономические условия я тому подобные факторы приводят к тому, что реальные темпы изменения производственных затрат и дохода, получаемого в результате реализации: продукции, довольно сильно отклоняются; от средних значений. Влияние отмеченных внешних факторов может быть промоделировано с помощью генератора случайных чисел, формирующего случайные отклонения затрат и доходов от средних величин. Несмотря на то что эти отклонения могут оказаться довольно значительными в каждом конкретном случае, в среднем на моделируемом интервале времени они будут, равны нулю.
       Поскольку правомерно предположить, что изменения доходов и затрат взаимосвязаны, достаточно формировать лишь одно случайное число для каждого рассматриваемого года. Это число должно затем умножаться на Среднюю величину изменения доходов затрат, в результате чего будет формироваться значение соответствующей переменной для данного года. Генерируемые случайные числа должны лежать в интервале 0,5—1,5.
       Дополните формат выходных данных задачи 89 порядковым номером года эксплуатации оборудования (введите для этого колонку слева) и печатайте соответствующие данные по годам под первой строкой. Заметьте, что для первого года эксплуатации результат получается тот же самый, что и в задаче 89.
       91. Некоторых руководителей не может удовлетворить простой метод оценки окупаемости затрат, изложенный в задаче 90. Существует еще один метод, который получил признание у практиков, но не у теоретиков экономического анализа, основанный на определении срока окупаемости затрат т.е. времени, необходимого для компенсации первоначальных капиталовложений.
       Указанный подход предполагает кумулятивную форму вычисления эффекта, т.е. суммирование ежегодной прибыли (притока наличных денег) да тех пор, пока накопленная сумма не перекроет полностью первоначальные затраты.
       Например, если сумма первоначальных капиталовложений составляет 31 000 долл. и чистая прибыль по годам равна 10000, 20000, 10 000 и 10 000 долл., то приходим к следующему результату:

Год Сумма капиталовложений Годовая прибыль Возмещенные затраты
0 31 000  
1 10000 10 000
2 20 000 30 000
3 10 000 31 000
4 10 000

       В данном случае, если считать, что доходы в течение года поступают равномерно, анализ данных третьего года показывает, что последняя тысяча долларов, необходимая для долного возмещения первоначальных капиталовложений, поступает за 0,1 года. Следовательно, срок окупаемости капиталовложений составляет 2,1 года.
       Определите срок окупаемости затрат на оборудование для условий задачи 90. Выдаваемый результат должен полностью сохранять информацию этой задачи и содержать дополнительную строку с данными о сроке окупаемости.
       92. Расширьте постановку задачи 91, включив в нее несколько статей капиталовложений. Входные данные по каждому объекту капиталовложений были отперфорированы служащими фирмы на перфокартах по следующему образцу:

Позиции карты Содержимое
1-2 Номер объекта
3—4 Число периодов эксплуатации
5-14 Первоначальные затраты, равные стоимости оборудования
15—24 Объем реализации
25—34 Производственные затраты
35—44 Изменение объема реализации
45—54 Изменение объема затрат

       Не исключена возможность, что в колоде содержатся карты с ошибками, поэтому ваша программа должна контролировать правильность вводимых данных. Данные считаются неверными, если
       а) номер объекта отрицательный, равен нулю или больше десяти;
       б) число периодов эксплуатации оборудования отрицательно, равно нулю или больше 15;
       в) первоначальные затраты меньше 1000 долл.;
       г) начальная оценка объема реализации меньше начальной оценки производственных затрат.
       Когда имеет место любая из этих ситуаций, карта, в которой встретилась ошибка, должна игнорироваться и программа должна переходить к чтению следующей перфокарты. Признаком конца колоды информационных карт служит карта, в которой номер объекта капиталовложений равен 99 и число периодов эксплуатации равно 90.
       Результаты должны выдаваться по следующему образцу:

Номер объекта 2
Число периодов эксплуатации 10
Первоначальные денежные затраты 8000.00
Первоначальный доход от реализации продукции 12000.00
Первоначальные производственные затраты 10800.00
Темп изменения объема реализации 0.050
Темп изменения производственных затрат 0.080
Период Доход от реализации продукции Производственные затраты Прибыль Коэффициент окупаемости
1 12000.00 10800.00 1200.00 0.15
2 12127.42 10983.49 1143.93 0.14
3 11995.32 10792.05 1203.26 0.15
4 11538.07 10133.84 1404.22 0.18
5 12457.86 11426.41 1031.45 0.13
6 12536.89 11542.39 994.50 0.12
7 12600.14 11635.56 964.57 0.12
8 13096.13 12368.40 727.73 0.09
9 13919.05 13611.91 307.14 0.04
10 13540.53 13019.64 520.88 0.07

       Срок окупаемости 7.08 года
       93. Рассмотрите задачу 92. Замените процедуру расчета значений прибыли в каждый конкретный год на основе оценок затрат и доходов процедурой оценки ожидаемых прибылей и ввода этих данных с перфокарт. Для этого была подготовлена колода перфокарт, содержащих информацию об объектах капитальных затрат и связанных с ними ожидаемых прибылях.
       Карта первого типа (единственная) не нуждается в контроле достоверности данных и содержит следующую информацию:

Позиции карты Содержимое
1—2 Номер объекта
3—4 Срок службы
5—14 Первоначальные затраты (пробивка с десятичной точкой)

       Карты второго типа (число которых заранее неизвестно) содержат оценки ожидаемых прибылей и перфорируются следующим образом:

Позиции карты Содержимое
1-2 3—12 Год эксплуатации Годовая прибыль (пробивка с десятичной точкой)

       Эти карты подлежат проверке. Содержащиеся в них данные считаются неверными, если
       а) значение порядкового номера года эксплуатации объекта отрицательно или равно нулю;
       б) значение порядкового номера года больше, чем срок службы оборудования;
       в) размер прибыли меньше нуля.
       Признаком конца колоды информационных карт служит карта с 99-м годом эксплуатации оборудования.
       Благодаря тому что на картах перфорируется год, нет необходимости в упорядочении колоды. Ваша программа должна считывать перфокарты второго типа, проверять достоверность содержащихся в них данных и записывать значения прибыли в одномерный массив последовательно по годам. Поскольку никакое оборудование не может иметь предполагаемый срок использования 99 лет, размер массива ограничивается 99 записями. Если для какого-то года отсутствует соответствующая карта с данными о прибыли, последней должно присваиваться значение, равное нулю.
       После того как будут рассчитаны все значения прибыли, выдайте на печать только ту часть сформированного массива, которая охватывает предполагаемый срок использования оборудования и срок окупаемости затрат. Результат должен быть подобен следующему:

Период Прибыль Коэффициент окупаемости
1 1000.00 0.06
2 0.00 0.00
3 1900.00 0.12
4 3600.00 0.22
5 5400.00 0.34
6 6700.00 0.42
7 6300.00 0.39
8 5200.00 0.32
Срок окупаемости 5.61 года

       94. Местная фирма, снабжающая потребителей газом, выписывает им счета в соответствии со следующим тарифом:
       Первые 14 м3 1,100 долл.
       Следующие 85 м3 по 0,130 долл. за каждые 3 м3
       Следующие 900 м3 по 0,125 долл. за каждые 3 м3
       Следующие 2800 м3 по 0,120 долл. за каждые 3 м3
       Следующие 4300 м3 по 0,100 долл. за каждые 3 м3
       Следующие 11000 м3 по 0,095 долл. за каждые 3 м3
       Следующие 19000 м3 по 0,087 долл. за каждые Зм3
       Поля входных данных имеют следующую структуру:

Имя и фамилия 36 букв
Домашний адрес (название улицы и номер дома) 16 букв
Город и штат 16 букв
Начальное показание счетчика 7 цифр
Конечное показание счетчика 7 цифр
Начальная дата 6 цифр
Конечная дата 6 цифр
Номер счетчика 6 цифр

       Напишите программу, которая формирует счета для клиентов газовой компании.

6.13. ЗАДАЧИ НА РАЗМЕН ДЕНЕГ

       95. Напишите программу, реализующую правило, по которому покупателю всегда выдается сдача наименьшим количеством монет. Например, если вы даете продавцу 1 долл. при покупке товара стоимостью 21 цент, он руководствуясь этим правилом, должен дать вам сдачу 50-центовой монетой, монетой достоинством в 25 центов и четырьмя 1-центовиками.
       96. Напишите программу, которая определяет различные возможные способы размена доллара. Предполагается, что в обращении имеются 1-, 5-, 10-, 25- и 50-центовые монеты.
       97. Старая английская система денежных единиц состояла из фунтов шиллингов (12 шиллингов (1 фунту) и пенсов (20 пенсов — 1 шиллингу). Напишите программу для автоматического кассового аппарата, которая считает уплаченную сумму, стоимость приобретенного товара и вычисляет необходимую сдачу.

6.14. ЗАДАЧИ О КАЛЕНДАРЕ

       Года называются високосными (месяц февраль включает 29 дней, а или 28, как обычно), если обозначающие их числа делятся на четыре, за исключением годов, кратных 100. Последние являются високосными лишь в случае их кратности 400. Решите следующие задачи, если 1 января 1800 г. была среда.
       98. Напишите программу, которая считывает любую дату (число, месяц, год) и печатает соответствующий ей день недели.
       99. Напишите программу, определяющую очередной год, в который 4 июля будет приходиться на пятницу.
       100. а) Напишите программу для составления календаря текущего года
       б) Напишите программу, которая считывает две даты и вычисляет количество дней, прошедших между ними.
       в) Напишите программу, которая считывает заданный год и формирует для него календарь,
       101. а) Какова вероятность того, что 13-е число определенного месяца будет пятницей?
       б) Напишите программу, определяющую количество пятниц, приходившихся на 13-е числа в XX столетии.
       в) Почему вероятность того, что 13-е число будет пятницей, выше, чем вероятность того, что это число будет приходиться на любой другой день недели?




<<< Пред. Оглавление
Начало раздела
След. >>>

Дата последнего изменения:
Thursday, 21-Aug-2014 09:11:10 MSK


Постоянный адрес статьи:
http://az-design.ru/Projects/AzBook/src/005/01TS060.shtml