- •Курсовая работа по технологии программирования
- •Постановка задачи
- •1.2 Программа решения задачи 1.1
- •1.3 Результат работы программы
- •1.4 Объяснение результатов
- •1.5 Программа решения задачи 1.2
- •1.6 Результат работы программы
- •Лабораторная работа №2 «Использование основных операторов языка Си»
- •2.1 Постановка задачи
- •2.2 Программа решения задачи
- •2.3 Результат работы программы
- •Лабораторная работа №3 «Вычисление функций с использованием их разложения в степенной ряд»
- •3.1 Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №4 «Работа с одномерными массивами»
- •4.1 Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №5 «Функции и массивы»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №6 «Строки»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №7.2 «Функции с переменным числом параметров»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №8 «Блоковый ввод-вывод»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №9 «Строковый ввод-вывод»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •11. Лабораторная работа №10 «Динамические массивы»
- •11. 1 Постановка задачи
- •2 Программа решения задачи
- •11.3 Результат работы программы
- •Лабораторная работа №11 «Информационные динамические структуры»
- •Постановка задачи
- •Программа решения задачи
- •12.3 Результат работы программы
11.3 Результат работы программы
Рис. 14. Результат работы программы 10
Лабораторная работа №11 «Информационные динамические структуры»
Постановка задачи
Записи в линейном списке содержат ключевое поле типа int. Сформировать двунаправленный список. Добавить в него элемент с заданным номером, удалить К элементов из конца списка.
Разработать следующие функции:
Создание списка.
Добавление элемента в список (в соответствии со своим вариантом).
Удаление элемента из списка (в соответствии со своим вариантом).
Печать списка.
Запись списка в файл.
Уничтожение списка.
Восстановление списка из файла.
Программа решения задачи
#include <time.h>
#include <iostream>
#include <windows.h>
#include <fstream>
#include <conio.h>
#pragma hdrstop
using namespace std;
/*
Записи в линейном списке содержат ключевое поле типа int.
* Сформировать двунаправленный список. Добавить в него элемент
* с заданным номером, удалить К элементов из конца списка.
*/
struct list //список
{
int num;
list* next;
list* prev;
};
class dlist //создаем класс
{
list *first,*last; //поля класса
public: //методы класса
dlist(int n); //конструктор
void push(int num);
int print();
int del(int k);
int add(int n);
int put_to_file();
void read_from_file();
void del_list();
};
char* ru(const char* text);
#pragma argsused
int main(int argc, char* argv[])
{
int kolel; //количество эл-в в списке
cout << ru("Введите количество элементов в списке: ") << endl;
cin >> kolel;
dlist clist(kolel); //создаем список (объект класса dlist)
clist.print(); //печатаем список
int n;
cout << ru("Введите количество элементов, которое нужно удалить из конца списка: ") << endl;
cin >> n;
clist.del(n); //удаляем n элементов
int k;
cout << ru("Введите позицию, на которую нужно добавить новый элемент: ") << endl;
cin >> k;
clist.add(k); //добавляем элемент
clist.print();
clist.put_to_file(); //записываем в файл
clist.del_list(); //удаляем список
clist.read_from_file(); //восстанавливаем
clist.del_list(); //удаляем список
getch();
return 0;
}
// Создает список
dlist::dlist(int n)
{
first = NULL;
last = NULL;
srand(time(NULL));
for(int i=0; i<n; i++) push(rand()%9); //заполняем случ. числами
}
// Удаляет элемент n элементов из конца списка
int dlist::del(int k)
{
list *current;
current = last; //идем к последнему элементу
for(int i = 0; i<k; i++) //удаляем нужное количество
{
if(current == first) //если текущий - первый
{
current = NULL;
print();
return 0;
}
current = current->prev;
current->next = first;
first->prev = current;
last = current;
}
print();
return 0;
}
//Вставляет элементы
void dlist::push(int num)
{
list *buf = new list;
buf->num = num; //записываем элемент в буфер
//пишем эдемент в список
if(first == NULL)
{
first = buf;
last = buf;
buf->prev = buf;
buf->next = buf;
}
else
{
last->next = buf;
first->prev = buf;
buf->next = first;
buf->prev = last;
last = buf;
}
}
// Добавляет элемент с заданным номером
int dlist::add(int n)
{
n-=2;
//srand(time(NULL));
list *current = new list;
current = first;
/*if(current == NULL)
if(n!=0)
{
cout << "error";
return -1;
}
else
return 666; */
for(int i=0; i<n; i++)
current = current->next;
cout << ru("Введите элемент: ") << endl;
int f; //новый элемент
cin >>f;
list *buf = new list; //создаем новый элемент
buf->num = f; //вводим в буфер новый элемент
if(current == last) last = buf; //если он последний - просто ставим
buf->next = current->next; //вставляем элемент
buf->prev = current;
buf->prev->next = buf;
buf->next->prev = buf;
return 0;
}
//Печатает список
int dlist::print()
{
list *current = new list;
current = first; //устанавливаем указатель на первый элемент списка
if(current == NULL) //если вдруг список пуст
{
cout << endl << ru("Список пуст!")<<endl;
return -1;
}
int i=1;
do //выводим каждый элемент
{
cout << ru("Элемент номер ") << i << ": ";
cout << current->num << endl;
current = current->next;
i++;
} while(current!= first); //пока не дойдем до последнего
cout << endl;
return 0;
}
//Печатает список в файл
int dlist::put_to_file()
{
ofstream out("data", ios::out|ios::binary); //открываем файл для записи, устанавливаем дв. режим
if(!out)
{
cout << ru("Не удаётся открыть файл!")<<endl;
return -1;
}
list *current = new list;
current = first;
if(current == NULL) //если вдруг список пуст
{
cout << endl << ru("Список пуст!")<<endl;
return -1;
}
do
{
out.write((char *)¤t,sizeof(list)); //записываем данные
current = current->next;
} while(current!= first);
out.close(); //закрываем файл
}
//Читает список из файла
void dlist::read_from_file()
{
cout << ru("Считываем из файла...")<<endl;
first = NULL;
last = NULL;
ifstream in("data", ios::in|ios::binary); //открываем файл для чтения
while(true)
{
list *current = new list;
in.read((char *)¤t,sizeof(list)); //читаем данные
if(in.eof()) break; //пока файл не кончится
if(first == NULL)
{
first = current;
last = current;
current->prev = current;
current->next = current;
}
else
{
last->next = current;
first->prev = current;
current->next = first;
current->prev = last;
last = current;
}
}
in.close(); //закрываем файл
print();
}
//Удаляет список
void dlist::del_list()
{
cout << endl << ru("Удаляем список...") << endl;
list *current = new list;
do{
current = first; //берем первый элемент
first = first->next;
current = NULL; //убираем его
} while(first!=last); //пока не дойдем до конца
first = NULL;
}
char bufrus[256];
char* ru(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}