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

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

Войти
Регистрация
Восстановить пароль
 
gery-
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 13
#1

Описать структуру с именем Order - C++

14.01.2010, 16:03. Просмотров 1085. Ответов 8

Доработать структуру.
Знающему и понимающему человеку делов на 5 минут, не больше. Ребят, очень прошу, помогите.
Собственно вот задание:
Описать структуру с именем Order, содержащую следующие поля: plat-расчетный счет плательщика, pol- расчетный счет получателя, summa-перечисляемая сумма. Написать программу, выполняющую ввод с клавиатуры данных в массив Spisok, состоящий из 15 элементов типа Order. Записи должны быть упорядочены по расчетным счетам плательщиков. Вывести на экран информацию о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры. Если такого расчетного счета нет, то вывести соответствующее сообщение.

Что требуется:
1)счёт плательщика 20 символов. одномерный массив plat[20];
2)счёт получателья 20 символов. pol[20];
3)сортировку настроить.
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
48
49
50
51
52
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
    int const n=20;
struct order {
       char plat[n],pol[n]; // сдесь я ввёл счета, длинной 20 символов. дальше никак:(
       float summa;
};
 order tmp;
 order Spisok[15];
 int nomer_plat;
 bool r=false;
 float snyataya_summa=0;
    for (int i=0;i<=14;i++)
     { cout<<"Platel'shik - ";
        cin>>Spisok[i].plat;
        cout<<"Poluchatel - ";
        cin>>Spisok[i].pol;
        cout<<"summa - ";
        cin>>Spisok[i].summa;     
     }          
for (int j=0;j<=14;j++)
        for (int i=1;i<=14;i++)
            {                                                    //сорировка не работает
             if (Spisok[i].plat < Spisok[i-1].plat)
                { 
                  tmp=Spisok[i-1];
                  Spisok[i-1]=Spisok[i];
                  Spisok[i]=tmp;   
                }
            }
   for (int i=0;i<=14;i++)
   cout<<"Platel'shik "<<Spisok[i].plat<<" Poluchatel' "<<Spisok[i].pol<<" summa "<<Spisok[i].summa<<"\n";
   cout<<"Vvedite nomer raschetnogo scheta\n";
   cin>>nomer_plat; 
   for (int i=0;i<=14;i++)                  //не ищет счёт.
       if (Spisok[i].plat == nomer_plat)
          {
             snyataya_summa+=Spisok[i].summa;
             r=true;                   
          }
   if (r==true)
      cout<<"S raschetnogo scheta "<<nomer_plat<<" snyato "<<snyataya_summa<<"\n";
   else
       cout<<"Takogo scheta ne sushestvuet\n";           
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 22 часа 49 минут
Никак не получается. Использую strcmp. всё равно никак. Помоги пожалуйста. если можно в операторе if используйте strcmp.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2010, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать структуру с именем Order (C++):

Описать структуру с именем Order - C++
Описать структуру с именем Order содержащую следующие поля: расчётный счет плательщика, расчётный счёт получатля, перечисляемая сумма в...

Описать структуру с именем Order - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; •...

Описать структуру с именем Order - C++
Дорогие форумчане =) мне нужна ваша помощь. Нужно написать программу,первую часть сделал сам. #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: расчетный счет плательщика; расчетный счет получателя; перечисляемая сумма в...

Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; ...

Описать структуру с именем ORDER - C++
Помогите написать программу в MS Visual Studio 2008. Описать структуру с именем ORDER , содержащую следующие поля: 1) расчетный счет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
14.01.2010, 17:48 #2
C++
1
 if ( strcmp(&Spisok[i].plat[0], &nomer_plat[0]) == 0 )
Так все должно сравниваться работать, НО: nomer_plat должна быть char [n] (т.е. массивом символов), strcmp видимо все равно какие типы сравнивать, но если сравнивать массив символов с числом думаю результат будет неверный. Попробуйте
1
gery-
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 13
14.01.2010, 19:18  [ТС] #3
Спасибо, сейчас буду пробывать.

Добавлено через 6 минут
Ещё раз огромное спасибо, теперь поиск работает. Сейчас попробую по аналогии перенести на сортировку.

Добавлено через 5 минут
Что то с аналогией никак. Вопрос с сортировкой остается открыт. Буду очень благодарен.
0
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
14.01.2010, 20:35 #4
Записи должны быть упорядочены по расчетным счетам плательщиков
Могу предложить банальную сортировку по типу
C++
1
2
3
4
5
6
7
8
9
10
for (int i=0; i < n; i++)
   for(int j=0; j < n; j++)
      if ( i != j )
         if ( ToInt(Spisok[i].plat) > ToInt(Spisok[j].plat)
         { // меняем местами
             order TempOrder;
             TempOrder = Spisok[i].plat;
             Spisok[i].plat = Spisok[j].plat;
             Spisok[j].plat = TempOrder;
         }
Где ToInt функция возвращающая int из char[] и допустим она будет такая
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
int ToInt(char* Donor)
{
    int Negative=1;
    int i=0, j=0, tempN[64], mult = 1, iReturned = 0;
 
    // Если это не цифра а '-' нужно запомнить что число отрицательное
    if ( Donor[0] == 0x2d ) { Negative = -1; i++; }
    // Пока char не кончится
    while (Donor[i])
    {
        tempN[j] = (Donor[i]-0x30);
        i++; j++;
    }; j--;
 
    do
    {
        iReturned += (mult*tempN[j]);
        mult *= 10;
        j--;
    }
    while ( j > -1 );
 
    return iReturned*Negative;
}
1
gery-
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 13
14.01.2010, 20:54  [ТС] #5
Хм.. Спасибо тебе большое что постарался. Но дело в том что использовать надо простейшие опрации типа if, strcmp, присвоения и тд.
С сортировкой частично работает: if ( strcmp(&Spisok[i].plat[0], &Spisok[i+1].plat[0]) > 0 )
0
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
14.01.2010, 22:46 #6
Я никогда не понимал как работает strcmp кроме того чтобы сравнить результат её работы с 0 что означает равенство строк. Хорошо бы кто нибудь объяснил популярно...
А частично он как работает?... Сортирует только по первой цифре?
1
gery-
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 13
15.01.2010, 08:39  [ТС] #7
Да, именно так. Сортирует только по первой цифре. И первая строк остается на своем месте, а вторая не правильно отображается. Остальные сотрируются по первой цифре.
0
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
15.01.2010, 14:18 #8
видимо из strcmp больше не выжмешь... он видит что одна строка начинается с более раннего символа чем другая да и выдает результат
с другой стороны:
C++
1
2
3
4
5
6
7
8
9
10
for (int j=0;j<=14;j++)
        for (int i=1;i<=14;i++)
            {                                                    //сорировка не работает
             if (Spisok[i].plat < Spisok[i-1].plat)
                { 
                  tmp=Spisok[i-1];
                  Spisok[i-1]=Spisok[i];
                  Spisok[i]=tmp;   
                }
            }
зачем цикл j?
я предлагал вам почти так же
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0;i<=15;i++)
        for (int j=0;j<=15;j++)
            {
             if ( i != j )
             if (strcmp(&Spisok[i].plat[0], &Spisok[j].plat[0]))
                { 
                  tmp=Spisok[j];
                  Spisok[j]=Spisok[i];
                  Spisok[i]=tmp;   
                }
            }
попробуйте
1
gery-
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 13
15.01.2010, 18:20  [ТС] #9
Программа написана. Всё работает. Огромное спасибо товарищу insideone за оказаную мне помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 18:20
Привет! Вот еще темы с ответами:

Описать структуру с именем Order - C++
Всем Привет! #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;algorithm&gt; struct Order { long payer; long receiver; ...

Описать структуру с именем Order - C++
1. Разработать программный блок, который позволяет выполнять обработку динамического массива структур. Предусмотреть возможность создания,...

Структура: Описать структуру с именем ORDER - C++
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; ...

Описать структуру с именем "ORDER" - C++
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Рассчетный счет плательщика&quot;; &quot;Рыссчетный счет получателя&quot;; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.01.2010, 18:20
Ответ Создать тему
Опции темы

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