пятница, 5 августа 2011 г.

графы 1

сделать для человечка лабиринт и научить его ходить из одной точки в другую, например за конфеткой.

понедельник, 11 апреля 2011 г.

алгоритмы 2

нарисуйте снежинку коха, салфетку серпинского, ковер серпинского, шагающего xkcd человечка.

четверг, 24 марта 2011 г.

Двоичные деревья

Напишите шаблон двоичного дерева поиска и контейнер к нему, реализуйте вставку удаление и поиск элементов с сохранением упорядоченной структуры дерева.

Попробуйте инстанцировать шаблон классом std::pair для которого оператор сравнения сравнивает элементы используя std::pair::first.

среда, 16 марта 2011 г.

Шаблоны 1

Сделайте контейнер связного списка и список шаблонами класса, где параметром шаблона служит хранимый тип.

перегрузите оператор сравнения для комплексных чисел, сравнивающий числа по модулю и проверьте что сортировка для списка комплексных чисел работает правильно.

шаблоны делаются примерно так:

template< class T>
struct List{
T value;
List* next;
}

пятница, 4 марта 2011 г.

контейнер списка.

Сделайте класс-контейнер для связного списка.

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

Пояснения:
Это нужно для того чтобы список мог быть стековым объектом и самоудаляться при выходе из области видимости, а так же для устранения путаницы с указателями - уменьшить возможности для получения нескольких указателей на элементы одного и того же списка и проблемы с временем жизни указателей.

Чтобы копировать сам список а не указатель на голову списка перегрузите operator= и конструктор копирования.

четверг, 3 марта 2011 г.

Перегрузка операторов

Напишите класс комплексных чисел с перегруженными операторами +, -, *, / и оператором << для вывода комплексного числа на экран.

см перегрузка функций страуструп 191, страуструп 309

вторник, 1 марта 2011 г.

Инициализация, конструкторы, деструкторы

Примените конструкторы и деструкторы для автоматизации создания и удаления связных списков в предыдущих заданиях.

немного о конструкторах и деструкторах:

В структурах классах можно объявлять функции которые запускаются при создании объекта и инициализируют их угодным программеру образом.

Конструктор должен иметь то же имя что и класс/структура, конструктор может иметь параметроы. Конструкор без параметров называется конструктором по-умолчанию, конструктор с параметром - ссылка на определяемый класс, называется конструктор копирования.

struct List {
List()//default constructor
{
value = 0;
next = 0;
}
List(const List &s)//copy constructor
{
value = s.value;
next = s.next;
}
List(int v, List* n)//constructor
{
value = v;
next = n;
}
int value;
List* next;
};

main()
{
List a;//вызывается конструктор по-умолчанию
List b(a); // вызывается конструктор копирования
List v = a;// вызывается конструктор копирования
List g(4,&a);// вызывается конструктор List::List(int v,List* n)

List *d = new List;//вызывается конструктор по-умолчанию
List *e = new List(d);//вызывается конструктор копирования
List *j = new List(4,d);// вызывается конструктор List::List(int v,List* n)
}

Деструктором должен иметь тоже имя что и класс, но с добавлением тильды перед именем и не может иметь параметров, деструктор вызывается при удалении объекта.

struct List {
~List()//destructor
{
delete next;
}
int value;
List* next;
};

понедельник, 28 февраля 2011 г.

Связные списки 2

Напишите функцию возвращающую элемент номер N из списка, добавляющую элемент в список, функцию удаляющую элемент из списка, функцию вставляющую один список в другой список.

совет: позицию в списке определяйте по указателю на элемент списка, для удаления-вставки элемента по индексу используйте функцию возвращающую элемент номер N.

воскресенье, 27 февраля 2011 г.

Связные списки 1

Создайте список из структур вида

struct List {
int value;
List* next;
}

где value - значение элемента списка, next - указатель на следующий элемент, если следующего элемента нет указатель приравнивается нулю.

суббота, 26 февраля 2011 г.

массивы, указатели, ссылки

Создайте функции меняющие местами значения двух переменных, одну с использованием указателей, другую с использованием ссылок.

Создайте функцию меняющую местами значения двух массивов одинакового размера поэлементно.

Попробуйте использовать эту функцию на статических массивах и на массивах созданных при помощи new[].

четверг, 24 февраля 2011 г.

Фундаментальные типы 2

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

Фундаментальные типы.

Напишите программу печатающую размеры в байтах, минимальные и максимальные значения всех фундаментальных типов.

используйте sizeof для этого, определите как ведет себя sizeof на массивах.
используйте функции из заголовочного файла limits для определения минимального и максимального значения для выбранного типа, например:
std::numeric_limits::max();