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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2009, 18:22   #1
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
Вопрос Сортировка элементов структуры

Доброе время суток, члены форума...большая просьба, в нижеприведенном коде исправить ошибки...нужно сделать сортировку по фамилиям...по алфавиту...вроде бы ход мыслей правильный, но выдает ошибки...заранее большое спасибо...)))

Код:
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;


void SortFam (char stud[].las[],int size)
{
	for (int i=0; i<size-1; i++)
	{
		int min=i;
	for (int j=i+1; j<size; j++)
	{
		for (int i1=0; i1<19; i++)
		{
			if (stud[j].las[i1]<stud[min].las[i1])
				min=j;
		}
	}
		if (min==i)
			continue;
		char temp[]=stud[i].las;
		stud[i].las=stud[j].las;
		stud[j].las=temp;
	}

}

void Vivod (char stud[].las, int size)
{
	for (int i=0; i<size; i++)
	{
		if (i%5==0)
			cout<<endl;
		cout<<setw(15)<<stud[i].las;
	}
}
	
void main()
{
	setlocale(0,"");
   const int col=3;
   struct {
      char lastname[20], firstname[15], facultet[15], phone[11];
      int age, stipendia, semya;
   } students[col]; 
cout<<"Вы можете ввести "<<col<<" записей\n";
   cout<< "\nВведите данные\n"; 

   for (int i=0; i < col; i++)
   { 
	   cout<<"Студент № "<<i+1<<"\n";
      cout<< "Фамилия "; 
      cin>> students[i].lastname;
 
      cout<< "Имя "; 
      cin>>students[i].firstname;
 
      cout<< "Возраст "; 
      cin >> students[i].age;

      cout<< "Факультет "; 
      cin>> students[i].facultet;

	  cout<<"Размер стипендии ";
	  cin>> students[i].stipendia;

	  cout<<"Количество членов семьи ";
	  cin>>students[i].semya;

	  cout<<"Телефон ";
	  cin>>students[i].phone;
	  cout<<endl;

   }
   cout<<"Вы больше не можете добавить запись\n";
   cout<<"Сортировка по фамилии:\n";
   SortFam (students.lastname, col);
   Vivod (students.lastname, col);

   getch();
}

Последний раз редактировалось JeyKip; 31.10.2009 в 18:25.
JeyKip вне форума Ответить с цитированием
Старый 31.10.2009, 19:45   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну в общем предлагаю исправить так
1) Обьяви отдельно структуру и массив структур
Код:
#define col 3
struct {
      char lastname[20], firstname[15], facultet[15], phone[11];
      int age, stipendia, semya;
   } student

.....

void main()
{
student massiv[col], *pMassiv = massiv[0];
.....
2) Вот этот участок кода
Код:
char temp[]=stud[i].las;
		stud[i].las=stud[j].las;
		stud[j].las=temp;
заменить фамилии у структур, не поменяет структуры местами!!!!
ну а сортировку можно сделать методом пузырька
Код:
void SortFam (student massiv[col])
{
int size = col;
student Temp;
 do
     {
	 Flag = 0;
	 for (i = 0; i < size - 1; i++)
	 {
	     if (strlen(Massiv[i].lastname) > strlen(Massiv[i+1].lastname))
	     {
		 for (k = 0; k < strlen(Massiv[i].lastname); k++)
		 {
		     if (Massiv[i].lastname[k] > Massiv[i+1].lastname[k])
		     {
			 Temp = Massiv[i];
			 Massiv[i] = Massiv[i + 1];
			 Massiv[i + 1] = Temp;
			 Flag = 1;
			 break;
		     }
		 }
	     }
	     else  for (k = 0; k < strlen(Massiv[i+1].lastname); k++)
		   {
		       if (Massiv[i].lastname[k] > Massiv[i+1].lastname[k])
		       {
			   Temp = Massiv[i];
			   Massiv[i] = Massiv[i + 1];
			   Massiv[i + 1] = Temp;
			   Flag = 1;
			   break;
		       }
		   }
	 }
	 size--;
     } while (Flag);
}
Здесь кое-каких определений не хватает!!! дополни!!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 31.10.2009, 20:08   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;

struct Student{
	char lastname[20];
	char firstname[15];
	char facultet[15];
	char phone[11];
	int  age;
	int  stipendial;
	int	 semya;
}; 

void swap(Student *lhs, Student *rhs){
	Student buff;
	strcpy(buff.lastname,	lhs->lastname);
	strcpy(buff.firstname,	lhs->firstname);
	strcpy(buff.facultet,	lhs->facultet);
	strcpy(buff.phone,		lhs->phone);
	buff.age		= lhs->age;
	buff.stipendial = lhs->stipendial;
	buff.semya		= lhs->semya;

	strcpy(lhs->lastname,	rhs->lastname);
	strcpy(lhs->firstname,	rhs->firstname);
	strcpy(lhs->facultet,	rhs->facultet);
	strcpy(lhs->phone,		rhs->phone);
	lhs->age		= rhs->age;
	lhs->stipendial = rhs->stipendial;
	lhs->semya		= rhs->semya;

	strcpy(rhs->lastname,	buff.lastname);
	strcpy(rhs->firstname,	buff.firstname);
	strcpy(rhs->facultet,	buff.facultet);
	strcpy(rhs->phone,		buff.phone);
	rhs->age		= buff.age;
	rhs->stipendial = buff.stipendial;
	rhs->semya		= buff.semya;
}
void Sort(Student *arr,int size)
{
	char buff[20];
	for (int i = 0; i < size - 1; ++i)
	{
		for (int j = i + 1; j < size; ++j)
		{
			if (arr[i].lastname[0] < arr[j].lastname[0]){
				swap(arr[i], arr[j]);
			}
	
		}
	}

}

void Out (Student *arr, int size)
{
	for(int i = 0; i < size; ++i)
	{
		cout << endl;
		cout << setw(5) << arr[i].lastname;
	}
}

void main()
{
	setlocale(0,"");
	const int col = 3;
	Student students[col];

	cout<<"Вы можете ввести "<<col<<" записей\n";
	cout<< "\nВведите данные\n"; 

	for (int i = 0; i < col; ++i)
	{ 
		cout<<"Студент № "<<i+1<<"\n";
		cout<< "Фамилия "; 
		cin>> students[i].lastname;

		cout<< "Имя "; 
		cin>>students[i].firstname;

		cout<< "Возраст "; 
		cin >> students[i].age;

		cout<< "Факультет "; 
		cin>> students[i].facultet;

		cout<<"Размер стипендии ";
		cin>> students[i].stipendial;

		cout<<"Количество членов семьи ";
		cin>>students[i].semya;

		cout<<"Телефон ";
		cin>>students[i].phone;
		cout<<endl;

	}
	cout<<"Вы больше не можете добавить запись\n";
	cout<<"Сортировка по фамилии:\n";
	Sort(students, col);
	Out (students, col);

	getch();
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка динамической структуры Lemo Помощь студентам 7 13.10.2009 18:58
Сортировка элементов в матрице Lazy_Bitch Паскаль, Turbo Pascal, PascalABC.NET 2 26.09.2009 16:22
сортировка структуры vo_sa Общие вопросы C/C++ 1 25.06.2009 14:16
структуры. не получается сортировка. grewnica Общие вопросы C/C++ 2 12.05.2009 14:49
Структуры. Сортировка по фамилии студента. STS_1991 Помощь студентам 3 09.05.2009 12:14