Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
1

Сортировка (исправить код)

09.11.2012, 20:04. Показов 2078. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с сортировкой! Нужно сортировать исходные данные по убыванию!! Простой массив сортировать могу, а тут никак не получается) Сортировать по значению k
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
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size=3;
const int n=3;
struct list
{
       char name[50];
       int bal[10];
       };
void inp(list [size]);
void out2(list [size]);
int main()
{
    list a[size];
    inp(a);
    out2(a);
 system("pause");
}
 
void inp(list a[size])  
{
     for(int i=0;i<size;i++){
     cin>>a[i].name;
     for(int j=0;j<n;j++)
     cin>>a[i].bal[j];
}
}
 
void out2(list a[size])
{
     cout<<"----------------------------------------------------------\n";
     int k=0;
     for(int i=0;i<size;i++){
     float s=0;
     for(int j=0;j<n;j++)
     {
     if(j==0) k+=a[i].bal[j]*5; 
     if(j==1) k+=a[i].bal[j]*3;
     if(j==2) k+=a[i].bal[j]*2;
     s+=a[i].bal[j]; 
     }
     cout<<"komanda\t"<<a[i].name<<"\tkilkist medaliv  "<<s<<"  suma baliv  "<<k<<"\n";
     k=0;
     }
     cout<<"----------------------------------------------------------\n";
 }
Добавлено через 32 минуты
Что никто не может помочь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2012, 20:04
Ответы с готовыми решениями:

Сортировка (исправить код)
Нужно упорядочить записи по алфавиту, но у меня только меняет местами name! Помогите исправить код!...

Сортировка пузырьком. Исправить код
Подскажите пжл. в чем ошибка, что не так написано, не хочет сортировать(( числа рандомно...

Пузырьковая сортировка - исправить код
У меня есть массив unsigned char *buffer = new unsigned char. И мне нужно реализовать пузырьковую...

Сортировка по алфавиту (исправить код)
Помогите отсортировать структуру по алфавиту (сортировка по tabl.name)! У меня ошибку выдает ((...

22
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
09.11.2012, 20:49 2
где сортировка простого массива?
структуры сортируют аналогично!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void bubbleSort()
{
    int  i, j;
struct list tmp;
 
    for(i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (a[j + 1].bal[0] < a[j].bal[0]) 
            {
                tmp = a[j + 1]; 
                a[j + 1] = a[j]; 
                a[j] = tmp;
            }
        }
    }
}
Цитата Сообщение от tokar2 Посмотреть сообщение
Сортировать по значению k
где поле k в структуре?
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 20:58  [ТС] 3
Kuzia domovenok, Есть задача, я ее сделал а вот вывод сделать нармальний сделать не могу!
"Составить программу, которая подводит итоги Олимпийских игр. пользователь вводит
количество золотых, серебряных и бронзовых наград, полученных каждой командой. В
результате должна быть подсчитана общее количество наград и соответствующее
баллов (коэффициенты начисления вводит пользователь). Вывод информации осуществить в
виде упорядоченного списка согласно набранным количеством баллов.
"
У меня баллы это k! И еще вы можете сделать сортировку в моем коде?
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 22:02  [ТС] 4
Дано задачу:
Составить программу, которая подводит итоги Олимпийских игр. пользователь вводит
количество золотых, серебряных и бронзовых наград, полученных каждой командой. В
результате должна быть подсчитана общее количество наград и соответствующее
баллов . Вывод информации осуществить в
виде упорядоченного списка согласно набранным количеством баллов.


Программу я написал, но с сортировкой проблемы. Нужно чтобы выводило по убыванию по количеству набранных баллов! Помогите реализовать сортировку.
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
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size=3;
const int n=3;
struct list
{
       char name[50];
       int medal[10];
       };
void inp(list [size]);
void out(list [size]);
int main()
{
    list a[size];
    inp(a);
    out(a);
 system("pause");
}
 
void inp(list a[size])  
{
     for(int i=0;i<size;i++){
     cin>>a[i].name;  //ввод имя команды
     for(int j=0;j<n;j++)
     cin>>a[i].medal[j];  //ввод трех медалей
}
}
 
void out(list a[size])
{
     cout<<"----------------------------------------------------------\n";
     int k=0;
     for(int i=0;i<size;i++){
     float s=0;
     for(int j=0;j<n;j++)
     {
     if(j==0) k+=a[i].medal[j]*5; //баллы за золотую медаль
     if(j==1) k+=a[i].medal[j]*3; //баллы за серебряную медаль
     if(j==2) k+=a[i].medal[j]*2;  //баллы за бронзовую медаль
     s+=a[i].medal[j];     //считает количество всех медалей для каждой команды
     }
     cout<<"komanda\t"<<a[i].name<<"\tkilkist medaliv  "<<s<<"  suma baliv  "<<k<<"\n";
     k=0;
     }
     cout<<"----------------------------------------------------------\n";
 }
Вот реализация сортировки есть, но как ее в моем коды использовать?
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
for (int i = 0; i < n; i++)  
    {
        cout<<"x["<<i<<"]"; 
        cin >> x[i]; 
    }
    for(int i=0;i<n;i++)
    {
        int min=x[i];
        int nmin=i;
        for(int j=i;j<n;j++)
        {
            if(min>x[j])
            {
                min=x[j];
                nmin=j;
            }
        }
      x[nmin]=x[i];
      x[i]=min;
    }
    for(int i=0;i<n;i++)
    {
        cout<<x[i]<<endl;
    }
Что никто не знает как мне помочь? Если вам поможет ловите скриншот. Там я нарисовал)
Сортировка (исправить код)
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
09.11.2012, 23:26 5
Цитата Сообщение от tokar2 Посмотреть сообщение
C++
1
2
3
4
5
struct list
{
* * * *char name[50];
* * * *int medal[10];
* * * *};
почему бы сюда не добавить сторку
C++
1
int bals;
для которой после ввода медалей вызвать функцию подсчета и сортировать по ней?
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:28  [ТС] 6
MrGrig, можете на примере моего кода показать как это будет, я что-то не очень понял что к чему ..
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
09.11.2012, 23:38 7
странность у вас какая то...
почему количество медалей вещественное число?
float s=0;
s+=a[i].medal[j]; //считает количество всех медалей для каждой команды

Цитата Сообщение от tokar2 Посмотреть сообщение
C++
1
2
3
4
5
6
7
void inp(list a[size]){
     for(int i=0;i<size;i++){
          cin>>a[i].name; *//ввод имя команды
     for(int j=0;j<n;j++)
          cin>>a[i].medal[j]; *//ввод трех медалей
     }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct list{
     char name[50];
     int medal[10];
     int bals;
     int s;
};
 
void inp(list a[size]){
     for(int i=0;i<size;i++){
          cin>>a[i].name; *//ввод имя команды
          for(int j=0;j<n;j++)
               cin>>a[i].medal[j]; *//ввод трех медалей
     }
     for(int i=0;i<size;i++){
          a[i].bals=a[i].s=0;
          for(int j=0;j<n;j++){
               if(j==0) a[i].bals+=a[i].medal[j]*5; //баллы за золотую медаль
               if(j==1) a[i].bals+=a[i].medal[j]*3; //баллы за серебряную медаль
               if(j==2) a[i].bals+=a[i].medal[j]*2;  //баллы за бронзовую медаль
               a[i].s+=a[i].medal[j];     //считает количество всех медалей для каждой команды
          }
      }
}
ну а далее сортировка
1
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:43  [ТС] 8
Вы бы не могли мне еще код сортировки подправить, просто я в этих массивах путаюся сильно.
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
09.11.2012, 23:53 9
довольно интересный алгоритм, я даже такого что-то и не припомню
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i=0;i<n;i++)
    {
        int min=a.bals[i];
        int nmin=i;
        for(int j=i;j<n;j++)
        {
            if(min>a.bals[j])
            {
                min=a.bals[j];
                nmin=j;
            }
        }
      a.bals[nmin]=a.bals[i];
      a.bals[i]=min;
    }
как то так

Добавлено через 3 минуты
хотя по идеи это не совсем точно, таким образом вы поменяете местами только сами балы, можно перегрузить оператор присвоения либо присваивать всю инфу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i=0;i<n;i++)
    {
        int min=a.bals[i];
        int nmin=i;
        for(int j=i;j<n;j++)
        {
            if(min>a.bals[j])
            {
                min=a.bals[j];
                nmin=j;
            }
        }
      a.name[nmin]=a.name[i];
      a.medal[nmin]=a.medal[i];
      a.bals[nmin]=a.bals[i];
      a.s[nmin]=a.s[i];
      a.bals[i]=min;
    }
1
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:55  [ТС] 10
у меня почему-то не компилируется
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
09.11.2012, 23:59 11
полный код пожалуйста с указанием ошибки
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
10.11.2012, 00:02  [ТС] 12
Может я что-то не так написал
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size=3;
const int n=3;
struct list{
     char name[50];
     int medal[10];
     int bals;
     int s;
};
void inp(list [size]);
void out(list [size]);
int main()
{
    list a[size];
    inp(a);
    //out(a);
 system("pause");
}
 
void inp(list a[size]){
     
   for(int i=0;i<size;i++){
        cin>>a[i].name; //ввод имя команды
        for(int j=0;j<n;j++)
           cin>>a[i].medal[j]; //ввод трех медалей
     }
     for(int i=0;i<size;i++){
          a[i].bals=a[i].s=0;
          for(int j=0;j<n;j++){
               if(j==0) a[i].bals+=a[i].medal[j]*5;    //баллы за золотую медаль
               if(j==1) a[i].bals+=a[i].medal[j]*3;   //баллы за серебряную медаль
               if(j==2) a[i].bals+=a[i].medal[j]*2;  //баллы за бронзовую медаль
               a[i].s+=a[i].medal[j];  
                            //считает количество всех медалей для каждой команды
          }
          cout<<a[i].s<<"\n";
      }
      for(int i=0;i<n;i++)
    {
        int min=a.bals[i];
        int nmin=i;
        for(int j=i;j<n;j++)
        {
            if(min>a.bals[j])
            {
                min=a.bals[j];
                nmin=j;
            }
        }
      a.name[nmin]=a.name[i];
      a.medal[nmin]=a.medal[i];
      a.bals[nmin]=a.bals[i];
      a.s[nmin]=a.s[i];
      a.bals[i]=min;
    }
 
      
      
     
}
Добавлено через 32 секунды
вот здесь ошибки
Цитата Сообщение от tokar2 Посмотреть сообщение
int min=a.bals[i];
* * * * int nmin=i;
* * * * for(int j=i;j<n;j++)
* * * * {
* * * * * * if(min>a.bals[j])
* * * * * * {
* * * * * * * * min=a.bals[j];
* * * * * * * * nmin=j;
* * * * * * }
* * * * }
* * * a.name[nmin]=a.name[i];
* * * a.medal[nmin]=a.medal[i];
* * * a.bals[nmin]=a.bals[i];
* * * a.s[nmin]=a.s[i];
* * * a.bals[i]=min;
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
10.11.2012, 00:14 13
Цитата Сообщение от MrGrig Посмотреть сообщение
с указанием ошибки
Цитата Сообщение от tokar2 Посмотреть сообщение
вот здесь ошибки
что именно за ошибки то?

Добавлено через 3 минуты
Цитата Сообщение от tokar2 Посмотреть сообщение
C++
1
2
char name[50];
int medal[10];
вот с этим могут быть проблемы массивы просто так нельзя присваивать. можно из сделать динамическими и присваивать указатели что проще либо через цикл
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
10.11.2012, 00:17  [ТС] 14
Цитата Сообщение от MrGrig Посмотреть сообщение
что именно за ошибки то?
42 C:\Documents and Settings\Admin\Мои документы\Untitled1.cpp `bals' has not been declared
42 C:\Documents and Settings\Admin\Мои документы\Untitled1.cpp request for member of non-aggregate type before '[' token
52 C:\Documents and Settings\Admin\Мои документы\Untitled1.cpp `name' has not been declared
Сортировка (исправить код)
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
10.11.2012, 09:56 15
скажите зачем тупо копипастить то что я написал? я по большей части на этом сайте пишу без компилятора и выкладываю свои мысли с помощью кода... Вы же даже не обратили внимания на мою ошибку и даже не поняли почему такая произошла... вы задаете "а" массивом структуры list а в данном случае работаете как с переменной структуры, на то и ругается... извините более помогать вам перехотелось
0
iama
10.11.2012, 10:48
  #16

Не по теме:

Кто-то про std::sort слышал вообще?

0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
10.11.2012, 22:58  [ТС] 17
Помогите мне с этой задачей, уже пару день думаю как это правильно реализовать! Нужно отсортировать несколько массивов! У меня bals и s хорошо сортирует, а вот name почему-то только первую букву!
Пожалуйста исправьте мой код, очень нужно! Всем спасибо!)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <iomanip.h>
using namespace std;
const int size=3;
const int n=3;
struct list{
     char name[50];
     int medal[20];
     int bals;
     int s;
};
void inp(list [size]);
void out(list [size]);
int main()
{
    list a[size];
    inp(a);
    out(a);
 system("pause");
}
 
