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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
#1

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2014, 22:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неправильно работает небольшая программа-калькулятор (C++):

неправильно работает программа на с++. - C++
вычислить произведение и число отрицательных элементов матрицы А,находящихся под главной диагональю. #include &lt;vcl.h&gt; #pragma...

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

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

программа работает неправильно - C++
Дана символьная матрица размера 13 на 18. Найти: номер первой по порядку строки, содержащий наибольшее число цифр; #include...

Почему программа работает неправильно - C++
не могу понять почему программа работает не правильно # include &lt;stdio.h&gt; # include &lt;conio.h&gt; # include &lt;math.h&gt; float f1(int...

Почему программа неправильно работает - C++
string IntToStr(int a) { if (a == 0) return &quot;0&quot;; string str = &quot;&quot;; int b = a; if (a &lt; 0) a *= -1; while (a &gt; 0) str =...

43
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 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;
1
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;
и прошу лишь помочь ее исправить и разъяснить. я совсем немного пишу коды. и да, мой код слишком далек от идеала, но вы от меня хотите слишком многого.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
09.07.2014, 02:06 #33
Цитата Сообщение от abit Посмотреть сообщение
я намекаю что вот те строчки
Код C++
1 #include "stdafx.h";
тоже плохо...
Ох, вау, ломающие новости, precompiled headers это теперь оказывается плохо. Ну конечно, зачем ускорять время компиляции, лол
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 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;
1
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;                                                     
}
все равно не понимаю пред-предпоследнюю строку хоть ты тресни
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
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 - результат
0
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 минут
я даже врубилась в эту чертову строку. и она правильная! и в остальном коде я не вижу ошибки! ребят, ну не молчите!
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 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).
1
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;                                                     
}
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
09.07.2014, 02:47 #40
Parl
Это работает, я проверил) красоты тут на самом деле не много, кое-что подправить надо... я просто давно не имел дело с C++, в этом ошибка в основном) но если что обращайтесь, помогу
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 02:49 #41
Pari,
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
#include <iostream>
#include <cstdlib>
 
int pens_in_ster(int st, int sh, int pn)
{
    return (st*240 + sh*12 + pn);
}
 
void pens_to_ster(int sump, int& st, int& sh, int& pn)
{
    st = sump/240;
    sh = sump%240/12;
    pn = sump%240%12;
}
 
int main()
{
    setlocale(LC_ALL, "");
    int st, sh, pn, op, sum, sum1, sum2;
    char ch, div;
    std::cout << "Введите первый операнд: ";
    std::cin >> st >> div >> sh >> div >> pn;
    sum1 = pens_in_ster(st, sh, pn);
    std::cout << "Введите операцию: ";
    std::cin >> ch;
    std::cout << "Введите второй операнд: ";
    if (ch == '*')
        std::cin >> op;
    else
    {
        std::cin >> st >> div >> sh >> div >> pn;
        sum2 = pens_in_ster(st, sh, pn);
    }
    switch (ch)
    {
        case '+': sum = sum1 + sum2; break;
        case '-': sum = abs(sum1 - sum2); break;
        case '*': sum = sum1 * op;
    }
    pens_to_ster(sum, st, sh, pn);
    std::cout << st << div << sh << div << pn << std::endl;
    
    return 0;
}
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 02:52  [ТС] #42
Цитата Сообщение от abit Посмотреть сообщение
но если что обращайтесь, помогу
будьте уверены, прибегу еще не раз на форум со своими очень красивыми кодами) в книге параграфов 12, а я только 3 дорешиваю)

Добавлено через 2 минуты
Kerry_Jr, к сожалению, не могу оценить код, так как несколько операторов с него еще не изучила, но спасибо. обязательно к нему вернусь когда дойду до этих операторов. я все записываю)
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
09.07.2014, 02:58 #43
Цитата Сообщение от Pari Посмотреть сообщение
а как сделать так, чтобы они не отбрасывались?
Во-первых, нужно, чтобы тип переменной, которой присваивается результат деления, был либо float, либо double.
Во-вторых, если делится переменная типа int на число, то у числа нужно указать нулевую дробную часть
C++
1
2
3
int a = 7;
double b = a / 2.0;// b = 3.5
double c = a / 2; // c = 3
1
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
09.07.2014, 03:03  [ТС] #44
Kerry_Jr, спасибо, теперь поняла.
0
09.07.2014, 03:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2014, 03:03
Привет! Вот еще темы с ответами:

Компиляция проходит, но программа работает неправильно - C++
Задача: дан текстовый файл. в нем символы &quot;.&quot; и &quot;,&quot; заменить на &quot;тчк&quot; и &quot;зпт&quot; соответственно. ...

Почему моя программа неправильно работает? - C++
Постоянно выводится сообщение Incorrect letter grade entered. Enter a new grade. #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; int...

подскажите почему программа работает неправильно - C++
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1&gt;------ Build...

Не могу понять, почему программа неправильно работает! - C++
Изучаю С++ по Страуструпу Б. - Программирование. Принципы и практика использования C++. Есть задание: 9. Вычислите сумму введенных...


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

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

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