Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Отчет по лабораторной работе №11




Постановка задачи

 Написать программу, в которой создаются динамические структуры и выполнить их обработку в соответствии со своим вариантом.

Для каждого вариант разработать следующие функции:

1. Создание списка.

2. Добавление элемента в список (в соответствии со своим вариантом).

3. Удаление элемента из списка (в соответствии со своим вариантом).

4. Печать списка.

5. Запись списка в файл.

6. Уничтожение списка.

7. Восстановление списка из файла.

Вариант задания

        

        Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец списка.

Текст программы

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

#include <conio.h>

#include <iostream.h>

#include <windows.h>

#include <iomanip.h>

#include <ios.h>

//---------------------------------------------------------------------------

 

#pragma argsused

char* rus(const char* text);

struct spisok

{

int amount;                                                                    // информационная часть структуры

spisok* next;                                                                 // содержит адрес след элемента

spisok* prew;                                                                // предыдущего

};

spisok *first(int i);                                                                                                                  //1

void add(spisok **pend, int i);                                                                                                                //1-2

void del(spisok **pbeg);                                                                                                                      //3

spisok *show(spisok *pbeg);                                                                                                               //4

int in_to_file(FILE *f, spisok **pbeg);                                                                                   //5

void remove(spisok **pbeg, spisok **pend);                                                                                       //6

void from_file(FILE *f, spisok **pbeg, spisok **pend,int n);           //7

int main(int argc, char* argv[])

{

           /*

                          1.       Создание списка.

                          2.       Добавление элемента в список (в соответствии со своим вариантом).

                          3.       Удаление элемента из списка (в соответствии со своим вариантом).

                          4.       Печать списка.

                          5.       Запись списка в файл.

                          6.       Уничтожение списка.

                          7.       Восстановление списка из файла.

 

                          Задание:         7.       Сформировать двунаправленный список.

                          Удалить из него первый элемент, добавить элемент в конец списка.

 

           */

 

           spisok *pbeg = first(1);                                // формирование первого элемента списка

           spisok *pend = pbeg;                                                   // список заканчивается едва начавшись

 

           // добавляем нужное нам кол-во элементов в конец списка

           int n;

           cout << rus("Введите кол-во элементов в списке: ");

           cin >> n;

           n++;

           for (int i = 2; i < n; i++) add(&pend,i);

           show(pbeg);                                                                                   // вывод списка

cout << endl;

 

           // удаление первого элемента из списка

           cout << rus("Удаляем первый элемент\n");

           del(&pbeg);

           show(pbeg);                                                                                   // вывод списка

           cout << endl;

 

           // добавление элемента в конец списка

           cout << rus("Добавление элемента в конец списка\n");

           add(&pend,n);

           show(pbeg);                                                                                   // вывод списка

           cout << endl;

 

           // запись списка в файл

           cout << rus("Запись в файл\n");

           FILE *f;

           in_to_file(f,&pbeg);

           cout << endl;

 

           // удаляем список

           remove(&pbeg,&pend);

           cout << endl;

 

           // восстановление списка из файла

           cout << rus("Восстанавливаем\n");

           from_file(f,&pbeg,&pend,n);

           show(pbeg);                                          // вывод списка

 

           getch();

           return 0;

}

spisok *show(spisok *pbeg)

{

           spisok *pv = pbeg;                       // ставим указатель на начало

           while(pv)                                                                        // пока pv не ноль показываем элементы

                          {

                                          cout << pv -> amount << " ";

                                          pv = pv -> next;

                          }

           cout << endl;

 

}

spisok *first(int i)

{

           spisok *pv = new spisok;            // создаем новый элемент

           pv -> amount = i;      // присваиваем номер этому элементу

           pv -> next = 0;           // нет указателей никуда, т.к один элемент

           pv -> prew = 0;

           return pv;                   // возвращаем элемент

}

void add(spisok **pend, int i)

{

           spisok *pv = new spisok; // новый элемент списка

           pv -> amount = i;                        // присваиваем номер списку

           pv -> next = 0;           // указатель на след элемент отсутствует

           pv -> prew = *pend; // указатель на предыдущий элемент

           (*pend) -> next = pv; // с предыдущего элемента указатель на настоящий элемент

           *pend = pv;

}

void del(spisok **pbeg)

{

 

           spisok *pv = *pbeg;                      // ставим указатель на начало списка

           *pbeg = (*pbeg) -> next; // переходим к след элементу

           (*pbeg) -> prew = 0;                      // удаляем указатель на 1 первый элемент

           delete pv;                                                                       // удаляем 1 элемент

}

int in_to_file(FILE *f, spisok **pbeg)

{

           spisok *pv = *pbeg;                     // ставим указатель на начало списка

           f = fopen("f.txt","wb"); // открываем файл для записи

           while (pv)                                                       // запись в файл

                          {

                                          fwrite(pv, sizeof(pv), 1 , f);

                                          pv = pv -> next;

                          }

           fclose(f);                                                                         // закрытие файла

           return 0;

}

void remove(spisok **pbeg, spisok **pend)

{

 

           spisok *first = *pbeg;                   // доп указатели

           spisok *last = *pend;

 

           spisok *pv = new spisok;           // создаем новый элемент

           do                                                                                   // делаем

           {

           pv = first;                                                        // элемент на начало

           first = first->next;                          // укзатаель на след элемент

           pv = NULL;                                                                   // обнуляем элемент

           }while(first!=last);     // пока не дойдем до конца списка

 

           first = NULL;                                                 // обнуляем

           *pbeg = first;

           *pend = last;

           cout << rus("Удалили список\n");

}

void from_file(FILE *f,spisok **pbeg, spisok **pend,int n)

{

           f = fopen("f.txt", "rb");                 // файл для чтения

 

           int i=0;                   // счетчик

           n--;                       // уменьшаем кол-во элементов, чтоб без мусора

           while((i < n)&&(!feof(f)))             // пока файл считываем

            {

                          spisok *pv = new spisok; // создаем новый элемент

                          fread(pv,sizeof(pv),1,f); // выгружаем в него инфу(т.е считываем)

 

                          cout << " i = " << i << " amount = " << pv->amount <<endl; // вывод

 

                          if (i == 0)                                                         // если первый элемент то

                          {                                                                                                       // создаем его

                          *pbeg = first(pv->amount);

                          *pend = *pbeg;

                          }

                          else add(pend,pv->amount);      // иначе добавляем в конец списка

                          i++;                                                                                  // счетчик

           };

           fclose(f);                                                                                        // закрываем поток

           cout << rus("\nВосстановили\n");

 

}

 

char bufrus[256];

char* rus(const char* text)

                          {

                                                          CharToOem(text,bufrus);

                                                          return bufrus;

                          }

 

//---------------------------------------------------------------------------

Результат работы программы

 










Последнее изменение этой страницы: 2018-05-29; просмотров: 201.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...