0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
1

Не работает сортировка

30.05.2019, 06:41. Показов 470. Ответов 16

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста почему не работает сортировка. Не могу разобраться. Я хотел сделать упорядное расспределение рейсов по порядку.


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
#include "pch.h"
#include <iostream>
#include <cstring>   
#include <iomanip>  
#include <fstream>  
 
#define M 15
#define cur
using namespace std;
 
struct AEROFLOT 
{
    char kuda[M];
    int num;
    char type[M];
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    static int N = 3;
    AEROFLOT fly[M];
    int i;
    
 
    for (i = 0; i < N; i++)
    {
        cout << "\nВведите номер рейса: "; cin >> fly[i].num;
        cout << "\nВведите тип самолёта "; cin >> fly[i].type;
        cout << "\nВведите пункт назначения "; cin >> fly[i].kuda;
    }
 
    for (i = 0; i < N - 1; i++)
        for (int j = i + 1; j < N; j++)
            if (strcmp(fly[i].kuda, fly[i].kuda) > 0)
            {
 
                strcpy (cur, fly[i].kuda);
                strcpy (fly[i].kuda, fly[j].kuda);
                strcpy (fly[j].kuda, cur);
 
                
            }
            
 
    cout << "\n ________________________________________________________\n";
    for (i = 0; i < N; i++) {
        cout << fly[i].kuda << "    " << fly[i].num << "    " << fly[i].type << endl;
 
    }
    cout << "\n ________________________________________________________\n";
 
    char temp[M];
    int count;
    while (strcmp(temp, "exit"))
    {
        cout << "\nВведите желаемый тип самолёта: "; cin >> temp;
        count = 0;
        for (i = 0; i < N; i++)
        {
            if (strcmp(fly[i].type, temp) == 0)
            {
                cout << endl << fly[i].kuda << "    " << fly[i].num << endl;
                count++;
            }
        }
        if (count == 0) cout << endl << " Нет таких рейсов\n";
 
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2019, 06:41
Ответы с готовыми решениями:

Не работает сортировка
Сортировка должна выводить список,но ничего не выводит или сортировка не работает,не могу понять ...

не работает сортировка
после введения информации о рейсах, программа должна сортировать записи по возрастанию номера...

Сортировка не работает
/* #define or || #define and &amp;&amp; #define not ! */ #include &lt;fstream&gt; #include &lt;iostream&gt;...

Не работает сортировка
День добрый. Проблема такова: 1) не правильно происходит расчёт суммы всех эл-ов до максимального...

16
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
30.05.2019, 08:40 2
C++
1
2
3
4
5
6
7
8
9
      for (i = 0; i < N - 1; i++)
        for (int j = i ; j < N-1; j++)
            if (strcmp(fly[j].kuda, fly[j+1].kuda) > 0)
            {
 
                strcpy (cur, fly[j].kuda);
                strcpy (fly[j].kuda, fly[j+1].kuda);
                strcpy (fly[j+1].kuda, cur);
             }
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 08:54  [ТС] 3
Не работает и так. Пишет" cur " не определен и целую кучу синтет . ошибок.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
30.05.2019, 09:02 4
Цитата Сообщение от taris1 Посмотреть сообщение
Пишет" cur " не определен
Ну так определите, неужели это проблема.
C++
1
char cur[M];
а
Цитата Сообщение от taris1 Посмотреть сообщение
#define cur
уберите

Почему же она компилировалась раньше (раз Вы заметили неправильную сортировку)?

Кстати
Цитата Сообщение от taris1 Посмотреть сообщение
char kuda[M];
Цитата Сообщение от taris1 Посмотреть сообщение
AEROFLOT fly[M];
В первом случае M - длина текстовой строки для порта назначения (15 символов мало, например, "Нижний Новгород\0" уже не поместиться).
Во втором - количество рейсов.
Совершенно не оправдано использование для этого одной и той же константы.
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 09:32  [ТС] 5
Спасибо! Исправил ошибки, но упорядочение записей по возрастанию номера рейса не происходит.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.05.2019, 10:58 6
Цитата Сообщение от taris1 Посмотреть сообщение
Спасибо! Исправил ошибки, но упорядочение записей по возрастанию номера рейса не происходит.
if (strcmp(fly[j].kuda, fly[i].kuda) > 0)
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 11:24  [ТС] 7
Нет не то. Не пойму не сортируется. Не могу найти ошибку. Выводит список так же как и вел.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.05.2019, 11:28 8
Цитата Сообщение от taris1 Посмотреть сообщение
Нет не то. Не пойму не сортируется. Не могу найти ошибку. Выводит список так же как и вел.
Покажи код. И посмотри алгоритмы сортировок.
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 11:31  [ТС] 9
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
#include "pch.h"
#include <iostream>
#include <cstring>   
#include <iomanip>  
#include <fstream>  
#include<cmath>
 
#define M 15
 
using namespace std;
 
struct AEROFLOT
{
    char kuda[M];
    int num;
    char type[M];
 
};
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    static int N = 3;
    AEROFLOT fly[M];
    int i;
    string j;
    char cur[M];
 
    for (i = 0; i < N; i++)
    {
        cout << "\nВведите номер рейса: "; cin >> fly[i].num;
        cout << "\nВведите тип самолёта "; cin >> fly[i].type;
        cout << "\nВведите пункт назначения "; cin >> fly[i].kuda;
    }
 
    for (i = 0; i < N - 1; i++)
        for (int j = i; j < N - 1; j++)
            if (strcmp(fly[j].kuda, fly[i].kuda) > 0)
            {
 
                strcpy_s(cur, fly[j].kuda);
                strcpy_s(fly[j].kuda, fly[j + 1].kuda);
                strcpy_s(fly[j + 1].kuda, cur);
            }
 
    cout << "\n ________________________________________________________\n";
    for (i = 0; i < N; i++) {
        cout << fly[i].kuda << "    " << fly[i].num << "    " << fly[i].type << endl;
 
    }
 
    cout << "\n ________________________________________________________\n";
 
    char temp[M];
    int count;
    while (strcmp(temp, "exit"))
    {
        cout << "\nВведите желаемый тип самолёта: "; cin >> temp;
        count = 0;
        for (i = 0; i < N; i++)
        {
            if (strcmp(fly[i].type, temp) == 0)
            {
                cout << endl << fly[i].kuda << "    " << fly[i].num << endl;
                count++;
            }
        }
        if (count == 0) cout << endl << " Нет таких рейсов\n";
 
    }
 
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.05.2019, 11:33 10
Ну тогда if (strcmp(fly[j + 1].kuda, fly[i].kuda) > 0)
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
30.05.2019, 11:34 11
Цитата Сообщение от taris1 Посмотреть сообщение
но упорядочение записей по возрастанию номера рейса не происходит
определитесь сначала по какому полю вы будете сортировать:
1. по пункту назначения - char kuda[]
2. по номеру рейса - int num


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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include<iostream>
#include<cstring>
#include<conio.h>
 
using namespace std;
 
///----------------------------------------------------------------------------|
/// Основная структура.
///----------------------------------------------------------------------------:
struct AEROFLOT
{   static const int M = 16;
    char kuda[M];
    int  num;
    char type[M];
};
 
///----------------------------------------------------------------------------|
/// База данных.
///----------------------------------------------------------------------------:
struct sBaseData
{   
    void input()
    {   for (int i = 0; i < N; i++)
        {   cout << "\nВведите номер рейса:      ";
            cin >> m[i].num;
            cout <<   "Введите тип самолёта:     ";
            cin >> m[i].type;
            cout <<   "Введите пункт назначения: ";
            cin >> m[i].kuda;
        }
    }
    
    void sort(char* s)
    {   cout << "\n sort(cuda)\n";
        for (int i = 0; i < N - 1; i++)
            for (int j = i + 1; j < N; j++)
                if (strcmp(m[i].kuda, m[j].kuda) >= 0)
                {   AEROFLOT temp;
                    temp   = m[i+1];
                    m[i+1] = m[j];
                    m[j]   = temp;
                }
    }
    
    void sort(int s)
    {   cout << "\n sort(num)\n";
        for (int i = 0; i < N - 1; i++)
            for (int j = i + 1; j < N; j++)
                if (m[i].num > m[j].num)
                {   AEROFLOT temp;
                    temp = m[i];
                    m[i] = m[j];
                    m[j] = temp;
                }
    }
    
    void show()
    {   cout << "\n ________________________________________________________\n";
        for (int i = 0; i < N; i++)
        {   cout << " "<< m[i].kuda << "\t    " 
                       << m[i].num  << "\t    " 
                       << m[i].type
                       << endl;
        }
        cout <<   " ________________________________________________________\n";
    }
    
    static const int N = 5;
    AEROFLOT m[N];
};
 
int main()
{   setlocale(LC_ALL, "rus");
 
    ///---------------|
    /// Для теста.    |
    ///---------------:
    sBaseData fly =
    {   "Piter", 4, "TU",
        "ooo"  , 5, "IL",
        "Piter", 2, "KUKURUZNIK",
        "www"  , 1, "KUKURUZNIK",
        "Piter", 3, "TU"
    };
    
    ///---------------|
    /// Ручной ввод   |
    ///---------------:
    //fly.input();
    
    fly.show();
    
    fly.sort("");
    fly.show();
    
    fly.sort(0);
    fly.show();
    
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.05.2019, 11:34 12
C++
1
2
3
4
5
6
7
8
9
for (i = 0; i < N - 1; i++)
  for (int j = i + 1; j < N; j++)
  if (strcmp(fly[j].kuda, fly[i].kuda) > 0)
 {
 
   strcpy_s(cur, fly[j].kuda);
   strcpy_s(fly[j].kuda, fly[i].kuda);
   strcpy_s(fly[i].kuda, cur);
}
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 11:36  [ТС] 13
не идет
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
30.05.2019, 11:56 14
Цитата Сообщение от taris1 Посмотреть сообщение
не идет
странно, у мя сортирует:
Не работает сортировка
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
30.05.2019, 12:00 15
сортировка по возрастанию

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<iostream>
#include<cstring>
#include<conio.h>
 
using namespace std;
 
///----------------------------------------------------------------------------|
/// Основная структура.
///----------------------------------------------------------------------------:
struct AEROFLOT
{   static const int M = 16;
    char kuda[M];
    int  num;
    char type[M];
};
 
///----------------------------------------------------------------------------|
/// База данных.
///----------------------------------------------------------------------------:
struct sBaseData
{   
    void input()
    {   for (int i = 0; i < N; i++)
        {   cout << "\nВведите номер рейса:      ";
            cin >> m[i].num;
            cout <<   "Введите тип самолёта:     ";
            cin >> m[i].type;
            cout <<   "Введите пункт назначения: ";
            cin >> m[i].kuda;
        }
    }
    
    void sort(char* s)
    {   cout << "\n sort(cuda)\n";
        for (int i = 0; i < N - 1; i++)
            for (int j = i + 1; j < N; j++)
                if (strcmp(m[i].kuda, m[j].kuda) > 0)
                {   AEROFLOT temp;
                    temp   = m[i+1];
                    m[i+1] = m[j];
                    m[j]   = temp;
                }
    }
    
    void sort(int s)
    {   cout << "\n sort(num)\n";
        for (int i = 0; i < N - 1; i++)
            for (int j = i + 1; j < N; j++)
                if (m[i].num > m[j].num)
                {   AEROFLOT temp;
                    temp = m[i];
                    m[i] = m[j];
                    m[j] = temp;
                }
    }
    
    void show()
    {   cout << "\n ________________________________________________________\n";
        for (int i = 0; i < N; i++)
        {   cout << " "<< m[i].kuda << "\t    " 
                       << m[i].num  << "\t    " 
                       << m[i].type
                       << endl;
        }
        cout <<   " ________________________________________________________\n";
    }
    
    static const int N = 5;
    AEROFLOT m[N];
};
 
int main()
{   setlocale(LC_ALL, "rus");
 
    ///---------------|
    /// Для теста.    |
    ///---------------:
    sBaseData fly =
    {   "piter", 4, "TU",
        "ooo"  , 5, "IL",
        "piter", 2, "KUKURUZNIK",
        "www"  , 1, "KUKURUZNIK",
        "piter", 3, "TU"
    };
    
    ///---------------|
    /// Ручной ввод   |
    ///---------------:
    //fly.input();
    
    fly.show();
    
    fly.sort("");
    fly.show();
    
    fly.sort(0);
    fly.show();
    
    _getch();
}
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 43
30.05.2019, 12:02  [ТС] 16
Мой код не сортирует. Самому интересна ошибка в коде.
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
30.05.2019, 12:10 17
Цитата Сообщение от taris1 Посмотреть сообщение
Мой код не сортирует.
исправьте же.
иначе, как он будет сортировать???

я дал полностью рабочий пример.

Цитата Сообщение от taris1 Посмотреть сообщение
Самому интересна ошибка в коде.
у вас обшибка(кроме всего прочего) семантическая:
нужно перебрасывать весь объект AEROFLOT, а не сортируемое поле.
0
30.05.2019, 12:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2019, 12:10
Помогаю со студенческими работами здесь

Не работает сортировка
почему сортировка не хочет работать??? помогите пожалуйста #include &quot;stdafx.h&quot; #include...

блочная сортировка, не работает
Добрый день, не работает сортировка блочная, выдает ошибку (скрин во вложении) Код ниже ...

Не работает сортировка по дате
#include&lt;iostream&gt; #include&lt;locale&gt; #include&lt;cstring&gt; #include&lt;string.h&gt; using namespace std;...

Не работает сортировка пузырьком
#ifndef BUBBLESORT_H_INCLUDED #define BUBBLESORT_H_INCLUDED #include &quot;iostream&quot; #include...


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

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

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