Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
140 / 136 / 20
Регистрация: 05.08.2021
Сообщений: 634

Оцените калькулятор с GUI

25.06.2025, 11:50. Показов 4343. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотя бы калькулятор с GUI получился без нареканий? Всё ж обратная польская нотация есть да и дизайн не совсем деревенский
PHP/HTML
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        body {
            background-color: lightgrey;
        }
        #form {
            text-align: left;
            width : 180px;
            height: 100px;
            margin-bottom : 5px;
            font-family: Verdana;
            font-weight: bold;
            resize: none;
        }
        .butns {
            border-radius:100px;
            color: darkgreen;
            font-size: 20px;
            width: 60px;
            height: 35px;
            background-color: antiquewhite;
            background: -moz-linear-gradient(#e0f0f4, #56d1ed, #00bee8, #00bbd6);
            background: -webkit-gradient(linear, 0 0, 0 100%, from(#e0f0f4), to(#00bbd6), color-stop(0.72, #00bee8));
            color: #ffe;
        }
        .butns2 {
            border-radius:100px;
            color: red;
            font-size: 20px;
            width: 60px;
            height: 35px;
            background-color: antiquewhite;
            background: -moz-linear-gradient(#e0f0f4, #56d1ed, #00bee8, #00bbd6);
            background: -webkit-gradient(linear, 0 0, 0 100%, from(#e0f0f4), to(#00bbd6), color-stop(0.72, #00bee8));
            color: #ffe;
        }
        .butns3 {
            border-radius:100px;
            color: red;
            font-size: 20px;
            width: 188px;
            height: 35px;
            background-color: antiquewhite;
            background: -moz-linear-gradient(#e0f0f4, #56d1ed, #00bee8, #00bbd6);
            background: -webkit-gradient(linear, 0 0, 0 100%, from(#e0f0f4), to(#00bbd6), color-stop(0.72, #00bee8));
            color: #ffe;
        }
        #out {
            font-size: 20px;
            color: blue;
            font-family: Verdana;
        }
        #calc {
            padding: 3px;
            margin-left: 10px;
            height: 395px;
            width: 188px;
            background-color: #4bb3e2;
        }
    </style>
</head>
<body>
<div id="calc">
    <form>
        <textarea rows="10" cols="25" id="form" readonly>0</textarea>
    </form>
    <input type="button" name="but" value="1" class="butns">
    <input type="button" name="but" value="2" class="butns">
    <input type="button" name="but" value="3" class="butns"><br>
    <input type="button" name="but" value="4" class="butns">
    <input type="button" name="but" value="5" class="butns">
    <input type="button" name="but" value="6" class="butns"><br>
    <input type="button" name="but" value="7" class="butns">
    <input type="button" name="but" value="8" class="butns">
    <input type="button" name="but" value="9" class="butns"><br>
    <input type="button" name="but" value="0" class="butns">
    <input type="button" name="but" value="+" class="butns2">
    <input type="button" name="but" value="-" class="butns2"><br>
    <input type="button" name="but" value="*" class="butns2">
    <input type="button" name="but" value="/" class="butns2">
    <input type="button" id="ravno" value="=" class="butns2"><br>
    <input type="button" name="but" value="(" class="butns2">
    <input type="button" name="but" value=")" class="butns2">
    <input type="button" name="but" id="dot" value="." class="butns2"><br>
    <input type="button" id="clr" value="CLEAR" class="butns3"><br>
    <input type="button" id="bks" value="BACKSPACE" class="butns3"><br>
</div>
<script>
    var form = document.getElementById('form');
    var but = document.getElementsByName('but');
    var str = '';
    function solve() {
        var s = form.value;
        // разделяем на числа и знаки
        var ss = s.split('');
        for (var i = 0; i < ss.length - 1; i++) {
            if (   (!isNaN(ss[i]) && (isNaN(ss[i + 1]) && ss[i + 1] != '.')) || ((isNaN(ss[i]) && ss[i] != '.' ) && !isNaN(ss[i + 1])  ))     {
                ss.splice(i + 1,0,' ');
                i++;
            }
        }
        sss = ss.join('').split(' ');
        for (var i = 0; i < sss.length; i++) {
            if (isNaN(sss[i])){
                t = sss[i].split('');
                sss[i] = t;
            }
        }
        sss = sss.flat();
        for (var i = 0; i < sss.length; i++) {
            if(!isNaN(sss[i])) {sss[i] = parseFloat(sss[i])}
        }
        // отрицательные
        if (sss[0] == '-'){
            let changeFirstABS = -sss[1];
            sss[1] = changeFirstABS;
            sss.splice(0,1);
        }
        for (var i = 0; i < sss.length; i++) {
            if(!isNaN(sss[i]) && sss[i - 1] == '-' && isNaN(sss[i - 2])){
                t = -sss[i];
                sss[i] = t;
                sss.splice(i - 1,1);
            }
        }
        // отрицательные
        console.log(sss);
        // из строки получили массив положительных и отрицательных чисел, скобок и знаков
        // теперь переводим его из инфиксной записи в постфиксную
        var s = sss;
        function seek(stack) {
            return stack[stack.length - 1];
            // последний элемент стека
        }
 
        ops = {
            '+': 1,
            '-': 1,
            '/': 2,
            '*': 2
        };
 
        stack = [];
        out = [];
        for (var c = 0; c < s.length; c++) {
            if (!isNaN(s[c])) {
                out.push(s[c]);
                // число добавляем на выход
                continue;
            }
            if (s[c] in ops) { // попался оператор
                while (ops[seek(stack)] >= ops[s[c]]) {
                    // пока приоритет последнего элемента стека больше или равен приоритету текущего знака
                    out.push(stack.pop());
                    // на выход добавляем последний элемент стека и удаляем последний элемент из стека
                }
                stack.push(s[c]);
                // в стек добавляем текущий знак
                continue;
            }
            if (s[c] === ')') {
                // если попалась закрывающая скобка
                while (stack.length && seek(stack) !== '(') {
                    out.push(stack.pop());
                    // пока стек не закончился или не попалась открывающая скобка
                    // добавляем на выход последний элемент стека
                }
                stack.pop();
                // удаляем из стека последний элемент
                continue;
            }
 
            stack.push(s[c]);
            // добавляем знак в стек
        }
 
        while (stack.length) {
            out.push(stack.pop());
            // если стек не пуст добавляем то что осталось в обратном порядке на выход
        }
        console.log('out is', out);
        console.log(out);
        // обратная польская нотация и стек
        for (var i = 0; i < out.length; i++) {
            if(!isNaN(out[i])) out[i] = parseFloat(out[i])
        }
        console.log(out);
        let stack2 = [];
        for (var i = 0; i < out.length; i++) {
            if(!isNaN(out[i])) {
                stack2.push(out[i])
            }
            else {
                if(out[i] == '*') {
                    var res = stack2[stack2.length - 2] * stack2[stack2.length - 1];
                    stack2.splice(stack2.length - 2);
                    stack2.push(res);
                }
                if(out[i] == '+') {
                    var res = stack2[stack2.length - 2] + stack2[stack2.length - 1];
                    stack2.splice(stack2.length - 2);
                    stack2.push(res);
                }
                if(out[i] == '-') {
                    var res = stack2[stack2.length - 2] - stack2[stack2.length - 1];
                    stack2.splice(stack2.length - 2);
                    stack2.push(res);
                }
                if(out[i] == '/') {
                    var res = stack2[stack2.length - 2] / stack2[stack2.length - 1];
                    stack2.splice(stack2.length - 2);
                    stack2.push(res);
                }
            }
            //console.log(stack2);
            //console.log(res);
        }
        console.log('res', res)
        // подсчитали
        if(isNaN(res) || typeof res == 'undefined') {
            res = 'ошибка ввода';
        }
        if(res ==  Infinity || res == -Infinity) {
            res = 'деление на ноль';
        }
        form.value = res;
        str = res.toString();
    }
    // кнопки
    for (i = 0; i < but.length; i++){
        but[i].onclick = function () {
        if(form.value == 'деление на ноль' || form.value == 'ошибка ввода') { return false}
        if(this.value == '.' && form.value == '0'){
            str = form.value;
        }
            // точки и скобки
            if (this.value == '.' && str.charAt(str.length - 1) == '.' ) {
                str = str.slice(0, -1);
            }
            if (this.value == ')' && str.charAt(str.length - 1) == '(' ) {
                return false;
            }
            if (this.value == '(' && str.charAt(str.length - 1) == ')' ) {
                return false;
            }
            // точки и скобки
            // деление на ноль
            if (isNaN(this.value) && str.charAt(str.length - 1) == '0' && str.charAt(str.length - 2) == '/' ) {
            return false;
            }
            // деление на ноль
            //запрет повторных знаков
            if (str.charAt(0) == '+' || str.charAt(0) == '*' || str.charAt(0) == '/') {
                str = '';
                //str.slice(0,1);
            }
            if (str.charAt(0)== '-' && str.charAt(1) == '-') {str = '-'}
            if (this.value == '+' && isNaN(str.charAt(str.length - 1)) && str.charAt(str.length - 1) != ')') {
                str = str.slice(0, -1);
            }
            if (this.value == '*' && isNaN(str.charAt(str.length - 1)) && str.charAt(str.length - 1) != ')'){
                str = str.slice(0, -1);
            }
            if (this.value == '/' && isNaN(str.charAt(str.length - 1)) && str.charAt(str.length - 1) != ')'){
                str = str.slice(0, -1);
            }
            if (this.value == '-' && str.charAt(str.length - 2)== '-' && str.charAt(str.length - 1) != ')'){
                str = str.slice(0, -1);
            }
            //запрет повторных знаков
            str += this.value;
            form.value = str;
        }
    }
    // равно
    var ravno = document.getElementById('ravno');
    ravno.onclick = solve;
    clr.onclick = function () {
        str = '';
        form.value = '0';
    }
    //backspase
    function backspase() {
        form.value = form.value.slice(0, -1);
        str = form.value;
        console.log(form.value);
        if (form.value == '') {
            form.value = 0;
        }
    }
    bks.onclick = backspase;
</script>
</body>
</html>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2025, 11:50
Ответы с готовыми решениями:

Как создать GUI
Как создать GUI на javascript ? Цель - скриптом вывести на страницу кнопки, текст бокс и т.п....

Javascript gui для java кода
Здравствуйте. Есть ли какая нибудь возможность делать обычные дескотпные приложения, используя в...

Node.js как лучше сделать GUI в приложении для ПК?
Недавно начал изучать Node.js и хочется понять как лучше делать GUI в приложении для ПК. Мне...

40
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3975 / 2142 / 833
Регистрация: 13.03.2010
Сообщений: 7,044
30.06.2026, 08:16
Студворк — интернет-сервис помощи студентам
Zloyalex100, очередная чушь. Любой инструмент языка нужно использовать в правильной ситуации, а не как взбредёт в больную голову. Для операций вычисления в калькуляторе как раз таки лучше подходит switch.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2026, 08:16

Как сделать GUI на основе множеств?
Прошу помочь с написанием учебного примера. Есть слова рядом с галочками. Например в столбик:...

Калькулятор с кнопкой, которая бы определяла наибольшее из двух чисел
Очень надо создание на Java Script калькулятора с кнопкой, которая бы определяла наибольшее из двух...

Калькулятор на Javascript - как его сделать?
Здравствуйте, уважаемые гуру Javascript'a. Помогите, пжлста, с написанием калькулятора на...

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

Калькулятор на сайт
Здраствуйте , я хотел спросить может мне кто-то подкинет скрипт калькулятора на сайт ? мне нужно...


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

Или воспользуйтесь поиском по форуму:
41
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru