Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

5.6 Упражнения

      1. (*1) Измените программу калькулятора из главы 3 так, чтобы       можно было воспользоваться классом table.       2. (*1) Определите tnode ($$R.9) как класс с конструкторами и       деструкторами и т.п., определите дерево из объектов типа       tnode как класс с конструкторами и деструкторами и т.п.       3. (*1) Определите класс intset ($$5.3.2) как множество строк.       4. (*1) Определите класс intset как множество узлов типа tnode.       Структуру tnode придумайте сами.       5. (*3) Определите класс для разбора, хранения, вычисления и печати       простых арифметических выражений, состоящих из целых констант и       операций +, -, * и /. Общий интерфейс класса должен выглядеть       примерно так:       class expr {       // ...       public:       expr(char*);       int eval();       void print();       };       Конструктор expr::expr() имеет параметр-строку, задающую выражение.       Функция expr::eval() возвращает значение выражения, а expr::print()       выдает представление выражения в cout. Использовать эти функции       можно так:       expr("123/4+123*4-3");       cout << "x = " << x.eval() << "\n";       x.print();       Дайте два определения класса expr: пусть в первом для представления       используется связанный список узлов, а во втором - строка       символов. Поэкспериментируйте с разными форматами печати       выражения, а именно: с полностью расставленными скобками,       в постфиксной записи, в ассемблерном коде и т.д.       6. (*1) Определите класс char_queue (очередь символов) так, чтобы       его общий интерфейс не зависел от представления. Реализуйте       класс как: (1) связанный список и (2) вектор. О параллельности       не думайте.       7. (*2) Определите класс histogram (гистограмма), в котором ведется       подсчет чисел в определенных интервалах, задаваемых в виде       параметров конструктору этого класса. Определите функцию       выдачи гистограммы. Сделайте обработку значений, выходящих за       интервал. Подсказка: обратитесь к <task.h>.       8. (*2) Определите несколько классов, порождающих случайные числа       с определенными распределениями. Каждый класс должен иметь       конструктор, задающий параметры распределения и функцию draw,       возвращающую "следующее" значение. Подсказка: обратитесь к       <task.h> и классу intset.       9. (*2) Перепишите примеры date ($$5.2.2 и $$5.2.4), char_stack       ($$5.2.5) и intset ($$5.3.2), не используя никаких функций-членов       (даже конструкторов и деструкторов). Используйте только class       и friend. Проверьте каждую из новых версий и сравните их       с версиями, в которых используются функции-члены.       10.(*3) Для некоторого языка составьте определения класса для таблицы       имен и класса, представляющего запись в этой таблице. Исследуйте       транслятор для этого языка, чтобы узнать, какой должна быть настоящая       таблица имен.       11.(*2) Измените класс expr из упражнения 5 так, чтобы в выражении       можно было использовать переменные и операцию присваивания =.       Используйте класс для таблицы имен из упражнения 10.       12.(*1) Пусть есть программа:       #include <iostream.h>       main()       {       cout << "Всем привет\n";       }       Измените ее так, чтобы она выдавала:       Инициализация       Всем привет       Удаление       Саму функцию main() менять нельзя.