Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
MrGluck
Модератор
Эксперт CЭксперт С++
8075 / 4927 / 1431
Регистрация: 29.11.2010
Сообщений: 13,344
20.12.2013, 13:35

Сортировка в структуре (ошибка в коде)

20.12.2013, 13:35. Просмотров 1086. Ответов 24
Метки (Все метки)

Ответ

Разбейте одну большую функцию на много маленьких, пусть sort вызывает в соответствии с выбором какую-нибудь конкретную сортировку и все.
Не забудьте пользовать switch-case.

Добавлено через 54 минуты
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <conio.h>
#include <cstdlib>
#include <cstring>
#include <iostream>
 
struct lombard
{
    char tovar[2000];
    char cena[2000];
    int nadbavka;
    int kolichestvo;
    bool empty;
};
 
// сортировка по товару
void sortByTovar(lombard* arr, const int size)
{
    for (int i=0; i < size; i++)
    {
        if (arr[i].empty)
            continue;
        for (int j=size-1; j > i; j--)
            if (!arr[j].empty && strcmp(arr[i].tovar, arr[j].tovar) > 0)
            {
                lombard tmp(arr[i]);
                arr[i] = arr[j];
                arr[j] = tmp;
            }
    }
}
 
// сортировка по цене
void sortByCena(lombard* arr, const int size)
{
    for (int i=0; i < size; i++)
    {
        if (arr[i].empty)
            continue;
        for (int j=size-1; j > i; j--)
            if (!arr[j].empty && strcmp(arr[i].cena, arr[j].cena) > 0)
            {
                lombard tmp(arr[i]);
                arr[i] = arr[j];
                arr[j] = tmp;
            }
    }
}
 
// сортировка по надбавке
void sortByNadbavka(lombard* arr, const int size)
{
    for (int i=0; i < size; i++)
    {
        if (arr[i].empty)
            continue;
        for (int j=size-1; j > i; j--)
            if (!arr[j].empty && arr[i].nadbavka > arr[j].nadbavka)
            {
                lombard tmp(arr[i]);
                arr[i] = arr[j];
                arr[j] = tmp;
            }
    }
}
 
void sortByKolichestvo(lombard* arr, const int size)
{
    for (int i=0; i < size; i++)
    {
        if (arr[i].empty)
            continue;
        for (int j=size-1; j > i; j--)
            if (!arr[j].empty && arr[i].kolichestvo > arr[j].kolichestvo)
            {
                lombard tmp(arr[i]);
                arr[i] = arr[j];
                arr[j] = tmp;
            }
    }
}
 
// вывод на экран
void output(lombard* arr, const int size)
{
    system("cls");
    for (int i=0; i < size; i++)
    {
        if (!arr[i].empty)
            std::cout << "Tovar:       "   << arr[i].tovar
                      << "\nCena:        " << arr[i].cena
                      << "\nNadbavka:    " << arr[i].nadbavka
                      << "\nKolichestvo: " << arr[i].kolichestvo << "\n\n";
    }
}
 
void sort(lombard* arr, const int size)
{
    char ch;
    do
    {
        system("cls"); // очистка экрана
        std::cout << "\t     Viberite po kakomu kriteriyu sortirovat' \n"
                "\t 1.  Po tovaru \n"
                "\t 2.  Po cene \n"
                "\t 3.  Po nadbavke \n"
                "\t 4.  Po kolichestvu \n"
                "\t Vash vibor: ";
        ch = getch(); // ожидается нажатие и символ записывается в ch
        if (ch < '1' || ch > '4')
        {
            std::cout << "\n\t Error \a\n";
            _getch(); // пауза
        }
    } while (ch < '1' || ch > '4');
 
    switch (ch - '0')
    {
        case 1 :
            sortByTovar(arr, size);
            break;
 
        case 2 :
            sortByCena(arr, size);
            break;
 
        case 3 :
            sortByNadbavka(arr, size);
            break;
 
        case 4 :
            sortByKolichestvo(arr, size);
            break;
 
        default:
            break;
    }
}
 
 
int main()
{
    // тестовый набор данных
    const int M = 3;
    lombard l[M] = {
    {"Cheese", "120", 5, 10, false},
    {"Apple",  "50",  3, 20, false},
    {"Fish",   "70", 10, 30, false} };
 
    sort(l, M);
 
    output(l, M);
}
Учтите, что т.к. цена представлена в виде строки, то сравнение будет как у строк, т.е. 120 окажется меньше, чем 50 или 70 потому что сначала сранивает первый символ, потом второй и т.д., а не воспринимает "число" вцелом.

Добавлено через 21 секунду
Да, и я бы переписал все через предикаты как примером выше.

Вернуться к обсуждению:
Сортировка в структуре (ошибка в коде)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 13:35

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

Сортировка в структуре
Надо отсоритровать структуру по параметру &quot;Телефон&quot; Листал форум, вроде все...

Сортировка в структуре
Нужно считать в структуру информацию из файла, и отсортировать по зарплате. В...

0
Другие темы раздела
C++ Переписать числа в массив, удалить все нечетные числа http://www.cyberforum.ru/cpp-beginners/thread1049314.html
Заданы массивы целых чисел X(n) и Y(k). Три наименьших простых числа из массива Y и числа из массива X, в которых есть цифры «1» и «9» переписать в массив Z. Из массива Z удалить все нечетные числа.
C++ Метод Рунге-Кутта 3 порядка Начерикал что-то,вроде бы работает,но не уверен,да и не доходит,как под условия сделать задачи,тыкните,пожалуйста #include "stdafx.h" #include<math.h> #include<stdio.h> double f(double x,... http://www.cyberforum.ru/cpp-beginners/thread1049302.html
C++ Компьютерная Графика
Нужно решить 2 задачи, нужна помощь, заранее спасибо) Одна тема - одно задача. Задания в виде картинок запрещены. Перепечатаете. Официальные языки форума - русский и английский
C++ lax-bl=c-2a(x-2)
lax-bl=c-2a(x-2) Помогите пожалуйста составить блок схему если это реально,и прогу пожалуйста.Очень нужно. Я попробовал создать сам прогу но не получилось #include <stdio.h> #include...
C++ Не могу найти ошибку http://www.cyberforum.ru/cpp-beginners/thread1049288.html
Составить программу, в которой описывается структура из полей: Товар, Цена, Сорт. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и расчет значения "НДС". НДС = Цена *...
C++ Курсовая работа Нужна помощь в оформление Условие:дано множество точек на плоскости. Необходимо найти такую прямую которая будет делить данную плоскость на две части так чтобы точки поделились "примерно" поровну.... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru