Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
kronos2
Сообщений: n/a
#1

Сортировка элементов структуры - C++

01.12.2010, 22:17. Просмотров 2086. Ответов 3
Метки нет (Все метки)

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

Код:

Код
#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

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

Заранее спасибо всем откликнувшимся.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2010, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка элементов структуры (C++):

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Структуры. Сортировка массива структуры - C++
Здравствуйте! В чем моя ошибка?? Нужно отсортировать массив структуры по возрастанию среднего балла?? Делаю это с помощью...

Сортировка и структуры - C++
Задача : &quot;Имеется список 10 политических деятелей. Каждый из 100 опрошенных называет трех политиков, и назначает каждому из них одно из...

Сортировка структуры - C++
Есть структура struct v{ string one; string two; int three; }; Подскажите как отсортировать массив структур по полю...

Сортировка структуры - C++
Не могу придумать алгоритм сортировки структуры, пока все что получилось это найти наибольшее значение. //Макросы #define FILE_PATH ...

Сортировка структуры - C++
Отсортировать структуру по желанию пользователя. 1. Вывести на экран книги в алфавитном порядке с указанием авторов, 2. Число книг...

3
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.12.2010, 01:22 #2
C
1
if (gmember[i]->money < gmember[i+1]->money)
это стипендия
1
kronos2
Сообщений: n/a
02.12.2010, 01:27 #3
Тфу ты, а я третий день голову ломаю.
Спасибо, accept.
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.12.2010, 01:55 #4
Это попытка реализации не оптимизированной пузырьковой сортировки?
Вот как-то так...

C++
1
2
3
4
5
6
7
8
9
10
    for(int k=0;k<m-1;k++) {
        for(int i=k+1;i<m;i++) {
            if (gmember[k]->money < gmember[i]->money)
            {
                temp=gmember[k];
                gmember[k]=gmember[i];
                gmember[i]=temp;
            }
        }
    }
Добавлено через 19 минут
В общем случае, quicksort за вас уже написан и помещен в cstdlib (stdlib.h).
C++
1
2
3
4
5
6
7
8
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
 
// ...
 
qsort(gmember, m, sizeof(MEMBER), compare);

Не по теме:

Знаете ли вы, что в некоторых англоязычных странах слово MEMBER имеет тот же переносный смысл, что и в русском языке?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2010, 01:55
Привет! Вот еще темы с ответами:

сортировка структуры. - C++
Возникла проблема при сортировке. возможно в коде есть и моя ошибка. ну суть в том, что он не работает. нужно отсортировать названия...

Сортировка структуры - C++
Всем привет. Нужна помощь при сортировке. Во время сортировки углов нужно так же отсортировать их координаты чтобы каждая координата...

Структуры(сортировка) - C++
есть программа с описание структуры......вбиваем начальный маршрут(точка отправки) и конечный(точка прибытия), а также его номер........ЭТА...

Сортировка структуры - C++
Второй день бьюсь с сортировкой структур, покажу код, входные и выходные данные: struct TZap{ char Name; char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
02.12.2010, 01:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru