Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57

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

13.02.2019, 14:42. Показов 2668. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно дополнить созданный калькулятор возможностью считать двоичные числа и переводить их из десятичной системы двоичную и обратно
Пример: записываем 45, нажимаем на Bin, он переводит в двоичное число, а потом остальные цифры, кроме 1 и 0, убираются, и дальше он может считать (прибавлять и т.д.), а в конце, если пользователь хочет, при нажатии кнопки Dec, переводить результат обратно в десятичное число.

Вот сама программа калькулятора, которую я сделал: Lab3(Calculator).rar

Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lab3_Calculator_
{
    public partial class Calc : Form
    {
        public Calc()
        {
            InitializeComponent();
        }
 
        float a, b; //Значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции
        int count; //Мы будем давать программе указания, какую именно операцию производить с переменными
        bool znak = true; //Понадобится для того, чтобы менять знаки у введённых чисел. Изначально в калькуляторе вбиваются положительные числа, поэтому присваиваем переменной значение true
                          //true = +, false = -
        private void btn1_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 1;
        }
 
        private void btn2_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 2;
        }
 
        private void btn3_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 3;
        }
 
        private void btn4_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 4;
        }
 
        private void btn5_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 5;
        }
 
        private void btn6_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 6;
        }
 
        private void btn7_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 7;
        }
 
        private void btn8_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 8;
        }
 
        private void btn9_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 9;
        }
 
        private void btn10_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + 0;
        }
 
        private void btnpoint_Click(object sender, EventArgs e)
        {
            txtoutput.Text = txtoutput.Text + ".";
        }
 
        private void btnplus_Click(object sender, EventArgs e)
        {
            a = float.Parse(txtoutput.Text); //Присваиваем первой переменной a то, что будет написано в txtoutput (а именно число, которое введёт пользователь перед тем, как нажать кнопку “+”)
            txtoutput.Clear(); //txtoutput очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной a)
            count = 1; //Переменной count присваивается число 1, эта переменная потом укажет программе, что именно операцию сложения надо будет произвести с числами
            label1.Text = a.ToString() + "+"; //В Label записывается число из переменной a (то самое, которое изначально ввёл пользователь) и знак плюса
            znak = true; /*мы присваиваем значение true, когда хотим сделать введённое число отрицательным, если оно положительно,
                           а значение false, когда хотим сделать число положительным, если оно отрицательное */
        }
 
        private void btnminus_Click(object sender, EventArgs e)
        {
            a = float.Parse(txtoutput.Text);
            txtoutput.Clear();
            count = 1;
            label1.Text = a.ToString() + "-";
            znak = true;
        }
 
        private void btnmult_Click(object sender, EventArgs e)
        {
            a = float.Parse(txtoutput.Text);
            txtoutput.Clear();
            count = 1;
            label1.Text = a.ToString() + "*";
            znak = true;
        }
 
        private void btndiv_Click(object sender, EventArgs e)
        {
            a = float.Parse(txtoutput.Text);
            txtoutput.Clear();
            count = 1;
            label1.Text = a.ToString() + "/";
            znak = true;
        }
 
        private void btneq_Click(object sender, EventArgs e)
        {
            calculate(); //Функция, которая будет применять нужные математические операции
            label1.Text = ""; //Очищается label
        }
        private void calculate()
        {
            switch(count) /*Switch – это оператор управления. Он может включать в себя несколько case’ов. Case – метки, от значения которых зависит, какие операции будут происходить.
                            Строка switch(count) означает, что именно от значения count будет зависеть, какое действие будет происходить в коде switch’a */
                           
            {
                case 1:
                    b = a + float.Parse(txtoutput.Text); /*Как только кнопка “=” будет нажата, программа сложит число из переменной a с тем вторым слагаемым, которое записал пользователь в txtoutput,
                                                           и запишет результат в переменную b */
                    txtoutput.Text = b.ToString(); //программа выведет в txtoutput результат сложения – переменную b
                    break; //Оператор break завершает исполнение кода switch при выполнении кода метки case 1
                case 2:
                    b = a - float.Parse(txtoutput.Text);
                    txtoutput.Text = b.ToString();
                    break;
                case 3:
                    b = a * float.Parse(txtoutput.Text);
                    txtoutput.Text = b.ToString();
                    break;
                case 4:
                    b = a / float.Parse(txtoutput.Text);
                    txtoutput.Text = b.ToString();
                    break;
 
                default: //Оператор default срабатывает, если вдруг что-то пойдёт не по плану и count  примет какое-либо иное значение, не описанное в switch. Тогда срабатывает лишь оператор break
                    break;
            }
 
        }
 
        private void btnc_Click(object sender, EventArgs e)
        {
            txtoutput.Text = ""; //Очищает все записи, при нажатии кнопки C
            label1.Text = "";
        }
 
        private void btnChangesign_Click(object sender, EventArgs e)
        {
            if (znak == true) //Если мы нажмём на кнопку первый раз, то в TextBox’e перед числом появится знак “-“, а переменной znak будет присвоено  значение false.
            {
                txtoutput.Text = "-" + txtoutput.Text;
                znak = false;
            }
            else if (znak == false) //Если второй раз нажать на данную кнопку, то, так как znak у нас false, произойдёт второе условие
            {
                txtoutput.Text = txtoutput.Text.Replace("-", ""); /*заменяет какой-либо кусок строки на другой. В скобках после метода вначале пишется, что будет заменено в строке,
                                                                    а после запятой, то, на что заменять*/
                znak = true;
            }
        }
 
        private void binbtn_CheckedChanged(object sender, EventArgs e)
        {
            int i = Convert.ToInt32(txtoutput.Text); //Здесь мы считываем и конвертируем в числовой целочисленный формат строку в txtoutput
            txtoutput.Text = Convert.ToString(i, 2); //Конвертируем значение переменной i в двоичную систему счисления, результат помещаем в txtoutput
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.02.2019, 14:42
Ответы с готовыми решениями:

Как переводить числа из двоичной системы в десятичную и из десятичной в двоичную
Прошу объяснить мне как переводить числа из двоичной системы в десятичную и из десятичной в двоичную. И как это делается в паскале?

Переводить число из десятичной системы счисления в двоичную
Разработать итерационный вариант программы в императивном стиле для решения предложенной задачи. В теле функций можно использовать только...

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

8
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
13.02.2019, 18:04
Цитата Сообщение от Deucal1on Посмотреть сообщение
записываем 45, нажимаем на Bin, он переводит в двоичное число
Функции конвертации:
Кликните здесь для просмотра всего текста
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
        /// <summary>
        /// Переводит целое число в двоичный формат 
        /// </summary>
        private string IntToBinaryString(int i)
        {
            StringBuilder sb = new StringBuilder();
 
            while (i > 0)
            {
                sb.Insert(0, i & 1);
                i = i >> 1;
            }
 
            return sb.ToString();
        }
 
        /// <summary>
        /// Переводит строку двоичного формата в целое число
        /// </summary>
        private int BinaryStringToInt(string s)
        {
            int v = 0;
            for (int i = 0; i < s.Length; i++)
            {
                int curr = s[i] - '0';
                v = (v << 1) + curr;
            }
 
            return v;
        }


Цитата Сообщение от Deucal1on Посмотреть сообщение
а потом остальные цифры, кроме 1 и 0, убираются
Тут не очень понял что нужно убирать...

Цитата Сообщение от Deucal1on Посмотреть сообщение
а в конце, если пользователь хочет, при нажатии кнопки Dec, переводить результат обратно в десятичное число
Проще всего считать в обычном (десятичном) формате, а двоичный формат только отображать при необходимости. Преобразовывать же двоичную строку в число имеет смысл только если предусматривается возможность ввода аргументов в двоичном формате
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57
13.02.2019, 18:46  [ТС]
Чтобы в шаблона калькулятор (формы) блокировались все цифры, кроме 0 и 1

Добавлено через 3 минуты
Мне просто это нужно именно под кнопку забить, у меня, вроде, получилось, сделать, чтобы число переводилось в двоичный код, но вот обратно я не знаю, как сделать. То есть не просто код, а именно код кнопки, как у меня в последних строках для binbtn
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57
13.02.2019, 18:49  [ТС]
Вот сам шаблон
Миниатюры
Дополнить калькулятор возможностью считать двоичные числа и переводить из десятичной системы двоичную и обратно  
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57
13.02.2019, 19:20  [ТС]
Так да, в этом и суть, чтобы можно было и двоичные числа вводить туда и сразу их считать
0
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
13.02.2019, 19:56
Цитата Сообщение от Deucal1on Посмотреть сообщение
Чтобы в шаблона калькулятор (формы) блокировались все цифры, кроме 0 и 1
Ну так устанавливайте при переключении на Bin все ненужные кнопки в Enable=false, а на Dec в true.

Цитата Сообщение от Deucal1on Посмотреть сообщение
но вот обратно я не знаю
я же написал код для конвертации и туда и обратно...

Цитата Сообщение от Deucal1on Посмотреть сообщение
То есть не просто код, а именно код кнопки
Так и в чем проблема? Вызывайте в обработчике нажатия кнопки нужную функцию.

Цитата Сообщение от Deucal1on Посмотреть сообщение
суть, чтобы можно было и двоичные числа вводить туда и сразу их считать
Тогда нужно еще писать функции для двоичной арифметики. Проще в 10-ю сс переконвертировать, если, конечно, в задании явно не указано, что нужно считать в двоичной...
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57
13.02.2019, 20:05  [ТС]
Я очень плохо разбираюсь в C# и поэтому плохо понимаю все эти объяснения. Можно это как-то объяснять по шаблону того, что у меня уже есть. А то вот совсем все туго у меня с этим. У меня просто нет четкого задания. Преподаватель попросил дополнить и своими словами мне сказал, что нужно еще сделать.
0
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
13.02.2019, 20:19
Цитата Сообщение от Deucal1on Посмотреть сообщение
Я очень плохо разбираюсь в C# и поэтому плохо понимаю все эти объяснения.
Может тогда имеет смысл, для начала, какой-нибудь учебник почитать, чтобы знать хотя бы основы? С таким подходом написать что-либо более менее серьезное будет, мягко говоря, проблематично...

Цитата Сообщение от Deucal1on Посмотреть сообщение
Можно это как-то объяснять по шаблону того, что у меня уже есть.
У кнопок (и вообще у всех контролов) есть свойство Enabled, которое отвечает за доступность этой кнопки (т.е. можно ли на нее нажать). Вот при выборе Bin нужно для всех ненужных кнопок установить это свойство в false. Тогда эти кнопки будут неактивны.

Также у кнопок есть обработчики событий. Один из таких обработчиков - обработчик нажатия на эту кнопку. В нем можно написать независимый код, а можно вызвать какую-либо функцию. Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        // Функция
        private int Sum(int a, int b)
        {
            return a + b;
        }
        //Обработчик
        private void button1_Click(object sender, EventArgs e)
        {
            int a = 1, b = 2;
            //Вызываем функцию в обработчике
            int c = Sum(a, b);
        }
Цитата Сообщение от Deucal1on Посмотреть сообщение
У меня просто нет четкого задания. Преподаватель попросил дополнить и своими словами мне сказал, что нужно еще сделать.
Тогда, учитывая Ваш уровень знания языка, я бы не советовал заморачиваться с бинарной арифметикой, а считать в десятичной системе, предварительно конвертируя бинарные значения
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 57
13.02.2019, 22:27  [ТС]
Дело в том, что, если ты пытаешься сделать только лабы, то для этого учить язык, это уж слишком времени много займет.
Вот и мне бы желательно, что бы действие было в виде обработчика, а то еще функцию не правильно перенесу в программу, и в итоге ничего не будет работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2019, 22:27
Помогаю со студенческими работами здесь

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

Перевод чисел из десятичной системы в двоичную, и обратно
Студент, только начал учебу. Сильно не ругаетесь, а если не можете - то, лучше пройдите мимо. По заданию препода. Использовать этот код,...

Перевод из десятичной системы в двоичную и обратно из двоичной в десятичную
uses crt; var m:arrayof integer; n:longint; i,k:integer; begin clrscr; write('-&gt; '); readln(n); k := 0;

Перевести число из десятичной системы счисления в двоичную и обратно
Перевести число из десятичной СС в двоичную, отсортировать двоичное число по убыванию(сначала единицы потом нули), потом обратно в...

Перевести целые числа из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы
Помогите пожалуйста Перевести целые числа из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы: а) 856;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru