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

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

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

программа калькулятор.. пишишь например 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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2011, 19:17     калькулятор
Посмотрите здесь:

Калькулятор на С++ C++
C++ Калькулятор на С
C++ Калькулятор
Калькулятор C++
Калькулятор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CJ_Sashok
Живу от Клика до Клика
 Аватар для CJ_Sashok
34 / 34 / 5
Регистрация: 01.06.2010
Сообщений: 157
17.08.2011, 23:37     калькулятор #21
Если порыться в темах( в этом разделе), то можно найти тему, которую я давным давно создавал. Называется она Простенький калькулятор . Вопщем задача у меня была такая же. Вот мой код:
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
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
int plus(string a1);
int minus(string a2);
int ymnoz(string a3);
int podel(string a4);
double otv;
int plus(string a1){
    int i,i1;
    string b,c;
for(i=0;i<a1.length();i++){ // Цикл для проверки знак на "ПЛЮС"
    if (a1[i] != '+'){ b =b+a1[i];} //если не "ПЛЮС", то к b прибавим символ a[i]
    else if (a1[i] == '+'){//Если ПЛЮС, то...
 
break;} // Выход из цикла
}
for(i1=i+1;i1<a1.length();i1++){ //Цикл для проверки знака на "РАВНО"
         if (a1[i1] != '=') c =c+a1[i1]; //Если не "РАВНО", то к "c" прибавим символ a[i]
         else if (a1[i1] == '='){ // Если "РАВНО", то...
        return otv =  atof(b.c_str()) + atof(c.c_str()) ;
             break;}}
}
int minus(string a2){
    int i,i1;
    string b,c;
for(i=0;i<a2.length();i++){
    if (a2[i] != '-'){ b =b+a2[i];}
    else if (a2[i] == '-'){
 
break;}
}
for(i1=i+1;i1<a2.length();i1++){
         if (a2[i1] != '=') c =c+a2[i1];
         else if (a2[i1] == '='){
        return otv =  atof(b.c_str()) - atof(c.c_str()) ;
             break;}}
}
int ymnoz(string a3){
    int i,i1;
    string b,c;
for(i=0;i<a3.length();i++){
    if (a3[i] != '*'){ b =b+a3[i];}
    else if (a3[i] == '*'){
 
break;}
}
for(i1=i+1;i1<a3.length();i1++){
         if (a3[i1] != '=') c =c+a3[i1];
         else if (a3[i1] == '='){
        return otv =  atof(b.c_str()) * atof(c.c_str()) ;
             break;}}
}
int podel(string a4){
    int i,i1;
    string b,c;
for(i=0;i<a4.length();i++){
    if (a4[i] != '/'){ b =b+a4[i];}
    else if (a4[i] == '/'){
 
break;}
}
for(i1=i+1;i1<a4.length();i1++){
         if (a4[i1] != '=') c =c+a4[i1];
         else if (a4[i1] == '='){
        return otv = atof(b.c_str()) / atof(c.c_str()) ;
    break;}}
}
int main(){
    cout << " ------------------------------------------------------------------- \n";
    cout << "|_____________________                                              |\n";
    cout << "|Eazy Calculator v.1.1|                                             |\n";
    cout << "|_____________________|                                             |\n";
    setlocale( LC_ALL,"Russian" );
    cout << "|Введите пример, например,'2+2='(без кавычек)и нажмите на ENTER:    |\n";
    rest:
    cout << " ------------------------------------------------------------------- \n";
    string a;
getline(cin,a);
for(int i2 = 0;i2< a.length();i2++){
    if (a[i2] == '+'){
        plus(a);
        cout <<otv<<'\n';
        cout <<"___________________________\n"<< "Нажмите 'SPACE', чтобы продолжить...";
        int ch;
        ch =_getch();
        if (ch == 32){cout << '\n'; goto rest;}}
    else if (a[i2] == '-'){
        minus(a);
        cout <<otv<<'\n';
        cout <<"___________________________\n"<< "Нажмите 'SPACE', чтобы продолжить...";
        int ch;
        ch =_getch();
        if (ch == 32){cout << '\n'; goto rest;}}
    else if (a[i2] == '*'){
        ymnoz(a);
        cout <<otv<<'\n';
        cout <<"___________________________\n"<< "Нажмите 'SPACE', чтобы продолжить...";
        int ch;
        ch =_getch();
        if (ch == 32){cout << '\n'; goto rest;}}
    else if (a[i2] == '/'){
        podel(a);
        cout <<otv<<'\n';
        cout <<"___________________________\n"<< "Нажмите 'SPACE', чтобы продолжить...";
        int ch;
        ch =_getch();
        if (ch == 32){cout << '\n'; goto rest;}}
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
18.08.2011, 00:03     калькулятор #22
Ferk, рекомендую вам почитать книжечку Лафоре.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
18.08.2011, 02:11     калькулятор #23
Всё то же, но компактнее
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
#define calc(a, b, c) (((b) == '+') ? ((a) + (c)) : ((b) == '-') ? ((a) - (c)) : ((b) == '*') ? ((a) * (c)) : ((a) / (c)))
 
int main(void){
    double x, y;
    char act[2] = { 0 };
    
    while ( printf("> ") && scanf("%lf %1[+-*/] %lf", &x, act, &y) == 3 )
        printf("= %.2f\n", calc(x, *act, y));
    
    return 0;
}
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
18.08.2011, 03:10     калькулятор #24
Так C++ же вроде надо.

Добавлено через 27 минут
Может, так?
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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
double calc ( double, double, char );
 
int main ()
{
    double a, b;
    char symbol;
    
    while ( true )
    {
        cout << "Enter: ";
        cin >> a >> symbol >> b;
    
        cout << "Result is: " << setprecision ( 4 ) << calc ( a, b, symbol );
        cout << endl << endl;
    }
 
    getch ();
    return 0;   
}
 
double calc ( double a, double b, char symbol )
{
    switch ( symbol )
    {
       case '+':
          return a + b;
       case '-':
          return a - b;
       case '*':
          return a * b;
       case '/':
          return a / b;
    }
}
Или программа должна в строке распознать числа и символы?
Ferk
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
18.08.2011, 15:46  [ТС]     калькулятор #25
написал)) вот исправленный))

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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
main()
{
      int a,b,c,i;
      string s(""),str1(""),str2(""),zn("");
      cout<<"vvedi virogenie    a (+,-,*,/) b"<<endl;;
      cin>>s;
      int izn;
      for (i=0;i<s.length();i++)
      {
          if((s[i]=='+')||(s[i]=='-')||(s[i]=='*')||(s[i]=='/'))
          {
          izn=i;
          zn=s[izn];
          break;
           }
           }
           
           for(i=0;i<izn;i++)
           {
                              str1=str1+s[i];
                              }
           for(i=izn+1;i<s.length();i++)
           {
                              str2=str2+s[i];
                              }                  
                              
            istringstream ss1(str1);
            ss1 >> a;
            istringstream ss2(str2);
            ss2 >> b;
            
            if(s[izn]=='+')
            {
            c=a+b;
            }
            if(s[izn]=='-')
            {
            c=a-b;
            }
            if(s[izn]=='*')
            {
                          c=a*b;
                          }
                          if(s[izn]=='/')
                          {
                                        c=a/b;
                                        }
                              
           
           
           cout<<" "<<c<<endl;
           system("pause");
           return 0;
           }
