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

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

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

Задача на вычитание денежных единиц - C++

13.09.2013, 09:59. Просмотров 378. Ответов 6
Метки нет (Все метки)

Денежная единица выражается Фунтами, Шиллингами и Пенсами. 1 Фунт=20 Шиллингов, 1 Шиллинг=12 Пенсам. Программа запрашивает запрашивает три числа (первый операнд, содержащий Фунты, Шиллинги и Пенсы), еще три числа (второй операнд, содержащий Фунты, Шиллинги и Пенсы), и вычисляет разность. Мне стало интересно реализовать программу без перевода всех единиц в Пенсы и последующего вычитания. Пользуясь построителем блок-схем удалось получить следующий код:
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
        pens=pens1-pens2; shil=shil1-shil2; fu=fu1-fu2;
        if (fu > 0)
          {
            if (shil < 0)
            {
              shil+=20; fu--;
            }
            else
            {
            }
            if (pens < 0)
            {
              if (shil == 0)
              {
                pens+=12; shil+=19; fu--;
              }
              else
              {
                pens+=12; shil--;
              }
            }
            else
            {
            }
          }
          else
          {
            if (fu == 0)
            {
              if (shil > 0)
              {
                if (pens < 0)
                {
                  pens+=12; shil--;
                }
                else
                {
                }
              }
              else
              {
                if (shil < 0)
                {
                  if (pens > 0)
                  {
                    pens-=12; shil++;
                  }
                  else
                  {
                  }
                }
                else
                {
                }
              }
            }
            else
            {
              if (shil > 0)
              {
                shil-=20; fu++;
              }
              else
              {
              }
              if (pens > 0)
              {
                if (shil == 0)
                {
                  pens-=12; shil-=19; fu++;
                }
                else
                {
                  pens-=12; shil++;
                }
              }
              else
              {
              }
            }
          }
Любопытно, можно ли в данной ситуации придумать алгоритм попроще?
Свою блок-схему прилагаю.
Миниатюры
Задача на вычитание денежных единиц  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 09:59     Задача на вычитание денежных единиц
Посмотрите здесь:

Перевод денежных единиц - C++
Помогите, решить задачу! С виду легко, но чего-то я туплю. П.5.18.Правил Запрещено размещать задания и решения в виде картинок и...

Реализовать программу перевода денежных единиц (фунты, шиллинги, пенсы) - C++
Программа складывает две суммы в футах, шиллингах и пенсах. Посмотрите условия еще где static_cast; Пытался использовать там, что 12 пенсов...

Формирование денежных сумм - C++
Вообщем, есть задача: Есть число, нужно разделить его на купюры по определенному номиналу. Номиналов может быть сколько угодно...

Сложение двух денежных сумм - C++
#include&lt;iostream&gt; using namespace std; int main() { setlocale (0, &quot;&quot;); int pe1, sh1, f1, pe2, sh2, f2; char ex; ...

Определить общую сумму денежных средств - C++
Условие задачи: На столе лежит листок. На нем написано, что в течении девяти месяцев я получу от родителей 1500 рублей, сдача после...

Вычисление суммы и разности денежных величин - C++
Создаю программу для вычисления суммы и разности денежных велечин. Вроде делаю все правильно, но заместо того чтобы программа вышла из...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
13.09.2013, 10:33     Задача на вычитание денежных единиц #2
Не знаю как проще/не проще но компактнее можно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum ret {b,m,r};
 
ret compare(fu1, fu2, sh1, sh2, pe1, pe2)
{
if(fu1>fu2) return b;
else if(fu1<fu2) return m;
else if(sh1>sh2) return b;
else if(sh1<sh2) return m;
else if(pe1>pe2) return b;
else if(pe1<pe2) return m;
else return r;
}
 
 
int i = compare(10, 10, 20, 20, 11, 13);
P.S. по серьезному, у вас код слишком растянут, читать не удобно. Очень много лишних фигурных скобок.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
13.09.2013, 10:36     Задача на вычитание денежных единиц #3
Ну для начала по убирай лишние конструкции
C++
1
2
3
4
5
6
7
 if (pens < 0)
                {
                  pens+=12; shil--;
                }
                else//Зачем тут else если оно пустое
                {
                }
Если в if только одна строка можно опустить скобки. Переделанный пример
C++
1
2
if (pens < 0)
       pens+=12; shil--;
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 57
13.09.2013, 13:03  [ТС]     Задача на вычитание денежных единиц #4
Боялся убирать пустые else{}, чтобы оставшиеся не перепутались с другими if...

Добавлено через 59 минут
После "переработки" вышло так:
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
        pens=pens1-pens2; shil=shil1-shil2; fu=fu1-fu2;
        if (fu > 0)
          {
            if (shil < 0){shil+=20; fu--;}
            if (pens < 0)
            {
              if (shil == 0){pens+=12; shil+=19; fu--;}
              else{pens+=12; shil--;}
            }
          }
        else
          {
            if (fu == 0)
            {
              if (shil > 0){if (pens < 0){pens+=12; shil--;}}
              else
              {
                if (shil < 0)
                    if (pens > 0){pens-=12; shil++;}
              }
            }
            else
            {
              if (shil > 0){shil-=20; fu++;}
              if (pens > 0)
              {
                if (shil == 0){pens-=12; shil-=19; fu++;}
                else{pens-=12; shil++;}
              }
            }
          }


Satana, код красивый, но, как работает, пока не разберусь)))
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
13.09.2013, 14:46     Задача на вычитание денежных единиц #5
Цитата Сообщение от Chudakulli Посмотреть сообщение
Satana, код красивый, но, как работает, пока не разберусь)))
Он уродский. Х)
Но короче.
Вот чуть длиннее.
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
#include <iostream.h>
enum WhatReturnCompare
  {
  bolshe,
  menshe,
  ravno
  };
 
WhatReturnCompare compare(int fu1, int sh1, int pe1, // Функция, принимающая
                          int fu2, int sh2, int pe2) //    все эти параметры
{
       if( fu1 > fu2 ) return bolshe;  // Сравнение самых крупных сперва
  else if( fu1 < fu2 ) return menshe;  ///
  else if( sh1 > sh2 ) return bolshe;  // Потом поменьше
  else if( sh1 < sh2 ) return menshe;  ///
  else if( pe1 > pe2 ) return bolshe;  // И еще мельче
  else if( pe1 < pe2 ) return menshe;  ///
  else return ravno;                   // Если все-все оказались равны
}
 
 
 
 
int main()
{
int fu1, sh1, pe1;            // Объявляем
int fu2, sh2, pe2;            ///
 
cout << "Первая тройка:" << endl; //// Заполняем
cin >> fu1 >> sh1 >> pe1;           //
cout << "Вторая тройка:" << endl;   //
cin >> fu2 >> sh2 >> pe2;         ////
 
int result = compare(fu1, sh1, pe1,   // Запихиваемс в функцию
                     fu2, sh2, pe2);  ///
 
switch(result)                                           //// Обрабатываем вывод
  {                                                        //
  case bolshe : cout << "Первая тройка >  второй"; break;  //
  case menshe : cout << "Первая тройка <  второй"; break;  //
  case ravno  : cout << "Первая тройка == второй";         //
  }                                                      ////
 
cin.ignore(2);
return 0;
}
Добавлено через 16 минут
Цитата Сообщение от Chudakulli Посмотреть сообщение
После "переработки" вышло так:
Еще переработаем. )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pens=pens1-pens2; shil=shil1-shil2; fu=fu1-fu2;
if (fu > 0)
{
  if (shil < 0){shil+=20; fu--;}
  if (pens < 0)
    if (shil == 0){pens+=12; shil+=19; fu--;}
    else{pens+=12; shil--;}
}
else
{
  if (fu == 0)
    if (shil > 0 && pens < 0){pens+=12; shil--;}
    else if (shil < 0 && pens > 0){pens-=12; shil++;}
}
else
{
  if (shil > 0){shil-=20; fu++;}
  if (pens > 0)
    if (shil == 0){pens-=12; shil-=19; fu++;}
    else{pens-=12; shil++;}
}
//}
Может где и накосячил. Надо проверить. И еще у вас там скобка закрывающая одна лишняя.
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 57
13.09.2013, 16:59  [ТС]     Задача на вычитание денежных единиц #6
Хех, здорово, спасибо ))) Но в последнем Вашем коде программа просто решает, какое из значений больше?
P.S. Да, и я не нашел у себя лишней закрывающей скобки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 12:51     Задача на вычитание денежных единиц
Еще ссылки по теме:

Программа для денежных средств модернизируйте,если можно - C++
//программа для написания вывода денежных средств на экран по ставке % в год,по сумме и количеству лет //алгоритм //1.описание директив...

Вычитание объектов - C++
Привет всем! Помогите пожалуйста решить проблему: при выполнение в функции main вычитания - вылетает ошибка. В чём проблема? ...

Сложение и вычитание - C++
Текст задачи надо переписывать!

Вычитание строк - C++
Доброе время суток! Необходимо создать класс SymbString для работы со строкой символов, который имеет два поля char *str и int size....


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
14.09.2013, 12:51     Задача на вычитание денежных единиц #7
Цитата Сообщение от Chudakulli Посмотреть сообщение
Но в последнем Вашем коде программа просто решает, какое из значений больше?
Это ваш код.
Цитата Сообщение от Chudakulli Посмотреть сообщение
Да, и я не нашел у себя лишней закрывающей скобки.
Ну и хорошо. Может я ошибся.
Yandex
Объявления
14.09.2013, 12:51     Задача на вычитание денежных единиц
Ответ Создать тему
Опции темы

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