Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
1

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

08.07.2014, 22:16. Показов 2548. Ответов 43
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
это калькулятор фунтов, шиллингов и пенсов по старой системе. он должен уметь складывать, вычитать суммы, а также, умножать на число. складывает, вычитает, а умножать отказывается. помогите!
ан нет, наисправляла, теперь вообще не считает

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;                                                     
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2014, 22:16
Ответы с готовыми решениями:

неправильно работает программа на с++.
вычислить произведение и число отрицательных элементов матрицы А,находящихся под главной...

Неправильно работает программа
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; const int...

Неправильно работает программа
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; int...

Неправильно работает программа
Не выводит все введенные данные. Выводит только либо первые, либо вторые. Весь код: #include...

43
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
08.07.2014, 23:08 2
Вот это школокод, я далеко не сразу догадался что такое t4k, хотя было в его обозначении понятно )))
жесть... в общем так не пишут...
либо возьмитесь за учебники С++, исключите из лексикона подобную фигню, а так же например #include "stdafx.h" и system ("pause");
либо поставьте нормально задачу что на входе, что на выходе, этот кошмарный код очень мало объясняет, не удивительно что он у вас не умножал, если там
C++
1
if (ch = '+' || '-') ... case '+' .... case '-'... else ...
сложение вижу, вычитание вижу, умножение где? после else? так оно тогда всегда выполняется
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
08.07.2014, 23:16  [ТС] 3
насчет #include "stdafx.h", мой вижуал не запускает ничего без него( а паузу я знаю еще можно getche, но привыкла уже так
я и так учусь по Лафоре) правда самостоятельно Х) наверное поэтому мой код такой чудаковатый...
после else прописано умножение, но блин, после ввода данных не происходит ничего после нажатия enter
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.07.2014, 23:31 4
C++
1
if (ch = '+' || '-')
Всегда будет истина

P.S. Код ужасный) Полностью сотри его - напиши на листочке блоки if switch и стрелочками покажи куда что идёт, и только тогда садись писать программу. Сейчас это больше похоже на этикетку туалетной бумаги чем на код)
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
08.07.2014, 23:32 5
Pari
Смотрите, дело не Visual, язык универсален, есть стандарт C++, уж какими заголовками обрамить в вашей среде это дело десятое, я намекаю что например вот это:
C++
1
int funt, funt1, shill, shill1, pens, pens1, funt2, shill2, pens2;
нефига не хорошо,
я намекаю что вот те строчки
C++
1
#include "stdafx.h" и system ("pause");
тоже плохо...
это не есть универсальность и кроссплатформенность, можно сделать куда элегантнее внутри страндарта C++, не привлекая лишних сущностей (см. бритва Оккама)

Теперь к делу - после принятия операции в ch условие разбирает лишь два варианта + и - (никакого умножения) если одно - делает сложение, если второе - вычитание, после этого условие закачнивается и происходит некий вывод в этих строках:
C++
1
2
    cout << " и число:" << endl;
    cin >> funt2;
и потом "быстро, дерзко, как пуля резко" что-то умножается... так нельзя в общем делать
да и вообще ввод данных в таком формате как тут вводятся - бред, почему бы не вводить в строку (std::string) например и потом парсить по точкам?
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
08.07.2014, 23:47  [ТС] 6
так, для начала надо переписать код, это я уже поняла.
далее, объясните конкретно, что не так с моими переменными?
вы мне говорите про кроссплатформенность, но я еще дальше циклов не продвинулась, мне бы хоть вот такие программки строгать без сбоев. и насчет string я еще не знаю что это такое, вот такой я вот неуч, потому исхожу из того материала, что прошла

Добавлено через 7 минут
теперь мое детище складывает, отнимает, но умножать не хочет по понятным причинам, и я не знаю как это прописать. но немного структурировала сам код.
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
#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;
    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;
        case '*': 
            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;
            } 
            break;
        }
    cout << "Всего: J" << funt << t4k << shill << t4k << pens << endl;
    system ("pause");
    return 0;                                                     
}
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
08.07.2014, 23:54 7
Perl
а что там после циклов? рекурсии и фракталы? бросьте, для этой задачи и циклов не надо, давайте сперва сформулируем задачу собственно, Вам её надо сделать для школы или для себя?

