Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++book1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

5.6 Упражнения

1. (*1) Модифицируйте настольный калькулятор из Главы 3,

чтобы использовать класс table.

2. (*1) Разработайте tnode (#с.8.5) как класс с конс-

трукторами, деструкторами и т.п. Определите дерево из

tnode'ов как класс с конструкторами, деструкторами и

т.п.

3. (*1) Преобразуйте класс intset (#5.3.2) в множество

строк.

4. (*1) Преобразуйте класс intset в множество узлов

node, где node - определяемая вами структура.

5. (*3) Определите класс для анализа, хранения, вычисле-

ния и печати простых арифметических выражений, состоящих

из целых констант и операций +, -, * и /. Открытый ин­терфейс должен выглядеть примерно так:

class expr (*

// ...

public:

expr(char*);

int eval();

void print();

*)

Параметр строка конструктора expr::expr() является выра­жением. Функция expr::eval() возвращает значение выраже­ния, а expr::print() печатает представление выражения в cout. Программа может выглядеть, например, так:

expr x("123/4+123*4-3");

cout << "x = " << x.eval() << "\n";

x.print();

Определите класс expr два раза: один раз используя в ка­честве представления связанный список узлов, а другой раз - символьную строку. Поэкспериментируйте с разными способами печати выражения: с полностью расставленными скобками,в постфиксной записи,в ассемблерном коде и т.д.

6. (*1) Определите класс char_queue (символьная очередь)

таким образом, чтобы открытый интерфейс не зависел от

представления. Реализуйте char_queue как (1) связанный список и как (2) вектор. О согласованности не заботь­тесь.

7. (*2) Определите класс histogram (гистограмма), в ко-

тором ведется подсчет чисел в определенных интервалах, которые задаются как параметры конструктора histogram. Обеспечьте функцию вывода гистограммы на печать. Сделай­те обработку значений, выходящих за границы. Подсказка: <task.h>.

8. (*2) Определите несколько классов, предоставляющих

случайные числа с определенными распределениями. Каждый класс имеет конструктор, задающий параметры распределе­ния, и функцию draw, которая возвращает "следующее" зна­чение. Подсказка: <task.h>. Посмотрите также класс intset.

9. (*2) Перепишите пример date (#5.8.2), пример

char_stack (#5.2.5) и пример intset (#5.3.2) не исполь­зуя функций членов (даже конструкторов и деструкторов). Используйте только class и friend. Сравните с версиями, в которых использовались функции члены.

10. (*3) Для какого-нибудь языка спроектируйте класс

таблица имен и класс вхождение в таблицу имен. Чтобы посмотреть, как на самом деле выглядит таблица имен, посмотрите на компилятор этого языка.

11. (*2) Модифицируйте класс выражение из Упражнения 5

так, чтобы обрабатывать переменные и операцию присваива­ния =. Используйте класс таблица имен из Упражнения 10.

12. (*1) Дана программа:

#include <stream.h>

main()

(*

cout << "Hello, world\n";

*)

модифицируйте ее, чтобы получить выдачу

Initialize

Hello, world

Clean up

Не делайте никаких изменений в main().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]