![]() |
|
|
![]()
|
|
| Dilettante |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.3.2012 Репутация: нет Всего: нет |
Приветствую вас! Имеется калькулятор, состоящий из следующих частей:
Переменные в области private:
Код для кнопки очистки:
Подскажите пожалуйста, всё ли здесь корректно в части вычислений? Попробовал посчитать разные выражения - вроде нормально. Но не уверен, что всё предусмотрено. Это сообщение отредактировал(а) Dilettante - 15.10.2012, 18:13 |
||||||
|
|||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
В части вычислений вроде всё корректно. Если позволишь, придерусь к стилю. 1) Для обработки кнопки "равно" лучше сделать отдельный обработчик, т.к. часть, отвечающая за обработку "равно" никак не связана с частью, отвечающей за обработку операций 2) В чём смысл держать double res; и wchar_t operation; членами класса ? Почему не объявить их прямо в функции-обработчике ? 3) Зачем нужно преобразование из enum'а в символ и обратно, если можно хранить очередь из enum'ом ? 4) (Необязательное) Чтобы отличать члены класса от переменных, объявленных в функции, у первых д.б. какой-нибудь признак. Иногда используют подчёркивание в конце имени, иногда префикс m_ - на твой вкус. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Можно просто писать this->MyVar. Так точно не запутаешься ) -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Я так понял если вводить такое выражение
1+6*7-3/8 = ???? какое число выведет твой калькулятор ? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Dilettante |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.3.2012 Репутация: нет Всего: нет |
2borisbn, artsb
Спасибо за замечания. Об отдельном обработчике для равенства я не подумал. Как-то включил его машинально к операциям. Вообще у меня изначально обработка всего поведения, связанного с полем TEdit, скопилась в одном методе. Насчёт очереди из символов, с одной стороны, я к ней ещё обращаюсь при выводе строки, хранящей последовательность операций:
Ну а с другой - опять же, не подумал. Совет про именование переменных класса учту. 2Dem_max Выведет 5,75, т.к. не соблюдает приоритеты операций и считает такое: ((1+6)*7-3)/8. 2All Спасибо вам за внимание к моей проблеме! Попытаюсь сдать (лабораторная, как вы, возможно, догадались). |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
на здоповье. сравнивай так
а для их отображения сделай функцию перевода enum'а в символ и вызывай её
сама функция op_2_char, как ты понимаешь, будет совсем несложная )) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| Dilettante |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.3.2012 Репутация: нет Всего: нет |
2borisbn
Да, удачно получается |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Ну что тогда покритикую как просил - реализация фиговая. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Dilettante |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.3.2012 Репутация: нет Всего: нет |
2Dem_max
Тут вы правы. На большее не хватило. Но я надеюсь, что для моих нужд будет достаточно. |
|||
|
||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Тут всё намного проще:
И теперь можно так:
Это будет работать быстрее, чем вызов функции. Надеюсь, идея понятна. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
> Это будет работать быстрее, чем вызов функции.
Готов поспорить, что дааааааааапалеко не всегда. Сферических коней в вакууме не предлагать -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Ну, смысла спорить я не вижу, т.к. тут всё очевидно, ИМХО. При обращении к элементу массива ничего особенного не происходит. А вот при вызове функции, происходт много чего. Например, передача параметра; переключение на вызываемую функцию; работа в самой функции (скорее всего, там будет switch); возвращение значения из функции, что влечёт за собой создание временного объекта. Возможно, ещё что-то упустил. Как бы там ни было, на всё это нужно время. Поправьте меня, если я не прав. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
> Поправьте меня, если я не прав.
Теоретически (как в том анекдоте) Вы правы, а практически компилятор сделает из switch'а таблицу, и заинлайнит функцию. Проверьте. Сделайте два варианта и посмотрите ассемблерный код (с включенной оптимизацией, ессно) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Вот. Ключевой момент ) И тем не менее, даже если функция будет оптимизирована и заинлайнится, неужели простая операция с адресом (указатель на массив + смещение) будет длить дольше? Добавлено через 2 минуты и 17 секунд Кстати, обе операции (мой вариант и ваш вариант с функцией) будут отрабатывать очень быстро. Настолько, что разницу заметить очень тяжело. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Dilettante |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.3.2012 Репутация: нет Всего: нет |
Использование массива мне нравится (и кажется наиболее быстрым, т.к., наверное, O(1) не идёт из головы
borisbn, artsb, Dem_max, Спасибо вам за помощь и внимание к теме! |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |