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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
#1

калькулятор - C++

17.08.2011, 19:17. Просмотров 2350. Ответов 28
Метки нет (Все метки)

народ помогите ошибку найти)) полюбому какой нить пустяк а я чета не догоняю))

программа калькулятор.. пишишь например 223+211 и програма должна понять где в строке переменные и какое действие с ними делать..

вот код:

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 <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    int i;
    double a,b,c;
    string s(""),str1(""),str2(""),znak("");
    cout<< "Vvedi     a (+,-,/,*,) b  "<<endl;
    cin>>s;
    int k=s.length();
    for (i=0;i<k;i++)
    {
    if ((s[i]='+')||(s[i]='-')||(s[i]='/')||(s[i]='*'))
    {
    int iznakq=i;
}
}         
for(i=0;i<iznakq;i++)
{
    str1+=s[i];
}
for(i=iznakq+1;i<k;i++)
{
    str2+=s[i];
}
 
 
istringstream ss(str1);
ss>>a;
istringstream sss(str2);
ss>>b;
 
znak=s[iznakq];
                                          
    if (znak=="+")
    {
               c=a+b;
               }
      if (znak=="-")
    {
               c=a-b;
               }          
     if (znak=="/")
    {
               c=a/b;
               }    
       if (znak=="*")
    {
               c=a*b;
               }     
               
               cout<<c<<endl;
               system("pause");
               return 0;
               }
ошибку находит в цикле строка 20.. ссылаеться на переменную iznakq
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2011, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос калькулятор (C++):

Простой калькулятор и калькулятор с парсингом - C++
Ребят я совсем не давно только начал изучать сишку, решил написать простенький калькулятор который работает с 2 числами. Возник вопрос, как...

Калькулятор на С++ - C++
калькулятор в принципе готов, надо только сделать запрет деления на 0, помогите кто чем может #include&lt;stdio.h&gt; #include&lt;conio.h&gt; ...

Калькулятор на С - C++
калькулятор в принципе готов, надо только сделать деление на дробные числа, помогите кто чем может пожалуйста

Калькулятор на C++ - C++
Доброго времени суток! У меня возник вопрос. При вводе чисел в cmd, они у меня просто складываются, но код (мне кажется) правильный. Думаю...

калькулятор - C++
Всем привет, извините, что постю сюда эту тему, но выхода нет((( Проблема состоит в том что надо сделать калькулятор из множества действий...

Калькулятор - C++
нужен калькулятор на языку С. уровень знания первый курс

28
Techno
Вирусоборец
317 / 119 / 2
Регистрация: 15.07.2011
Сообщений: 293
17.08.2011, 19:21 #2
Код
 if ((s[i]='+')||(s[i]='-')||(s[i]='/')||(s[i]='*'))
    {
    int iznakq=i;
}
Если условие if не выполнится, то переменная iznakq, которая дальше используется, не будет объявлена.
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
17.08.2011, 19:23  [ТС] #3
(2 пост) чее???

Добавлено через 1 минуту
а тоесть я просто не там обьявил переменную?))

Добавлено через 53 секунды
Цитата Сообщение от Techno Посмотреть сообщение
Код
 if ((s[i]='+')||(s[i]='-')||(s[i]='/')||(s[i]='*'))
    {
    int iznakq=i;
}
Если условие if не выполнится, то переменная iznakq, которая дальше используется, не будет объявлена.
все понял спасибо))
0
Techno
Вирусоборец
317 / 119 / 2
Регистрация: 15.07.2011
Сообщений: 293
17.08.2011, 19:25 #4
Цитата Сообщение от Ferk Посмотреть сообщение
а тоесть я просто не там обьявил переменную?))
Именно так)))
1
Danvern
40 / 39 / 3
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
17.08.2011, 19:40 #5
и у меня дикое ощущение что ты здесь имел виду не присваивание а сравнение.
Код
    if ((s[i]='+')||(s[i]='-')||(s[i]='/')||(s[i]='*'))
Код
    if ( ( s[i] == '+' ) || ( s[i] == '-' ) || ( s[i] == '/' ) || ( s[i]=='*' ) )
2
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
17.08.2011, 19:56  [ТС] #6
да спасибо) испаравил... но все равно не пашет))
0
LosAngeles
Заблокирован
17.08.2011, 20:25 #7
не очень рационально сделано.
я подрихтовал слегка
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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
 
    double a,b,c;
    string s;
    char znak = 0;
    cout << "Vvedi     a (+,-,/,*,) b  " <<endl;
    cin >> s;
 
    istringstream ss(s);
    ss >> a >> znak >> b;
 
    switch (znak)
    {
    case '+':
        c=a+b;
        break;
    case '-':
        c=a-b;
        break;
    case '/':
        c=a/b;
        break;
    case '*':
        c=a*b;
        break;
    default:
        cout << "Illegal character" << endl;
        exit(0);
    }
        
 
    cout<<c<<endl;
    system("pause");
    return 0;
}
Добавлено через 7 минут
обрати внимание на форматирование кода и сравни насколько его легче читать по сравнению с моим вариантом. В любой нормальной ide в меню Правка есть пункт Автоформатирование и горячая клавиша которая автоматически форматирует выделенный текст.

Добавлено через 1 минуту
проверку деления на ноль тоже не забудь добавить
1
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.08.2011, 20:26 #8
Цитата Сообщение от Ferk Посмотреть сообщение
пишишь например 223+211 и програма должна понять где в строке переменные и какое действие с ними делать..
Зря =)
Не твой уровень, аналогичная задача на acmp 56% стоит, а ты 4% задачи с трудом еще решаешь...
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
17.08.2011, 20:46 #9
Давно задумывался над решением подобной задачи, а разве нет какого-то более легкого,рационального решения, например с использованием библиотеки ?
0
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
17.08.2011, 20:55  [ТС] #10
Цитата Сообщение от diagon Посмотреть сообщение
Зря =)
Не твой уровень, аналогичная задача на acmp 56% стоит, а ты 4% задачи с трудом еще решаешь...
Та задача не совсем анолагичная.. она на много сложнее.. там выражения.. ..

и почиму это я 4% с трудом решаю?))

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Давно задумывался над решением подобной задачи, а разве нет какого-то более легкого,рационального решения, например с использованием библиотеки ?
хз)) я месяц с++ учю)) попытался так решить)) она пока не пашит)) но завтра я разберусь и доделаю ее))

Добавлено через 46 секунд
даж меньше месяца)
0
dr.curse
390 / 346 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
17.08.2011, 20:59 #11
я писал однажды калькулятор, сейчас кину

Добавлено через 19 секунд
если конечно надо
1
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.08.2011, 20:59 #12
Цитата Сообщение от Ferk Посмотреть сообщение
Та задача не совсем анолагичная.. она на много сложнее.. там выражения.. ..
Ненамного... Парсить немного сложнее, если через рекурсию делать, то еще проще.

Цитата Сообщение от Ferk Посмотреть сообщение
и почиму это я 4% с трудом решаю?))
Пардон, перепутал с кем-то... Но судя по твоим темам тяжело тебе эта тема дастся =\ Впрочем, без учета переменных, скобок, функций и приоритетов операторов это действительно не так сложно.
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
17.08.2011, 21:01  [ТС] #13
Цитата Сообщение от LosAngeles Посмотреть сообщение
не очень рационально сделано.
я подрихтовал слегка
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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
 
    double a,b,c;
    string s;
    char znak = 0;
    cout << "Vvedi     a (+,-,/,*,) b  " <<endl;
    cin >> s;
 
    istringstream ss(s);
    ss >> a >> znak >> b;
 
    switch (znak)
    {
    case '+':
        c=a+b;
        break;
    case '-':
        c=a-b;
        break;
    case '/':
        c=a/b;
        break;
    case '*':
        c=a*b;
        break;
    default:
        cout << "Illegal character" << endl;
        exit(0);
    }
        
 
    cout<<c<<endl;
    system("pause");
    return 0;
}
Добавлено через 7 минут
обрати внимание на форматирование кода и сравни насколько его легче читать по сравнению с моим вариантом. В любой нормальной ide в меню Правка есть пункт Автоформатирование и горячая клавиша которая автоматически форматирует выделенный текст.

Добавлено через 1 минуту
проверку деления на ноль тоже не забудь добавить

я у ся в дев с++ не могу чет найти)))))

Добавлено через 1 минуту
Цитата Сообщение от aram_gyumri Посмотреть сообщение
я писал однажды калькулятор, сейчас кину

Добавлено через 19 секунд
если конечно надо
кидай)) поглядим))
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
17.08.2011, 21:02 #14
Цитата Сообщение от Ferk Посмотреть сообщение
я у ся в дев с++ не могу чет найти)))))
у меня оно автоматически стоит это форматирование кода
1
dr.curse
390 / 346 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
17.08.2011, 21:03 #15
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
#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>
#include <windows.h>
using namespace std;
void StartExe(string s)
{
    s="start "+s;
    system(s.c_str());
}
void Sum(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("+")).c_str());
    b=atoll(s.substr(s.find("+")+1,s.length()).c_str());
    cout << a+b << endl;
}
void Sub(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("-")).c_str());
    b=atoll(s.substr(s.find("-")+1,s.length()).c_str());
    cout << a-b << endl;
}
void Mul(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("*")).c_str());
    b=atoll(s.substr(s.find("*")+1,s.length()).c_str());
    cout << a*b << endl;
}
void Div(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("//")).c_str());
    b=atoll(s.substr(s.find("//")+2,s.length()).c_str());
    cout << a/b << endl;
}
void Mod(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("%")).c_str());
    b=atoll(s.substr(s.find("%")+1,s.length()).c_str());
    cout << a%b << endl;
}
void Power(string s)
{
    long long a,b;
    a=atoll(s.substr(0,s.find("^")).c_str());
    b=atoll(s.substr(s.find("^")+1,s.length()).c_str());
    cout << pow(a,b) << endl;
}
void DivF(string s)
{
    long double a,b;
    a=atof(s.substr(0,s.find("/")).c_str());
    b=atof(s.substr(s.find("/")+1,s.length()).c_str());
    cout << a/b << endl;
}
void ShowBox(string s)
{
    s=s.substr(s.find("(")+1,s.find(")")-1);
    string text=s.substr(1,s.find(",")-1),caption=s.substr(s.find(",")+2,s.length()-1);
    text=text.substr(0,text.length()-1);
    caption=caption.substr(0,caption.length()-2);
    MessageBox(NULL,text.c_str(),caption.c_str(),MB_OK);
}
int main()
{
    cout << "\t\t\t EasyProg Interpreter v1.0";
    while (true)
    {
        cout << "\n>>> ";
        string s;
        getline(cin,s);
        if (s.length()==0) continue;
        else if (s.find("exec")!=-1)
        {
            string path=s.substr(s.find("exec")+5,s.length());
            StartExe(path);
        }
        else if (s.find("+")!=-1) Sum(s);
        else if (s.find("-")!=-1) Sub(s);
        else if (s.find("*")!=-1) Mul(s);
        else if (s.find("//")!=-1) Div(s);
        else if (s.find("%")!=-1) Mod(s);
        else if (s.find("^")!=-1) Power(s);
        else if (s.find("/")!=-1) DivF(s);
        else if (s.find("MsgBox(")!=-1) ShowBox(s);
        else if (s=="exit") {cout << "Good Bye."; Sleep(500); exit(0);}
        else if (s=="clear") {system("cls"); cout << "\t\t\t EasyProg Interpreter v1.0";}
        else cout << "It's not correct command.\n";
    }
    return 0;
}
Добавлено через 40 секунд
Вот, но это не просто калькулятор.
1
17.08.2011, 21:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 21:03
Привет! Вот еще темы с ответами:

Калькулятор в С++ - C++
Доброго времени суток. Нужно разработать класс «Калькулятор» Вид данных: квадрат; Необходимо осуществить ввод и вывод координат...

калькулятор - C++
делаю калькулятор...столкнулся с проблемкой...при вычислении чисел с плавающей точкой...как можно реализовать

Калькулятор - C++
На форуме наткнулся на тему &quot;Римский калькулятор&quot;. Вот код: Functions.cpp #include&lt;iostream&gt; const int arabar = { 1, 4, 5, 9,...

калькулятор - C++
Здравствуйте!! У меня возникла проблема. Мне нужно ввести выражение и занести его в массив. Символов не ограничено. Заранее спасибо. ...


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

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

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