насколько я понял задачу задаётся некие два опернда вида A.B.C.D и операция +/-/*, где A - максимальная валюта, B - 1/x от этой максимальной A, C - 1/y от B, D - 1/z от C
естественно должна быть функция упрощения, т.е. по русски - ответ в 125 копеек упрощать до 1 рубля 25 копеек...
это как я понял задачу, в общем если это так, то предалагаю решить её в общем виде, где x,y,z произвольные числа

Добавлено через 1 минуту
забудьте про свой код, расскажите о своей задаче )
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
08.07.2014, 23:55 8
это калькулятор фунтов, шиллингов и пенсов по старой системе. он должен уметь складывать, вычитать суммы, а также, умножать на число.
Для начала храните эти суммы в пенсах. В фунто-шиллинги пересчитывайте только когда надо напечатать результат.
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 00:03  [ТС] 9
это чисто для себя. хотя я учусь на специальности непосредственно связанной с программированием, потому не мешало бы мне хорошо так подтянуть его за лето)
дело в том, что в 1 фунте - 20 шиллингов. в 1 шиллинге - 12 пенсов. а так, суть задачи вы сами описали)

Добавлено через 56 секунд
там довольно проблематичный пересчет в фунто-шиллинги, потому решила идти по дороге попроще.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
09.07.2014, 00:09 10
там довольно проблематичный пересчет в фунто-шиллинги, потому решила идти по дороге попроще.
C++
1
2
int tuda=funt*20*12+shill*12+pens;
cout<<"i obratno"<<tuda/(20*12)<<" "<<(tuda/12)%20<<" "<<tuda%12<<endl;
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 00:14  [ТС] 11
вот фигово я дружу с остатком от деления, спасибо
в свое оправдание могу сказать что я начала изучать С++ чуть больше недели назад)
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
09.07.2014, 00:17 12
Pari
Ok
Смотрите, просим человека ввести фунт-шиллинг-пенс как первый операнд
допустим он вводит 1 2 3
из ваших соотношений 1/20, 1/12 имеем:
A1 = 1*20*12 + 2*12 + 3 = 267 пенсов
просим ввести теперь второй операнд тоже из трёх чисел, допустим это 3 2 1 :
A2 =3*20*12 + 2*12 + 1 = 745 пенсов
просим указать операцию, допустим это +, тогда
A1+A2 = 1012
всё, ответ 1012 пенсов, осталось привести к нормальному виду... мы знаем, что в фунте 20*12 пенсов, значит
1012 div (20*12) = 4
ок, 4*20*12 = 960, значит осталось описать 1012-960 = 52 пенса
мы знаем, что в шиллинге 12 пенсов, значит
52 div 12 = 4
ок, 4*12 = 48, значит остался остаток в пенсах 52-48 = 4

всё, ответ 4 4 4 )
вот и весь алгоритм
1
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 00:29  [ТС] 13
говорила мне мама, учи математику(
вот долго еще я буду втыкать в эту часть пока пойму.
1012 div (20*12) = 4
ок, 4*20*12 = 960, значит осталось описать 1012-960 = 52 пенса
мы знаем, что в шиллинге 12 пенсов, значит
52 div 12 = 4
ок, 4*12 = 48, значит остался остаток в пенсах 52-48 = 4
а как насчет ввода числа, на которое надо умножать фунто-пенсы? как это прописать, чтобы человек мог ввести наравне со вторым операндом состоящим из 3 цифр операнд состоящий из 1 цифры?
а что такое div?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.07.2014, 00:33 14
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0, "");
 
 
    int A, B;
    char A_value, B_value, operant;
    float answer;
 
    cout << "Введите уровнение: " << endl;
    //cin >> A >> A_value >> operant >> B >> B_value;
 
    // F - фунты
    // S - шилинги
    // P - пенни
 
    A = 17;
    A_value = 'F';
    operant = '+';
    B = 59;
    B_value = 'P';
 
    // Сводим всё в одну денежную систему систему в пенни
    // Если валюта в фунтах умножаем для перевода на (20+12)
    // Если валюта в шилингах умножаем для перевода на 12 
 
    switch(A_value)
    {
        case 'F': A *= 20;
        case 'S': A *= 12;
        case 'P': break;
    }
    switch(B_value)
    {
        case 'F': B *= 20;
        case 'S': B *= 12;
        case 'P': break;
    }
    cout << endl << "Результат операции ";
    switch(operant)
    {
        case '+': answer = A+B; cout << "сложения"; break;
        case '-': answer = A-B; cout << "вычисления"; break;
        case '*': answer = A*B; cout << "умножения"; break;
    }
    cout << " в разных валютах равен:";
    cout << endl << answer << " пенни";
    cout << endl << answer/12 << " шилингов";
    cout << endl << answer/240 << " фунтов";
    cout << endl;
 
    return 0;
}
1
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 00:41  [ТС] 15
что такое A_value, B_value, А, В?
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
09.07.2014, 00:41 16
Pari
маму слушайтесь) поясняю, div это целочисленное деление, в Си/С++ это операция %
смысл - в общем берёте калькулятор, делите число 10 на 3, получаете 3,3333(...) и откидываете всё после запятой - значит 10 div 3 = 3

кроме того, я не делал никаких тайных операций, всё на поверхности, заменяете свои 20 и 12 на x и y, вводимые числа на A1,B1,C1 и A2,B2,C2 (помним, что div = %)
думаю догадаетесь как составить алгоритм на C++

в общем если совсем никак - проявите фантазию и опишете как можете, то что я написал, я поправлю
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 00:45  [ТС] 17
хорошо, попытаюсь написать, но еще раз повторю последний вопрос:
а как насчет ввода числа, на которое надо умножать фунто-пенсы? как это прописать, чтобы человек мог ввести наравне со вторым операндом состоящим из 3 цифр операнд состоящий из 1 цифры?
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
09.07.2014, 00:55 18
Pari
тут варианта два - либо эти x и y жётско заданы программистом (через код/файл) либо просим пользователя указать эти соотношения, это уж как вам надо для задачи, мы её решили в общем виде, в нашем случае можно воодить хоть 20000 20000 20000, ответ будет преобразован в правильный кратый x и y поразрядно, т.е. по русски - если мне лень переводить 1234 пенса мелочью сколько там шиллингов, я так и введу что у меня 1234 пенса, т.е. 0 0 1234, ответ тем не менее ожидаю увидеть переведённым

хотя может я не так понял вопрос... переформулируйте
0
41 / 4 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 01:09  [ТС] 19
хорошо, сейчас приступлю к ваянию, ночь длинная, а я тормоз, понимать-понимаю, а как до практики доходит - работаю очень медленно. подозреваю что слишком мало практики. ну это я себя успокаиваю. чтобы не потерять желание дальше учиться Х)

Добавлено через 2 минуты
Цитата Сообщение от abit Посмотреть сообщение
тут варианта два - либо эти x и y жётско заданы программистом (через код/файл) либо просим пользователя указать эти соотношения, это уж как вам надо для задачи, мы её решили в общем виде
а теперь еще раз, пожалуйста, для тупых для дам

Добавлено через 11 минут
все равно, начинаю писать, настроилась на стройный и звонкий код, а получается какая-то лажа с кучей переменных. да что ж такое
0
393 / 368 / 111
Регистрация: 03.02.2013
Сообщений: 1,127
09.07.2014, 01:13 20
Pari
Ой, ну давайте всё же переведём мои слова в алгоритм, а потом обсудим как и что куда задавать, это вовсе не сложно, уверяю, я умышленно пропускаю ввод данных, потому что это не важно, но пусть a1,b1,c1 - введённые числа фунтов, шиллиногов и пенсов как операнд один, пусть a2,b2,c2 - та же история как операнд два... пишем код с моей строчки
из ваших соотношений 1/20, 1/12 имеем:
для наших x=20, y=12 пишу:
C++
1
A1 = a1*x*y + b1*y + c1
продолжите
0
09.07.2014, 01:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2014, 01:13
Помогаю со студенческими работами здесь

Программа работает неправильно
Написал программу на C++, но она работала не правильно, начал разбираться, понемногу удаляя код...

Неправильно работает программа
файл complex.h #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std;...

программа работает неправильно
Дана символьная матрица размера 13 на 18. Найти: номер первой по порядку строки, содержащий...

Неправильно работает программа
Сумма ноль всегда исходные данные целые числа #include &quot;pch.h&quot; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru