174 Глава 2
(Тройки Пифагора) Прямоугольный треугольник может иметь все стороны, выраженные целыми числами. Множество троек целых значений сторон прямоугольного треугольника называется тройками Пифагора. Эти три стороны должны удовлетворять соотношению, по которому сумма квадратов двух сторон (катетов) равна квадрату третьей стороны (гипотенузы). Найдите все тройки Пифагора, в ко торых и катеты, и гипотенуза не больше 500. Используйте трижды вложенные циклы for, которые перебирают все возможности. Это пример вычисления «в лоб», сводящегося к перебору. Вы узнаете в более продвинутых курсах компьютерных вычислений, что есть много интересных проблем, для которых неизвестно других алго ритмов, кроме решения «в лоб».
Компания платит своим сотрудникам или как менеджерам (которые получают фиксированный недельный оклад), или как почасовым работникам (которые получают фиксированную почасовую оплату за первые 40 рабочих часов и полуторную почасовую ставку за пере работку сверх 40 часов), или как работникам на комиссионных на чалах (которые получают $250 плюс 5.7% от суммы недельных продаж), или как сдельщикам (которые получают фиксированную сумму с каждой выработанной ими единицы продукции — каждый сдельщик в этой компании выпускает только один вид продукции). Напишите программу расчета еженедельной оплаты каждого сотруд ника. Вы не знаете заранее числа сотрудников. Каждый тип со трудника имеет свой код оплаты: менеджеры имеют код 1, поча совые работники — код 2, работающие на комиссионных началах имеют код 3, сдельщики — код 4. Используйте switch, основанный на этих кодах оплаты, для расчета выплат каждому сотруднику. В структуре switch предлагайте пользователю (клерку, составляющему расчетную ведомость) ввести соответствующие данные, необходимые для расчета выплаты сотруднику в соответствии с его кодом оплаты.
(Законы Моргана) В данной главе мы рассмотрели логические опе раторы &&, и !. Законы Моргана помогают иногда выразить с их помощью логические выражения в более удобной форме. Эти законы гласят, что выражение \(выражение1 && выражение2) логически эквивалентно выражению (! выражение! || ! выражение2). Анало гично выражение 1(выражение1 || выражение2) эквивалентно выра жению (I выражение! && ! выражение2). Используйте законы Мор гана для записи выражений, эквивалентных каждому из приведенных ниже, а затем напишите программу, которая показала бы в каждом случае эквивалентность первоначальных и новых вы ражений:
a) ! (x < 5) && ! (у >= 7)
b) ! {a == b) I I ! (g != 5) С) ! ((x <= 8) && (у > 4) ) d) ! ((i > 4) || (j <=6))
2.58. Напишите программу, которая напечатает следующий ромб. Вы мо жете использовать операторы вывода, которые печатают или одну звездочку (*), или один пробел. Максимально используйте повторе-
Управляющие структуры _ 175
ние (с вложенными структурами for) и минимизируйте число операторов вывода.
* ***
*******
*********
*******
*****
***
*
Модифицируйте программу, которую вы написали в упражнении 2.58, чтобы она читала нечетное число в пределах от 1 до 19, оп ределяющее число строк в ромбе. Ваша программа должна выводить на экран ромб соответствующего размера.
В адрес операторов break и continue раздается критика по поводу того, что они неструктурны. Действительно, операторы break и con tinue всегда могут быть заменены структурированными оператора ми, хотя часто это оказывается неудобным. Опишите, как в общем случае вы могли бы удалить из цикла оператор break и заменить его каким-то структурированным эквиваленитом. (Подсказка. Опе ратор break осуществляет прерывание цикла в заданном месте его тела. Другим путем выхода из цикла является нарушение условия продолжения цикла. Рассмотрите использование в проверке условия продолжения цикла дополнительной проверки, устанавливающей, что «надо досрочно выйти из цикла, потому что выполнено условие его прерывания».) Используя такой прием, удалите оператор break из программы на рис. 2.26.
Что делает следующий фрагмент программы?
for (i = 1; i <= 5; i++) { for (j = 1; j <= 3; j++} { for (k = 1; k <= 4; k++)
cout « ' *' ; cout « endl; } cout « endl;
2.62. Опишите, как в общем случае вы могли бы удалить из цикла оператор continue и заменить его каким-то структурированным эквиваленитом. Используя этот прием, удалите оператор continue из программы на рис. 2.27.
2.63.(Песня «Двенадцать днейрождества») Напишите программу, использующую повторение и структуры switch для печати текста песни «Двенадцать дней рождества». Одна структура switch должна использоваться для печати дня («Первый», «Второй» и т.д.). Другая структура switch должна использоваться для печати остальной части каждого куплета (нашим читателям, возможно,
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции