Windows forms c возведение в степень

Возведение в степень C#, .NET 4.x Решение и ответ на вопрос 2280836
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
namespace СalculatorKoltman
{
    public partial class Form1 : Form
    {
        float a, b;
        int count;
        bool znak = true;
 
        private void calculate()
        {
            switch (count)
            {
                case 1:
                    b = a + float.Parse(labelNum.Text);
                    labelNum.Text = b.ToString();
                    break;
                case 2:
                    b = a - float.Parse(labelNum.Text);
                    labelNum.Text = b.ToString();
                    break;
                case 3:
                    b = a * float.Parse(labelNum.Text);
                    labelNum.Text = b.ToString();
                    break;
                case 4:
                    b = a / float.Parse(labelNum.Text);
                    labelNum.Text = b.ToString();
                    break;
 
                default:
                    break;
            }
 
        }
 
        public Form1()
        {
            InitializeComponent();
            labelNum.Text = "0";
            labelAdd.Text = null;
        }
 
        private void NullNumber()
        {
            if ((labelNum.Text.IndexOf("0") == 0))
                labelNum.Text = null;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "1";
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "2";
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "3";
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "4";
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "5";
        }
 
        private void button6_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "6";
        }
 
        private void button7_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "7";
        }
 
        private void button8_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "8";
        }
 
        private void button9_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "9";
        }
 
        private void button0_Click(object sender, EventArgs e)
        {
            NullNumber();
            labelNum.Text += "0";
        }
 
        private void buttonP_Click(object sender, EventArgs e)
        {
            if ((labelNum.Text.IndexOf(",") == -1))
                labelNum.Text += ",";
        }
 
        private void buttonC1_Click(object sender, EventArgs e)
        {
            int lenght = labelNum.Text.Length - 1;
            string text = labelNum.Text;
            labelNum.Text = null;
            for (int i = 0; i < lenght; i++)
            {
                labelNum.Text = labelNum.Text + text[i];
            }
        }
 
        private void buttonC2_Click(object sender, EventArgs e)
        {
            labelNum.Text = null;
            labelNum.Text = "0";
        }
 
        private void buttonC3_Click(object sender, EventArgs e)
        {
            labelNum.Text = labelAdd.Text = null;
            labelNum.Text = "0";
        }
 
        private void buttonPlus_Click(object sender, EventArgs e)
        {
            a = float.Parse(labelNum.Text);
            labelNum.Text = null;
            count = 1;
            labelAdd.Text = a.ToString() + " +";
            znak = true;
            labelNum.Text = "0";
        }
 
        private void buttonMinus_Click(object sender, EventArgs e)
        {
            a = float.Parse(labelNum.Text);
            labelNum.Text = null;
            count = 2;
            labelAdd.Text = a.ToString() + " -";
            znak = true;
            labelNum.Text = "0";
        }
 
        private void buttonMult_Click(object sender, EventArgs e)
        {
            a = float.Parse(labelNum.Text);
            labelNum.Text = null;
            count = 3;
            labelAdd.Text = a.ToString() + " *";
            znak = true;
            labelNum.Text = "0";
        }
 
        private void buttonDiv_Click(object sender, EventArgs e)
        {
            a = float.Parse(labelNum.Text);
            labelNum.Text = null;
            count = 4;
            labelAdd.Text = a.ToString() + " /";
            znak = true;
            labelNum.Text = "0";
        }
 
        private void buttonEq_Click(object sender, EventArgs e)
        {
            calculate();
            labelAdd.Text = "";
        }
 
        private void buttonPM_Click(object sender, EventArgs e)
        {
            if(znak==true)
            {
                labelNum.Text = "-" + labelNum.Text;
                znak = false;
            }
            else if (znak == false)
            {
                labelNum.Text = labelNum.Text.Replace("-", "");
                znak = true;
            }
        }
 
            private void Form1_Load(object sender, EventArgs e)
            {
 
            }
 
            private void labelAdd_Click(object sender, EventArgs e)
            {
                
            }
 
            private void labelNum_Click(object sender, EventArgs e)
            {
 
            }
 
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
 
            }
    }
}

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    In C#, Math.Pow() is a Math class method. This method is used to calculate a number raise to the power of some other number.

    Syntax:

    public static double Pow(double base, double power)
    

    Parameters:

    double base: It is a double-precision floating-point number which is to be raised to a power and type of this parameter is System.Double.

    double power: It is a double-precision floating-point number which specifies a power or exponent and type of this parameter is System.Double.

    Return Type: The function returns the number base raised to the power. The type of this method is System.Double

    Examples:

    Input  : base = 8, power =2 
    Output : 64
    
    Input  : base = 2.5, power =3
    Output : 15.625
    

    Program: To demonstrate the Math.Pow()

    using System;

    class GFG {

        static public void Main()

        {

            double pow_ab = Math.Pow(6, 2);

            Console.WriteLine(pow_ab);

            double pow_tt = Math.Pow(3.5, 3);

            Console.WriteLine(pow_tt);

            double pow_t = Math.Pow(202, 4);

            Console.WriteLine(pow_t);

        }

    }

    Output:

    36
    42.875
    1664966416
    

    Reference: https://msdn.microsoft.com/en-us/library/system.math.pow(v=vs.110).aspx

    Создадим программу, которая сможет возвести число в степень в консоли, используя метод Math.Pow.

    Итак, создаем проект, затем объявляем две переменные.
    Мы неоригинально назвали эти переменные a ии указали их типом данных double — 64-разрядный тип повышенной точности с плавающей точкой, более функциональный, чем целочисленный int или менее точный float, но и занимающий больше памяти. В принципе, можно использовать любой тип из перечисленных — всё упирается в ваши нужды и запросы.

    double a;

    double b;

    double c;

    Число с именем мы будем возводить в число с именем b, а в с запишем результаты. Можно обойтись только a и b, наращивая a, но мы оставим её нетронутой для того, чтобы вывести в конце в WriteLine. Скоро вы всё поймёте.
    Итак, для начала мы напишем доброжелательное сообщение для пользователя, который решит воспользоваться нашей программой:

    Console.WriteLine(«Вас приветствует программа возведения числа в степень»);

    Console.WriteLine(«Пожалуйста, введите число, которое вы хотите возвести в степень:»);

    При запуске программы эти слова сразу же появятся в консоли.
    Затем, по логике, пользователь вводит число для возведения в степень. Поэтому это число надо считать:

    a = Convert.ToDouble(Console.ReadLine());

    Мы конвертируем в тип double то, что написал нам наш пользователь.

    Затем мы снова к нему обращаемся, уже с просьбой ввести степень, и так же считываем то, что он написал нам:

    Console.WriteLine(«Спасибо, теперь введите степень, в которую хотите возвести число «+a+«:»);

    b = Convert.ToDouble(Console.ReadLine());

    Заметьте, что и как написано в скобках метода Console.WriteLine. То, что находится в кавычках, выводится просто как текст. А между ними среди плюсов мы написали переменную а. Таким образом на консоль выведется ещё и значение, записанное в этой переменной.
    Выглядеть это будет вот так:

    Исходник программы возведения числа в степень - vscode.ru

    Теперь настаёт момент выполнить саму операцию возведения в степень.

    Для этого у нас в C# есть специальный метод Math.Pow. 
    Синтаксис у него такой:

    То есть мы первое число в скобках возводим во второе число.

    Теперь нам остаётся лишь вывести полученный результат.
    Из-за него мы и не ввели переменную с, потому что вывод на консоль мы осуществили вот так:

    Console.WriteLine(«Готово! «+a+» в степени «+b+» равно «+c+«!»);

    Console.ReadLine();

    Визуально это выглядит вот так:

    Безымянный1

    Мы ввели переменную с для того, чтобы в конце можно было вывести всё: и то, что в начале вводил пользователь, и сам результат.

    Можно было и обойтись без введения третьей переменной, тогда вычисление выглядело бы вот так:

    Тогда и вывод пришлось бы переделать примерно под это:

    Console.WriteLine(«Готово! Результат равен «+a+«!»);

    Console.ReadLine();

    Тут уже всё зависит от желания и умения программиста.

    Вот и всё! Исходник программы находится ниже:

    Скачать исходник

    Для выполнения различных математических операций в библиотеке классов .NET предназначен класс Math. Он является статическим, поэтому все его методы также являются статическими.

  • Abs(double value): возвращает абсолютное значение для аргумента value

    double result = Math.Abs(-12.4); // 12.4
    
  • Acos(double value): возвращает арккосинус value. Параметр value должен иметь значение от -1 до 1

    double result = Math.Acos(1); // 0
    
  • Asin(double value): возвращает арксинус value. Параметр value должен иметь значение от -1 до 1

  • Atan(double value): возвращает арктангенс value

  • BigMul(int x, int y): возвращает произведение x * y в виде объекта long

    double result = Math.BigMul(100, 9340); // 934000
    
  • Ceiling(double value): возвращает наименьшее целое число с плавающей точкой, которое не меньше value

    double result = Math.Ceiling(2.34); // 3
    
  • Cos(double d): возвращает косинус угла d

  • Cosh(double d): возвращает гиперболический косинус угла d

  • DivRem(int a, int b, out int result): возвращает результат от деления a/b, а остаток помещается в параметр result

    int result;
    int div = Math.DivRem(14, 5, out result);
    //result = 4
    // div = 2
    
  • Exp(double d): возвращает основание натурального логарифма, возведенное в степень d

  • Floor(decimal d): возвращает наибольшее целое число, которое не больше d

    double result = Math.Floor(2.56); // 2
    
  • IEEERemainder(double a, double b): возвращает остаток от деления a на b

    double result = Math.IEEERemainder(26, 4); // 2 = 26-24
    
  • Log(double d): возвращает натуральный логарифм числа d

  • Log(double a, double newBase): возвращает логарифм числа a по основанию newBase

  • Log10(double d): возвращает десятичный логарифм числа d

  • Max(double a, double b): возвращает максимальное число из a и b

  • Min(double a, double b): возвращает минимальное число из a и b

  • Pow(double a, double b): возвращает число a, возведенное в степень b

  • Round(double d): возвращает число d, округленное до ближайшего целого числа

    double result1 = Math.Round(20.56); // 21
    double result2 = Math.Round(20.46); //20
    
  • Round(double a, int b): возвращает число a, округленное до определенного количества знаков после запятой, представленного параметром b

    double result1 = Math.Round(20.567, 2); // 20,57
    double result2 = Math.Round(20.463, 1); //20,5
    
  • Sign(double value): возвращает число 1, если число value положительное, и -1, если значение value отрицательное. Если value равно 0, то возвращает 0

    int result1 = Math.Sign(15); // 1
    int result2 = Math.Sign(-5); //-1
    
  • Sin(double value): возвращает синус угла value

  • Sinh(double value): возвращает гиперболический синус угла value

  • Sqrt(double value): возвращает квадратный корень числа value

    double result1 = Math.Sqrt(16); // 4
    
  • Tan(double value): возвращает тангенс угла value

  • Tanh(double value): возвращает гиперболический тангенс угла value

  • Truncate(double value): отбрасывает дробную часть числа value, возвращаяя лишь целое значние

    double result = Math.Truncate(16.89); // 16
    
  • Также класс Math определяет две константы: Math.E и Math.PI. Например, вычислим площадь круга:

    Калькулятор Windows Forms на языке C#

    Калькулятор Windows Forms на языке C#

    Простой калькулятор Windows Forms на C# Наш калькулятор основан на взаимодействии двух чисел, поэтому математические операции будут следующие: Сложение Вычитание Умножение Деление Возведение первого числа в степень второго Взятие корня первого числа степени второго числа. Итак, после того, как с графическим оформлением закончено, приступаем к самому коду. Для всех вышеописанных операций мы создадим отдельные функции. Функции – это, так сказать, подпрограммы в самой программе, выполняющие отдельные задачи. Они помогают сократить и облегчить код.

    Простой калькулятор Windows Forms на C#

    Наш калькулятор основан на взаимодействии двух чисел, поэтому математические операции будут следующие:

    Сложение

    Вычитание

    Умножение

    Деление

    Возведение первого числа в степень второго

    Взятие корня первого числа степени второго числа.

    Итак, после того, как с графическим оформлением закончено, приступаем к самому коду.

    Для всех вышеописанных операций мы создадим отдельные функции. Функции – это, так сказать, подпрограммы в самой программе, выполняющие отдельные задачи. Они помогают сократить и облегчить код.

    Функция сложения public  static  double  sum ( double  a ,  double  b )          {              return  a + b ;          } Для начала мы объявляем программе, что создаем функцию (пишем  public static ), затем определяем тип функции( double  – числовой тип повышенной точности с плавающей запятой, лучший вариант), после даём имя функции( sum ) и в скобках записываем то, что, так сказать, получает функция от программы(  double   a  и  double b  – первое и второе числа, которые мы запишем в первые два  TextBox’a ). Выражение  return  возвращает в функцию результат сложения  a  и  b . То есть наша функция получает два числа от пользователя, который введет их в форме и, при помощи  return’a , в неё же заносится результат вычисления.

    Функция сложения

    public static double sum ( double a , double b )

             {

                 return a + b ;

             }

    Для начала мы объявляем программе, что создаем функцию (пишем  public static ), затем определяем тип функции( double  – числовой тип повышенной точности с плавающей запятой, лучший вариант), после даём имя функции( sum ) и в скобках записываем то, что, так сказать, получает функция от программы(  double   a  и  double b  – первое и второе числа, которые мы запишем в первые два  TextBox’a ). Выражение  return  возвращает в функцию результат сложения  a  и  b . То есть наша функция получает два числа от пользователя, который введет их в форме и, при помощи  return’a , в неё же заносится результат вычисления.

    Функция вычитания public  static  double  razn ( double  a ,  double  b )          {              return  a - b ;          }

    Функция вычитания

    public static double razn ( double a , double b )

             {

                 return a — b ;

             }

    Функция умножения    public  static  double  umnog ( double  a ,  double  b )          {              return  a *  b ;          }

    Функция умножения

       public static double umnog ( double a , double b )

             {

                 return a * b ;

             }

    Функция деления    public  static  double  del ( double  a ,  double  b )          {              return  a / b ;          }

    Функция деления

       public static double del ( double a , double b )

             {

                 return a / b ;

             }

    Функция возведения в степень  public  static  double  step ( double  a ,  double  b )          {              return  Math . Pow ( a ,  b );          }

    Функция возведения в степень

    public static double step ( double a , double b )

             {

                 return Math . Pow ( a , b );

             }

    Функция извлечения корня    public static double koren ( double  a , double  b )          {              return  Math . Pow ( a, 1/b );          } Функции созданы, сталось лишь привязать их к кнопкам в форме. Дважды щёлкаем мышью в форме на первую кнопку. Нас переносит в часть кода, которая отвечает за событие, которое произойдет, когда пользователь кликнет на данную кнопку. В теле этого события мы пишем:

    Функция извлечения корня

       public static double koren ( double a , double b )

             {

                 return Math . Pow ( a, 1/b );

             }

    Функции созданы, сталось лишь привязать их к кнопкам в форме. Дважды щёлкаем мышью в форме на первую кнопку. Нас переносит в часть кода, которая отвечает за событие, которое произойдет, когда пользователь кликнет на данную кнопку. В теле этого события мы пишем:

    private void button1_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(sum(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          } Разбор кода начнём, как ни странно, с конца. Мы помним, что при объявлении функции мы писали вот такую часть кода:  sum(double a, double b) . То есть функция может получить только значения типа  double . Также мы помним, что эти значения мы получаем от пользователя, который, в свою очередь, вводит их в первый и второй TextBox’ы. Однако проблема в том, что значения из  TextBox’ов  воспринимаются программой как строки, то есть типом  string . Поэтому их надо конвертировать в нужный нам  double , что мы и делаем:  sum(Convert.ToDouble(textBox1.Text),Convert.ToDouble(textBox2.Text))

    private void button1_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(sum(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

    Разбор кода начнём, как ни странно, с конца. Мы помним, что при объявлении функции мы писали вот такую часть кода:  sum(double a, double b) . То есть функция может получить только значения типа  double . Также мы помним, что эти значения мы получаем от пользователя, который, в свою очередь, вводит их в первый и второй TextBox’ы. Однако проблема в том, что значения из  TextBox’ов  воспринимаются программой как строки, то есть типом  string . Поэтому их надо конвертировать в нужный нам  double , что мы и делаем:  sum(Convert.ToDouble(textBox1.Text),Convert.ToDouble(textBox2.Text))

    private void button2_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(razn(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          }

    private void button2_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(razn(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

             private void button3_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(umnog(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          }

             private void button3_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(umnog(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

    private void button4_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(del(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          }

    private void button4_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(del(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

    private void button5_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(step(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          }

    private void button5_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(step(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

    private void button6_Click(object sender, EventArgs e)          {              textBox3.Text = Convert.ToString(koren(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));          }

    private void button6_Click(object sender, EventArgs e)

             {

                 textBox3.Text = Convert.ToString(koren(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));

             }

    Усложненный калькулятор Здесь у нас 19 кнопок  Button , 1  Textbox  и ещё 1 пустой  Label  

    Усложненный калькулятор

    Здесь у нас 19 кнопок  Button , 1  Textbox  и ещё 1 пустой  Label  

    Создаём форму. Увеличим ширину  TextBox’a , используя MultiLine :

    Создаём форму. Увеличим ширину  TextBox’a , используя MultiLine :

    Также в Свойствах мы увеличили размер шрифта в  TextBox’e  и  Label’e  до 12 пт. Теперь делаем так, чтобы при нажатии на цифровые кнопки, в  TextBox’e  появлялась соответствующая цифра.

    Также в Свойствах мы увеличили размер шрифта в  TextBox’e  и  Label’e  до 12 пт.

    Теперь делаем так, чтобы при нажатии на цифровые кнопки, в  TextBox’e  появлялась соответствующая цифра.

    Для этого дважды кликаем на кнопке  “0”  и в открывшемся коде пишем private void button17_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 0;  }

    Для этого дважды кликаем на кнопке  “0”  и в открывшемся коде пишем

    private void button17_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 0;

    }

     private void button13_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 1;  }

    private void button13_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 1;

    }

     private void button14_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 2;  }

    private void button14_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 2;

    }

     private void button15_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 3;  }

    private void button15_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 3;

    }

     private void button9_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 4;  }

    private void button9_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 4;

    }

     private void button10_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 5;  }

    private void button10_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 5;

    }

     private void button11_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 6;  }

    private void button11_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 6;

    }

     private void button5_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 7;  }

    private void button5_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 7;

    }

     private void button6_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 8;  }

    private void button6_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 8;

    }

     private void button7_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text + 9;  }

    private void button7_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + 9;

    }

     private void button18_Click(object sender, EventArgs e)  {  textBox1.Text = textBox1.Text +

    private void button18_Click(object sender, EventArgs e)

    {

    textBox1.Text = textBox1.Text + «,»;

    }

    float a, b; int count; bool znak = true; Кнопки нажимаются, в  TextBox’e  отображаются нажатые цифры. Теперь надо научить программу производить с ними какие-либо операции. Как видно из формы, наш калькулятор сможет производить стандартные математические операции: сложение, вычитание, умножение и деление. Для начала мы создадим  в самом начале программы несколько переменных, которые нам для этого понадобятся:

    float a, b;

    int count;

    bool znak = true;

    Кнопки нажимаются, в  TextBox’e  отображаются нажатые цифры. Теперь надо научить программу производить с ними какие-либо операции. Как видно из формы, наш калькулятор сможет производить стандартные математические операции: сложение, вычитание, умножение и деление. Для начала мы создадим  в самом начале программы несколько переменных, которые нам для этого понадобятся:

    Кнопка «+» Первым двум переменным будут присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции. Тип  float  – это тип с плавающей точкой, позволяющий работать с десятичными дробями, что нам, безусловно, нужно при наличии кнопки  “.”  . Благодаря второй переменной мы будем давать программе указания, какую именно операцию производить с переменными, описанными выше. Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом  int . Последняя переменная  znak  нам понадобится для того, чтобы менять знаки у введённых чисел. Тип  bool  может иметь два значения –  ture  и  false . Мы представим, что если  znak имеет значение  true  в программе, то это означает, что у числа знак  + , если  false  – число отрицательное и перед собой имеет знак  - . Изначально в калькуляторе вбиваются положительные числа, поэтому мы сразу присвоили переменной значение  true . Далее мы дважды нажимаем на кнопку  “+” , обозначающую сложение, на форме и пишем следующий код:

    Кнопка «+»

    Первым двум переменным будут присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции. Тип  float  – это тип с плавающей точкой, позволяющий работать с десятичными дробями, что нам, безусловно, нужно при наличии кнопки  “.”  .

    Благодаря второй переменной мы будем давать программе указания, какую именно операцию производить с переменными, описанными выше. Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом  int .

    Последняя переменная  znak  нам понадобится для того, чтобы менять знаки у введённых чисел. Тип  bool  может иметь два значения –  ture  и  false . Мы представим, что если  znak имеет значение  true  в программе, то это означает, что у числа знак  + , если  false  – число отрицательное и перед собой имеет знак  . Изначально в калькуляторе вбиваются положительные числа, поэтому мы сразу присвоили переменной значение  true .

    Далее мы дважды нажимаем на кнопку  “+” , обозначающую сложение, на форме и пишем следующий код:

    Кнопка «-» В строке 3 мы присваиваем первой переменной  a  то, что будет написано в  TextBox’e  (а именно число, которое введёт пользователь перед тем, как нажать кнопку  “+” ). Затем  TextBox  очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной  a ) Переменной  count  присваивается число 1, которая потом укажет программе, что именно операцию сложения надо будет произвести с числами. Затем в  Label  записывается число из переменной  a  (то самое, которое изначально ввёл пользователь) и знак плюса. Выглядеть в форме это будет так, как описано ниже. Пользователь вводит какое-либо число:

    Кнопка «-»

    В строке 3 мы присваиваем первой переменной  a  то, что будет написано в  TextBox’e  (а именно число, которое введёт пользователь перед тем, как нажать кнопку  “+” ).

    Затем  TextBox  очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной  a )

    Переменной  count  присваивается число 1, которая потом укажет программе, что именно операцию сложения надо будет произвести с числами.

    Затем в  Label  записывается число из переменной  (то самое, которое изначально ввёл пользователь) и знак плюса. Выглядеть в форме это будет так, как описано ниже.

    Пользователь вводит какое-либо число:

    Кнопка «*»

    Кнопка «*»

    Кнопка «/» Разница лишь в значении переменной  count  и в том, какой знак добавляется в  Label’e . Далее нам понадобится создать функцию, которая будет применять нужные нам математические операции к числам. Назовём её  calculate . Но перед этим мы кликнем дважды на кнопку  “=”  на форме и в коде к ней мы запишем:

    Кнопка «/»

    Разница лишь в значении переменной  count  и в том, какой знак добавляется в  Label’e .

    Далее нам понадобится создать функцию, которая будет применять нужные нам математические операции к числам. Назовём её  calculate . Но перед этим мы кликнем дважды на кнопку  “=”  на форме и в коде к ней мы запишем:

    Кнопка «=» То есть, при нажатии пользователем на кнопку  “=” , как раз выполнится наша функция подсчёта  calculate , и, заодно, очистится Label , так как результат мы в будущем коде выведем в  TextBox . Теперь-таки создаём нашу функцию  calculate  и пишем следующий код:

    Кнопка «=»

    То есть, при нажатии пользователем на кнопку  “=” , как раз выполнится наша функция подсчёта  calculate , и, заодно, очистится Label , так как результат мы в будущем коде выведем в  TextBox .

    Теперь-таки создаём нашу функцию  calculate  и пишем следующий код:

    Здесь мы используем конструкцию  switch-case .

    Switch  – это оператор управления. Он может включать в себя несколько  case’овCase  – метки, от значения которых зависит, какие операции будут происходить.

    Строка  switch(count)  означает, что именно от значения  count  будет зависеть, какое действие будет происходить в коде  switch’a .

    Итак, если  count=1  (в коде  case 1: ), то произойдёт следующее:

    После того, как пользователь нажал  “+” , он, естественно, должен ввести второе слагаемое, что он и делает по стандартному сценарию, а затем нажать кнопку  “=”  (и в ней, как мы помним, как раз выполнится наша функция).

    Как только кнопка  “=”  будет нажата, программа сложит число из переменной  a  с тем вторым слагаемым, которое записал пользователь в  TextBox , и запишет результат в переменную  b  (строка 6 кода функции). В строке 7 программа выведет в  TextBox результат сложения – переменную  b .

    Оператор  break  (строка 8) завершает исполнение кода  switch  при выполнении кода метки case 1 , так как больше нам в нём делать нечего.

    Точно так же строится алгоритм при  case 2case 3  и  case 4  с той разницей, что в них происходит не сложение, а вычитание, умножение и деление соответственно.

    Оператор  default  срабатывает, если вдруг что-то пойдёт не по плану и  count   примет какое-либо иное значение, не описанное в  switch . Тогда срабатывает лишь оператор break .

    Львиная доля программы готова. Нам надо лишь написать код для трёх оставшихся нетронутыми до этого время кнопок.

    Дважды жмём в форме на кнопку  “С” . Она будет очищать все записи из  TextBox’a  и Label’a .

    Кнопка «С»

    Кнопка «С»

    Кнопка «  »

    Кнопка « »


    Кнопка «+/-»

    Кнопка «+/-»

    В данном уроке мы разработаем с вами калькулятор на C#. Программа будет написана согласно принципам объектно-ориентированного программирования (ООП): будет определен интерфейс для методов, реализующих функционал клавиш математических операций калькулятора, от интерфейса выполним наследование и напишем соответствующий класс и методы. Калькулятор, помимо базовых операций сложения, вычитания, умножения и деления, будет предоставлять возможность выполнять операции: извлечения квадратного корня, извлечения корня произвольной степени, возведения в квадрат, возведения в произвольную степень, вычисления факториала, а также работу с регистром памяти (MRC).

    Создание интерфейса.

    Создадим в Visual Studio проект на Visual C# Windows Forms. Добавим на форму элемент GroupBox, в который поместим Label. В свойстве Dock, элемента Label, необходимо указать Right, чтобы Label был привязан к правому краю. Связка данных элементов управления будет реализовывать дисплей калькулятора.

    Калькулятор также содержит кнопки. Всего их 28 штук.

    Программирование калькулятора на C#Реализация интерфейса класса.

    Поскольку наш калькулятор будет написан в рамках парадигмы ООП (объектно-ориентированного программирования), то начнем кодирование с описания структуры интерфейса для класса, реализующего математические операции программы.

    Добавим в проект класс InterfaceCalc.cs и определим в созданном файле интерфейс InterfaceCalc.

    //интерфейс

    public interface InterfaceCalc

    {

    //а — первый аргумент, b — второй

    void Put_A(double a); //сохранить а

    void Clear_A();

    double Multiplication(double b);

    double Division(double b);

    double Sum(double b);

    double Subtraction(double b); //вычитание

    double SqrtX(double b);

    double DegreeY(double b);

    double Sqrt();

    double Square();

    double Factorial();

    double MemoryShow(); //показать содержимое регистра памяти

    void Memory_Clear(); //стереть содержимое регистра памяти

    //* / + — к регистру памяти

    void M_Multiplication(double b);

    void M_Division(double b);

    void M_Sum(double b);

    void M_Subtraction(double b); //вычитание

    }

    Для выполнения математических операций понадобится два операнда: a и b (например, a + b). Операнд a придется хранить в памяти калькулятора, пока пользователь будет вводить второй аргумент операции. Для сохранения числа a объявим прототип метода void Put_A(double a), для очистки — void Clear_A(). Для умножения, деления, сложения и вычитания чисел a и b соответственно понадобятся методы: double Multiplication(double b), double Division(double b), double Sum(double b), double Subtraction(double b). Вычисление корня степени b из a: double SqrtX(double b). Возведение числа a в степень b: double DegreeY(double b). Вычисление квадратного корня: double Sqrt(). Возведение числа a в квадрат: double Square(). Вычисление факториала a!: double Factorial(). Теперь объявления методов для работы с регистром памяти (MRC) калькулятора. Показать содержимое памяти и очистить его: double MemoryShow(), void Memory_Clear(). M×, M÷, M+ и M- к регистру соответственно: void M_Multiplication(double b), void M_Division(double b), void M_Sum(double b), void M_Subtraction(double b).

    Создание класса, реализующего интерфейс InterfaceCalc

    Теперь добавим в калькулятор класс, который будет реализовывать написанный ранее интерфейс. Для этого в проекте создадим класс Calc : InterfaceCalc. Как вы видите, здесь используется наследование (оператор «двоеточие»). В данном классе напишем реализацию всех методов, требуемых спецификацией нашего интерфейса.

    public class Calc : InterfaceCalc

    {

    private double a = 0;

    private double memory = 0;

    public void Put_A(double a)

    {

    this.a = a;

    }

    public void Clear_A()

    {

    a = 0;

    }

    public double Multiplication(double b)

    {

    return a * b;

    }

    public double Division(double b)

    {

    return a / b;

    }

    public double Sum(double b)

    {

    return a + b;

    }

    public double Subtraction(double b) //вычитание

    {

    return a — b;

    }

    public double SqrtX(double b)

    {

    return Math.Pow(a, 1 / b);

    }

    public double DegreeY(double b)

    {

    return Math.Pow(a, b);

    }

    public double Sqrt()

    {

    return Math.Sqrt(a);

    }

    public double Square()

    {

    return Math.Pow(a, 2.0);

    }

    public double Factorial()

    {

    double f = 1;

    for (int i = 1; i <= a; i++)

    f *= (double)i;

    return f;

    }

    //показать содержимое регистра мамяти

    public double MemoryShow()

    {

    return memory;

    }

    //стереть содержимое регистра мамяти

    public void Memory_Clear()

    {

    memory = 0.0;

    }

    //* / + — к регистру памяти

    public void M_Multiplication(double b)

    {

    memory *= b;

    }

    public void M_Division(double b)

    {

    memory /= b;

    }

    public void M_Sum(double b)

    {

    memory += b;

    }

    public void M_Subtraction(double b)

    {

    memory -= b;

    }

    }

    Реализация работы калькулятора

    Перейдем к написанию кода в классе Form1.

    Объявим два поля:

    CalcC;

    int k;

    Это классовая переменная C для класса Calc и целое число k. С помощью k будем считать количество нажатий кнопки MRC, чтобы при первом нажатии выводить значение регистра памяти на экран, а при последующем повторном — стирать значение регистра.

    Далее. Нам понадобится ряд методов, которые будут обеспечивать правильное функционирование калькулятора.

    Дисплеем в нашем калькуляторе является Label. Его содержимое — это строка текста. Нажатие на цифровые клавиши — это конкатенация текущего значения строки с символом клавиши. Необходимо исключить дублирование нулей в левой части строки (это делают 2-й и 3-й if в коде ниже), а также не допустить написание цифр, если в Label находится знак «бесконечность» (он появляется, например, при делении на ноль; 1-й if). Для решения данных проблем напишем метод CorrectNumber():

    privatevoidCorrectNumber(){//если есть знак «бесконечность» — не даёт писать цифры после негоif(labelNumber.Text.IndexOf(«∞»)!=-1)labelNumber.Text=labelNumber.Text.Substring(0,labelNumber.Text.Length-1);//ситуация: слева ноль, а после него НЕ запятая, тогда ноль можно удалитьif(labelNumber.Text[0]==’0’&& (labelNumber.Text.IndexOf(«,») != 1)) labelNumber.Text = labelNumber.Text.Remove(0, 1);//аналогично предыдущему, только для отрицательного числаif(labelNumber.Text[0]==’-‘)if(labelNumber.Text[1]==’0’&& (labelNumber.Text.IndexOf(«,») != 2)) labelNumber.Text = labelNumber.Text.Remove(1, 1);}

    Еще необходим метод, проверяющий: не нажата ли какая-нибудь кнопка калькулятора из математических операций, требующих два операнда. Данная проверка необходима для недопущения нажатия других мат. операций, если какая-либо уже нажата. Код метода CanPress():

    privateboolCanPress(){if(!buttonMult.Enabled)returnfalse;if(!buttonDiv.Enabled)returnfalse;if(!buttonPlus.Enabled)returnfalse;if(!buttonMinus.Enabled)returnfalse;if(!buttonSqrtX.Enabled)returnfalse;if(!buttonDegreeY.Enabled)returnfalse;returntrue;}

    Также, напишем вспомогательный метод FreeButtons(), который снимает нажатия со всех кнопок математических операций калькулятора, требующих два операнда (умножение, деление, сложение, вычитание, вычисление корня произвольной степени и возведение числа в произвольную степень):

    privatevoidFreeButtons(){buttonMult.Enabled=true;buttonDiv.Enabled=true;buttonPlus.Enabled=true;buttonMinus.Enabled=true;buttonSqrtX.Enabled=true;buttonDegreeY.Enabled=true;}

    Со вспомогательными методами закончили. Идем дальше.

    В конструкторе Form1 создадим экземпляр класса Calc, а также в «дисплей» калькулятора занесем значение ноль.

    publicForm1(){InitializeComponent();C=newCalc();labelNumber.Text=»0″;}

    Теперь перейдем к кодированию обработчиков нажатий кнопок калькулятора. Кнопка «Очистка» (CE):

    privatevoidbuttonClear_Click(objectsender,EventArgse){labelNumber.Text=»0″;C.Clear_A();FreeButtons();k=0;}

    В «дисплей» записывается ноль, переменная a стирается, нажатия с кнопок математических операций снимаются и k обнуляется.

    Кнопка изменения знака у числа «+/-«:

    privatevoidbuttonChangeSign_Click(objectsender,EventArgse){if(labelNumber.Text[0]==’-‘)labelNumber.Text=labelNumber.Text.Remove(0,1);elselabelNumber.Text=»-«+labelNumber.Text;}

    Кнопка «запятая» (будет добавлена, если ее еще нет и на «дисплее» нет знака бесконечность):

    privatevoidbuttonPoint_Click(objectsender,EventArgse){if((labelNumber.Text.IndexOf(«,»)==-1)&& (labelNumber.Text.IndexOf(«∞») == -1)) labelNumber.Text += «,»;}

    Теперь цифровые клавиши 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:

    privatevoidbutton0_Click(objectsender,EventArgse){labelNumber.Text+=»0″;CorrectNumber();}privatevoidbutton1_Click(objectsender,EventArgse){labelNumber.Text+=»1″;CorrectNumber();}privatevoidbutton2_Click(objectsender,EventArgse){labelNumber.Text+=»2″;CorrectNumber();}privatevoidbutton3_Click(objectsender,EventArgse){labelNumber.Text+=»3″;CorrectNumber();}privatevoidbutton4_Click(objectsender,EventArgse){labelNumber.Text+=»4″;CorrectNumber();}privatevoidbutton5_Click(objectsender,EventArgse){labelNumber.Text+=»5″;CorrectNumber();}privatevoidbutton6_Click(objectsender,EventArgse){labelNumber.Text+=»6″;CorrectNumber();}privatevoidbutton7_Click(objectsender,EventArgse){labelNumber.Text+=»7″;CorrectNumber();}privatevoidbutton8_Click(objectsender,EventArgse){labelNumber.Text+=»8″;CorrectNumber();}privatevoidbutton9_Click(objectsender,EventArgse){labelNumber.Text+=»9″;CorrectNumber();}

    Кнопка «Равно»:

    private void buttonCalc_Click(object sender, EventArgs e)

    {

    if (!buttonMult.Enabled)

    labelNumber.Text = C.Multiplication(Convert.ToDouble(labelNumber.Text)).ToString();

    if (!buttonDiv.Enabled)

    labelNumber.Text = C.Division(Convert.ToDouble(labelNumber.Text)).ToString();

    if (!buttonPlus.Enabled)

    labelNumber.Text = C.Sum(Convert.ToDouble(labelNumber.Text)).ToString();

    if (!buttonMinus.Enabled)

    labelNumber.Text = C.Subtraction(Convert.ToDouble(labelNumber.Text)).ToString();

    if (!buttonSqrtX.Enabled)

    labelNumber.Text = C.SqrtX(Convert.ToDouble(labelNumber.Text)).ToString();

    if (!buttonDegreeY.Enabled)

    labelNumber.Text = C.DegreeY(Convert.ToDouble(labelNumber.Text)).ToString();

    C.Clear_A();

    FreeButtons();

    k = 0;

    }

    В зависимости от того, какая из кнопок математических операций нажата, будет вызван соответствующий метод из класса Calc, вычисляющий данную функцию, и результат выведется в Label.

    Далее кнопки математических операций. Сработают только в том случае, если другие в данный момент не нажаты (CanPress() вернет true):

    //кнопка УмножениеprivatevoidbuttonMult_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonMult.Enabled=false;labelNumber.Text=»0″;}}//кнопка ДелениеprivatevoidbuttonDiv_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonDiv.Enabled=false;labelNumber.Text=»0″;}}//кнопка СложениеprivatevoidbuttonPlus_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonPlus.Enabled=false;labelNumber.Text=»0″;}}//кнопка ВычитаниеprivatevoidbuttonMinus_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonMinus.Enabled=false;labelNumber.Text=»0″;}}//кнопка Корень произвольной степениprivatevoidbuttonSqrtX_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonSqrtX.Enabled=false;labelNumber.Text=»0″;}}//кнопка Возведение в произвольную степеньprivatevoidbuttonDegreeY_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));buttonDegreeY.Enabled=false;labelNumber.Text=»0″;}}//кнопка Корень квадратныйprivatevoidbuttonSqrt_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));labelNumber.Text=C.Sqrt().ToString();C.Clear_A();FreeButtons();}}//кнопка Квадрат числаprivatevoidbuttonSquare_Click(objectsender,EventArgse){if(CanPress()){C.Put_A(Convert.ToDouble(labelNumber.Text));labelNumber.Text=C.Square().ToString();C.Clear_A();FreeButtons();}}//кнопка ФакториалprivatevoidbuttonFactorial_Click(objectsender,EventArgse){if(CanPress()){if((Convert.ToDouble(labelNumber.Text)==(int)(Convert.ToDouble(labelNumber.Text)))&& ((Convert.ToDouble(labelNumber.Text) >= 0.0))) { C.Put_A(Convert.ToDouble(labelNumber.Text));labelNumber.Text=C.Factorial().ToString();C.Clear_A();FreeButtons();}elseMessageBox.Show(«Число должно быть >= 0 и целым!»);}}

    Калькулятор вычислит факториал только в том случае, если текущее введенное число целое и больше, либо равно нулю.

    Кнопки математических операций над регистром памяти (MRC):

    //кнопка М+privatevoidbuttonMPlus_Click(objectsender,EventArgse){C.M_Sum(Convert.ToDouble(labelNumber.Text));}//кнопка М-privatevoidbuttonMMinus_Click(objectsender,EventArgse){C.M_Subtraction(Convert.ToDouble(labelNumber.Text));}//кнопка М*privatevoidbuttonMMult_Click(objectsender,EventArgse){C.M_Multiplication(Convert.ToDouble(labelNumber.Text));}//кнопка М/privatevoidbuttonMDiv_Click(objectsender,EventArgse){C.M_Division(Convert.ToDouble(labelNumber.Text));}

    И последняя кнопка — «MRC». Она показывает содержимое регистра памяти на экран, а при повторном нажатии стирает его:

    privatevoidbuttonMRC_Click(objectsender,EventArgse){if(CanPress()){k++;if(k==1)labelNumber.Text=C.MemoryShow().ToString();if(k==2){C.Memory_Clear();labelNumber.Text=»0″;k=0;}}}

    На этом написание калькулятора на C# закончено. Спасибо за прочтение статьи!

    Понравилась статья? Поделить с друзьями:
  • Windows forms c visual studio учебник
  • Windows forms c visual studio 2019 уроки
  • Windows forms c visual studio 2010 скачать
  • Windows forms c string to int
  • Windows forms bitmap как указать путь к файлу