там тока деление целочисленное ща переделую))

пошол совершенствовать его))
LosAngeles
Заблокирован
18.08.2011, 17:44     калькулятор #26
чем этот плох код?
калькулятор
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
18.08.2011, 19:11     калькулятор #27
А что если задача сложнее например может быть ввод 223+211/566 ?
Кол-во операций может меняться?
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
19.08.2011, 12:43     калькулятор #28
Цитата Сообщение от Avazart Посмотреть сообщение
А что если задача сложнее например может быть ввод 223+211/566 ?
тогда читай это или смотри эту программу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2011, 23:22     калькулятор
Еще ссылки по теме:

Калькулятор C++
Калькулятор C++
Простой калькулятор и калькулятор с парсингом C++

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

Или воспользуйтесь поиском по форуму:
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
19.08.2011, 23:22     калькулятор #29
Цитата Сообщение от Dani Посмотреть сообщение
Я 2 главы про этот калькулятор не могу понять, все из-за этого кривого слова "Терм" кто-нибуль может понятно объяснить, что это такое?
По своему печальному опыту с этим калькулятором могу сказать,что для меня самым лучшим способом было давать калькулятору считать что-либо и смотреть,что происходит в дебаггере,пошагово.
Yandex
Объявления
19.08.2011, 23:22     калькулятор
Ответ Создать тему
Опции темы

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