Заказать дипломную работу в Минске. Дипломы на заказ На главную

Подробно о нас

Стоимость работ

Счет для оплаты

Реклама на сайте

Тяжкороб Д.В. помогает с дипломами в Минске
Артемков Д.В. помогает с дипломами в Минске



ЗАДАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ №4

Для всех вариантов необходимо выполнить следующее:

  • определить типы и функции в соответствии с вариантом задания;
  • в функции main() реализовать демонстрацию работы созданных функций;

Варианты заданий

Вариант №1
Определите структуру Date для хранения даты:


struct Date
{
unsigned y; //год
unsigned m; //месяц
unsigned d; //день
};

Определите следующие функции:

void GetDate(Date* d); // ввод даты с клавиатуры в формате «дд.мм.гггг»;
void PutDate(Date d); // вывод даты в формате «дд.мм.гггг»;
void AddDate(Date* d1, Date d2); // сложение двух дат (результат помещается в d1);
int DiffDate(Date d1, Date d2); // вычисляет разницу в днях между двумя датами.

Високосными годами можно пренебречь. Для определения количества дней в месяце можно определить следующий массив:

int M[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Вариант №2
Определите структуру Time для хранения времени:


struct Time
{
unsigned h; //часы
unsigned m; //минуты
unsigned s; //секунды
};

Определите следующие функции:

void GetTime(Time* t); // ввод времени с клавиатуры в формате «чч:мм:сс»;
void PutTime(Time t); // вывод времени в формате «чч:мм:сс»;
void AddTime(Time* t1, Time t2); // сложение двух времен (результат помещается в t1);
int DiffTime(Time t1, Time t2); // вычисляет разницу в секундах между двумя временами.

Вариант №3
Имеется узел бинарного дерева:


struct Node
{
char name[20]; //имя узла
Node * left; //левая ветвь
Node * right; //правая ветвь
};

Определите следующие функции:

Node* AddNode(Node* node, char* name); // добавление нового узла в дерево (если у узла отсутствует левая ветвь, то узел добавляется слева, иначе, если отсутствует правая ветвь, то узел добавляется справа, иначе узел не добавляется). Функция должна возвращать указатель на добавленный узел или 0;
void DelLeftNode(Node* node); void DelRightNode(Node* node); // удаление левых и правых поддеревьев;
void PrintTree(Node* node); // рекурсивная функция вывода бинарного дерева на экран.

Вариант №4
Имеется элемент односвязного списка:


struct List
{
char * data; //указатель на данные
List * next; //указатель на следующий элемент
}
* head; //указатель на начало списка

Определите следующие функции:

void Add(List** list, int i); // добавление нового элемента в список после i-го элемента;
void PrintList(List* list); // вывод содержимого списка на экран;
void Delete(List** list, int i); // удалить i-й элемент из списка.

Вариант №5
Имеется элемент стека (дисциплина обслуживания LIFO):


struct Stack
{
char * data; //указатель на данные
Stack * prev; //указатель на предыдущий элемент
}
* top; //указатель на вершину стека

Определите следующие функции:

void Push(Stack** stack, char* data); // поместить данные в стек;
char* Pop(Stack** stack); // извлечь данные из стека (при этом элемент удаляется из стека);
PrintStack(Stack* stack); // вывод на экран содержимого стека.

Вариант №6 <>Бинарное дерево называется сбалансированным тогда и только тогда, когда высоты двух его поддеревьев отличаются не более чем на единицу. Используя описание узла дерева из задания 3 определите рекурсивную функцию

int TreeHeight(Node* node);

которая вычисляет высоту дерева. Высота дерева, состоящего из единственного узла равна 0. Если узел имеет ветви, то высота такого дерева вычисляется рекуррентно следующим образом:
высота = 1 + max(высота_левого_поддерева, высота_правого_поддерева)

Определите функцию
int IsBalancedTree(Node* node);

которая возвращает 1 если дерево сбалансировано и 0 в противном случае.

Вариант №7
Имеется элемент очереди (дисциплина обслуживания FIFO):


struct Queue
{
char * data; //указатель на данные
Queue * next; //указатель на следующий элемент очереди
} * begin; //указатель на начало очереди

Определите следующие функции:

void Put(Queue** queue, char* data); // поместить данные в конец очереди;
char* Get(Queue** queue); // извлечь данные из начала очереди (при этом элемент удаляется из очереди);
void PrintQueue(Queue* queue); // вывод на экран содержимого очереди.

Вариант №8
Определите структуру Complex для хранения комплексных чисел:


struct Complex
{
double re; //вещественная часть
double im; //мнимая часть
};

Определите следующие функции:

Complex Add(Complex c1, Complex c2);
Complex Sub(Complex c1, Complex c2);
Complex Mul(Complex c1, Complex c2);
Complex Div(Complex c1, Complex c2); // сложение, вычитание, умножение и деление комплексных чисел. Все функции должны возвращать новое комплексное число, содержащее результат операции;
void PrintComplex(Complex c); // вывод значения комплексного числа на экран в алгебраической или показательной формах.

Вариант №9
Определите структуру TreeNode – узел дерева:

struct TreeNode
{
char name[20]; //имя узла
TreeNode * nodes; //список дочерних узлов
TreeNode * next; //следующий узел на том же уровне
}
* root; //корневой узел (первый узел на нулевом уровне)

Определите следующие функции:

TreeNode* AddNode(TreeNode* node, char* name); // добавление нового дочернего узла. Функция должна возвращать указатель на новый узел;
TreeNode* FindNode(TreeNode* node, char* name); // поиск узла по его имени;
void DelTree(TreeNode* node); // удаление всех дочерних узлов дерева;
void PrintTree(TreeNode* node); // вывод дерева (имен узлов) на экран.

Вариант №10
Определите структуру Pair – пара «имя = значение» и структуру Pairs – массив пар:

struct Pair
{
char * name; //имя
int value; //значение
};
#define MAX_PAIRS 100
struct Pairs
{
Pair p[MAX_PAIRS]; //массив пар
int count; //количество пар в массиве
};

Определите следующие функции для работы с массивом:

int GetValue(Pairs* p, char* name, int* var); // получить значение для заданного имени (функция должна возвратить 0 если нет такого имени и 1 в случае успеха, а значение возвращать через второй параметр функции);
void SetValue(Pairs* p, char* name, int value); // установить значение для заданного имени (если такого имени в массиве нет, то добавить в массив новую пару);
void PrintPairs(Pairs* p); – вывод всех пар на экран.





Минск 2012 - 2016
© ИП Тяжкороб Д.В. УНП 490520112



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