- •Дисциплина: технология программирования
- •Лабораторная работа №1
- •Результаты работы программы для данных типа float
- •Объяснение результатов
- •Программа решения задания 2
- •Результат работы программы
- •Лабораторная работа №3
- •Постановка задачи
- •Текст программы
- •Результат работы программы
- •Лабораторная работа №8
- •Постановка задачи
- •Текст программы
- •Результат работы программы
- •Лабораторная работа №11
- •Постановка задачи
- •Текст программы
- •Результат работы программы
Результат работы программы
Рис.17. Результат работы программы
Лабораторная работа №11
«Информационные динамические структуры»
Постановка задачи
Написать программу, в которой создаются динамические структуры. Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него К элементов, начиная с заданного номера, добавить элемент перед элементом с заданным ключом.
Разработать следующие функции:
Создание списка.
Добавление элемента в список (в соответствии со своим вариантом).
Удаление элемента из списка (в соответствии со своим вариантом).
Печать списка.
Запись списка в файл.
Уничтожение списка.
Восстановление списка из файла.
Текст программы
#include <windows.h>
#include <time.h>
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
/*
1. Написать функцию для создания списка. Функция может
создавать пустой список, а затем добавлять в него элементы.
2. Написать функцию для печати списка. Функция должна предусматривать
вывод сообщения, если список пустой.
3. Написать функции для удаления и добавления элементов списка в
соответствии со своим вариантом.
4. Выполнить изменения в списке и печать списка после каждого изменения.
5. Написать функцию для записи списка в файл.
6. Написать функцию для уничтожения списка.
7. Записать список в файл, уничтожить его и выполнить печать
(при печати должно быть выдано сообщение "Список пустой").
8. Написать функцию для восстановления списка из файла.
9. Восстановить список и распечатать его.
10. Уничтожить список.
3. Записи в линейном списке содержат ключевое поле типа int.
Сформировать однонаправленный список. Удалить из него К элементов,
начиная с заданного номера, добавить элемент перед элементом
с заданным ключом;
*/
//создаем структуру
struct list
{
int num;
list* next;
};
//создаем класс
class dlist
{
private:
list *first;
public:
dlist(int n);
void push(int num);
int print();
int del(int n,int);
void add(int k);
int put_to_file();
void read_from_file();
void del_list();
};
char* rus(const char* text);
int main(int argc, char* argv[])
{
dlist clist(5);
clist.print();
int k,m;
cout << rus("Введите номер элемента, который необходимо удалить\n");
cin >> k >> m;
clist.del(k,m);
cout << rus("Введите кk.x, которые необходимо добавить\n");
cin >> k;
clist.add(k);
clist.put_to_file();
clist.del_list();
clist.print();
clist.read_from_file();
clist.del_list();
getch();
return 0;
}
//русификация программы
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//Добавляет элемент в конец списка
void dlist::push(int num)
{
list *buf = new list;
buf->num = num;
if(first == NULL)
{
first = buf;
buf->next = NULL;
}
else
{
list *q;
q = first;
while(q->next != NULL)
q = q->next;
q->next = buf;
buf->next = NULL;
}
}
// Создает список
dlist::dlist(int n)
{
first = NULL;
srand(time(NULL));
for(int i=0; i<n; i++)
push(rand()%9);
}
//удаление элементов
int dlist::del(int k, int m)
{
list *current;
current = first;
for(int i = 1; i<k-1; i++)
{
if(current->next == NULL)
{
cout << rus("В списке меньше ") << k;
cout << rus(" элементов\n");
return -1;
}
current = current->next;
}
list *buf;
buf = current;
for(int i = 0; i<m; i++)
{
if(buf->next == NULL)
{
cout << rus("В списке меньше ") << k;
cout << rus(" элементов\n");
return -1;
}
buf = buf->next;
}
if(k==1)
first = buf->next;
else
current->next = buf->next;
print();
return 0;
}
// Добавляет элемент перед элементом с заданным ключем
void dlist::add(int k)
{
srand(time(NULL));
list *current;
current = first;
while(current->next->num != k)
{
if(current->next == NULL)
cout << "Tupaya pizda";
current = current->next;
}
list *buf = new list;
buf->num = rand()%9;
buf->next = current->next;
current->next = buf;
print();
}
//распечатка списка
int dlist::print()
{
list *current = new list;
current = first;
if(current == NULL)
{
cout << rus("\nСписок пуст!\n");
return -1;
}
int i = 1;
do
{
cout << rus("Элемент номер ") << i << " - ";
cout << current->num << endl;
current = current->next;
i++;
}while(current != NULL);
cout << endl;
return 0;
}
//Печатает список в файл
int dlist::put_to_file()
{
ofstream out("data", ios::out|ios::binary);
if(!out)
{
cout << rus("Не удаётся открыть файл!\n");
return -1;
}
list *current;
current = first;
if(current == NULL)
{
cout << rus("\nСписок пуст!\n");
return -1;
}
do
{
out.write((char *)¤t,sizeof(list));
current = current->next;
}while(current != NULL);
out.close();
}
//Читает список из файла
void dlist::read_from_file()
{
cout << rus("Считываем из файла\n");
first = NULL;
ifstream in("data", ios::in|ios::binary);
while(true)
{
list *current = new list;
in.read((char *)¤t,sizeof(list));
if(in.eof()) break;
push(current->num);
}
in.close();
print();
}
//Удаляет список
void dlist::del_list()
{
cout << rus("\nУдаляем список\n");
list *current = new list;
do{
current = first;
first = first->next;
current = NULL;
}while(first->next!=NULL);
first = NULL;
print();
}
