Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.05.2024
Сообщений: 2

Калькулятор на классах

25.05.2024, 20:22. Показов 5462. Ответов 65
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, только начинаю изучать c++ и решил сделать калькулятор на классах, чтобы лучше усвоить тему. Все вроде работает, но не выводит сам результат, программа просто заканчивается дополнительной пустой строкой, что сделать в таком случае?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2024, 20:22
Ответы с готовыми решениями:

Векторный калькулятор на классах
Привет всем. Преподаватель дал задание, написать векторный калькулятор на классах. На массивах в консоли я сделал для 4 операций, но как...

Определить, какие из этих имен встречаются во всех классах данной параллели, которые есть только в некоторых классах
2. Заданы имена девочек. Определить, какие из этих имен встречаются во всех классах данной параллели, которые есть только в некоторых...

Определить какие из имён встречаются во всех классах, только в некоторых классах, не встречаются ни в одном
1. Заданный имена девочек . Определить , какие из этих имён встречаются во всех классах данной параллели , которые есть только в некоторых...

65
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
29.05.2024, 18:39
Студворк — интернет-сервис помощи студентам
Пжалста. Ексешник в папке bin. Без библиотек к сожалению не запускается.
Вложения
Тип файла: zip calc2.zip (14.43 Мб, 8 просмотров)
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6313 / 3036 / 1053
Регистрация: 01.06.2021
Сообщений: 11,558
29.05.2024, 19:29
Цитата Сообщение от alexu_007 Посмотреть сообщение
Без библиотек к сожалению не запускается.
вот это минус Qt - куча кишек, в итоге даже самая простая прога занимает много места

Калькулятор запустился, в целом норм. Но почему вы не использовали всякие layout, чтобы при изменении размера окна содержимое сохраняло относительные пропорции? Просто какой смысл было использовать Qt, если тоже самое можно было на WinAPI и размер файла был бы пару сотен килобайт и один цельный экзешник. Советую хотя бы выставить запрет на изменения размера окна.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
29.05.2024, 20:28
Цитата Сообщение от Royal_X Посмотреть сообщение
Но почему вы не использовали всякие layout
Да я написал для себя, не думал, что кому-то ещё будет интересно.

Цитата Сообщение от Royal_X Посмотреть сообщение
Просто какой смысл было использовать Qt
Берешь кнопки, мышкой перетаскиваешь на форму - и можно сразу писать код, не заморачиваясь оформлением окна. А библиотеки - да и хрен бы с ними. В наш век террабайтов и гигагерц заморачиваться такими пустяками... А в папку bin можно много ексешников разных (qt-шных ессно) насовать - еще и экономия выйдет.

И эта, я не профессиональный программист. Я не зарабатываю на жизнь программированием.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
29.05.2024, 21:50
В примерах к GUI-библиотеке fox-toolkit есть калькулятор.
Миниатюры
Калькулятор на классах  
0
Модератор
Эксперт Java
 Аватар для alecss131
2894 / 1400 / 412
Регистрация: 11.08.2017
Сообщений: 4,482
Записей в блоге: 2
29.05.2024, 23:06
Цитата Сообщение от Royal_X Посмотреть сообщение
если тоже самое можно было на WinAPI и размер файла был бы пару сотен килобайт
Только вот кода было бы на порядки больше, а удобства с пониманием в разы меньше. А код на Qt можно на разных платформах будет собрать и запустить, даже на андроиде.
Да и вообще создание окна на винапи задачка нетривиальная, особенно с функционалом, создать пустое окно не так сложно, сложнее обрабатывать события и нормально все организовать.
Но у меня обычно даже пустое окно на winapi ведет себя странно, хотя код нормальный (как в уроках/статьях). Например при запуске первое время мышка в виде часов, хотя окно не зависло и похожие траблы. При этом если использовать например glfw (который под капотом использует винапи) все ок. Сегодня игрался с DirectX (решил на него перенести свой кубик, но увидев всю изнанку, особенно 12 версии, желание пропало, 11 получше но все равно очень многословно) и окно создавал с использованием glfw (оно позволяет просто создать окно без привязки к opengl и получить HWND).
При этом я любитель и сторонник использования нативных средств и не люблю универсальные решения. На маке все куда проще и понятней, особенно с новым встроенным в ОС фреймворком SwiftUI (декларативное описание как QML, только другой вопрос разобраться во времени жизни элементов).
Цитата Сообщение от Royal_X Посмотреть сообщение
хотя бы выставить запрет на изменения размера окна
А вот это поддерживаю, сам так обычно делаю. Без компоновщиков и без возможности менять размер окна. Хотя и в данном случае может выйти боком. Разные ос, разные dpi и можно найти платформу где все поедет.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6313 / 3036 / 1053
Регистрация: 01.06.2021
Сообщений: 11,558
29.05.2024, 23:28
Цитата Сообщение от alecss131 Посмотреть сообщение
Только вот кода было бы на порядки больше
если речь идет создать такой же калькулятор без учета изменения размеров окна, то не думаю, что придется написать больше данного кода (я мог бы даже меньше кода написать, а эксперт WinAPI тем более)
Цитата Сообщение от alecss131 Посмотреть сообщение
а удобства с пониманием в разы меньше
для такого калькулятора никаких сложных и запутанных функций из WinAPI использовать не нужно, так что не думаю, что будут проблемы с пониманием
Цитата Сообщение от alecss131 Посмотреть сообщение
А код на Qt можно на разных платформах будет собрать и запустить, даже на андроиде.
представляю уже такой калькулятор на андроиде))) для андроид нужен индивидуальный подход, иначе получится говно-приложение

Зато на WinAPI на выходе получаем приложение в виде одного exe файла размером 200 КБ (статическая сборка gnu c++), а если юзать динамическую линковку msvc, то еще меньше.
0
Модератор
Эксперт Java
 Аватар для alecss131
2894 / 1400 / 412
Регистрация: 11.08.2017
Сообщений: 4,482
Записей в блоге: 2
30.05.2024, 02:36
Вот мой вариант калькулятора, только на Swift и SwiftUI под macOS, зато код короткий и выглядит красиво. Единственное что у меня некорректно обрабатываются операции с одним числом и действием например 25*= лень разбираться.
Размер бинарников 366кб и 150 строк кода относящегося к самому калькулятору
Кликните здесь для просмотра всего текста
Стандартный код из файла AppDelegate.swift, создается автоматически, только название окна поменял
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import Cocoa
import SwiftUI
 
@main
class AppDelegate: NSObject, NSApplicationDelegate {
    var window: NSWindow!
 
    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let contentView = ContentView()
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.isReleasedWhenClosed = false
        window.center()
        window.title = "Calc"
        window.setFrameAutosaveName("Calc")
        window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)
    }
 
    func applicationWillTerminate(_ aNotification: Notification) {
    }
}
И код уже с самим калькулятором файл ContentView.swift
Code
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
import SwiftUI
import Foundation
 
enum Action{
    case none
    case multiply
    case add
    case subtract
    case divide
}
 
struct ContentView: View {
    @State
    var scr: String = "0"
    
    @State
    var mem: String = "0"
    
    @State
    var act: Action = .none
    
    var body: some View {
        VStack{
            TextField("0", text: $scr)
                .disableAutocorrection(true)
                .multilineTextAlignment(.trailing)
                .disabled(true)
            HStack{
                leftPannel()
                rightPannel()
            }
        }.padding(10)
    }
            
    func digitKey(number: Int) -> some View {
        Button("\(number)") {
            if let num = Int(scr), num == 0 {
                scr = ""
            }
            if act != .none {
                scr = ""
            }
            scr.append("\(number)")
        }
    }
    
    func rightPannel() -> some View {
        VStack{
            HStack{
                Button("C"){
                    scr = "0"
                }
                Button("CE"){
                    scr = "0"
                    mem = "0"
                    act = .none
                }
                Button("\u{221A}"){ //sqrt
                    if let num = Float(scr), num > 0 {
                        scr = "\(num.squareRoot())"
                    }
                }
            }
            HStack{
                Button("\u{00D7}"){ //multiply
                    act = .multiply
                    mem = scr
                }
                Button("\u{00F7}"){ //divide
                    act = .divide
                    mem = scr
                }
                Button("\u{0025}"){ //percent
                    if let a = Float(scr), let b = Float(mem) {
                        scr = "\(b / 100 * a)"
                    }
                }
            }
            HStack{
                Button("\u{002B}"){ //plus
                    act = .add
                    mem = scr
                }
                Button("\u{002D}"){ //minus
                    act = .subtract
                    mem = scr
                }
                Button("\u{003D}"){ //eqals
                    if scr == "error" { return }
                    if let a = Float(mem), let b = Float(scr) {
                        switch act {
                        case .add: scr = "\(a + b)"
                        case .subtract: scr = "\(a - b)"
                        case .multiply: scr = "\(a * b)"
                        case .divide: scr = b == 0 ? "error" : "\(a / b)"
                        default: break
                        }
                        if let a = Float(scr), a.rounded() == a { scr = "\(Int(a))" }
                    }
                }
            }
        }
    }
    
    func leftPannel() -> some View {
        VStack{
            HStack{
                digitKey(number: 1)
                digitKey(number: 2)
                digitKey(number: 3)
            }
            HStack{
                digitKey(number: 4)
                digitKey(number: 5)
                digitKey(number: 6)
            }
            HStack{
                digitKey(number: 7)
                digitKey(number: 8)
                digitKey(number: 9)
            }
            HStack{
                digitKey(number: 0)
                Button("."){
                    if !scr.contains(".") {
                        scr.append(".")
                    }
                }
                Button("\u{00B1}"){ //plus-or-minus
                    if scr.contains("-") {
                        scr.remove(at: scr.startIndex)
                    } else {
                        scr.insert("-", at: scr.startIndex)
                    }
                }
            }
        }
    }
}
 
 
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Прикладываю XCode проект calc.zip (внутри так же скрин и бинарники) и скрин

По сути на QML должно быть нечто похожее
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6313 / 3036 / 1053
Регистрация: 01.06.2021
Сообщений: 11,558
30.05.2024, 03:47
alecss131, если набрать 2️⃣➕3️⃣✖️4️⃣ , то выдаст 14 или тоже 20, как тот калькулятор выше?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
30.05.2024, 07:18
Для таких вычислений другие программы написаны:
Миниатюры
Калькулятор на классах  
0
Модератор
Эксперт Java
 Аватар для alecss131
2894 / 1400 / 412
Регистрация: 11.08.2017
Сообщений: 4,482
Записей в блоге: 2
30.05.2024, 22:50
Цитата Сообщение от Royal_X Посмотреть сообщение
то выдаст 14 или тоже 20
Ну как бы для калькулятора нормальный и ожидаемый ответ 20 ибо каждое действие выполняется сразу. Ни разу не встречал калькулятора который умеет иначе. Встречались у которых были кнопки скобок, но это руками надо порядок ставить

В своем калькуляторе нашел пару серьезных багов, надо будет исправить, а то код писался в полу сонном состоянии и особо не тестировался. Если поменять файлик AppDelegate, то остальной код перенесется на ios без единой правки. Что мне нравится у яблок.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6313 / 3036 / 1053
Регистрация: 01.06.2021
Сообщений: 11,558
31.05.2024, 01:53
alexu_007, alecss131, сделал тоже калькулятор, но простой и особо не напрягался.
Управление мышью - правая кнопка вращает камеру, левая нажимает на кнопки.



Смешно то, что мой 3d калькулятор занимает 34,5 MB, тогда как тот калькулятор на Qt занимает 43,9 MB.
Вложения
Тип файла: 7z Calculator.7z (9.42 Мб, 4 просмотров)
1
31.05.2024, 12:10

Не по теме:

Royal_X, если что, у тебя блог на этом форуме "приватный". Если так задумано - ок. Если нет - надо "пофиксить".

0
31.05.2024, 12:30

Не по теме:

gunslinger, а сейчас норм?

0
31.05.2024, 13:13

Не по теме:

Royal_X, да.

0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
01.06.2024, 09:54
Цитата Сообщение от Royal_X Посмотреть сообщение
сделал тоже калькулятор
я правильно понимаю, что исходники являются коммерческой тайной?
0
01.06.2024, 11:15

Не по теме:

XLAT, там же код не представляет никакой ценности в рамках этой темы: написан не на С++ и без классов. Одним словом офтоп. Просто выложил этот калькулятор, чтобы вы немного поклацали и чтобы показать, как простой проект Qt занимает больше места, чем простой проект на Godot.

0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
01.06.2024, 11:49
Цитата Сообщение от Royal_X Посмотреть сообщение
код не представляет никакой ценности
значит это код не коммерческий и может быть открыт?

Цитата Сообщение от Royal_X Посмотреть сообщение
Одним словом офтоп
я хз где ещё об этом спросить.
у тя блог комменты не отображает.

если не коммерческий, то давай исходник,
можно в блоге.

Цитата Сообщение от Royal_X Посмотреть сообщение
простой проект Qt занимает больше места, чем простой проект на Godot
кстати,
в доке годота написано что годот может быть настроен как замена qt.
0
01.06.2024, 13:17

Не по теме:

XLAT, комменты там появляются после моего одобрения))



Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
то давай исходник, можно в блоге.
хорошо, я добавлю туда

0
01.06.2024, 13:23

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
комменты там появляются после моего одобрения))
Надеюсь, что не через постель? :D

0
01.06.2024, 13:53

Не по теме:

Цитата Сообщение от gunslinger Посмотреть сообщение
Надеюсь, что не через постель? :D
Был бы уверен, что на форуме все люди культурные, открыл бы мгновенную публикацию комментов. Но к сожалению даже уважаемые форумчане порой ведут себя по-хамски. Т.е. это только для этого сделано так, а не для недопущения нежелательных для меня комментов.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2024, 13:53

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

Заданы имена девочек. Определить, какие встречаются во всех классах, которые есть только в некоторых классах и какие не встречаются
Заданы имена девочек. Определить, какие из этих имен встречаются во всех классах данной параллели, которые есть только в некоторых классах...

Определить, какие из имен встречаются во всех классах, в некоторых классах и какие не встречаются ни в одном классе
Поможете с задачкой С# недавно изучаю если возможно с комментарием Заданы имена девочек. Определить, какие из этих имен встречаются во...

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

Как преобразовать обычный калькулятор в калькулятор использующий класс стек?
#include <iostream> int main(){ int a = 0; int b = 0; char operation; std::cout << "Enter first number: "; ...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru