Файл: Отчет по итогам учебной практики Технологической (проектнотехнологической) практики.docx

ВУЗ: Не указан

Категория: Отчеты по практике

Дисциплина: Не указана

Добавлен: 17.03.2024

Просмотров: 11

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Министерство науки и высшего образования Российской Федерации

ФГБОУ ВО «Тверской государственный университет»

Факультет прикладной математики и кибернетики

Направление 09.03.03 – Прикладная информатика

Профиль «Прикладная информатика в экономике»

Отчет

по итогам учебной практики

Технологической (проектно-технологической) практики

2019-2020 уч. год 1 курс 2 семестр

Автор: студент 1 курса 11 группы
Григорьев Сергей Алексеевич
Руководители практики:
к.т.н., доцент кафедры информатики

Волушкова Вера Львовна

_______________________
к.э.н., доцент кафедры математической статистики и системного анализа

Смородова Анна Александровна
_________________________
Оценка: ___________________

Тверь – 2020


Министерство науки и высшего образования Российской Федерации

ФГБОУ ВО «Тверской государственный университет»


Факультет прикладной математики и кибернетики

ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА ПРАКТИКУ

И РАБОЧИЙ ГРАФИК

       Григорьев Сергей Алексеевич

Фамилия, Имя, Отчество студента (-ки) полностью


  1. Направление подготовки: 09.03.03 Прикладная информатика

  2. Направленность (профиль) программы: Прикладная информатика в экономике

  3. Вид практики: Учебная практика 1 курс, 2 семестр

  4. Тип практики: технологическя (проектно-технологическая) практика

  5. Руководитель ООП: д.ф.-м.н., профессор Язенин А.В.

  6. Руководитель практики: доцент кафедры информатики Волушкова Вера Львовна

  7. Индивидуальное задание на практику

Создать шаблонный класс односвязный список.

Проверить работу класса, взяв в качестве шаблона – класс Worker (из задания 3)

  1. Рабочий график: (составляется в соответствии с программой практики)




Задачи

Планируемые сроки выполнения

1.

Изучить шаблонный полиморфизм

8.06.2020-10.06.2020

2.

Изучить методы работы с односвязным списком

11.06.2020-13.06.2020

3.

Создать шаблонный класс List

15.06.2020- 16.06.2020

4.

Протестировать шаблонный класс List

17.06.2020- 20.06.2020

5.







6.







7.







8.


















Дата выдачи задания: 8.06.2020
Руководитель практики: ___________________/__Волушкова В.Л,________________

Линейный односвязный список (однонаправленный связный список)
Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.

В информатике линейный список обычно определяется как абстрактный тип данных (АТД), формализующий понятие упорядоченной коллекции данных. На практике линейные списки обычно реализуются при помощи массивов и связных списков. Иногда термин «список» неформально используется также как синоним понятия «связный список». К примеру, АТД нетипизированного изменяемого списка может быть определён как набор из конструктора и основных операций:

  • Операция, проверяющая список на пустоту.

  • Три операции добавления объекта в список (в начало, конец или внутрь после любого (n-го) элемента списка);

  • Операция, вычисляющая первый (головной) элемент списка;

  • Операция доступа к списку, состоящему из всех элементов исходного списка, кроме первого.






List.h
#pragma once

#include

#include

using namespace std;
template

struct Node

{

T item;

Node* next;

Node(T k, Node* n) {

item = k;

next = n;

}

Node() {

next = NULL;

}

};
template

class List

{

private:

Node* head;

public:

List();

List(T* a, int);

List(const List& l);

virtual List();
void add(T a);

void del(Node*);

void delAll();

Node* findNode(T a);

bool empty();

void addstart(T a);

void delv(T a);

void insert(T a);

int getSize();

void sort();

Node* findNodeID(const int id);

void reverse();
friend ostream& operator<<(ostream& os, List& l)

{

if (l.head == NULL) os << "list is empty \n";

for (Node* i = l.head; i; i = i->next)

os << i->item << endl;

return os;

}

friend istream& operator>>(istream& is, List& l)

{

if (l.head != NULL)

l.delAll();

l.head = NULL;

Node* temp;

Node* ptr = NULL;

T k;

while (is >> k) {

temp = new Node(k, NULL);

if (!l.head) l.head = ptr = temp;

else ptr->next = temp;

ptr = temp;

}

if (is.bad()) cout << "bad";
return is;

}

};
template

List::List()

{

head = NULL;

}
template

List::List(T* a, int n)

{

head = NULL;

Node* temp;

Node* ptr = NULL;

for (int i = 0; i < n; i++)

{

temp = new Node(a[i], NULL);

if (head == NULL)

head = ptr = temp;

else

ptr->next = temp;

ptr = temp;

}

}
template

List::List(const List& l)

{

head = NULL;

Node* temp;

Node* ptr = NULL;

for (Node* i = l.head; i; i = i->next)

{

temp = new Node(i->item, NULL);

if (head == NULL)

head = ptr = temp;

else

ptr->next = temp;

ptr = temp;

}

}
template

List::List()

{

while (head) del(head);

}
template

void List::delAll()

{

while (head) del(head);

}
template

void List::add(T a)

{

Node* temp = new Node(a, NULL);

if (head == NULL)

head = temp;

else

{

Node* i;

for (i = head; i->next; i = i->next);

i->next = temp;

}

}
template

void List::del(Node* ptr)

{

if (ptr)

{

if (ptr == head)

{

head = head->next;

delete ptr;

}

else

{

Node* i;

for (i = head; i->next != ptr && i->next; i = i->next);

i->next = ptr->next;

delete ptr;

}

}

}
template

Node* List::findNode(T a)

{

Node* i;

for (i = head; i && i->item != a; i = i->next);

return i;

}
template

bool List::empty()

{

return !head;

}
template

void List::addstart(T a)

{

Node* temp = new Node(a, head);

head = temp;

}
template

void List::delv(T a)

{

del(findNode(a));

}
template

void List::insert(T a)

{

Node* ptr = this->head;

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* temp = new Node(a, ptr->next);

ptr->next = temp;

}
template

int List::getSize()

{

int counter;

Node* i;

for (i = head, counter = 0; i; i = i->next, counter++);

return counter;

}
template

void List::sort()

{

for (int i = 1; i < getSize(); i++)

{

Node* b = findNodeID(i);

Node* c = head;

Node* prev = NULL;

while (b->item > c->item) {

prev = c;

c = c->next;

}

if (c == b)

continue;

Node* ptr = head;

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* List::findNodeID(const int id)

{

Node* i;

int counter;

for (i = head, counter = 0; i && counter < id; i = i->next, counter++);

return i;

}
template

void List::reverse()

{

Node* ptr = head->next;

Node* ptr2 = head->next->next;

Node* temp = head; temp->next = NULL;

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 myList;

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;

}