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

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

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

косяк при выборе операции через switch в калькуляторе - C++

18.06.2014, 13:45. Просмотров 282. Ответов 2
Метки нет (Все метки)

всем доброго времени суток. пишу тут курсач и столкнулся со следующей проблемой: в консоли само по себе вписывается значение 0 и программа завершается. думаю что кося где-то в функции vich();
заранее благодарен;

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#pragma once
 
#include <iomanip> //Подключение манипуляторов ввода-вывода
#include <stdio.h>//Подключение библиотеки стандартного ввода-вывода; 
#include <conio.h>//Подключение библиотеки консольного ввода-вывода; 
#include <iostream>//Подключение библиотеки потокового ввода-вывода; 
#include <math.h>
 
using namespace std;
 
char c;//вспомогательные переменные выбора действия программы
 
class calc//класс калькулятора
{
private:
    int ch2_1[10];//первое число в двоичной системе
    int ch2_2[10];//второе число в двоичной системе
    int ch10_1;//первое число в десятичной
    int ch10_2;//второе число в десятичной
    long otvet2;//ответ в двоичной
    int otvet10;//ответ в десятичной
public:
    void init();//функция ввода чисел в двоичной системе счисления
    void f_2_to_10();//функция перевода из двоичной в десятичную систему счисления
    void f_10_to_2();//функция перевода из десятичной в двоичную систему
    void vich();//функция проведения операций
    void print();//функция вывода
 
};
 
void calc::init()//функция ввода чисел в двоичном виде
{
    int i;
    cout << "Введите первое число: ";
    for ( i = 0; i<10; i++)
        cin >> ch2_1[i];//вводим первое число;
    cout<<endl;
 
    cout << "Введите второе число: ";
    for ( i = 0; i<10; i++)
        cin >> ch2_2[i];//вводим второе число;
    cout<<endl;
}
 
void calc::f_2_to_10()//функция превода из двоичной в десятичную систему счисления
{
    int i;
    /*переводим первое число в двоичную систему*/
    ch10_1 = 0;
    for ( i = 9; i >= 0; i-- )
    {
        if ( ch2_1[i] == 1)
            ch10_1 += pow( 2.0, (9-i));
    }
 
 
    /*переводим второе число в двоичную систему*/
    ch10_2 = 0;
    for ( i = 9; i >= 0; i-- )
    {
        if ( ch2_2[i] == 1)
            ch10_2 += pow( 2.0, (9-i));
    }
}
 
void calc::f_10_to_2()//функция перевода из десятичной в двоичную систему счисления
{
    int i, mod;
    otvet2 = 0;
 
    /*цикл перевода*/
    for ( i = 0; otvet10 > 0; i++)
    {
        mod = otvet10 % 2;
        otvet10 = (otvet10 - mod) / 2;
        otvet2 += mod * pow(10.0, i);
    }
}
 
void calc::vich()//функция проведения операций
{
    //блок выбора операции
 
    cout << "Выберитe операцию:\n";
    cout << "'+' - сложение\n";
    cout << "'-' - вычитание\n";
    cout << "'*' - умножение\n";
    cout << "'/' - деление\n";
    cout << "Ваш выбор: ";
    
    //блок вычисления операции
    c = getchar();
    switch(c)
    {
    case '+':
        otvet10 = ch10_1 + ch10_2;
        break;
    case '-':
        otvet10 = ch10_1 - ch10_2;
        break;
    case '*':
        otvet10 = ch10_1 * ch10_2;
        break;
    case '/':
        otvet10 = ch10_1 / ch10_2;
        break;
    
    }
 
}
 
void calc::print()//функция вывода результата
{
    cout << '=' << otvet2 << endl;
}
 
void main()
{
    calc a1;
    setlocale(LC_ALL, "Russian");//подключение русского языка в консоли;
 
    /*последовательный вызов функций, необходимых для выполнения операций*/
    a1.init();
    a1.f_2_to_10();
    a1.vich();
    a1.f_10_to_2();
    a1.print();
 
    
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 13:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос косяк при выборе операции через switch в калькуляторе (C++):

косяк вызова функции через switch case - C++
! кода по моим меркам много, если решитесь помочь, запаситесь терпением))) Итак. Имеется зародыш курсовой - игры пятнашки. делал в...

Как через оператор switch производить битовые операции? - C++
Здравствуйте, В общем несколько вопросов.. Вот к примеру, нужно сделать программу, где надо будет с клавиатуры ввести 2а целых числа...

Почему при выборе switch у меня не работает вывод дерева на экран?! - C++
////////////////////////////////////////////////////// // // // Ñîçäàòü ïðîãðàììó äëÿ...

Объясните где я косяк (switch case + char) - C++
Доброе время суток! Имеется: for (unsigned int i=0; i&lt;v.size(); ++i) { cout &lt;&lt;&quot;# &quot;&lt;&lt;v.number &lt;&lt;&quot; \t&quot; ...

C++5 числами из массива при выборе операции показывает результат. (сумма, произведение . элементов массива) - C++
#include &lt;iostream&gt; using namespace std; void main() { int m, i; char type; double res; cout &lt;&lt; &quot;Input 5 numbers&quot; &lt;&lt;...

при вычислении выражении - одно значение,а в калькуляторе другое! - C++
есть,самое простое выражение: 21/5*3 но на калькуляторе будет - 21/5=4.2(логично?) и умноженное 4.2*3=12.6(и не поспоришь!) так вот -...

2
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
18.06.2014, 13:56 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
bittraid, если в консоли само выписывается, скорее всего косяк с буфером. Используйте
C++
1
cin.ignore(cin.rdbuf()->in_avail());
Перед операциями ввода.
1
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,266
Записей в блоге: 1
18.06.2014, 13:58 #3
на курсач не тянет. Максимум лаба на первом курсе... и то с натягом. Скорее школьная домашка!
А вообще, городить один класс для двух чисел с дублированием всех операций с ними... зачем?
Вообще, тут не особо-то и классы нужны, хотя если их и вводить сюда, то нужен один класс number, хранящий инфу об одном числе и методы перевода его в различные системы.
А уже класс calc должен оперировать разными экземплярами этих number!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 13:58
Привет! Вот еще темы с ответами:

через switch - C++
Даны 2 числа определяющие невисокосный год, D(день) и M(месяц). Определите D и М следующего за этой датой.

Переделать через switch - C++
Вот уравнение: y = na+(n-1)a+...+a или по другому : ((n+1)/2*n*a) Вот мой код: И надо бы его переделать через switch; А я вот...

Сделать через Switch - C++
Написать программу, которая ждет ввода первой буквы названия месяца. В зависимости от этого определяет квартал. Учесть: Июнь, Июль – разные...

Как переделать через switch? - C++
Задача 2. Вывести на экран сообщение в зависимости от введенного значения оценки (по десятибалльной системе), например: оценки 1, 2 -...


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

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

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