15.07.2010, 05:53 | |
Ответы с готовыми решениями:
1272
Элементарные программы, для лучшего понимания языка... Задачи для тренировки и лучшего понимания языка Литература для лучшего понимания сути программирования Набор задачь для тренировки и улучшения понимания программирования |
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
||||||
08.08.2010, 16:52 | 641 | |||||
Опять! Теперь череез простую матрицу...
1
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
08.08.2010, 17:15 | 642 | |||||
На С++ по-моему незачем так делать... вот на С с массивом:
1
|
08.08.2010, 17:28 | 643 |
nikkka, ты объявил массив указателй, но указатели у тебя все неинициализированы (т.е. память под них не выделена). В процессе нарезки на токены ты должен найти в строке позицию начала токена, затем позицию конца токена, после чего ты можешь вычислить длину строки для токена, после этого нужно заказать память такого размера и только потом скопировать в эту память значение токена
Это что касается того, что ты сейчас написал. Но в реальной жизни у тебя не будет разделения пробелами. Т.е. при твоём подходе ты не сможешь вычислить "2+3", потому как у тебя это одним токеном запишется. На первом этапе можно, например, считать, что пробелы у нас быть должны. При таком ограничении можно тренироваться по части построения всех этих польских записей. Если с ними ты уже разобрался, то для тебя это уже пройденный этап, а потому надо думать о правильной реализации грамматического анализатора (нарезалки токенов). Если с польскими записями ещё не разобрался - работай пока при условии, что есть пробелы, а с аккуратной (а точнее, правильной) реализацией парсера будешь думать потом Добавлено через 48 секунд Я писал про пост #657. А тут ты скорее всего NULL-терминатор потерял
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
08.08.2010, 17:31 | 644 |
0
|
08.08.2010, 17:32 | 646 | |||||||||||||||
такой вопрос:
допустим есть список константных ключевых выражений:
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
08.08.2010, 17:51 | 647 |
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
08.08.2010, 18:04 | 648 | |||||
0
|
08.08.2010, 19:03 | 650 | |||||
вот она, ужасная и нечищенная, первая версия калькулятора. сейчас буду это упрощать, очищать и разбивать на классы. но работает
выполняет операции деления, сложения, умножения и вычитания с учетом скобок. Выражения вводятся через пробел (пока что только через пробел). каждый операнд и операция должны быть отделены пробелом (даже скобка). то есть в таком виде: Код
15 + 20 * ( 21 - 5.8 ) никаких проверок на ошибки я тоже не делал.
2
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
08.08.2010, 21:53 | 651 |
c такой задачей справляются простейшие s-грамматики рекурсивным спуском
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
08.08.2010, 22:23 | 652 |
Не удержался
0
|
09.08.2010, 00:37 | 653 | |||||||||||||||
я исправлюсь! обязательно, обязательно!
Вот даже простейший анализатор арифметического выражения сочинил. Потом прикручу его к калькулятору. В общем суть такова: анализатор принимает на вход строку и возвращает список токенов.
определение типа токена еще тоже не сделал... устал чего-то HEADER_TOKEN_H
HEADER_PARSER_H
Вроде так неплохо вышло, а главное, что потом в принципе можно будет расширить. В смысле на следующих этапах вычислений калькулятора можно предполагать, что список токенов уже составлен правильно, ну на край для тестирования составить его вручную. Да и чуть самое главное не забыл. После запуска программки, текст которой приведен выше на экран выводится следующее: Код
VAL+B/C*2 Код
+ [0] {Type=Unknown Text="VAL" } Token + [1] {Type=Unknown Text=" " } Token + [2] {Type=Unknown Text="+" } Token + [3] {Type=Unknown Text=" " } Token + [4] {Type=Unknown Text="B" } Token + [5] {Type=Unknown Text="/" } Token + [6] {Type=Unknown Text="C" } Token + [7] {Type=Unknown Text=" " } Token + [8] {Type=Unknown Text="*" } Token + [9] {Type=Unknown Text=" " } Token + [10] {Type=Unknown Text=" " } Token + [11] {Type=Unknown Text=" " } Token + [12] {Type=Unknown Text=" " } Token + [13] {Type=Unknown Text=" " } Token + [14] {Type=Unknown Text=" " } Token + [15] {Type=Unknown Text=" " } Token + [16] {Type=Unknown Text="2" } Token Поэтому видно, что все токены имеют неизвестный тип, а каждый пробел представлен как отдельный токен. Почистить от пробелов и такой список можно легко подавать на конвертирование в постфиксную нотацию, а потом уже и на вычисление. Получается три абстрактных модуля. Которые в принципе не зависят друг от друга, а только от входящих данных.
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
||||||
09.08.2010, 17:59 | 654 | |||||
Вот мой калькулятор. Вводите что хотите (отрицательные, положительные, дробные числа) с любым кол. скобок. Он выведит ответ. Но есть проблемма. Непонятно почему, он выводит так же все числа полученные в процесе вычисления. Ищу причину...
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
09.08.2010, 18:03 [ТС] | 655 |
nikkka, А у меня не работает...
Error 4 error C2057: expected constant expression c:\documents and settings\admin\мои документы\visual studio 2005\projects\дейтлы\глава 4\proh\proh.cpp 191 Error 5 error C2466: cannot allocate an array of constant size 0 c:\documents and settings\admin\мои документы\visual studio 2005\projects\дейтлы\глава 4\proh\proh.cpp 191 Error 6 error C2133: 'c' : unknown size c:\documents and settings\admin\мои документы\visual studio 2005\projects\дейтлы\глава 4\proh\proh.cpp 191
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
09.08.2010, 18:06 | 656 |
Lavroff, странно, а у меня в Dev C++ всё работает...
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
09.08.2010, 18:16 | 657 |
вот тогда вам ехе.шник.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
09.08.2010, 18:28 [ТС] | 658 |
nikkka, Пробелы при выводе бы не помешали. А то ввел 2+4+5, он мне вывел 911 + Сообщение о том что надо что-то ввести.
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
09.08.2010, 18:31 | 659 |
и я об этом. конечный результ 11, а 9 это промежуточное значение (4+5)...
Не по теме: хана! срочно звоните 2+4+5!!!!!
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
09.08.2010, 18:34 [ТС] | 660 |
nikkka, А кстати. Операции выполняются справа налево?
0
|
09.08.2010, 18:34 | |
09.08.2010, 18:34 | |
Помогаю со студенческими работами здесь
660
Проверить на правильность и закомментировать весь код для лучшего понимания Нужны задачи для тренировки Нужны задачи для тренировки Нужны задачи для тренировки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |