Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 15:43   #1
Djekson20
Новичок
Джуниор
 
Регистрация: 23.09.2012
Сообщений: 1
Радость сортировка по возрастанию и по алфавиту

Создать абстрактный тип данных (структура) - дом, у которой есть название фирмы строителя, адрес, количество этажей и квартир. Определить функции установки, изменения данных, сравнения домов. Для задания текстовых полей использовать оператор 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-сортировать,то программа не работает.помогите,пожалуйста.

Последний раз редактировалось Djekson20; 23.09.2012 в 16:53.
Djekson20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по алфавиту NuR1k БД в Delphi 5 21.08.2010 19:14
Сортировка по алфавиту DimOn4Ik БД в Delphi 3 17.04.2010 06:48
сортировка по алфавиту на си++ Craz Помощь студентам 2 01.10.2009 23:33
Сортировка по алфавиту ЧИЖ Общие вопросы Delphi 1 16.03.2007 14:17