75663

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

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

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

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

Украинкский

2015-01-24

562.11 KB

7 чел.

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

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

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

Кафедра ПЗ

Лабораторна робота №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;

}


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

Висновки

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


 

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

76273. Фонетика в латинском языке 30.12 KB
  В классическом латинском языке ударение согласно свидетельствам античных грамматиков было музыкальным повышение тона на ударном гласном; место ударения практически полностью определялось фонологической структурой слова.
76274. Олимпийские игры 91.35 KB
  Приняли участие лучшие спортсмены северных стран Норвегии Финляндии Швеции. Во всех дисциплинах лыжного спорта победителями оказались спортсмены Норвегии. Непревзойденными в хоккее были спортсмены Канады имевшие огромное преимущество над соперниками.
76275. ИНФЕКЦИОННЫЙ ЭНДОКАРДИТ 34.82 KB
  Наряду с этим к значимым факторам риска ИЭ у детей и подростков относятся пролапс митрального клапана особенно с миксоматозным утолщением клапанных створок и митральной регургитацией длительно стоящие катетеры центральных вен и перенесенные операции на сердце.
76276. Ишемический инсульт 19.56 KB
  Прежде всего на МРТ не визуализируется типичный эффект потери сигнала от сосудов в зоне патологии. В течение первых 3 сут развития инфаркта мозга на МРТ с контрастированием примерно в 30 случаев может наблюдаться усиление сигнала от соседней твердой мозговой оболочки.
76277. Операционные системы 51.7 KB
  Специфика ОС проявляется и в том каким образом она реализует сетевые функции: распознавание и перенаправление в сеть запросов к удаленным ресурсам передача сообщений по сети выполнение удаленных запросов.
76278. Наружная и передняя яремные вены, их корни, притоки и анастомозы 107.04 KB
  Анастомоз с v. jugularis anterior противоположной стороны – arcus venosus juguli (иногда сливаются в v. mediana colli), межсистемный. Анастомозы дуги с vv. thyroideae inferiores и с подкожными венами передней грудной стенки. Входит в spatium interaponeuroticum suprasternale, поворачивает в recessus lateralis, соединяясь с v. jugularis externa или в v. jugularis interna. Реже впадает в v. subclavia или v. brachiocephalica.
76279. Непарная вена 43.26 KB
  zygos начинается в брюшной полости являясь непосредственным продолжением правой восходящей поясничной вены v. Последняя начинается из мелких вен области крестца и поясницы которые анастомозируют с венами наружного позвоночного сплетения и поясничными венами из системы нижней полой вены. Притоки непарной вены: 1. Верхние диафрагмальные вены vv.
76280. Внутренняя яремная вена 66.65 KB
  В области шеи внутренняя яремная вена является самым крупным стволом. Вена располагаетсяв составе сосудистонервного пучка шеи латеральнее общей сонной артерии и блуждающего нерва. В области шеи внутренняя яремная вена получает непостоянные внечерепные притоки.
76281. Внутричерепные притоки внутренней яремной вены 117.6 KB
  Синусы твердой мозговой оболочки: Sinus sgitlis superior Sinus sgitlis inferior Sinus cvernosus Sinus intercvernosi Sinus sphenoprietlis Sinus petrosus superior Sinus petrosus inferior Sinus mrginlis Sinus rectus Sinus occipitlis Sinus trnsversus Sinus sigmoideus Выпускники vv. diploice: Лобная в sinus sgitlis superior Задняя височная sinus sphenoprietlis Передняя височная sinus trnsversus Затылочная sinus trnsversus Вены твердой мозговой оболочки vv.