Создать абстрактный тип данных (структура) - дом, у которой есть название фирмы строителя, адрес, количество этажей и квартир. Определить функции установки, изменения данных, сравнения домов. Для задания текстовых полей использовать оператор new. Освободить память. В main-е, привести пример сортировки домов по количеству этажей + адресу в алфавитном порядке.
мой код:
Код:
#include "stdafx.h"
#include<iostream>
#include<string>
#include<conio.h>
#include<stdlib.h>
using namespace std;
struct home
{
char *company,*builder,*address;//название фирмы и строителя
int floors,apartament;
};
void init(home *nhome,char *Company,char *Builder,char *Address,int floors,int apartament)//функция инициализации структуры
{
nhome->company=new char[strlen(Company)+1];//выделил место под название компании
nhome->builder=new char[strlen(Builder)+1];//для строителя
nhome->address=new char[strlen(Address)+1];//для адреса
nhome->floors=floors;//занес кол-во этажей в структуру
nhome->apartament=apartament;//занес кол-во квартир в структуру
strcpy(nhome->company,Company);//копирую символы из поля Company в полу company в структуре
strcpy(nhome->builder,Builder);
strcpy(nhome->address,Address);
};
void memfree(home *nhome)//метод очистки памяти
{
delete[] nhome->company;nhome=NULL;
delete[] nhome->builder;nhome=NULL;
delete[] nhome->address;nhome=NULL;
};
int sravnenie(home *h_f1, home *h_f2)
{
if(memcmp(h_f1->floors,h_f2->floors,2)==-1)//сравнение по кол-ву этажей и по адресу в алфавитном порядке
{
return 1;
}
else
{
return 0;
}
};
int main ()
{
setlocale(LC_ALL,"russian");//для отображения руского языка
int numb,etaji=0,option,apartament;
home H[25];
char *nCompany, *nBuilder, *nAddress;
nCompany=new char[256];
nBuilder=new char[256];
nAddress=new char[256];
while (1)
{
cout<<"Меню \n";
cout<<"1.Ввести данные \n";
cout<<"2.Вывести данные \n";
cout<<"3.Сортировать \n";
cout<<"4.Выбор поля данных \n";
cout<<"5.Выйти \n";
cout<<"Выберите опцию \n";
cin>>option;
switch (option)
{
case 1:{
cout<<"Введите кол-во этажей\n";
cin>>numb;
for(int i=0;i<numb;i++)
{
cout<<"Название фирмы: ";
cin >>nCompany;
cout<<"Имя строителя: ";
cin>>nBuilder;
cout<<"Адрес: ";
cin>>nAddress;
cout<<"Кол-во квартир: ";
cin>>apartament;
cout<<"Кол-во этажей: ";
cin>>etaji;
cout<<"----------------\n";
init(&H[i],nCompany,nBuilder,nAddress,etaji,apartament);
}
}break;
case 2:
{
cout<<"Все данные: \n";
for (int i=0;i<numb;i++)
{
cout<<"Номер записи: " <<i+1<<"\n";
cout<<"Название фирмы:"<<H[i].company<<"\n";
cout<<"Имя строителя:"<<H[i].builder<<"\n";
cout<<"Адрес:"<<H[i].address<<"\n";
cout<<"Кол-во этажей:"<<H[i].floors<<"\n";
cout<<"Кол-во квартир:"<<H[i].apartament<<"\n";
cout<<"-----------------------------------\n";
}
}break;
case 3:
{
for (int i=1;i<=numb;i++)
{
for(int m=i;m<numb;i++)
{
if(sravnenie(&H[m],&H[i-1]))//если первое меньше второго
{
strcpy(nCompany,H[m].company);
strcpy(nBuilder,H[m].builder);
strcpy(nAddress,H[m].address);
etaji=H[m].floors;
apartament=H[m].apartament;
memfree(&H[m]);
init(&H[m],H[i-1].company,H[i-1].builder,H[i-1].address,H[i-1].floors,H[i-1].apartament);
memfree(&H[i-1]);
init(&H[i-1],nCompany,nBuilder,nAddress,etaji,apartament);
}else break;
}
}
}break;
case 4:
{
int i;
cout<<"Введите номер записи для выбора:"<<endl;
cin>>i;
cout<<"Введите новый адрес: "<<endl;
cin>>nAddress;
cout<<"Введите название фирмы: "<<endl;
cin>>nCompany;
cout<<"Введите нового строителя: "<<endl;
cin>>nBuilder;
cout<<"Введите кол-во квартир: "<<endl;
cin>>apartament;
cout<<"Введите кол-во этажей: "<<endl;
cin>>etaji;
init(&H[i-1],nCompany,nBuilder,nAddress,apartament,etaji);
}break;
case 5:
{
for(int i=0;i<numb;i++)
{
memfree(&H[i]);
}
return 1;
}
break;
default:
{
cout<<"Неверно выбран пункт меню!Пожалуйста,попробуйде еще раз!";
}
}
}
delete[] nCompany,nCompany=NULL;
delete[] nBuilder,nBuilder=NULL;
delete[] nAddress,nAddress=NULL;
cout<<"Дальше"<<endl;
return 1;
_getch();
};
когда ввожу пункт 3-сортировать,то программа не работает.помогите,пожалуйста.