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

Неправильно работает небольшая программа-калькулятор - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
08.07.2014, 22:16     Неправильно работает небольшая программа-калькулятор #1
это калькулятор фунтов, шиллингов и пенсов по старой системе. он должен уметь складывать, вычитать суммы, а также, умножать на число. складывает, вычитает, а умножать отказывается. помогите!
ан нет, наисправляла, теперь вообще не считает

C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    int funt, funt1, shill, shill1, pens, pens1, funt2, shill2, pens2;
    char ch, t4k;
    setlocale (0, "");
    cout << "Введите первый операнд " << endl;
    cin >> funt1 >> t4k >> shill1 >> t4k >> pens1;
    cout << "операцию " << endl;
    cin >> ch;
    if (ch = '+' || '-')
    {
        cout << " и второй операнд:" << endl;
        cin >> funt2 >> t4k >> shill2 >> t4k >> pens2;
        switch (ch)
        {
        case '+': 
            funt = funt1 + funt2;
            shill = shill1 + shill2;
            if (shill > 19)
            {
                funt++;
                shill = shill - 20;
            }
            pens = pens1+pens2;
            if (pens > 11)
            {
                shill++;
                pens = pens - 12;
            } 
        break;
        case '-': 
            funt = funt1 - funt2;
            shill = shill1 - shill2;
            if (shill1 < shill2)
            {
                funt--;
                shill = shill1 + 20 - shill2;
            }
            pens = pens1 - pens2;
            if (pens1 < pens2)
            {
                shill--;
                pens = pens1 + 12 - pens2;
            } 
        break;
        }
    }
    else 
        cout << " и число:" << endl;
    cin >> funt2;
    funt = funt1 * funt2;
            shill = shill1 * funt2;
            if (shill > 19)
            {
                funt++;
                shill = shill - 20;
            }
            pens = pens1 * funt2;
            if (pens > 11)
            {
                shill++;
                pens = pens - 12;
            } 
    cout << "Всего: J" << funt << t4k << shill << t4k << pens << endl;
    system ("pause");
    return 0;                                                     
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 01:40  [ТС]     Неправильно работает небольшая программа-калькулятор #21
Цитата Сообщение от abit Посмотреть сообщение
хотя может я не так понял вопрос... переформулируйте
окей. операция умножения должна быть осуществлена пенсо-шилингов на число, так как умножение пенсо-шилинга на пенсо-шилинг не имеет смысла. при вводе второго операнда у нас запрашивается фисло по форме пенсошилинга, в виде х.х.х, а нам, к примеру, надо умножить пенсо-шилинг на 2. всего лишь на 2.

Добавлено через 1 минуту
Цитата Сообщение от abit Посмотреть сообщение
для наших x=20, y=12 пишу:
Код C++
1
A1 = a1*x*y + b1*y + c1
эту часть я поняла

Добавлено через 24 минуты
знаю, коряво. и умножение так и не прописано. не знаю как ввод правильно сделать. задать число раз, в которое увеличивается фунто-шиллинг
C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    int funt, shill, pens, pens1, sumpens, operand; 
    char ch, dot;
    setlocale (0, "");
    cout << "Введите первый операнд " << endl;
    cin >> funt >> dot >> shill >> dot >> pens;
    pens = funt*20*12 + shill*12 + pens;
    cout << "операцию " << endl;
    cin >> ch;
    cout << " и второй операнд:" << endl;
    cin >> operand >> funt >> dot >> shill >> dot >> pens;
    pens1 = funt*20*12 + shill*12 + pens;
    switch (ch)
    {
        case '+': sumpens = pens+pens1; break;
        case '-': sumpens = pens-pens1; break;
        case '*': sumpens = pens*operand; break;
    }
    cout << "Всего: J" << sumpens/(20*15) << dot << sumpens/12%20 << dot << sumpens%12 << endl;
    system ("pause");
    return 0;                                                     
}
Добавлено через 50 секунд
и без setlocale (0, ""); у меня вывод кириллицы не осуществляется
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.07.2014, 01:43     Неправильно работает небольшая программа-калькулятор #22
Pari
я вам поведаю возможно сказку, в общем как в компьютере складывается один час и одна минута, знаете? а вот никак, бегут миллисекунды и в нужный момент округляются для пользователя в часы... т.е. сейчас у вас реально несколько миллиародов секунд бежит, а вот часы после округления (аналогично тому алгоритму что я показал) дают год-месяц-час-минуту... т.е. если всё свести к пенсам, то любой шилинг или что там ещё можно выразить как туда так и обратно в виде целого числа, в этом вся фишка, так же из миллиона секунд можно округлить до года, получив остаток, то из одного года никаких секунд не получить, будет просто круглый год...
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 01:44     Неправильно работает небольшая программа-калькулятор #23
Цитата Сообщение от abit Посмотреть сообщение
div это целочисленное деление, в Си/С++ это операция %
Цитата Сообщение от abit Посмотреть сообщение
значит 10 div 3 = 3
Немного Вас поправлю. Целочисленное деление обозначается знаком обычного деления и, да, возвращает целую часть без дробной (на то оно и целочисленное). А Вы описываете операцию остатка от целочисленного деления, т.е. так называемый mod (не div), причем 10 % 3 = 1.
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 01:45  [ТС]     Неправильно работает небольшая программа-калькулятор #24
так, хорошо. а к чему это вы? и еще, программа считает неверно(
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 01:46     Неправильно работает небольшая программа-калькулятор #25
Цитата Сообщение от Pari Посмотреть сообщение
sumpens/(20*15)
угадайте почему?
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 01:47  [ТС]     Неправильно работает небольшая программа-калькулятор #26
тогда как прописать эту строчку?
cout << "Всего: J" << sumpens/(20*15) << dot << sumpens/12%20 << dot << sumpens%12 << endl;
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 01:48     Неправильно работает небольшая программа-калькулятор #27
Цитата Сообщение от Pari Посмотреть сообщение
sumpens/(20*15)
Ладно, скажу прямо. Откуда 15? Может нужно 12?
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 01:56  [ТС]     Неправильно работает небольшая программа-калькулятор #28
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
угадайте почему?
я уже сижу красная как рак, но так и не могу врубиться(

Добавлено через 46 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Ладно, скажу прямо. Откуда 15? Может нужно 12?
а я сижу думу тяжкую думаю, где же я не там деление расставила)

Добавлено через 5 минут
и все же, что делать с умножением?
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 01:57     Неправильно работает небольшая программа-калькулятор #29
Цитата Сообщение от Pari Посмотреть сообщение
sumpens/(20*15) << dot << sumpens/12%20 << dot << sumpens%12
Хотя мне, если честно, вообще вся строка не нравится.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.07.2014, 01:58     Неправильно работает небольшая программа-калькулятор #30
Kerry_Jr
вы правы, попутал со своими блохами в Haskell, извиняюсь, вообще всем читающим данную тему приношу извинения, я был не прав в этом моменте, не о том взгруснулось


Perl
Программа содержит ошибки, и я удивлён, что вы не попытались составить общий алгоритм на листочке по моим намёкам, прежде чем писать это...
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 02:00     Неправильно работает небольшая программа-калькулятор #31
Цитата Сообщение от Pari Посмотреть сообщение
и все же, что делать с умножением?
У Вас есть оператор (ch). Для ввода второго операнда воспользуемся условием
C++
1
2
3
4
if (ch == '*')
    cin >> operand;
else
    cin >> funt >> dot >> shill >> dot >> pens;
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 02:06  [ТС]     Неправильно работает небольшая программа-калькулятор #32
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
У Вас есть оператор (ch). Для ввода второго операнда воспользуемся условием
спасибо))
вообще, честно говоря, я запуталась. я никогда не писала алгоритмов. я понимаю, на что вы мне намекали. я вижу у себя ошибку в коде только в этой строке:
C++ (Qt)
1
cout << "Всего: J" << sumpens/(20*12) << dot << sumpens/12%20 << dot << sumpens%12 << endl;
и прошу лишь помочь ее исправить и разъяснить. я совсем немного пишу коды. и да, мой код слишком далек от идеала, но вы от меня хотите слишком многого.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
09.07.2014, 02:06     Неправильно работает небольшая программа-калькулятор #33
Цитата Сообщение от abit Посмотреть сообщение
я намекаю что вот те строчки
Код C++
1 #include "stdafx.h";
тоже плохо...
Ох, вау, ломающие новости, precompiled headers это теперь оказывается плохо. Ну конечно, зачем ускорять время компиляции, лол
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 02:11     Неправильно работает небольшая программа-калькулятор #34
Цитата Сообщение от Pari Посмотреть сообщение
cout << "Всего: J" << sumpens/(20*12) << dot << sumpens/12%20 << dot << sumpens%12 << endl;
Попробуйте так
C++
1
cout << "Всего: J" << sumpens/(20*12) << dot << sumpens%(20*12)/12 << dot << sumpens%(20*12)%12 << endl;
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 02:15  [ТС]     Неправильно работает небольшая программа-калькулятор #35
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Попробуйте так
C++ (Qt)
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
теперь все работает, но не могу сообразить, правильно или нет %) 
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    int funt, shill, pens, pens1, sumpens, operand; 
    char ch, dot;
    setlocale (0, "");
    cout << "Введите первый операнд " << endl;
    cin >> funt >> dot >> shill >> dot >> pens;
    pens = funt*20*12 + shill*12 + pens;
    cout << "операцию " << endl;
    cin >> ch;
    cout << " и второй операнд:" << endl;
    if (ch == '*')
    cin >> operand;
else
    cin >> funt >> dot >> shill >> dot >> pens;
    pens1 = funt*20*12 + shill*12 + pens;
    switch (ch)
    {
        case '+': sumpens = pens+pens1; break;
        case '-': sumpens = pens-pens1; break;
        case '*': sumpens = pens*operand; break;
    }
    cout << "Всего: J" << sumpens/(20*12) << dot << sumpens%(20*12)/12 << dot << sumpens%(20*12)%12 << endl;
    system ("pause");
    return 0;                                                     
}
все равно не понимаю пред-предпоследнюю строку хоть ты тресни
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.07.2014, 02:22     Неправильно работает небольшая программа-калькулятор #36
Ладно в своё опровдание я покажу вам как решается задача примерно)

A1 = a1*x*y + b1*y + c1
A2 = a2*x*y + b2*y + c2
C = A1 Y A2
a3 = C div (x*y)
b3 = (C - a3*x*y) div y
c3 = a3-(b3 * y)
Здесь x,y - соотношение цен между валютами, a1,b1,c1 - первый базис (операнд), a2,b2,с2 - второй операнд, Y - любая линейная операция (умножение-сложение-вычитание или что там надо было), C - промежуточная переменная, a3, b3, c3 - результат
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 02:34  [ТС]     Неправильно работает небольшая программа-калькулятор #37
знаете, я бы такое даже в страшном сне не написала
профан я в этом, профанище...

Добавлено через 1 минуту
кстати, программа по прежнему работает неверно, точнее, считает неправильно.
кто может сказать в чем дело?

Добавлено через 2 минуты
Цитата Сообщение от abit Посмотреть сообщение
A1 = a1*x*y + b1*y + c1
A2 = a2*x*y + b2*y + c2
C = A1 Y A2
a3 = C div (x*y)
b3 = (C - a3*x*y) div y
c3 = a3-(b3 * y)
кстати, алгоритм очень красивый

Добавлено через 5 минут
я даже врубилась в эту чертову строку. и она правильная! и в остальном коде я не вижу ошибки! ребят, ну не молчите!
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 02:35     Неправильно работает небольшая программа-калькулятор #38
Вы наверное знаете, что в С++ при делении целого числа на целое получается целое, а дробная часть автоматически отбрасывается, т.е 10 / 3 = 3 (не 3.33333). Так вот, если sumpens разделить на 240 ==> (20*12), мы получим целое число фунтов.
Теперь еще одна операция - целочисленный остаток. 10 % 3 = 1 == >(10 - (10/3)*3). Если мы возьмем целочисленный остаток от деления sumpens на 240 (sumpens%(20*12)), то у нас будет число пенсов, которые не вошли в целые фунты (т.к. их меньше 240). А если мы их разделим на 12, то получим целое число шиллингов.
Теперь еще раз повторяем остаток от деления на 240 (пенсы не вошедшие в фунты), и от них еще раз возьмем остаток от деления на 12 (количество пенсов в шиллинге) и получим таким образом количество пенсов, не вошедших в шиллинги (их меньше 12).
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 02:46  [ТС]     Неправильно работает небольшая программа-калькулятор #39
Kerry_Jr, разобралась, спасибо. кстати в книге или пропустила или не было что при делении / отбрасываются знаки после запятой. а как сделать так, чтобы они не отбрасывались?

Добавлено через 4 минуты
добавила одну переменную. теперь все работает. в погоне за сокращением количества переменных добавила себе головной боли на час.
C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    int funt, shill, pens, pens1, pens2, sumpens, operand; 
    char ch, dot;
    setlocale (0, "");
    cout << "Введите первый операнд " << endl;
    cin >> funt >> dot >> shill >> dot >> pens;
    pens1 = funt*20*12 + shill*12 + pens;
    cout << "операцию " << endl;
    cin >> ch;
    cout << " и второй операнд:" << endl;
    if (ch == '*')
    cin >> operand;
else
    cin >> funt >> dot >> shill >> dot >> pens;
    pens2 = funt*20*12 + shill*12 + pens1;
    switch (ch)
    {
        case '+': sumpens = pens+pens2; break;
        case '-': sumpens = pens-pens2; break;
        case '*': sumpens = pens*operand; break;
    }
    cout << "Всего: J" << sumpens/(20*12) << dot << sumpens%(20*12)/12 << dot << sumpens%(20*12)%12 << endl;
    system ("pause");
    return 0;                                                     
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2014, 02:47     Неправильно работает небольшая программа-калькулятор
Еще ссылки по теме:

Неправильно работает программа C++
C++ Почему моя программа неправильно работает?
C++ Программа работает неправильно

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

Или воспользуйтесь поиском по форуму:
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.07.2014, 02:47     Неправильно работает небольшая программа-калькулятор #40
Parl
Это работает, я проверил) красоты тут на самом деле не много, кое-что подправить надо... я просто давно не имел дело с C++, в этом ошибка в основном) но если что обращайтесь, помогу
Yandex
Объявления
09.07.2014, 02:47     Неправильно работает небольшая программа-калькулятор
Ответ Создать тему
Опции темы

Текущее время: 03:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru