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

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

Войти
Регистрация
Восстановить пароль
 
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
#1

Отсортировать по первой цифре - C++

12.05.2014, 12:18. Просмотров 278. Ответов 2
Метки нет (Все метки)

Прошу пожалуйста исправить сортировку по расчетным счетам по первой цифре, находящаяся на 87-ой строке.

Вот мой завтрак:
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <iostream>
#include <fstream>
using namespace std;
 
const int n=21;
 
class ORDER
{
private:
    char plat[n], pol[n];        //Ввод счета длиной 20 символов
    double summa;
public:
    void setDATA (char* plat_s, char* pol_s, double summa_r)
    {
        strcpy(plat,plat_s);
        strcpy(pol, pol_s);
        summa = summa_r;
    }
 
    void getDATA()               //Ввод данных
    {
        back:
        cout<<"Расчетный счет плательщика: ";
        cin>>plat;
        int count_plat = strlen(plat);
        while ((count_plat>20) || (count_plat<20))
        {
            cout << "Введите корректный расчетный счет плательщика (20 цифр): ";
            cin>>plat;
            count_plat=strlen(plat);
        }
        cout<<"Расчетный счет получателя:  ";
        cin>>pol;
        int count_pol = strlen(pol);
        while ((count_pol>20) || (count_pol<20))
        {
            cout << "Введите корректный расчетный счет получателя (20 цифр): ";
            cin>>pol;
            count_pol = strlen(pol);
        }
        while (strcmp(plat, pol)==0)
        {
            for (int i=1;i<=3;i++)
            {
                int yes_or_no;
                cout <<endl<<"\a"<< "Операция не может быть продолжена из-за совпадения расчетных счетов плательщика и получателя!"
                <<endl<<"Просим вас начать операцию заново."<<endl;
                cout <<"Вы согласны?!"<<endl<<"1. Да"<<endl<<"2. Нет"<<endl<<"Ваша цифра: ";
                cin >> yes_or_no;
                while ((yes_or_no<1) || (yes_or_no>2))
                {
                    cout <<"Введите корректную цифру: ";
                    cin >> yes_or_no;
                }
                if (yes_or_no==1)
                {
                    cout<<endl<<endl<<"# "<<i<<"                        |                    |"<<endl;
                    goto back;
                }
                else if (yes_or_no==2)
                    exit (0);
            }
        }
        cout<<"Перечисляемая сумма (макс. 500.000): ";
        cin>>summa;
        while ((summa>500000) || (summa<0))
        {
            cout<<"Введите корректную перечисляемую сумму (макс. 500 000 руб.): ";
            cin>>summa;
        }
        cout << endl;
    }
 
    void WriteDATA(ofstream& fout)          //Запись данных
    {
        fout<<endl<<plat<<endl<<pol<<endl<<summa<<endl<<endl;
    }
 
    void ReadDATA(ifstream& fin)            //Чтение данных и вывод их на экран
    {
        fin>>plat;
        fin>>pol;
        fin>>summa;
        cout<<endl<<"Плательщик - "<<plat<<endl
        <<"Получатель - "<<pol<<endl<<"Сумма - "<<summa<<" руб."<<endl<<endl;
   }
    friend void sort(ORDER* Spisok)         //Сортировка по расчетным счетам плательщиков
    {
        ORDER tmp;
        for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
        {
            if (i!=j)
            if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
            {
                tmp=Spisok[j];
                Spisok[j]=Spisok[i];
                Spisok[i]=tmp;
            }
        }
        cout<<"Сортировка по расчетным счетам плательщиков.";
        for (int i=1;i<=3;i++)
        cout<<endl<<"# "<<i<<endl<<"Плательщик - "<<Spisok[i].plat<<endl
        <<"Получатель - "<<Spisok[i].pol<<endl<<"Сумма - "<<Spisok[i].summa<<" руб."<<endl;
        cout << "--------------------------------------------------------------------------------"<<endl;
    }
 
    friend void search(ORDER* Spisok)       //Поиск расчетного счета и вывод на экран информации о сумме, cнятой с расчетного счета плательщика
    {
        bool r=false;
        double snyataya_summa=0;
        char nomer_plat[30];
        cout<<"                                             |                    |"<<endl;
        cout<<"Введите номер расчетного счета (плательщика): ";
        cin>>nomer_plat;
        int count_nomer_plat = strlen(nomer_plat);
        while ((count_nomer_plat>20) || (count_nomer_plat<20))
        {
            cout << "Введите корректный номер расчетного счета плательщика (20 цифр): ";
            cin>>nomer_plat;
            count_nomer_plat=strlen(nomer_plat);
        }
        for (int i=1;i<=3;i++)
        if (strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
        {
            snyataya_summa+=Spisok[i].summa;
            r=true;
        }
        if (r)
        cout<<"С расчетного счета "<<nomer_plat<<" снято "<<snyataya_summa<<" руб."<<endl;       
        else
        cout<<"Такого расчетного счета нет!"<<endl;
    }
};
 
 int main()
{
    setlocale (LC_ALL, "rus");
    char plat[n], pol[n];
    double summa=0;
 
    ORDER Spisok[4];
    for (int i=1;i<=3;i++)
    {
        Spisok[i].setDATA (plat, pol, summa);
        cout<<"# "<<i<<"                        |                    |"<<endl;
        Spisok[i].getDATA();
    }
 
 
    ofstream fout("input.txt");
    if(!fout)
        return 0;
    for (int i=1;i<=3;i++)
    { 
        fout<<i;
        Spisok[i].WriteDATA(fout);
    }
    fout.close();
 
 
    ifstream fin("input.txt");
    cout <<"--------------------------------------------------------------------------------"<<endl<<"Чтение данных из файла."<<endl;
    if(!fin)
        return 0;
    for (int i=1;i<=3;i++)
    { 
        fin >> i;
        cout<<"# "<<i;
        Spisok[i].ReadDATA(fin);
    }
    cout <<"--------------------------------------------------------------------------------"<<endl;
    fin.close();
    sort(Spisok);    
    search(Spisok);
    system("PAUSE");
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 12:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отсортировать по первой цифре (C++):

Упорядочить линейный массив по первой цифре слева - C++
Упорядочить линейный массив по первой цифре слева!!!!!!! Помогите пожалуйста, очень нужно!!!!!!!((((

Прибавить к первой цифре числа 2 и вывести получившиеся число - C++
Для двухзначных чисел всё ОК, о как введёшь однозначное или больше чем двухзначное, начинается белеберда. Ввожу 92 выдаёт 112, ввожу 3...

Написать программу, которая к первой цифре натурального числа N, добавляет 2 - C++
Нужно написать программу, которая к первой цифре натурального числа N, добовляет 2. Пример 49-69, 128-328 Помогите люди добрые)

Отсортировать строки по первой букве в убывающем порядке - C++
Данный массив строк, состоящих из трех символов. Отсортировать строки по первой букве в убывающем порядке

Отсортировать строки массива так, чтобы первой шла строка, сумма элементов которой была меньше, чем остальных - C++
Добрый день, помогите, пожалуйста найти ошибку. Нужно создать двумерный массив, размером 5 х 7 (пять строк, семь столбцов). Заполнить...

Строки: уничтожить в строке запятые перед первой точкой, заменить знаком + все цифры 3я после первой точки - C++
Дано строка длиной n символов, среди которых есть хотя бы одна точка. превратить последовательность s1, s2, ... sn, уничтожив в ней все...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
12.05.2014, 12:43 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
strcmp возвращает нуль тогда, когда строки равны,
-1 - когда строка1 по алфавиту позже строки 2 и
1 - если наоборот.
Поэтому надо написать
C++
1
if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0])==-1)
1
Lom1
1 / 1 / 0
Регистрация: 09.05.2014
Сообщений: 79
12.05.2014, 12:48  [ТС] #3
zss, Большое спасибо!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 12:48
Привет! Вот еще темы с ответами:

Напечатать слова содержащие по одной цифре - C++
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В...

Напечатать все слова содержащие по одной цифре - C++
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В...

Можно ли привязать точку в PictureBox к определённой цифре - C++
Можно ли привязать точку в PictureBox к определённой цифре. Т.е. просто пронумеровать точки и обозначить их.Если да то как??

Напечатать все слова, содержащие по одной цифре - C++
Напечатать все слова, содержащие по одной цифре.


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

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

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