15.07.2010, 05:53 | |
Ответы с готовыми решениями:
1272
Элементарные программы, для лучшего понимания языка... Задачи для тренировки и лучшего понимания языка Литература для лучшего понимания сути программирования Набор задачь для тренировки и улучшения понимания программирования |
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
06.08.2010, 21:04 | 601 |
fasked, ну это если писать реальный язык которым ты собираешся пользоватся, а не mCF+... я же для тренировки хочу...
Не по теме: а с++ на чём писался? на с? а с?
0
|
fasked
|
06.08.2010, 21:15
#602
|
Не по теме: а для тренировки значит можно тяп-ляп делать?! :ireful: си++ - это язык. компилятор/интерпретатор можно на чем угодно написать, можно написать компилятор Си++ на Си++. вот некоторая информация - будет интересно почитаешь (правда на английском)
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
06.08.2010, 21:16 | 603 |
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
06.08.2010, 21:20 | 604 |
Прочитай инфу по ссылке, поймешь, что да как. Только вот особенности твоего "языка" не позволят тебе написать для него компилятор/интерпретатор
Добавлено через 1 минуту Вот вкратце то же самое, если с английским туго...
1
|
fasked
|
06.08.2010, 21:23
#605
|
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
06.08.2010, 21:27 | 606 |
fasked, Nameless One, спс!...
Добавлено через 2 минуты fasked, но написать компилятор для языка L нужет какой нить другой язык, так?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
07.08.2010, 04:55 [ТС] | 608 | |||||
Поднадоело играть и решил написать что-то типа калька, который вычисляет введенные пользователем выражение... Пока для +-/*
Получилось уныло чуть более чем полностью... 1) Считает только одно выражение. То есть 2+3-4 не покатит никак. 2) Сам код абсолютно не адекватен... Большие функции, наверняка это можно сделать короче. 3) Не будет работать с отрицательными числами. 4) Ну и прочие солидные и не очень недостатки. Просьба помочь, поправить и направить куда нужно) Код:
1
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||||||
07.08.2010, 07:13 | 609 | ||||||||||
Тоже калькулятор, тоже пока только операторы + - * /, только в постфиксной нотации (т.е. выражение заданно в виде: 27 5 + 2 6 / * (соотв. (27 + 5) * 2 / 6)):
calculator.h
main.cpp
Кстати, существует довольно-таки несложный алгоритм для преобразования выражения в инфиксной нотации в выражение в постфиксной нотации. ИМХО, именно таким образом и нужно запрограммировать калькулятор (ввел выражение в инфиксной нотации -> перевел в постфиксную -> вычислил), т.к. с появлением в нем хотя бы тех же скобок для переопределения приоритетов реализация сильно усложниться.
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
||||||
07.08.2010, 09:50 | 610 | |||||
Постепенно дополняю свой интерпретатор. Новые возможности: обявление переменных, инициализация переменных, вывод переменных. Пример программы:
Код
ZDAROVA :The value of X is : $x //ключевой символ $ обозначает создание переменной. WARNING! перменная может состоять только из одной буквы. x=5+1 //WARNING! Можно использовать знаки операций + - * /. НО НЕЛЬЗЯ ВВОДИТЬ ЧИСЛА БОЛЬШЕ 9-И!!!! неудобно, но исправлю... GET(x) //выводит значение переменной. :^The value of Y is : $y y=5/2 GET(y) VSO Добавлено через 1 минуту
Протестируйте пожалуйста...
0
|
07.08.2010, 10:01 | 611 |
По поводу выражений очень много теории в этой теме: Пишем свой интерпретатор языка BASIC
Но там очень много букв, так что нужные места придётся поискать. Но в пределах первых 20 постов уже обозначена постановка задачи: вместо калькулятора простенький интерпретатор
2
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
||||||
07.08.2010, 10:35 | 612 | |||||
Теперь возможна и инициализация "на месте":
1
|
07.08.2010, 10:48 | 613 |
nikkka, я в твоём коде не разбирался, но беглого взгляда оказалось достаточно, чтобы увидеть два потенциальных косяка. В функциях wisi и stoi у тебя возможен выход из процедуры с неинциализированным значением (например, при ошибке во внутренней логике в точке вызова). Такой код может вызвать трудноотлавливаемые ошибки исполнения, потому что точка проявления ошибки может оказаться слишком далеко от точки возникновения ошибки. Я бы в конце этих функций поставил ловушки недопустимых ситуаций (assert или на худой конец просто abort). Это позволит сократить дистанцию от точки возникновения ошибки до точки проявления. Вообще добавление статического контроля в виде assert'ов очень сильно упрощает жизнь и сокращает время отладки. 99% ошибок в моей практике ловится именно на assert'ах, а потому для их разбра в львиной доле случаев даже отладчик не нужен
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
07.08.2010, 10:53 | 614 |
Evg, поправлю.
а как зделать так что бы я мог написать к слову x=54+12?
0
|
07.08.2010, 11:00 | 615 |
Как в твоей программе - не знаю, мне просто лень было с ней разбираться Как делать по науке - дал ссылку выше. Про грамматический анализ, насколько я понял, ты прочитал. Далее идут пояснения, как из всего этого сделать лексический анализ. Тут просто вещь такая, что это нужно взять и один раз сделать самому. После чего вдруг сразу станет ясно очень многое. #pragma по началу не верил в то, что самому можно написать интерпретатор, обладая лишь базовыми знаниями. Теперь, думаю, он понимает, что написать можно всё что угодно, вопрос лишь во времени
1
|
07.08.2010, 16:36 | 616 | |||||
написал конвертер из инфиксной в постфиксную.
1
|
nikkka
|
07.08.2010, 16:41
#617
|
0
|
ForEveR
|
07.08.2010, 16:50
[ТС]
#618
|
Не по теме: fasked, Красиво все через стек закручено. I like it
0
|
07.08.2010, 16:51 | 619 |
да тут все предельно просто. в постфиксной нотации в принципе нет проблем с приоритетами операций, так как нет скобок и оператор расположен после операндов, а не между как в привычной нам записи. соответственно считать проще и памяти уходит меньше. гуглить по словам "обратная польская запись"
Добавлено через 1 минуту от switch-case конструкций надо бы избавиться. и еще там есть как минимум одна бесполезная функция.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
07.08.2010, 17:29 [ТС] | 620 | ||||||||||
Мда... Видимо получилось хуже чем ночью...
Const_strings.h
Main.cpp
0
|
07.08.2010, 17:29 | |
07.08.2010, 17:29 | |
Помогаю со студенческими работами здесь
620
Проверить на правильность и закомментировать весь код для лучшего понимания Нужны задачи для тренировки Нужны задачи для тренировки Нужны задачи для тренировки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |