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

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

Восстановить пароль Регистрация
Другие темы раздела
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, double y) { return(x - y); } 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 <conio.h> #include <math.h> Void main() {
C++ Не могу найти ошибку http://www.cyberforum.ru/cpp-beginners/thread1049288.html
Составить программу, в которой описывается структура из полей: Товар, Цена, Сорт. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и расчет значения "НДС". НДС = Цена * 0,05. #include "stdafx.h" #include<iostream> #include<stdio.h> using namespace std; struct sklad
C++ Курсовая работа Нужна помощь в оформление Условие:дано множество точек на плоскости. Необходимо найти такую прямую которая будет делить данную плоскость на две части так чтобы точки поделились "примерно" поровну. Код я написал только вот в курсовой есть пункт Выбор метода решения задачи(написать альтернативные методы решения) и я не знаю что тут такого можно написать, кто может подсобите подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
20.12.2013, 13:35     Сортировка в структуре (ошибка в коде)
Разбейте одну большую функцию на много маленьких, пусть 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 секунду
Да, и я бы переписал все через предикаты как примером выше.
 
Текущее время: 13:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru