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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2008, 09:18   #1
kmsboy
 
Регистрация: 25.11.2008
Сообщений: 3
Вопрос Cортировать массив структур по полю

Ребята помогите, зачёт на носу, РГЗ сдавать нужно, ужас
Помогите отсортировать массив структур по полю int win!!!


Составить программу обработки итоговой таблицы шахматного турнира.
Игры проходили в один круг, каждый из участников встретился
с другими участниками по одному разу. Обработка должна включить:
- формирование итоговой таблицы турнира с расстановкой участников
согласно набранным очкам (за победу - 1, за ничью - 0,5, за поражение - 0);
- вывести фамилии 3-х участников: больше всего побед, поражений, ничьих.

Используемый файл "players.txt"

players_1 1 5 9
players_2 2 6 8
players_3 3 7 7
players_4 4 8 6
players_5 4 8 6

Код:
/*
* Код программы
*/

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <iostream.h>

using namespace std;

void rusmsg(char *string) {
    char message[100];
    CharToOem(string, message);
    cout << message;
}
/*
 * Обьявляем переменные необходимые для работы
 */

int buffer;
char filename[64];
int ch, i = 0;
double w;

FILE *fp;

struct player {
    char name[32];
    int win, tie, spank;
    double point;
} pd[sizeof (i)];

void main() {
    rusmsg("Лабораторная работа №6\ncтудента гр. 7ВТ3Д-1\nВасильев А.Н.\n\n");

    if ((fp = fopen("players.txt", "r")) == NULL) {
        rusmsg("Файл не найден\n>");
        getch();
        exit(0);
    }
    /*
     * Вывод заголовка таблица учасников турнира
     */
    cout << " --------------------------------------------------" << endl;
    rusmsg("| # |  Игрок  | Побед | Ничьх | Поражений |  Очки  |\n");
    cout << " --------------------------------------------------" << endl;
    /*
     * Формирование таблицы участников турнира
     */
    while (ch != EOF) {
        fscanf(fp, "%s %i %i %i", &pd[i].name, &pd[i].win, &pd[i].tie, &pd[i].spank);
        pd[i].point = pd[i].win + (pd[i].tie * 0.5);
        ch = fgetc(fp);
        i++;
    }
    fclose(fp);
    getch();
}
Заранее благодарен!!!
kmsboy вне форума Ответить с цитированием
Старый 25.11.2008, 10:15   #2
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

qsort в тебе помощь!
Учиться, учиться и еще раз учиться
Ламер_001 вне форума Ответить с цитированием
Старый 25.11.2008, 12:54   #3
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
Восклицание

Я обычно, если нужно будет сортировать, делаю так:

StructName ** myVar = new StructName*[structCount];
for(int i=0;i<structCount;i++)
myVar[i]=new StructName;

А потом, если надо сортировать, то просто меняю указатели на строчки, т.е.
Код:
StructName* tmp= myVar[i];
myVar[i]=myVar[j];
myVar[j]=tmp;
Кароч так выгоднее получается!!!

P.S. потом не забываем удалять динамически выделенную память!!!
StarWorm вне форума Ответить с цитированием
Старый 25.11.2008, 20:26   #4
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Цитата:
Сообщение от Ламер_001 Посмотреть сообщение
qsort в тебе помощь!
+1 Вся структура статическая.

Вообще просто написать несколько функций сравнения и передавать их в функцию сортировки. Можете свою написать, если хотите

Кстати, если возникнет надобность скопировать одну структуру в другую, лучше всего это сделать через memcpy. Это в вашем случае. НИКОГДА так не делайте с структурами с динам. данными.
theos вне форума Ответить с цитированием
Старый 26.11.2008, 00:00   #5
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от theos Посмотреть сообщение
Кстати, если возникнет надобность скопировать одну структуру в другую, лучше всего это сделать через memcpy. Это в вашем случае. НИКОГДА так не делайте с структурами с динам. данными.
Это адресовано ко мне??? Почему не делать структуры с динамич памятью, может и указатели не использовать???
StarWorm вне форума Ответить с цитированием
Старый 27.11.2008, 16:53   #6
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Читайте внимательно: НИКОГДА так не делайте с структурами с динам. данными.

Имеется ввиду, что из memcpy'ем лучще не копировать
theos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив структур RaZveDchiK Помощь студентам 1 31.08.2008 21:44
Динамический массив структур Kostyakovich Помощь студентам 4 20.04.2008 21:59
Массив структур с заранее неизвестным количеством элементов, С++ PersonaGrata Общие вопросы C/C++ 8 24.02.2008 16:34
Вопрос по полю со списком 6ePKyT Microsoft Office Access 3 28.11.2007 17:31