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

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

Войти
Регистрация
Восстановить пароль
 
 
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

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

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

Помогите с сортировкой! Нужно сортировать исходные данные по убыванию!! Простой массив сортировать могу, а тут никак не получается) Сортировать по значению 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка (исправить код) (C++):

Сортировка (исправить код) - C++
Нужно упорядочить записи по алфавиту, но у меня только меняет местами name! Помогите исправить код! #include &lt;iostream&gt; #include...

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

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

Сортировка по алфавиту (исправить код) - C++
Помогите отсортировать структуру по алфавиту (сортировка по tabl.name)! У меня ошибку выдает (( #include &lt;iostream&gt; #include &lt;string.h&gt;...

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

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

22
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 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
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 20:58  [ТС] #3
Kuzia domovenok, Есть задача, я ее сделал а вот вывод сделать нармальний сделать не могу!
"Составить программу, которая подводит итоги Олимпийских игр. пользователь вводит
количество золотых, серебряных и бронзовых наград, полученных каждой командой. В
результате должна быть подсчитана общее количество наград и соответствующее
баллов (коэффициенты начисления вводит пользователь). Вывод информации осуществить в
виде упорядоченного списка согласно набранным количеством баллов.
"
У меня баллы это k! И еще вы можете сделать сортировку в моем коде?
0
tokar2
25 / 25 / 1
Регистрация: 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
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
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
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:28  [ТС] #6
MrGrig, можете на примере моего кода показать как это будет, я что-то не очень понял что к чему ..
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
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
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:43  [ТС] #8
Вы бы не могли мне еще код сортировки подправить, просто я в этих массивах путаюся сильно.
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
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
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
09.11.2012, 23:55  [ТС] #10
у меня почему-то не компилируется
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
09.11.2012, 23:59 #11
полный код пожалуйста с указанием ошибки
0
tokar2
25 / 25 / 1
Регистрация: 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
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
10.11.2012, 00:14 #13
Цитата Сообщение от MrGrig Посмотреть сообщение
с указанием ошибки
Цитата Сообщение от tokar2 Посмотреть сообщение
вот здесь ошибки
что именно за ошибки то?

Добавлено через 3 минуты
Цитата Сообщение от tokar2 Посмотреть сообщение
C++
1
2
char name[50];
int medal[10];
вот с этим могут быть проблемы массивы просто так нельзя присваивать. можно из сделать динамическими и присваивать указатели что проще либо через цикл
0
tokar2
25 / 25 / 1
Регистрация: 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
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
10.11.2012, 09:56 #15
скажите зачем тупо копипастить то что я написал? я по большей части на этом сайте пишу без компилятора и выкладываю свои мысли с помощью кода... Вы же даже не обратили внимания на мою ошибку и даже не поняли почему такая произошла... вы задаете "а" массивом структуры list а в данном случае работаете как с переменной структуры, на то и ругается... извините более помогать вам перехотелось
0
10.11.2012, 09:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 09:56
Привет! Вот еще темы с ответами:

Исправить ошибки в программе. Сортировка по убыванию - C++
Требуется сортировку одномерного массива.Элемент начало сортировки представим в виде 3^n.Элементы сортировки отрицательные...

исправить код - C++
создать класс студент, сделать поис по оценке ругается на перем. a в мэйне #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Исправить код - C++
В общем тема такая. Есть код программы на c++ который выполняет следующие функции: создает линейный односвязный список,из списка удаляет...

Исправить код - C++
Форумчане,знатоки плюсов,очень прошу помочь испраивть код.Сам только начинаю разбираться,поэтому нужна помошь. Часть ошибок...


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

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

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