75663

Інтегровані структури даних запису

Лабораторная работа

Информатика, кибернетика и программирование

Використовуючи процедури і описи модуля типу даних, розробити програму, що забезпечує введення початкових даних з першого файлу даних в память і зберігання їх в масиві, сортування масиву по алфавітному і по числовому параметру.

Украинкский

2015-01-24

562.11 KB

5 чел.

Міністерство  освіти  і  науки України

Вінницький національний технічний університет

Інститут інформаційних технологій та комп’ютерної інженерії

Кафедра ПЗ

Лабораторна робота №3 варіант №9

з дисципліни Алгоритми та структури даних

Виконала: ст. гр. 1 ПІ-13б                            Лілик Л. С.

Перевірив:                                                       Власюк В. Х.

Вінниця, 2013

Тема:  Інтегровані структури даних, запису.

Мета: придбання і закріплення навиків в роботі із записами, в інтеграції даних, в модульному програмуванні.

Завдання:

Для заданої прикладної області розробити опис об'єктів цієї області. Розробити процедури, що реалізують базові операції над цими об'єктами, зокрема:

  1.  текстове введення-виведення (консольний і файловий);
  2.  присвоювання;
  3.  задання константних значень;
  4.  порівняння (не менше 2-х типів).

Підготувати файл початкових даних, що містять не менше 10 значень конкретних об'єктів.

Використовуючи процедури і описи модуля типу даних, розробити програму, що забезпечує введення початкових даних з першого файлу даних в пам'ять і зберігання їх в масиві, сортування масиву по алфавітному і по числовому параметру.

Варіант № 9.

Nз/п

Прикладна область

Атрибути інформації

9

Телефонна станція

номер абонента, прізвище, адреса, наявність того, що блокує, заборгованість

Хід роботи

 

Користувачеві пропонується вивести початкові дані з файлу, або записати свої дані і працювати з ними.  Після завантаження даних (з консолі або файлу) їх можна відсортувати за числовим параметром (в даному випадку – сума заборгованості) або за алфавітом (прізвище абонента).

Складність алгоритму

Складність алгоритму дорівнює O( 5N + 10 ) від Т, де Т - час виконання.


Блок-схема алгоритму




Лістинг програми

// ------ Allh.h ---------------------------------------------------------------------------------------

#ifndef ALLH_H_INCLUDED

#define ALLH_H_INCLUDED

#include "TelephoneEx.h"

#include <iostream>

#include <cstring>

#include "fstream"

using namespace std;

#endif // ALLH_H_INCLUDED

// ------ TelephoneEx.h ---------------------------------------------------------------------------------------

#ifndef TELEPHONEEX_H_INCLUDED

#define TELEPHONEEX_H_INCLUDED

#include "Allh.h"

class TelephoneEx

{

   public:

       long int subNumber;

       char surname[50];

       char adds[100];

       bool blocked;

       int debt;

       TelephoneEx();

       TelephoneEx(long int _subNumber, char *surname, char *adds, bool _blocked, int _debt);

       ~TelephoneEx();

       void Show();

       void Fill();

       bool operator<(TelephoneEx &a)

       {

           return(this->debt<a.debt);

       }

   protected:

   private:

};

#endif // TELEPHONEEX_H_INCLUDED

// ------ TelephoneEx.cpp --------------------------------------------------------------------------------------

#include "Allh.h"

TelephoneEx::TelephoneEx()

{

   //ctor

}

TelephoneEx::TelephoneEx(long int _subNumber, char *surname, char *adds, bool _blocked, int _debt): subNumber(_subNumber), blocked(_blocked), debt(_debt)

{

   //ctor

  strcpy(this->surname, surname);

  strcpy(this->adds, adds);

}

TelephoneEx::~TelephoneEx()

{

   //dtor

}

void TelephoneEx::Show()

{

   cout<<endl;

   cout<<surname<<" - "<<subNumber<<" - "<<adds<<" blocked: "<<blocked<<" debt: "<<debt;

}

void TelephoneEx::Fill()

{

   cout<<"\nPhone number: ";

       cin>>subNumber;

char str[3];

cin.getline(str, 50); // \n

   cout<<"Surname: ";

       cin.getline(surname, 50);

   cout<<"Address: ";

       cin.getline(adds, 100);

   cout<<"Blocked?: ";

       cin>>blocked;

   cout<<"Debt: ";

       cin>>debt;

}

// ------ main.cpp-----------------------------------------------------------------------------------------------

