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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 12:18   #1
satoved
Новичок
Джуниор
 
Регистрация: 01.12.2010
Сообщений: 1
По умолчанию Сотировка элементов структуры

Цель программы: Считать и отсортировать информацию о студентах в группе. Сортировка просходит по номеру зачетки.

Код:
Код:
#include "stdafx.h"
using namespace std;

struct MEMBER {
	char fio[30]; // ФИО
	char date[12]; // Дата рождения
	char adress[70]; // Место жительства
	char born[70]; // Место рождения
	char subject[30]; // Любимый предмет
	int book; // Номер зачетки
	char sport[30]; // Секция
	char lang[30]; // Язык
	char zodiak[30]; // Зодиак
	int money; // Степедия
};

#define m 16 // Кол-во студентов в базе

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale( LC_ALL, ".1251" );

	MEMBER group[m];
	MEMBER *gmember[m], *temp;

	FILE *data;
	data=fopen("D://input.txt","r"); // файл данных

	cout << "Исходная сортировка (Имя, Номер зачетки):" << endl << "______________________" << endl;

	for (int i=0;i<m;i++) {
		gmember[i]= &group[i]; // указатели на члена группы

		fgets(gmember[i]->fio,30,data); // считывание строк, доступ к эменту структуры через указатель
		cout << gmember[i]->fio;
		fgets(gmember[i]->date,12,data);
		fgets(gmember[i]->adress,70,data);
		fgets(gmember[i]->born,70,data);
		fgets(gmember[i]->subject,30,data);
		fscanf(data,"%d\n",&gmember[i]->book); // считывание чисел
		cout << gmember[i]->book << endl << endl;
		fgets(gmember[i]->sport,30,data);
		fgets(gmember[i]->lang,30,data);
		fgets(gmember[i]->zodiak,30,data);
		fscanf(data,"%d\n",&gmember[i]->money);
	}

	cout << "______________________" << endl;

	// Сортируем
	for(int k=0;k<m;k++) {
		for(int i=0;i<(m-1);i++) {
			if (gmember[i]->money < gmember[i+1]->money)
			{
				temp=gmember[i];
				gmember[i]=gmember[i+1];
				gmember[i+1]=temp;
			}
		}
	}

	// Выводим отсортированное

	cout << endl << "Отсортированная информация:" << endl;

	for (int i=0;i<m;i++) {
		cout << "ФИО: " << gmember[i]->fio;
		cout << "Дата рождения: " << gmember[i]->date;
		cout << "Адресс: " << gmember[i]->adress;
		cout << "Место рождения: " << gmember[i]->born;
		cout << "Любимый предмет: " << gmember[i]->subject;
		cout << "Номер зачетки: " << gmember[i]->book << endl;
		cout << "Секция: " << gmember[i]->sport;
		cout << "Изучаемый язык: " << gmember[i]->lang;
		cout << "Знак зодиака: " << gmember[i]->zodiak;
		cout << "Стипендия: " << gmember[i]->money << endl << endl;
	}

	_getch();
	return 0;
}
В исходном файле:
Код:
Имя1
Дата Рождения1
....
Имя2
....
и т.д.
Проблема:
Код:
	for(int k=0;k<m;k++) {
		for(int i=0;i<(m-1);i++) {
			if (gmember[i]->money < gmember[i+1]->money)
			{
				temp=gmember[i];
				gmember[i]=gmember[i+1];
				gmember[i+1]=temp;
			}
		}
	}
Условие if выполняется, но не сортирует ничего.

Софтина: VC++ 2010

Как исправить или предложите другой вариант сортировки.

Заранее спасибо всем откликнувшимся.
satoved вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
Сортировка элементов структуры JeyKip Общие вопросы C/C++ 2 31.10.2009 20:08
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. bessonov12 Microsoft Office Excel 7 04.05.2009 05:44
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Дан массив из N элементов (чисел),определить количество элементов кратных 3. Woha Общие вопросы C/C++ 2 08.12.2008 13:12