Форум программистов, компьютерный форум, киберфорум
D (DLang)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/104: Рейтинг темы: голосов - 104, средняя оценка - 4.68
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
1

Возможно ли написать калькулятор на D почти в одну строчку?

13.03.2015, 00:31. Показов 20003. Ответов 102
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я экспериментировал с типом данных TypeTuple и решил попробовать написать с помощью него простой калькулятор, который смог бы парсить скобки и вычислять значение выражений.
C++
1
2
3
4
5
6
7
8
9
import std.stdio;
import std.typetuple;
 
void main() {
 
    auto a = TypeTuple!(2 * (2 + 1));
 
    writeln(a); // prints 6
}
Но я столкнулся с проблемой ввода данных для TypeTuple:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
import std.stdio;
import std.typetuple;
 
void main() {
 
    string s;
 
    readf(" %s\n", &s);
 
    auto a = TypeTuple!(s);
 
    writeln(a); // prints 2 * (2 + 1)
}
Возможно ли как-то "срезать" кавычки со строки s?
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2015, 00:31
Ответы с готовыми решениями:

Калькулятор в одну строчку
Нашел на Форуме. Немного переделал, добавил и изменил. В функциях Cos,Sin,Tan вместо Radian,...

Одну строчку немогу написать
Объявлены структура, описывающая точку в пространстве TPoint и массив точек Points: struct...

написать одну строчку кода:
Сам пример на рисунке: я не понимаю как написать верхнюю и нижнюю строку там где X^2 надо куда то...

Возможно ли на vbs написать калькулятор?
Всем привет! Я не силен в этой сфере,но хотелось бы участвовать или наблюдать процесс...

102
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
13.03.2015, 04:33 21
Author24 — интернет-сервис помощи студентам
собственно это и требуется от правильного калькулятора.
То есть класс std.rational реализован, работает, но статус этого класса не понятен. Правда проблема, в любом случае сама собой разрешится со временем. Просто хочется ускорить этот процесс.
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 04:49  [ТС] 22
Цитата Сообщение от XRuZzz Посмотреть сообщение
но статус этого класса не понятен.
Да, этот класс даже не стоит в рассмотрении на включение:
Review_Queue
Цитата Сообщение от XRuZzz Посмотреть сообщение
Просто хочется ускорить этот процесс.
Чтобы ускорить этот процесс, задайте вопрос на dlang.org: "Когда включат std.rational в стандарт?". Поверьте, Александреску прочитает и, может быть...
P.S. Видел я, как вы создали тему. Даже не попытались ничего объяснить (даже пользователь, который отлично знает математику, не смог вам помочь).

Хотя, может быть, вот оно:
std.halffloat
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
13.03.2015, 04:54 23
зато в процессе обсуждения сам разобрался чего мне нужно.
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 04:56  [ТС] 24
Цитата Сообщение от XRuZzz Посмотреть сообщение
зато в процессе обсуждения сам разобрался чего мне нужно.
И то хорошо.
А вопрос вы задайте, чтобы дело пошло.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
13.03.2015, 05:21 25
так там же много тем с названием std.rational надо сначала их прочитать, и если нет ответа поднимать тему снова, не вижу смысла плодить темы. Шаблон класса Currencies позволяет мне подождать пока вопрос сам собой утрясётся. Для меня пока тема Проектирование основы для разработки консольных приложений куда важнее.

Добавлено через 13 минут
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
P.S. Видел я, как вы создали тему. Даже не попытались ничего объяснить (даже пользователь, который отлично знает математику, не смог вам помочь).
Я реально не понимал, как можно не понять, что мне нужно. Они что валюты никогда не видели? Почему то по названию темы std.rational всем сразу ясно, что нужно получить в итоге. Получается мне нужно было назвать тему std.currency? Как для меня очевидно, что если мы считаем валюту, то нужно создать тип Валюты для начала.

программисты там все, а как они деньги считают - великая загадка. я конечно понимаю, они такие богатые, что доли копеек им считать не интересно. Но кого то же должно это интересовать...
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 05:35  [ТС] 26

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
я конечно понимаю, они такие богатые, что доли копеек им считать не интересно. Но кого то же должно это интересовать...
Я теперь понял, как легально воровать деньги. :D


Цитата Сообщение от XRuZzz Посмотреть сообщение
так там же много тем с названием std.rational надо сначала их прочитать, и если нет ответа поднимать тему снова
Хорошо, я завтра (т. е. сегодня, учитывая то, что я сутки не спал) прочитаю темы с названием std.rational и расскажу вам, в чём там суть.
0
XRuZzz
13.03.2015, 06:11
  #27

Не по теме:

Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Хорошо, я завтра (т. е. сегодня, учитывая то, что я сутки не спал) прочитаю темы с названием std.rational и расскажу вам, в чём там суть.
я как раз пишу прогу для того, чтоб она следила за режимом сна. Это очень важно. Так что готов предоставить для тестирования и создания пожеланий к функционалу. Но она очень примитивна, пока что.

0
Dennis Ritchie
13.03.2015, 15:01  [ТС]
  #28

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
я как раз пишу прогу для того, чтоб она следила за режимом сна.
Если она на D, то могу протестировать на себе. :)

0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
19.03.2015, 02:09 29
Цитата Сообщение от XRuZzz Посмотреть сообщение
Даже как то не встречал, пакеты, которые позволяли бы использовать обычную консоль.
Старинный юниксовый bc, со своим собственным си подобным dsl. Работает из коробки (по крайней мере должен) в любом линуксе.
1
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 08:49  [ТС] 30
А, может быть, с помощью миксинов можно написать калькулятор в одну строчку? Проблема опять заключается в представлении арифметических операций.
C++
1
2
3
4
5
6
7
8
9
10
import std.stdio : readf, writeln;
 
void main() {
    
    int a, b, c;
 
    readf("%s %s %s", &a, &b, &c); // 1 2 3
 
    writeln(mixin(`a + b + c`)); // 6
}
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 09:31 31
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
написать калькулятор в одну строчку
Вы слышали что такое разбор выражения? Какие однострочники? Проснитесь уже.
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 10:17  [ТС] 32
Цитата Сообщение от castorsky Посмотреть сообщение
Вы слышали что такое разбор выражения?
Думаете, что невозможно в языке программирования создать типы данных, которые смогли бы хранить арифметические знаки?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 12:08 33
во-первых я не понял к чему этот вопрос, во-вторых я понял что о разборе выражений Вы ничего не слышали.
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 12:13  [ТС] 34
Цитата Сообщение от castorsky Посмотреть сообщение
во-вторых я понял что о разборе выражений Вы ничего не слышали.
Ну про польскую нотацию давно уже знаю, даже как-то программировал.
Цитата Сообщение от castorsky Посмотреть сообщение
во-первых я не понял к чему этот вопрос
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
23.03.2015, 12:21 35
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций.
- а можно подробее? Что представляют собой "переменные для хранения операций" и как они могут заменить разбор выражений?
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 12:52  [ТС] 36
Цитата Сообщение от Catstail Посмотреть сообщение
Что представляют собой "переменные для хранения операций" и как они могут заменить разбор выражений?
Не знаю, возможно ли реализовать это в каком-нибудь языке программирования, но мне хотелось бы иметь такую возможность:
C++
1
2
3
4
5
6
7
8
import std.stdio;
 
void main() {
    
    arifm n = "+";
 
    writeln(5 n 9); // 14
}
P.S. Надеюсь, что идея понятна.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 13:06 37
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций
то есть из потока ввода мы извлекаем не буфер байт, а уже готовое к вычислению дерево? Это что за такая фантастика? Попробуйте оттулкнуться что ввод - это буфер с информацией, эту информацию надо разобрать посимвольно/побайтово и на ее основе построить синтаксическое дерево (одним словом - распарсить), а потом это дерево вычислить. Собственно это и есть разбор выражения.
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Надеюсь, что идея понятна.
каким образом узнать арность функции, отличить функции от переменных/констант?
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 13:20  [ТС] 38
Цитата Сообщение от castorsky Посмотреть сообщение
каким образом узнать арность функции, отличить функции от переменных/констант?
Ну это не моя проблема. Я в данный момент не занимаюсь разработкой языков.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 13:32 39
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Ну это не моя проблема. Я в данный момент не занимаюсь разработкой языков.
Я Вам кое-что поясню. Написать калькулятор это - разработать интерпретатор математический выражений. С этого и начинается реализация языков, т.к. математическое выражение это выражение на языке математики. Т.е. Вы отделяя математический язык от любого другого глубоко ошибаетесь.
0
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 13:39  [ТС] 40
Цитата Сообщение от castorsky Посмотреть сообщение
Написать калькулятор это - разработать интерпретатор математический выражений.
Так я и хотел именно это сказать, что нужно в компилятор встроить интерпретатор, который будет "маслать, якобы в compile time" арифметические выражения, если используется ключевое слово, например, arifm. В компилятор D уже встроен (раньше я думал, что он разделён с компилятором, а потом прочитал в книге Александреску) интерпретатор, который облегчает вычисления в compile time.
0
23.03.2015, 13:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2015, 13:39
Помогаю со студенческими работами здесь

Js в одну строчку
Подскажите готовые сервисы через которые можно пропустить js и получить на выходе js код в одну...

перевести одну строчку на с++
case (operation_list.ItemIndex) of 0: ..............

Перевести одну строчку с С++ в С
помогите перевести cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? (char)178 : a) << (j...

Текст в одну строчку
Можно ли весь код сайта начиная от <!DOCTYPE html><html> и кончая </body></html> вывести в одну...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru