Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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


Ответ
 
Опции темы
Старый 21.03.2009, 18:43   #1
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию Задача со структурой и сортировкой на С++

Помогите с задачой на С++.Почему то сортировка методом Шелла не работает, подскажите что нужно изменить.
Условие: В файле input.txt содержатся сведения о группе сдудентов в формате:
номер группы
запись о каждом студенте группы содержит следующие сведения:фамилия, имя, отчество, год рождения, оценки по пяти предметам.

Переписать данные файла input.txt в файл output.txt, отсортировав их:
по убыванию средней оценки алгоритмом Шелла (среднюю оценку вывести в файл output.txt для каждого студента);
Исходный код:
Код:
#include"fstream"
#include"iostream"
#include"string"
#include"iomanip"
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
struct mas
{
	string fam,name,secondname;
	int ses[5];
	double key;
	void print();
};
void mas::print()
{
	out<<setw(12)<<left<<fam<<setw(10)<<name<<setw(15)<<secondname;
	for(int i=0; i<5;i++)
		out<<setw(3)<<ses[i];
	out<<setw(5)<<key<<endl;
}
void sort(mas*a,int n)
{
	mas temp;
	int i,j,incr=n/2;
	while(incr>0)
	{for(i=incr;i<n;i++)
	{
		j=i-incr;
		while(j>=0)
			if(a[i].key>a[j+incr].key){temp=a[j]; a[j]=a[j+incr]; a[j+incr]=temp;j=j-incr;}
			else j=-1;
	}
	incr=incr/2;
	}
}	
int main()
{
	int n=0,m,i;
	mas stud[20];
	if(!in)cout<<"error in the open file input.txt\n";
	else
	{
		in>>m;
		while(in.peek()!=EOF)
		{
			in>>stud[n].fam;
			in>>stud[n].name;
				in>>stud[n].secondname;
				stud[n].key=0;
				for(i=0;i<5;i++)
				{
					in>>stud[n].ses[i];
					stud[n].key+=stud[n].ses[i];
				}
				stud[n].key/=5;
				n++;
		}
		sort(stud,n);
		out<<m<<endl;
		for(i=0;i<n;i++)
			stud[i].print();
	}
	in.close(); out.close();
	return 0;
}
Many man вне форума Ответить с цитированием
Старый 21.03.2009, 22:52   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

попробуйте сортировать так

Код:
void sort(int *a,int n)
{
	int temp;
	int i,j,incr;

	for(int incr=n/2;incr>0;incr/=2)
	{
		for(int i=0;i<n-incr;i++)
		{
			for(int j=i+incr;j<n;j+=incr)
			{
				if(a[i]>a[j])
				{
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
				}
			}
		}
	}
};
ЗЫ :
тут на примере простого массива, под свою задачу думаю заточите...
counter вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи со сложной структурой данных [C++ Builder] conqueror Помощь студентам 3 24.12.2008 09:16
Проблемы с динамической структурой данных Mailz Общие вопросы C/C++ 1 20.05.2008 23:18
ошибка при работе со структурой msvc vvviperrr Общие вопросы C/C++ 0 07.05.2008 19:34
Ошибка при работе с структурой Nullator Общие вопросы C/C++ 11 07.03.2008 23:52


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя