Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 8
1

Отсортировать строки файла по данным из структуры

27.04.2016, 12:43. Просмотров 460. Ответов 0
Метки нет (Все метки)

Всем привет!

Не получается следующая функция:

Нужно отсортировать строки из файла по одним данным из структуры, рейтинг, по ним сортируется вся структура и на экран выводится ТОП5 с большего к меньшему... Если же рейтинг повторяется у нескольких, то сортируется по алфавиту.

Пытался как то делать через бабл сорт, но я в сортировках не мастер и ничего не вышло...

Вот моя структура:

C
1
2
3
4
5
6
7
8
9
struct rating {
    float rating;
    int id;
    struct det {
        double views;
        double likes;
        int dislikes;
    }details;
};
Вывод на экран:

C
1
printf("%6d.  %.3f    %-21s %-9.lf %-13.lf %d\n",ptr2[i].id, ranking, ptr[i].musdata.title, ptr2[i].details.views, ptr2[i].details.likes, ptr2[i].details.dislikes);
Все строки сортируются по
C
1
ranking=(ptr2[i].details.likes)/(ptr2[i].details.views);

Выход должен быть примерно такой:

Код
1. 1.00 Angels
2. 1.00 Armor
3. 0.43 Lord
4. 0.32 Cup
5. 0.01 Barrel
Надеюсь на вашу помощь!

Добавлено через 12 часов 54 минуты
Вот так смог сделать... Но... Получается не так...

Образец:
ID | Rating | Title | Viewers | Likes | Dislikes
1. 0,54 Lordi 291 100 23
2. 1,00 Ozone 511 33 43
3. 0,23 AC/DC 991 32 43
4. 0,79 SNSD 4341 549 33
5. 1,00 One Republic 441 321 54

У меня выдает так:
ID | Rating | Title | Viewers | Likes | Dislikes
1. 1,00 Lordi 291 100 23
2. 1,00 Ozone 511 33 43
3. 0,79 AC/DC 991 32 43
4. 0,54 SNSD 4341 549 33
5. 0,23 One Republic 441 321 54

Надо:
ID | Rating | Title | Viewers | Likes | Dislikes
1. 1,00 One Republic 441 321 54
2. 1,00 Ozone 511 33 43
3. 0,79 SNSD 4341 549 33
4. 0,54 Lordi 291 100 23
5. 0,23 AC/DC 991 32 43

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int TOP(struct rating *ptr2, struct data *ptr, int size2) //Function to show TOP5 of tracks
{
    //Declaration
    int i, j, k, c, d, swap, pos;
    int m=1;
    float ranking[100];
    
        //Display collumn titles
            printf( "  ------------------------------------------------------------------------------\n"
                    "  | ID | Rating |        Title        | Viewers |    Likes    |    Dislikes    |\n"
                    "  ------------------------------------------------------------------------------\n");
 
 
 
    for(i=0; i<size2; i++){
            ranking[i]=(ptr2[i].details.likes)/(ptr2[i].details.views);
    }
    
        for (c = 0 ; c < ( size2 - 1 ); c++)
        {
            for (d = 0 ; d < size2 - c - 1; d++)
                {
                    if (ranking[d] < ranking[d+1]) /* For decreasing order use < */
                        {
                                pos = i;
                                    for (j = i + 1; j < size2; ++j)
                                        {
                                            if (ptr2[j].rating < ptr2[pos].rating)
                                                {
                                                    pos = j;
                                                }
                                        }   
                            ptr2[i].rating   = ranking[d];
                            ranking[d]   = ranking[d+1];
                            ranking[d+1] = ptr2[i].rating;
                        }
                }
        }
    
    for(i=0; i<size2; i++){
            if(m<=size2){
                printf("%6d.  %.3f    %-21s %-9.lf %-13.lf %d\n",ptr2[i].id, ranking[i], ptr[i].musdata.title, ptr2[i].details.views, ptr2[i].details.likes, ptr2[i].details.dislikes);
                printf( "  ------------------------------------------------------------------------------\n");
                m++;
            }
    }
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2016, 12:43
Ответы с готовыми решениями:

Нужно отсортировать строки по убыванию согласно данным в последнем столбце
Есть проект созданный в лазарусе нужно отсортировать строки по убыванию согласно данным в последнем...

Отсортировать строки файла
Должно сортировать строки из файла и выводить их в конце const n=30; c:set of char=; type...

Отсортировать строки текстового файла
Дан строковый файл. Создать новый строковый файл, в котором строки из исходного файла...

Отсортировать строки txt-файла по алфавиту
Есть документ txt, его нужно открыть, и по нажатию на кнопку - отсортировать все строки по...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2016, 12:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Отсортировать строки файла по нарастанию их длины
Тема - типизированные файлы в Турбо Делфи. Нужен код.

Отсортировать строки файла по длине слова
дан текстовый файл. в первом столбце порядковый номер от 1 до 10. во втором столбце по одному слову...

Строки из текстового файла отсортировать и дописать к другому
Строки из текстового файла отсортировать и записать отсортированы к другому.

Как отсортировать строки файла в порядке возрастания их длины
Помогите решить задачу!!!!!! Дан файл со строками, отсортировать строки в порядке возрастания их...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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