С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347

калькулятор

26.04.2011, 14:13. Показов 2955. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
 /*Кнопка Суммы*/
private: System::Void plus_Click(System::Object^  sender, System::EventArgs^  e) {
 
             if (pole->Text != "") //Если "pole" не пустое то выполняем следующее
                 {
                    value = Convert::ToDouble(pole->Text); 
                    regim = '+';
                    pole->Clear();//Очищаем экран
                 }
         }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 /* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
             if (pole->Text != "")// Если экран не пустой то выполняется следующее действие
             {
             double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
                  /*Определяем какое действие нужно выполнить*/
             switch (regim) 
             {
                case '+':
                    pole->Text = (buf+value).ToString();//Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
                    break;
            
             }
             }
         }
если я в ввожу 2+3=5 далее нажимаю на ровно выдается 7 (первое число прибавляется к числу которое в веденно на экране)
как сделать что второе число прибавлялось к веденному ?
 Комментарий модератора 
sektor2009, правила прочитайте! Дублирование тем запрещено!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2011, 14:13
Ответы с готовыми решениями:

Калькулятор
Доброго времени суток, делаю калькулятор програмиста но столкнулся с проблемой как мне добавлять значения

Калькулятор
Люди добрые! Помогите пожалуйста написать программу по заданию в универе, у самого никак не получается( Само задание: Написать...

калькулятор
в C# плохо пишу, но мне надо написать калькулятор. есть несколько вопросов. знаю, что это самая легкая программа, но все же прошу помощи)...

23
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 16:29
Ваша проблема вот в чем:
1. Сначала вводится 2

2. нажимаем "+" и 2 идет в велью

3. Вводим 3

4. нажимаем "=" и 3 идет в буф
Тарарам, происходит магия и велью складывается с буф.
Получаем 5 в поле вывода


5. Теперь жмем на "=" и получаем вот что:
В буф заносится 5.
В велью у нас по прежнему лежит 2!!!
5 складывается с 2 и получается 7
Вот так вот

А по поводу
как сделать что второе число прибавлялось к веденному ?
не очень понял что Вы хотите получить. Если нужна цепочка вычислений, то нужно очистить знак, то есть regim после того, как посчиталось все.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole->Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      regim = ''; //Или любой другой символ, который не повешен на кнопки
      //А можно еще и велью очистить
   }
}
Надеюсь, я правильно понял, что Вы хотели. Идачи
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 17:05  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Ваша проблема вот в чем:
1. Сначала вводится 2

2. нажимаем "+" и 2 идет в велью

3. Вводим 3

4. нажимаем "=" и 3 идет в буф
Тарарам, происходит магия и велью складывается с буф.
Получаем 5 в поле вывода


5. Теперь жмем на "=" и получаем вот что:
В буф заносится 5.
В велью у нас по прежнему лежит 2!!!
5 складывается с 2 и получается 7
Вот так вот

А по поводу

не очень понял что Вы хотите получить. Если нужна цепочка вычислений, то нужно очистить знак, то есть regim после того, как посчиталось все.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole->Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      regim = ''; //Или любой другой символ, который не повешен на кнопки
      //А можно еще и велью очистить
   }
}
Надеюсь, я правильно понял, что Вы хотели. Идачи
error C2137: пустая символьная константа
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 17:12
Цитата Сообщение от DWand Посмотреть сообщение
//Или любой другой символ, который не повешен на кнопки
В таком случае
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 17:20  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
В таком случае
а теперь второй раз кномка = не нажимается)..
мне надо что бы она нажималась и прибавляла 3 а не 2
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 17:32
Тогда сохраните знак, а не обнуляйте его и перепишите значение из буф в велью

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole->Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      value = buf;
   }
}
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 17:51  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Тогда сохраните знак, а не обнуляйте его и перепишите значение из буф в велью

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole->Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      value = buf;
   }
}
а теперь он потом число 5 прибовляет к 8 а должен 3+8
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 18:14
Если вам нужно постоянно прибавлять одно и то же число, то нужно искать еще какие-то варианты.
К примеру, тот же флаг использовать и с его помощью анализировать в каком положении в данный момент находится калькулятор.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 private bool op;
   /* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole -> Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      if (op == false) {
          value = buf;
      }
      op = true;
   }
А при нажатии на кнопку + op ставить false.
Если это будет работать конечно...
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 18:17  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Если вам нужно постоянно прибавлять одно и то же число, то нужно искать еще какие-то варианты.
К примеру, тот же флаг использовать и с его помощью анализировать в каком положении в данный момент находится калькулятор.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 private bool op;
   /* Кнопка '=' */
private: System::Void rovno_Click(System::Object^  sender, System::EventArgs^  e) {
   if (pole -> Text != "")// Если экран не пустой то выполняется следующее действие
   {
      double buf = Convert::ToDouble(pole->Text);//Обьявляем переиенную buf
      
      /*Определяем какое действие нужно выполнить*/
      switch (regim) 
      {
         //Если пользовалень нажал на кнопку '+' то будет выполняться действие сложение двух чисел
         case '+':
            pole->Text = (buf+value).ToString();
            break;
                        
      }
 
      if (op == false) {
          value = buf;
      }
      op = true;
   }
А при нажатии на кнопку + op ставить false.
Если это будет работать конечно...
а что это вообще дает ?
не работает
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 18:23  [ТС]
вот например я почитал 2+3 нажимаю на кнопку = 5
потом когда нажимаю например на кнопку 7.. у меня в textBox выдается 57..
как сделать что бы 5очистилась .. и была тольк о 7
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 18:27
Суть в том, чтобы один раз в велью переписать буф и таким образом его сохранить. А буф будет постоянно меняться, когда будет нажиматься кнопка =. И так получится цепочка наша.
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 18:36
Сделать флаг.
Каждый раз после выполнения операции ставить этот флаг в положение тру.
Каждый раз при нажатии на цифровую кнопку проверять этот флаг. Если он тру, то очистить поле скидыванием его свойства Text в пустую строку "".
Иначе, боюсь, никак. Хотя я не так уж хорошо знаю это все
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 18:52  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Сделать флаг.
Каждый раз после выполнения операции ставить этот флаг в положение тру.
Каждый раз при нажатии на цифровую кнопку проверять этот флаг. Если он тру, то очистить поле скидыванием его свойства Text в пустую строку "".
Иначе, боюсь, никак. Хотя я не так уж хорошо знаю это все
напишите пример
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 18:52  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Суть в том, чтобы один раз в велью переписать буф и таким образом его сохранить. А буф будет постоянно меняться, когда будет нажиматься кнопка =. И так получится цепочка наша.
чето не работает не фига
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 19:49
Для целых чисел работает. Для дробных, думаю, сможете доделать

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
private:
bool input;
bool op;
char regim;
double value;
double buf;
 
System::Void setNum(int Num){
    if (input) {
        textBox1 -> Text += Num.ToString();
    } else {
        textBox1 -> Text = Num.ToString();
        input = true;
    }
    op = false;
}
System::Void but0_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(0);
}
System::Void but1_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(1);
}
System::Void but2_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(2);
}
System::Void but3_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(3);
}
System::Void but4_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(4);
}
System::Void but5_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(5);
}
System::Void but6_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(6);
}
System::Void but7_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(7);
}
System::Void but8_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(8);
}
System::Void but9_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(9);
}
System::Void plus_Click(System::Object^  sender, System::EventArgs^  e) {
    value = Convert::ToDouble(textBox1->Text);
    regim = '+';
    input = false;
}
System::Void min_Click(System::Object^  sender, System::EventArgs^  e) {
    value = Convert::ToDouble(textBox1->Text);
    regim = '-';
    input = false;
}
System::Void butcalc_Click(System::Object^  sender, System::EventArgs^  e) {
    if (textBox1 -> Text != "") {
        if (op == false){
            buf = Convert::ToDouble(textBox1->Text);
        } else {
            value = Convert::ToDouble(textBox1->Text);
        }
 
        switch (regim) {
        case '+':
            textBox1 -> Text = (value + buf).ToString();
            break;
        case '-':
            textBox1 -> Text = (value - buf).ToString();
            break;
        }
 
        input = false;
        op = true;
    }
}
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
26.04.2011, 19:54  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Для целых чисел работает. Для дробных, думаю, сможете доделать

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
private:
bool input;
bool op;
char regim;
double value;
double buf;
 
System::Void setNum(int Num){
    if (input) {
        textBox1 -> Text += Num.ToString();
    } else {
        textBox1 -> Text = Num.ToString();
        input = true;
    }
    op = false;
}
System::Void but0_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(0);
}
System::Void but1_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(1);
}
System::Void but2_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(2);
}
System::Void but3_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(3);
}
System::Void but4_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(4);
}
System::Void but5_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(5);
}
System::Void but6_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(6);
}
System::Void but7_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(7);
}
System::Void but8_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(8);
}
System::Void but9_Click(System::Object^  sender, System::EventArgs^  e) {
    setNum(9);
}
System::Void plus_Click(System::Object^  sender, System::EventArgs^  e) {
    value = Convert::ToDouble(textBox1->Text);
    regim = '+';
    input = false;
}
System::Void min_Click(System::Object^  sender, System::EventArgs^  e) {
    value = Convert::ToDouble(textBox1->Text);
    regim = '-';
    input = false;
}
System::Void butcalc_Click(System::Object^  sender, System::EventArgs^  e) {
    if (textBox1 -> Text != "") {
        if (op == false){
            buf = Convert::ToDouble(textBox1->Text);
        } else {
            value = Convert::ToDouble(textBox1->Text);
        }
 
        switch (regim) {
        case '+':
            textBox1 -> Text = (value + buf).ToString();
            break;
        case '-':
            textBox1 -> Text = (value - buf).ToString();
            break;
        }
 
        input = false;
        op = true;
    }
}
что это такое?
C++
1
2
3
4
5
6
7
8
System::Void setNum(int Num){
        if (input) {
                textBox1 -> Text += Num.ToString();
        } else {
                textBox1 -> Text = Num.ToString();
                input = true;
        }
        op = false;
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
26.04.2011, 20:00
Цитата Сообщение от sektor2009 Посмотреть сообщение
что это такое?
System::Void setNum(int Num){
if (input) {
textBox1 -> Text += Num.ToString();
} else {
textBox1 -> Text = Num.ToString();
input = true;
}
op = false;
Это как раз для того, чтобы после операций обнулялось поле. Когда ввода разрешен, оно добавляет цифры в конец строки, а когда запрещен - пишет новую, тобишь очищает.

C++
1
op = false;
op нужно для цепочки. В зависимости от него потом при нажатии на = будет делаться то или иное действие.

Возьмите листик, карандашик и пройдите алгоритм вручную. Уверен, что тогда все станет на свои места. И это будет куда более понятно, чем если я сейчас это все равписывать. Листик с карандашиком вообще незаменимая порой вещь =))
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
27.04.2011, 10:46  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Это как раз для того, чтобы после операций обнулялось поле. Когда ввода разрешен, оно добавляет цифры в конец строки, а когда запрещен - пишет новую, тобишь очищает.

C++
1
op = false;
op нужно для цепочки. В зависимости от него потом при нажатии на = будет делаться то или иное действие.

Возьмите листик, карандашик и пройдите алгоритм вручную. Уверен, что тогда все станет на свои места. И это будет куда более понятно, чем если я сейчас это все равписывать. Листик с карандашиком вообще незаменимая порой вещь =))

а так сделал ! уменя всегда 2выазит .. 2+3=2
0
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
27.04.2011, 21:11
Я не знаю, почему у Вас не получается. Возможно, Вы что-то не так пишете. У меня работает. Вот мой проект, может найдете ошибку.
calc.rar
0
3 / 3 / 2
Регистрация: 15.03.2009
Сообщений: 347
27.04.2011, 23:18  [ТС]
Цитата Сообщение от DWand Посмотреть сообщение
Я не знаю, почему у Вас не получается. Возможно, Вы что-то не так пишете. У меня работает. Вот мой проект, может найдете ошибку.
Вложение 74641
C++
1
setNum(9);
с помощью этого можно сказать обнуляется texrBox1.. !
C++
1
 texrBox1->Text+="9";
а так не будет!.. вопрос как мне сделать что бы запятая выводилась?
setNum(,); так не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2011, 23:18
Помогаю со студенческими работами здесь

Калькулятор
Я вот решил побольше попрактиковаться и заделать инженерный калькуль. Собственно копия калькуля с Windows XP. Нашёл в инете чей-то код,...

Калькулятор
Только начинаю учить язык, до этого учил C++. Не пойму в чём ошибка в программе((( namespace ConsoleApplication1 { class...

Калькулятор
Создать калькулятор выполняющий + -*/ у меня + работает, а остальные функции нет, хотя делала так же, из-за чего это? using System; ...

Калькулятор
Не работают знаки -*/ выдает ошибку на присвоение значения sum1, но присвоение сделано по анологии того что выше присвоения и поэтому не...

Калькулятор
Вот моя реализация калькулятора , может кому понадобиться using System; using System.Collections.Generic; using...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru