Отчет по практике. Отчет по итогам учебной практики Технологической (проектнотехнологической) практики
Скачать 210.17 Kb.
|
Министерство науки и высшего образования Российской Федерации ФГБОУ ВО «Тверской государственный университет» Факультет прикладной математики и кибернетики Направление 09.03.03 – Прикладная информатика Профиль «Прикладная информатика в экономике» Отчет по итогам учебной практики Технологической (проектно-технологической) практики 2019-2020 уч. год 1 курс 2 семестр Автор: студент 1 курса 11 группы Григорьев Сергей Алексеевич Руководители практики: к.т.н., доцент кафедры информатики Волушкова Вера Львовна _______________________ к.э.н., доцент кафедры математической статистики и системного анализа Смородова Анна Александровна _________________________ Оценка: ___________________ Тверь – 2020
Факультет прикладной математики и кибернетики ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА ПРАКТИКУ И РАБОЧИЙ ГРАФИК Григорьев Сергей Алексеевич Фамилия, Имя, Отчество студента (-ки) полностью Направление подготовки: 09.03.03 Прикладная информатика Направленность (профиль) программы: Прикладная информатика в экономике Вид практики: Учебная практика 1 курс, 2 семестр Тип практики: технологическя (проектно-технологическая) практика Руководитель ООП: д.ф.-м.н., профессор Язенин А.В. Руководитель практики: доцент кафедры информатики Волушкова Вера Львовна Индивидуальное задание на практику Создать шаблонный класс односвязный список. Проверить работу класса, взяв в качестве шаблона – класс Worker (из задания 3) Рабочий график: (составляется в соответствии с программой практики)
Дата выдачи задания: 8.06.2020 Руководитель практики: ___________________/__Волушкова В.Л,________________ Линейный односвязный список (однонаправленный связный список) Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно. В информатике линейный список обычно определяется как абстрактный тип данных (АТД), формализующий понятие упорядоченной коллекции данных. На практике линейные списки обычно реализуются при помощи массивов и связных списков. Иногда термин «список» неформально используется также как синоним понятия «связный список». К примеру, АТД нетипизированного изменяемого списка может быть определён как набор из конструктора и основных операций: Операция, проверяющая список на пустоту. Три операции добавления объекта в список (в начало, конец или внутрь после любого (n-го) элемента списка); Операция, вычисляющая первый (головной) элемент списка; Операция доступа к списку, состоящему из всех элементов исходного списка, кроме первого. List.h #pragma once #include #include using namespace std; template struct Node { T item; Node Node item = k; next = n; } Node next = NULL; } }; template class List { private: Node public: List(); List(T* a, int); List(const List& l); virtual List(); void add(T a); void del(Node void delAll(); Node bool empty(); void addstart(T a); void delv(T a); void insert(T a); int getSize(); void sort(); Node void reverse(); friend ostream& operator<<(ostream& os, List& l) { if (l.head == NULL) os << "list is empty \n"; for (Node os << i->item << endl; return os; } friend istream& operator>>(istream& is, List& l) { if (l.head != NULL) l.delAll(); l.head = NULL; Node Node T k; while (is >> k) { temp = new Node if (!l.head) l.head = ptr = temp; else ptr->next = temp; ptr = temp; } if (is.bad()) cout << "bad"; return is; } }; template List { head = NULL; } template List { head = NULL; Node Node for (int i = 0; i < n; i++) { temp = new Node if (head == NULL) head = ptr = temp; else ptr->next = temp; ptr = temp; } } template List { head = NULL; Node Node for (Node { temp = new Node if (head == NULL) head = ptr = temp; else ptr->next = temp; ptr = temp; } } template List { while (head) del(head); } template void List { while (head) del(head); } template void List { Node if (head == NULL) head = temp; else { Node for (i = head; i->next; i = i->next); i->next = temp; } } template void List { if (ptr) { if (ptr == head) { head = head->next; delete ptr; } else { Node for (i = head; i->next != ptr && i->next; i = i->next); i->next = ptr->next; delete ptr; } } } template Node { Node for (i = head; i && i->item != a; i = i->next); return i; } template bool List { return !head; } template void List { Node head = temp; } template void List { del(findNode(a)); } template void List { Node while (ptr->next) { if (ptr->item > ptr->next->item) { cout << "Not sorted!" << endl; return; } ptr = ptr->next; } ptr = this->head; while (ptr->next->item < a) { ptr = ptr->next; } Node ptr->next = temp; } template int List { int counter; Node for (i = head, counter = 0; i; i = i->next, counter++); return counter; } template void List { for (int i = 1; i < getSize(); i++) { Node Node Node while (b->item > c->item) { prev = c; c = c->next; } if (c == b) continue; Node while (ptr->next != b) ptr = ptr->next; ptr->next = ptr->next->next; if (prev) { prev->next = b; b->next = c; } else { b->next = c; head = b; } } } template Node { Node int counter; for (i = head, counter = 0; i && counter < id; i = i->next, counter++); return i; } template void List { Node Node Node while (ptr2) { ptr->next = temp; temp = ptr; ptr = ptr2; ptr2 = ptr2->next; } ptr->next = temp; head = ptr; } Source.cpp #include #include #include "Worker.h" #include "List.h" using namespace std; int main() { fstream in("text.txt"); if (!in) cout << "Error" << endl; List in >> myList; cout << myList << endl; Worker a("Konstantinov", "T.A.", "Programmer", 2010); Worker b("Alexeev", "R.P.", "Plumber", 1996); myList.addstart(a); myList.add(b); cout << myList << endl; myList.sort(); cout << "Sort" << endl << myList << endl; Worker c("Nikolaev", "S.A.", "SMM", 2005); myList.delv(c); cout << "Delete" << endl << myList << endl; myList.insert(c); cout << "Insert" << endl << myList << endl; myList.reverse(); cout << "Reverse" << endl << myList << endl; cout << "Empty? " << myList.empty() << endl; } |