Тема: Определение класса с динамически размещаемыми данными
I. Реализовать класс
1. Ассоциативная таблица для представления списков вида имя=значение
и словарей fish рыба
class ATable
{
public:
ATable(int maxsize=100);
~ATable();
void add(const string& name, const string& value);
void remove(const string& name);
void setValue(const string& name, const string& value); // заменить значение
const string getValue(const string& name, const string& dflt=""); // если не нашли - вернуть dflt
void print(); // распечатать состояние объекта
};
2. Множество целых от a до b
Использовать массив флагов, i-й флаг указывает наличие числа i+a
class ASet
{
public:
ASet(int a, int b);
ASet(int b); // a по умолчанию 0
~ASet();
void incl(int); // включить число в множество
// если такое число уже есть, то ничего не делать
void excl(int); // исключить
bool contain(int); // содержится в множестве?
void print(); // распечатать состояние объекта
};
3. Сортированный набор строк
class SList
{
public:
SList(int maxsize=100);
~SList();
void add(const string& str); // добавить строку
int size(); // количество строк
int find(const string& str); // найти строку, вернуть -1 если нет
void remove(int); // удалить строку
const string& item(int); // строка по номеру
void print(); // распечатать состояние объекта
};
4. Список
typedef int Data;
class AList
{
public:
AList();
~AList();
void first(); // перейти на первый элемент списка
void next(); // перейти на следующий элемент
void insert(Data value); // вставка перед текущим
void remove(); // удалить текущий, текущим становится следущий
Data get(); // получить данные
bool eol(); // список кончился, стоим на NULL
void print(); // распечатать состояние объекта
};
5. Очередь событий
typedef int Event;
class TQueue
{
public:
TQueue(int maxsize=100);
~TQueue();
void add(int dt, Event obj); // добавить событие в момент (сейчас+dt)
Event get(); // получить первое событие
void del(); // удалить первое событие
bool isReady(); // подошло время обработать к-л события
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
void print(); // распечатать состояние объекта
};
Для получения текущего времени использовать time(0)
6. Игра 15
class DGame
{
public:
DGame(int n=4, int m=4); // n,m - размеры доски, при DGame(4,4) - игра 15
~DGame();
void up(); // сдвигаем верхнюю фишку вниз
void down();
void left();
void right();
bool ready(); // решено!
void random(int n=100); // n случайных ходов
void print(); // распечатать состояние объекта
};
7. Карточная колода
typedef int Card;
class CStock
{
public:
CStock(int maxsize, bool init=false);
// если init==true, заполнить числами от 1 до maxsize
// если init==false, то количество карт в колоде=0
~CStock();
void add(Card card); // добавить карту
void remove(int i); // удалить i карту
Card& get(int i); // i-я карта
int size(); // тек. размер
void mix(); // перемешать карты
void print(); // распечатать состояние объекта
};
class AWindow
{
public:
AWindow(int left, int top, int right, int bottom);
~AWindow();
void select(); // Сделать окно верхним и текущим
void gotoxy(int x, int y); // перейти в позицию (x,y)
void putch(char ch); // вывести символ ch
void puts(const string& s); // вывести строку s
void textattr(int a); // установить цвет символов и фона для вывода
void clear(); // очистить окно (используется цвет фона)
};
9. Класс "Экзаменационная ведомость (по ООП)"
class XList
{
public:
XList(int maxsize=100);
~XList();
void add(const string& name); // Добавить студента
void remove(const string& name);
void setMark(const string& name, int mark); // записать отметку
int getMark(const string& name); // если нет оценки или студента
// вернуть 0
void print(); // распечатать состояние объекта
};
10. Класс матрица
class Matrix
{
public:
Matrix(int n, int m);
~Matrix();
double& get(int i, int j);
void transp(); // транспонировать
void add(double x); // прибавить ко всем элементам матрицы x
void multiply(double x); // умножить все на x
void print(); // распечатать состояние объекта
};
11. Множество вещественных чисел
class ASet
{
public:
ASet(int size); // size - максимальное количество чисел в множестве
~ASet();
void incl(double); // включить число в множество,
// если такое число уже есть, то ничего не делать
void excl(double); // исключить
bool contain(double); // содержится в множестве?
void print(); // распечатать состояние объекта
};
12. Очередь c приоритетами
struct Data
{
long prioritet;
string info;
};
class PQueue
{
public:
PQueue(int maxsize=100);
~PQueue();
void add(const Data &dat); // добавить данные
const Data& first(); // получить данные с наименьшим приоритетом
void next(); // убрать данные с наименьшим приоритетом
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
void print(); // распечатать состояние объекта
};
13. Класс последовательность целых чисел
class Seq
{
public:
Seq(); // пустая последовательность
~Seq();
void add(int x); // добавить число
void add(const Seq&); // добавить другую последовательность
int size(); // тек. размер
int& get(int i); // получить элемент последовательности
void print(); // распечатать состояние объекта
};
14. Класс "Общая коллекция CD"
class CDCollection
{
public:
CDCollection(int nPerson, int nCD);
~CDCollection();
void add(const string& CDname, int idPerson); // добавить новый диск
void transfer(const string& CDname, int idPerson); // дать диск idPerson
int where(const string& CDname); // у кого диск
int amount(int idPerson); // сколько дисков у idPerson
const string& nameCD(int idPerson, int i); // название i-го диска у idPerson
void print(); // распечатать состояние объекта
};
15. Класс упорядоченная последовательность целых чисел (числа могут повторяться).
class SortSeq
{
public:
SortSeq(); // пустая последовательность
~SortSeq();
void add(int x); // добавить число
int size(); // тек. размер
int get(int i); // получить элемент последовательности
void remove(int i); // удалить i-й элемент
void print(); // распечатать состояние объекта
};
16. Класс "Очередь на получение дефицита"
class TQueue
{
public:
TQueue(int maxsize=100);
~TQueue();
void add(long pr, const string& name); // добавить персону с указанным приоритетом
const string& first(); // имя первой персоны в очереди (без удаления)
void next(); // удалить первую персону
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
void print(); // распечатать состояние объекта
};
17. Класс "Дек (двухсторонняя очередь) для целых чисел"
class Deque
{
public:
Deque(int maxsize=100);
~Deque();
void addleft(int); // добавить слева
void addright(int); // добавить справа
int getleft(); // левый элемент
int getright(); // правый элемент
void delleft(); // удалить левый элемент
void delright(); // удалить правый элемент
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
void print(); // распечатать состояние объекта
};
18. Класс упорядоченная последовательность вещественных чисел (числа могут повторяться).
class DSortSeq
{
public:
DSortSeq(); // пустая последовательность
~DSortSeq();
void add(double x); // добавить число
int size(); // тек. размер
double get(int i); // получить элемент последовательности
void remove(int i); // удалить i-й элемент
void print(); // распечатать состояние объекта
};
19. Класс последовательность вещественных чисел
class DSeq
{
public:
DSeq(); // пустая последовательность
~DSeq();
void add(double x); // добавить число
void add(const DSeq&); // добавить другую последовательность
int size(); // тек. размер
double &get(int i); // получить элемент последовательности
void print(); // распечатать состояние объекта
};
20. Класс "Дек (двухсторонняя очередь) для вещественных чисел"
class DDeque
{
public:
DDeque(int maxsize=100);
~DDeque();
void addleft(double); // добавить слева
void addright(double); // добавить справа
double getleft(); // левый
double getright(); // правый
void delleft(); // удалить левый элемент
void delright(); // удалить правый элемент
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
void print(); // распечатать состояние объекта
};
21. Класс "Игра НИМ"
Представьте, что перед вами и вашим партнером по игре на столе
лежит несколько кучек камешков. Правила игры разрешают забрать
за один ход любое количество камешков - но только из одной кучки.
Выигрывает тот из двух игроков, кто забирает со стола последний камешек.
class NIM
{
piblic:
NIM(int nheap=10);
~NIM();
void setheap(int i, int nmatch); // задать количество спичек в i кучке
void take(int i, int nmatch); // взять из i кучки nmatch спичек
int amount(int i); // количество спичек в кучке i
int count(); // количество кучек
bool iswin(); // Все кучки пусты
void print(); // распечатать состояние объекта
};
22. Игра 15 для букв
class DGame
{
public:
DGame(int n=4, int m=4); // n,m - размеры доски, при DGame(4,4) - аналог игры 15, но с буквами
~DGame();
void settext(const string& text); // задаем начальный текст
// для 4x4 "СЛОНСПИТСТОЯАВЫ ", пробел - пустая клетка
void up(); // сдвигаем верхнюю фишку вниз
void down();
void left();
void right();
bool ready(); // решено!
void random(int n=100); // n случайных ходов
void print(); // распечатать состояние объекта
};
class AWindow
{
public:
AWindow(int left, int top, int right, int bottom);
~AWindow();
void select(); // Сделать окно верхним и текущим
void gotoxy(int x, int y); // перейти в позицию (x,y)
void putch(char ch); // вывести символ ch
void puts(const string& s); // вывести строку s
void textattr(int a); // установить цвет символов и фона для вывода
void clear(); // очистить окно (используется цвет фона)
};
24. Ассоциативная таблица
для представления списков имя=значение
и словарей fish рыба
class ATable
{
public:
ATable(int maxsize=100);
~ATable();
void add(const string& name, const string& value);
void remove(const string& name);
void setValue(const string& name, const string& value); // заменить значение
const string getValue(const string& name, const string& dflt=""); // если не нашли - вернуть dflt
void print(); // распечатать состояние объекта
};
25. Сортированный набор строк
class SList
{
public:
SList(int maxsize=100);
~SList();
void add(const string& str); // добавить строку
int size(); // количество строк
int find(const string& str); // найти строку, вернуть -1 если нет
void remove(int); // удалить строку
const string& item(int); // строка по номеру
void print(); // распечатать состояние объекта
};
26. Класс матрица
class Matrix
{
public:
Matrix(int n, int m);
~Matrix();
double &get(int i, int j);
void assign(const Matrix &); // скопировать данные из др. матрицы
void add(double x); // прибавить ко всем элементам матрицы x
void multiply(double x); // умножить все на x
void print(); // распечатать состояние объекта
};
II. Реализовать main с тестами для проверки класса
(создание объекта и выполнение действий с ним)
III. Написать отчет
Постановка задачи
Описание интерфейса класса
(class {} и комментарии ко всем полям, методам и функциям)
Описание тестов для проверки классов
(main с комментариями, какие действия выполнялись, полученные результаты)
Листинг реализации класса
(реализация методов и функций, отступы, без комментариев)