#include "Allh.h"

int MAX_ARRAY=10;

TelephoneEx *Data= new TelephoneEx[MAX_ARRAY];

char _TRUE[] = "true";

char _FALSE[] = "false";

int command=0;

void SortAlph(TelephoneEx *a)

{

   char str[50];

   long int st=0;

   bool bo=false;

   int de=0;

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

     for (int j=0; j<MAX_ARRAY-1; ++j)

      if (strcmp(a[j].surname, a[j+1].surname)>=0)

           {

           strcpy (str, a[j].surname);

           strcpy (a[j].surname, a[j+1].surname);

           strcpy (a[j+1].surname, str);

           strcpy (str, a[j].adds);

           strcpy (a[j].adds, a[j+1].adds);

           strcpy (a[j+1].adds, str);

           st=a[j].subNumber;

           a[j].subNumber=a[j+1].subNumber;

           a[j+1].subNumber=st;

           bo=a[j].blocked;

           a[j].blocked=a[j+1].blocked;

           a[j+1].blocked=bo;

           de=a[j].debt;

           a[j].debt=a[j+1].debt;

           a[j+1].debt=de;

           }

}

void SortDebt(TelephoneEx * &arr) // sorting of the array (improved bubble sort)

{

   bool flag=false;

TelephoneEx *temp  = new TelephoneEx;

while(flag==false)

{

 flag=true;

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

 {

  if(arr[i]<arr[i-1])

  {

   temp[i]=arr[i];

   arr[i]=arr[i-1];

   arr[i-1]=temp[i];

   flag=false;

  }

 }

}

}

int ComList ()  //  the list of commands

{

cout<<"\n\n\t~~~ MAIN MENU ~~~\n";

cout<<"\n - To output existing list of data from file press 1. ";

cout<<"\n - To input list into the file press 2. ";

cout<<"\n - To sort current list by alphabet press 3. ";

cout<<"\n - To sort current list by debt press 4. ";

cout<<"\n - To exit the menu 123.\n ";

   cin>>command;

cout<<"\nYour command is "<<command<<endl;

return command;

}

void MenuExit()

{

cout<<"\n\nBack to the MAIN MENU. Press any key...\n";

 //  getchar();

}

//void OutputFromFile(TelephoneEx *Data, int MAX_ARRAY);

void InputInFile(TelephoneEx *Data, int MAX_ARRAY)

{

   cout<<"Input number of records: ";

   cin>>MAX_ARRAY;

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

       Data[i].Fill();

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

   Data[i].Show();

   FILE *fp;

   fp=fopen("DataBaseInput.txt", "w");

   for (int i=0; i<MAX_ARRAY; ++i)    //  filling file

   {

       char str[6];

       if(Data[i].blocked) strcpy(str, "true");

       else strcpy(str, "false");

       fprintf (fp, "%s\n%ld\n%s\n%s\n%i\n\n", Data[i].surname, Data[i].subNumber, Data[i].adds, str, Data[i].debt);

   }

   cout<<"\n\n\tIn file: ";

fclose(fp);

ifstream inp("DataBaseInput.txt");

TelephoneEx *D= Data;

int k=0;

while(!inp.eof()&&k<MAX_ARRAY)

{

 char buf[7];

 inp.getline(D[k].surname,50);

 inp>>D[k].subNumber;

 inp.getline(buf,7);

 inp.getline(D[k].adds,100);

 inp.getline(buf,7);

 if(strcmp(buf, _TRUE)==0) D[k].blocked=true;

       else  if(strcmp(buf, _FALSE)==0)D[k].blocked=false;

 inp>>D[k].debt;

 inp.getline(buf,7);

 inp.getline(buf,7);

 ++k;

}

inp.close();

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

       D[i].Show();

}

void OutputFromFile(TelephoneEx *Data, int MAX_ARRAY)

{

ifstream inp("DataBaseOutput.txt");

TelephoneEx *D= Data;

int k=0;

while(!inp.eof()&&k<MAX_ARRAY)

{

 char buf[7];

 inp.getline(D[k].surname,50);

 inp>>D[k].subNumber;

 inp.getline(buf,7);

 inp.getline(D[k].adds,100);

 inp.getline(buf,7);

 if(strcmp(buf, _TRUE)==0) D[k].blocked=true;

       else  if(strcmp(buf, _FALSE)==0)D[k].blocked=false;

 inp>>D[k].debt;

 inp.getline(buf,7);

 inp.getline(buf,7);

 ++k;

}

inp.close();

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

       D[i].Show();

}

int main()

{

   ComList();

while (command != 123)  // while (command != (exit condition) )

{

switch(command)

{

case 1:

 {

 cout<<"\n\t Output existing list of data from file\n";

                    OutputFromFile(Data, MAX_ARRAY);

    MenuExit(); break;    }

case 2:

 {

          cout<<"\n\t Input list into the file\n";

                    InputInFile(Data, MAX_ARRAY);

    MenuExit(); break;

 }

case 3:

 {

 cout<<"\n\t Sorted current list by alphabet:\n";

                    SortAlph(Data);

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

                         Data[i].Show();

    MenuExit(); break;

 }

 case 4:

 {

 cout<<"\n\t Sorted current list by debt:\n";

                    SortDebt(Data);

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

                        Data[i].Show();

    MenuExit(); break;

 }

default: cout<<"\nERROR! Your command is wrong. Please try again. \nPress any key: ";

               // getchar();

}

ComList();

   }

   return 0;

}


Результат виконання

Висновки

Придбали і закріпили навики в роботі із записами, в інтеграції даних, в модульному програмуванні. В результаті виконання лабораторної роботи отримано програму, що дозволяє працювати з конкретними даними з певної області, сортувати їх, виконувати серіалізацію та десеріалізацію даних.


 

А также другие работы, которые могут Вас заинтересовать

13724. Тест биология. Вариант 1 202.45 KB
  ВАРИАНТ 1 Первая часть Назовите одноклеточную водоросль которая обитает в пресном водоеме. А фукус Б ламинария В спирогира Г хламидомонада Назовите процесс при котором растение поглощает углекислый газ и выделяет кислород. А фотосинтез
13725. Тест биология. Вариант 2 464.59 KB
  ВАРИАНТ 2 Первая часть Укажите участок корня который защищает зону роста А проводящая зона Б корневой чехлик В зона всасывания Г зона растяжения Проводящая система листовой пластинки представлена А жилками. Б прилистниками. В черешком...
13726. Тест биология. Вариант 3 ДПА 117.69 KB
  ВАРИАНТ 3 Первая часть Укажите орган который образуется в результате развития цветка. А почка Б лист В плод Г корень Назовите растение вегетативное тело которого представлено цепочкой клеток одинакового строения. А спирогира Б вольвокс ...
13727. Тест биология. Вариант 4 ДПА 507.42 KB
  1 ВАРИАНТ 4 Первая часть Назовите часть покрытосеменного растения содержащую точку роста. А листовая пластинка Б пестик В чашелистик Г кончик корня Назовите органеллу растительной клетки в которой накапливаются п
13728. Тест биология. Вариант 5 ДПА 145.03 KB
  ВАРИАНТ5 Первая часть Назовите травянистое растение с сидячими листьями. А мята Б бархатцы В кукуруза Г огурец Назовите способ размножения плауна булавовидного. А спорами или семенами Б плодами В семенами Г спорами Назовите тип...
13729. Тест биология. Вариант 6 ДПА 657.1 KB
  ВАРИАНТ 6 Первая часть Назовите тип стебля характерный для пшеницы. А вьющийся Б цепкий В соломина Г ползучий Укажите представителя отдела Голосеменные. А сфагнум остролистый Б кедр сибирский В хвощ полевой Г щитник му...
13730. Тест биология. Вариант 7 ДПА 1.74 MB
  ВАРИАНТ 7 Первая часть 1 Назовите нитчатую зеленую водоросль. А саргассум Б хлорелла В ламинария Г спирогира 2. Назовите подземное видоизменение вегетативного органа образованного путем утолщения дополнительного корня. А микориза Б клубнекор
13731. Тест биология. Вариант 8 ДПА 395.69 KB
  ВАРИАНТ 8 Первая часть Назовите структуру расположенную в пазухе листа древесного растения. А дополнительный корень Б боковая почка В камбий Г соцветие Назовите клеточную структуру хламидомонады отсутствующую в клетках высших растений. А клет
13732. Тест биология. Вариант 9 ДПА 1.99 MB
  ВАРИАНТ 9 1 Назовите внешний слой коры стебля древесного растения А пробка Бкамбий В кожица Г луб 2. Укажите споровое растение А щитник мужской Б сосна обыкновенная В горох посевной Г паслен черный 3. Укажите насекомых которые являются переносчиками...