void inp(list a[size]){
     
   for(int i=0;i<size;i++){
        cin>>a[i].name; 
        for(int j=0;j<n;j++)
           cin>>a[i].medal[j]; 
     }
     cout<<endl;
     for(int i=0;i<size;i++){
          a[i].bals=a[i].s=0;
          for(int j=0;j<n;j++){
               if(j==0) a[i].bals+=a[i].medal[j]*5;    
               if(j==1) a[i].bals+=a[i].medal[j]*3;   
               if(j==2) a[i].bals+=a[i].medal[j]*2;  
               a[i].s+=a[i].medal[j];  
                           
          }
         
         // cout<<a[i].name<<"\t"<<a[i].s<<"\t"<<a[i].bals<<"\n";
          
      }
     
}
void out(list a[size])
{
     for(int i=0;i<n;i++)
    {
        int min=a[i].bals;
        int nmin=i;
        int min1=a[i].s;
        int nmin1=i;
        char min2=a[i].name[i];
        char nmin2=i;
        for(int j=i;j<n;j++)
        {
            if(min>a[j].bals)
            {
                min=a[j].bals;
                nmin=j;
                min1=a[j].s;
                nmin1=j;
                min2=a[j].name[i];
                nmin2=j;
            }
        }
      a[nmin].bals=a[i].bals;
      a[i].bals=min;
      
      a[nmin1].s=a[i].s;
      a[i].s=min1;
      
      a[nmin2].name[i]=a[i].name[i];
      a[i].name[i]=min2;
      
      
    }
     for(int i=0;i<n;i++)
     cout<<a[i].name<<"\t"<<a[i].s<<"\t"<<a[i].bals<<"\n";
   
 }
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
10.11.2012, 23:07 18
Ошибка в том, что ты сортируешь строки как числа.
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
10.11.2012, 23:14  [ТС] 19
David Sylva, А как их можно по другому сортировать?
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
10.11.2012, 23:14 20
Вот тебе пример сортировки строк
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
 
int main() 
{ 
    char str[3][10] = {"Barca", "Real", "Arsenal"} ; 
    char temp[10];
    for ( int i = 0; i < 3; i++)   
        for ( int j = 0; j < 3; j++) 
        if(strcmp(str[i], str[j]) < 0) 
        { 
            strcpy(temp, str[i]); 
            strcpy(str[i], str[j]); 
            strcpy(str[j], temp); 
        } 
 
    for ( int i = 0; i < 3; i++) 
        std::cout << str[i] << " "; 
    std::cout << std::endl;
}
1
10.11.2012, 23:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2012, 23:14
Помогаю со студенческими работами здесь

сортировка массива (исправить код)
Нужно отсортировать массив по убыванию bals, но даже не компилируется! #include &lt;iostream&gt;...

Отсортировать столбцы в массиве по уменьшению сумм четных чисел. Сортировка выбором. Исправить код
Задача: Задать двумерный массив целых чисел m=5, n=6. Отсортировать столбцы в массиве по упаданию...

Сортировка, исправить код
Найдите неисправность пожалуйста.Заранее спасибо using System; namespace...

Быстрая сортировка, исправить код
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru