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

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

25.06.2025, 11:50. Показов 3871. Ответов 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
3962 / 2126 / 833
Регистрация: 13.03.2010
Сообщений: 6,983
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru