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;

}


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

Висновки

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


 

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

70522. Стратегии жизненного цикла продукта 58.92 KB
  Выпустив новый продукт, руководство желает ему долгой и прибыльной жизни. Хотя никто и не ожидает, что продукт будет продаваться вечно, все же менеджеры хотят получить достаточно большую прибыль, чтобы компенсировать свои усилия и риск.
70523. Производственная программа и ассортимент 18.19 KB
  Производственная программа план производства и реализации продукции это комплексное задание по выпуску и реализации продукции определенного ассортимента и качества в натуральных и стоимостных показателях ориентированных на достижение целей организации предприятия.
70524. Синхронизация генератора развертки 593 KB
  Поскольку сигнал и напряжение развертки поступают от разных источников через некоторое время изза нестабильности генераторов установленная кратность периодов будет нарушена. Решение задачи возможно лишь при синхронизации генератора развертки осциллографа исследуемым сигналом...
70526. Добавочные сопротивления 87.5 KB
  Добавочные сопротивления являются измерительными преобразователями напряжения в ток. Добавочные сопротивления могут состоять из одного или нескольких резисторов и служат для расширения пределов измерения по напряжению вольтметров и других приборов имеющих параллельные цепи как например...
70527. Классификация приборов непосредственной оценки 829.5 KB
  В зависимости от возможных значений токов и напряжений в измеряемых цепях приборы непосредственной оценки подразделяют на микроамперметры, миллиампер метры, амперметры, килоамперметры, милливольтметры, вольтметры и киловольтметры.
70528. Калибратор 23 KB
  Калибратор предназначен для проверки (и при необходимости установки) правильности цены деления по оси Y и длительности развертки (цены деления по оси Х). Калибраторы могут быть раздельными по амплитуде и по длительности или объединенными.
70529. Синусоидальная развертка 157.5 KB
  Если на пластины подать напряжения совпадающие по фазе то на экране получится изображение прямой линии с наклоном 45. При сдвиге фаз в 45 или 135 на экране получится изображение эллипса большая ось которого наклонена по отношению к горизонтальной оси.
70530. Генератор развертки 25.5 KB
  Генератор развертки отключается когда переключатель входа установлен в положение ВХОД Х. Требования предъявляемые к напряжению развертки. Период развертки равен n периодам сигнала где n целое число основное условие получения устойчивого изображения.