Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

1.8. Упражнения 63

C-1.10 Напишите эффективный C ++ функция, которая берет любое целочисленное значение i и прибыль

2i, как длинная стоимость. Ваша функция не должна умножаться 2 отдельно я времена; есть намного более быстрые способы вычислить 2i.

C-1.11 Самый большой общий делитель или GCD, двух положительных целых чисел n и m

наибольшее число j, такой, что n и m - оба сеть магазинов j. Евклид про - изложил простой алгоритм вычислению GCD (n, m), где n> m, который основан на понятии, известном как китайская Теорема Остатка. Главная идея алгоритма состоит в том, чтобы неоднократно выполнять вычисления модуля последовательных пар последовательности, которая начинается (n, m...), до достижения ноля. Последнее число отличное от нуля в этой последовательности - GCD n и m. Например, для n = 80, 844 и m = 25, 320, последовательность следующие:

80, 844 модника 25, 320 = 4, 884

25, 320 модников 4, 884 = 900

4, 884 модника 900 = 384

900 модников 384 = 132 384 модника 132 = 120 132 модников 120 = 12

120 модников 12 = 0

Так, GCD 80, 844 и 25, 320 равняется 12. Напишите короткий C ++ функция, чтобы вычислить GCD (n, m) для двух целых чисел n и m.

Проекты

P-1.1 Общее наказание за школьников должно выписать тому же самому сенатору -

Танс многократно. Напишите C ++ автономная программа, которая выпишет следующее предложение сто раз: «Я буду всегда использовать объектно-ориентированный дизайн». Ваша программа должна пронумеровать каждое из предложений, и это должно «случайно» сделать восемь различных случайно выглядящих опечаток в варе - ious пункты в листинге, так, чтобы это было похоже, что человек напечатал все это вручную.

P-1.2 Напишите C ++ программа что, когда дали стартовый день (в воскресенье через

В субботу), поскольку последовательность, и год с четырьмя цифрами, печатает календарь в течение того года. Каждый месяц должен содержать имя месяца, сосредоточенного по датам в течение того месяца и линии, содержащей имена дней недели, бегущей с воскресенья до субботы. Каждая неделя должна быть напечатана на сентябре - линия острого гребня горы. Старайтесь для проверки в течение високосного года.

P-1.3 Парадокс дня рождения говорит что вероятность что два человека в комнате

будет иметь тот же самый день рождения, больше чем вдвое менее длинно, чем число

64

Глава 1. C ++ люди Учебника для начинающих в комнате (n), больше чем 23. Эта собственность не действительно пара - dox, но много людей считают его удивлением. Проектируйте C ++ программа, которая может проверить этот парадокс рядом экспериментов на беспорядочно произведенном рождении - дни, которые проверяют этот парадокс на n = 5, 10, 15, 20..., 100. Вы должны управлять по крайней мере 10 экспериментами для каждой ценности n, и это должно произвести, для каждого n, числа экспериментов для этого n, такой, что у двух человек в том тесте есть тот же самый день рождения.

Примечания к главе

Для более подробной информации о C ++ язык программирования и Стандартная Библиотека Шаблона, мы отсылаем читателя к книгам Страустрапа [91], Липпман и La - joie [67], Musser и Saini [81] и Хорштман [47]. Липпман также написал короткое в - troduction к C ++ [66]. Для более продвинутой информации того, как использовать C ++ особенности самым эффективным способом, консультируйтесь с книгами Мейерса [77, 76]. Для введения в C ++ принятие фона C см. книгу Pohl [84]. Для объяснения различий между C ++ и Явой см. книгу Budd [17].

Глава

2

Ориентированный на объект дизайн

Содержание

2.1

Цели, принципы и образцы......

.

.

.

.

.

.

.

66

2.1.1 Ориентированные на объект цели дизайна....

.

.

.

.

.

.

..

66

2.1.2 Ориентированные на объект принципы разработки..

.

.

.

.

.

.

..

67

2.1.3 Шаблоны............

.

.

.

.

.

.

..

70

2.2

Наследование и полиморфизм......

.

.

.

.

.

.

.

71

2.2.1 Наследование в C ++...........

.

.

.

.

.

.

..

71

2.2.2 Полиморфизм.............

.

.

.

.

.

.

..

78

2.2.3 Примеры наследования в C ++....

.

.

.

.

.

.

..

79

2.2.4 Многократный кастинг наследования и класса

.

.

.

.

.

.

..

84

2.2.5 Интерфейсы и абстрактные классы....

.

.

.

.

.

.

..

87

2.3

Шаблоны.................

.

.

.

.

.

.

.

90

2.3.1 Шаблоны функции..........

.

.

.

.

.

.

..

90

2.3.2 Шаблоны класса............

.

.

.

.

.

.

..

91

2.4

Исключения.................

.

.

.

.

.

.

.

93

2.4.1 Объекты исключения...........

.

.

.

.

.

.

..

93

2.4.2 Бросок и ловля исключений..

.

.

.

.

.

.

..

94

2.4.3 Спецификация исключения........

.

.

.

.

.

.

..

96

2.5

Упражнения..................

.

.

.

.

.

.

.

98