Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет114/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   110   111   112   113   114   115   116   117   ...   256
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) Определите класс для разбора, хранения, вычисления и печати простых арифметических 


Бьерн Страуструп.
Язык программирования С++ 
 
148 
выражений, состоящих из целых констант и операций +, -, * и /. Общий интерфейс класса должен 
выглядеть примерно так: 
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 (гистограмма), в котором ведется подсчет чисел в определенных 
интервалах, задаваемых в виде параметров конструктору этого класса. Определите функцию выдачи 
гистограммы. Сделайте обработку значений, выходящих за интервал. Подсказка: обратитесь к 

8. (*2) 
Определите несколько классов, порождающих случайные числа с определенными распределениями. 
Каждый класс должен иметь конструктор, задающий параметры распределения и функцию draw, 
возвращающую "следующее" значение. Подсказка: обратитесь к  и классу intset. 
9. (*2) 
Перепишите примеры date ($$5.2.2 и $$5.2.4), char_stack ($$5.2.5) и intset ($$5.3.2), не используя 
никаких функций-членов (даже конструкторов и деструкторов). Используйте только class и friend. 
Проверьте каждую из новых версий и сравните их с версиями, в которых используются функции-члены. 
10. 10.(*3) Для некоторого языка составьте определения класса для таблицы имен и класса, 
представляющего запись в этой таблице. Исследуйте транслятор для этого языка, чтобы узнать, 
какой должна быть настоящая таблица имен. 
11. 11.(*2) Измените класс expr из упражнения 5 так, чтобы в выражении можно было использовать 
переменные и операцию присваивания =. Используйте класс для таблицы имен из упражнения 10. 
12. 12.(*1) Пусть есть программа: 
#include  
main() 

cout 
<
< "Всем привет\n"; 

Измените ее так, чтобы она выдавала: 
Инициализация 
Всем привет 
Удаление 
Саму функцию main() менять нельзя. 


Бьерн Страуструп.
Язык программирования С++ 
 
149 


Достарыңызбен бөлісу:
1   ...   110   111   112   113   114   115   116   117   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет