Программирование

Автор: Пользователь скрыл имя, 03 Ноября 2012 в 10:35, курсовая работа

Описание работы

Для заданной двухуровневой структуры данных, содержащей указатели на объекты (или сами объекты) - параметры шаблона, разработать полный набор операций (добавление, включение и извлечение по логическому номеру, сортировка, включение с сохранением порядка, загрузка и сохранение строк в бинарном файле, балансировка – выравнивание размерностей структур данных нижнего уровня). Предполагается, что операции сравнения хранимых объектов переопределены стандартным образом (в виде операций <,> и т.д.). Программа должна использовать шаблонный класс с объектами- строками и реализовывать указанные в

Работа содержит 1 файл

Радченко О. Курсовой 3.3.doc

— 233.50 Кб (Скачать)

        }

 

out.write((char*)&n, sizeof(int)); // записать общее кол-во строк

 

q=First;

while(q)

{

for (int i=0; q->data[i]!=NULL; i++)

out.write ((char*)&q->data[i], sizeof(T)); // сами строки

q=q->next;

}

out.close ();  // оборвать связь с файлом

}

 

//----------------------Чтение из файла------------------------

template <class T, int N>

void List<T,N>::Load (char* file)  // загрузка из бинарного файла

{

ifstream in(file, ios::binary); // связь с файлом

if (!in)

{

in.close();

remove (file);    // файл не существует

cout<<rus("Файл не существует")<<endl;

}

T obj;

int n;

in.read((char*)&n, sizeof(int)); // прочитать кол-во строк

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

{

in.read ((char*)&obj, sizeof(T)); // прочитать сами строки

Add (obj);    // добавить в список

}

in.close();     // оборвать связь с потоком

}  

 

//-----------------------Complex_class.h------------

#pragma once

#include "iostream"

#include "string"

#include "fstream"

#include "cstdlib"

#include "sstream"

#include "math.h"

 

 

using namespace std;

 

class Complex {

 

    friend ostream& operator << (ostream & os, Complex& cx);

    friend istream& operator >> (istream & is, Complex& cx);

    friend ofstream& operator << (ofstream & os, Complex& cx);

    friend ifstream& operator >> (ifstream & is, Complex& cx);

public:

 

double real,imag;

   

public:

 

~Complex() {}

 

Complex(){

real=0;

imag=0;}

 

Complex(double r,double i) {

      this->real = r;

      imag = i;

  }

 

Complex operator +(Complex c) {   //перегрузка операции сложения

  Complex k(0,0);   

  k= Complex(real + c.real,

                     imag + c.imag);

 

return(k);

      

    }

 

Complex operator -(Complex c) {   //перегрузка вычитания

        Complex k(0,0);  

k= Complex(real - c.real,

                     imag - c.imag);

return(k);

}

 

Complex operator *(Complex c) {  //перегрузка умножения

 

      Complex k(0,0); 

  k= Complex((real*c.real-imag*c.imag),(imag*c.real+real*c.imag));

 

return(k);

}

Complex operator /(Complex c) {   //перегрузка деления

    Complex k(0,0);

char str[3]="/_";

k= Complex(((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag)),((imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag)));

 

return(k);

      }

 

Complex& operator =(const Complex& c) {

real=c.real;

    imag=c.imag;

    return *this;

}

 

Complex& operator =(const int& c) {

real=c;

    imag=0;

    return *this;

}

 

 

bool operator > (Complex cx) {   //перегрузка операторов сравнения 

if (sqrt(real*real+imag*imag)>sqrt(cx.real*cx.real+cx.imag*cx.imag)) return 1;

else return 0;}

 

bool operator < (Complex cx) { 

if (sqrt(real*real+imag*imag)<sqrt(cx.real*cx.real+cx.imag*cx.imag)) return 1;

else return 0;}

 

bool operator == (Complex cx) { 

if ((real==cx.real)&&(imag==cx.imag)) return 1;

else return 0;}

 

bool operator != (Complex cx) { 

if ((real!=cx.real)&(imag!=cx.imag)) return 1;

else return 0;}

bool operator == (int cx) { 

if ((real==cx)&&(imag==0)) return 1;

else return 0;}

 

bool operator != (int cx) { 

if ((real!=cx)&(imag!=0)) return 1;

else return 0;}

};

 

istream& operator >> (istream &is, Complex& cx) { 

is >> cx.real;

is >> cx.imag;

  return is;

}

 

ostream& operator <<(ostream& os, Complex& cx){

  os << " ("<<cx.real<<" , "<<cx.imag<<") ";

  return os;

}

 

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

#include "List.h"

#include "conio.h"

#include "Complex_class.h"

 

using namespace std;

 

void main(void) {

 

List<int,4> L;

 

char *name= new char[50];

int val;

int num=0;

 

system("cls");

cout<< rus("[1] Показать список")<<endl;

cout<< rus("[2] Добавить по номеру")<<endl;

cout<< rus("[3] Удалить по номеру")<<endl;

cout<< rus("[4] Вывод по номеру")<<endl;

cout<< rus("[5] Удалить весь список")<<endl;

cout<< rus("[6] Сохранение в бинарный файл")<<endl;

        cout<< rus("[7] Загрузка из бинарного файла")<<endl;

cout<< rus("[8] Добавить в конец списка")<<endl;

cout<< rus("[9] Сортировка")<<endl;

cout<< rus("[b] Балансировка")<<endl;

cout<< rus("[i] Информация о структуре")<<endl;

cout <<rus("[e] ВЫХОД")<<endl;

 

char z; int exit=0;

 

 

while (exit!=1)

{   cin>>z;

switch(z){ 

 

case '1':  if(!L.First)

   {cout << rus("Список  пуст")<<endl;}

else L.ShowList();

break;  

 

 

         

case '2':  

cout << rus("Введите данные: ");

cin >> val;

cout << rus("\nВведите номер: ");

cin >> num;

L.Insert (val,num);

L.ShowList();

break;

 

 

case '3':  

 

cout << rus("\nВведите   номер: ");

cin >> num;

L.DelElem(num);

break;

 

 

case '4':

cout << rus("Введите номер: ");

cin >> num;

L.ShowElement (num);

break;

 

 

case '5': L.DelList(); cout << rus("Список  удален!") << endl; break;

 

case '6': cout << rus("Укажите  файл для записи: ");

cin >> name;

L.Save (name);

cout<<rus("Файл записан");

break;

 

 

case '7': cout << rus("Укажите файл для чтения: ");

cin >> name;

L.Load (name);

    break;

 

 

 

 

case '8': {cout << rus("Введите  данные: ");

     cin >> val;

L.Add (val);

L.ShowList();

     break;}

 

 

case 'b': L.Balance();

             L.ShowList();

     break;

 

case '9':  

           L.Sort ();

               L.ShowList();

       break;

 

case 'i':  L.Info (); break;

 

case 'e': exit=1;

  

} }

delete[] name;       

}

 

 

Тестовая  программа:

 

#include "List.h"

#include "iostream"

#include "time.h"

#include "conio.h"

#include "fstream"

using namespace std;

 

 

void main() {

 

//Тестирование функции  сортировки

List <int ,6> List1;

ofstream in("ResSort.txt");

 

for (int n=500; n<=10000; n=n+500) {

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

{ int g=rand();

  List1.Add(g);}

clock_t start=clock();

List1.Sort();

clock_t finish=clock();

double workTime;

workTime=(double)(finish - start) / CLOCKS_PER_SEC;

cout<<n<<' '<<workTime<<endl; 

in<<n<<' '<<workTime<<endl;

List1.DelList();

};

in.close();

 

//тестирование балансировки

List <int,6> List2;

ofstream inB("ResBalance.txt");

 

for (int n=500; n<=10000; n=n+500) {

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

{ int g=rand();

  int k = floor(double((rand()*(i))/(RAND_MAX)));

  List2.Insert(g,k);

}

clock_t start=clock();

List2.Balance();

clock_t finish=clock();

double workTime;

workTime=(double)(finish - start) / CLOCKS_PER_SEC;

cout<<n<<' '<<workTime<<endl; 

inB<<n<<' '<<workTime<<endl;

List1.DelList();

};

inB.close();

 

_getch();

}




Информация о работе Программирование