Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
#1

Выполнить строку - C++

27.06.2009, 13:13. Просмотров 2731. Ответов 35
Метки нет (Все метки)

Здравствуйте, подскажите наиболее простой вариант решения проблемы.
Есть строка типа
(65+24)+f1(53+13)+f1(110-42)+f1(s1((35462+510)/17)+19)+(-s1((112-48))+9)+f1(s1((60615-115)/5)-2)+f1(s1((10010-10))-34)+(-s1((117-36))+12)+f1(66+18)+f1(s1((118365+450)/15)-17)+f1(s1((7585-16))+19)+f1(99-25)+f1(s1((30236+40)/4)-22)+f1(38+36)+f1(s1((3571+29))+39)+f1(s1((311780+720)/20)-38)+f1(s1((79209-117)/13)+22)
Нужно ее выполнить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2009, 13:13     Выполнить строку
Посмотрите здесь:

Ввести символьную строку. Выполнить переворот каждого слова в строке - C++
Ввести символьную строку. Выполнить переворот каждого слова в строке (заменив первую букву с последней, вторую с предпоследней и т.д.)....

Описать строку А. Из входной последовательности символов записать в строку А только цифры - C++
Описать строку А. Из входной последовательности символов записать в строку А только цифры.

Поменять местами первую строку и строку сумма элементов которой минимальна - C++
Дан двумерный массив размера NxM. Поменять местами первую строку и строку сумма элементов которой минимальна. Вывести полученную матрицу на...

Ввести строку, подсчитать сколько раз первая буква входит в строку - C++
Ввести строку, подсчитать сколько раз первая буква входит в строку. C++

Функция, которая копирует строку в другую строку заданное количество раз - C++
Помогите!!!! срочно нужна задача. Не знаю как сделать. Разработать функцию, которая копирует строку в другую строку заданное количество...

Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент - C++
1)В матрице поменять местами 1 строку и строку содержащие последнее вхождение элемента максимального где максимальный- максимальный элем...

Поменять местами строку с максимальный элемент и строку с минимальным элементом матрицы - C++
привет!я хотел бы попросить знающих людей написать программу на языке С!надо поменять местами рядок в котором есть максимальный элемент с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paulie
Айхрень...
306 / 174 / 4
Регистрация: 02.06.2009
Сообщений: 1,078
27.06.2009, 13:15     Выполнить строку #2
не знаю встроенных в С++ способов импорта строки в выражение, но можно напистаь простенький парсер с использованием строковых операций С++.
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
27.06.2009, 13:17     Выполнить строку #3
сконвертить в обратную польскую запись

а дальше выолнить уже гораздо проще
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
27.06.2009, 15:06  [ТС]     Выполнить строку #4
Да вот уже нашел обратную запись. Сижу правлю.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
27.06.2009, 16:05     Выполнить строку #5
Польской записи недостаточно. Тут есть ещё и вызовы функций
А по поводу разбора выражений посмотреть можно тут: Представление выражения в двоичном дереве посты 3 и 5
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
27.06.2009, 16:13     Выполнить строку #6
какая разница - операция или функция? просто операция - функция от двух переменных, а просто функция - от одной переменной, фактически она тоже операция, только унитарная

к примеру, нет никакой принципиальнй разницы в разборе выражения

3 2 +
и
123 f1

запись
3 2 +
эквивалентна
3 2 plus,

где plus - функция от 2х переменных
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
27.06.2009, 17:59     Выполнить строку #7
Действительно. Видимо мне подсознательно стековые механизмы обработки выражений не нравятся
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
27.06.2009, 23:13  [ТС]     Выполнить строку #8
Так а в стеке же хранится символьные операторы. Что нужно переделывать стек под строки, если функции вводить.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
27.06.2009, 23:46     Выполнить строку #9
Да как угодно, лишь бы это потом можно было прочесть. Условно говоря, можно так:

C
1
2
3
4
5
6
7
8
9
10
struct
{
  int kind; // 1 - константа, 2 - операция, 3 - функция
  union
  {
    int ival;
    char op;
    char *func;
  } val;
}
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.06.2009, 13:09     Выполнить строку #10
Перевести в perl.
Потом дернуть perl интерпретатор для вычисления выражения.
Хотя perl трудно интегрировать в С++.

Можно использовать lua: перевести это выражение в язык lua и выполнить.
http://www.lua.org/
Реализация lua есть для C/C++.
Но придется немного изучить документации.
Зато попутно можно будет делать много чего еще: lua - мощный язык.

Или сделать все самому.

2evg: на самом деле если подумать, то функция не отличается от операции.

Если пользоваться терминами язык Форт, то у нас есть два вида операций.
1) Положить константу на стек
2) Выполнить слово.
Слово - это и операция и функция.
Слово берет некоторое кол-во верхних элементов со стека, что-то делает и кладет некоторое кол-во верхних элементов на стек.
Например слово '+': снять 2 элемента со стека, сложить и их, результат положить на стек.
Слово 'f1': снять со стека одно число, положить на стек результат функции f1 от этого числа.
И так далее.
Otaka
1822 / 678 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
28.06.2009, 14:16     Выполнить строку #11
Если кому еще интересно, то вот моя давнешняя реализация Польской нотации. Я тогда в библиотеке прочел статейку по неё, нета у меня еще тогда не было, и я загорелся желанием написать прогу(вообще-то появилось желание написать интерпретатор Си, но руки не дошли). Там кстати есть и функции(sin cos...). Написано на Билдере 6.
Вложения
Тип файла: rar Polish notation.rar (211.1 Кб, 17 просмотров)
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
28.06.2009, 14:45  [ТС]     Выполнить строку #12
Спасибо, гляну.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
28.06.2009, 17:19     Выполнить строку #13
Цитата Сообщение от odip Посмотреть сообщение
Перевести в perl.
Потом дернуть perl интерпретатор для вычисления выражения.
Хотя perl трудно интегрировать в С++.
А ещё можно искусственный интеллект написать, но это тоже сложно

Цитата Сообщение от odip Посмотреть сообщение
2evg: на самом деле если подумать, то функция не отличается от операции.
С точки зрения стека - безусловно. Но с точки зрения синтаксического разбора выражения - нет. А потому когда человеку дают ссылку на код, который разбирает операции плюс, минус, умножить, делить и говорить, что для функции делается всё то же самое - мягко говоря, неправильно. По той ссылке при беглом просмотре я не заметил, что в приложенном коде так же есть разбор функций, а потому подумал, что очередной умник решил растопырить пальцы. Но ошибся
Otaka
1822 / 678 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
28.06.2009, 17:28     Выполнить строку #14
Перл может и трудновато, а Луа элементарно встраивается.
Я по началу все никак не мог найти себе нормального скриптового движка, а потом как нашел Lua... мне больше ничего не надо.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
28.06.2009, 17:47     Выполнить строку #15
Цитата Сообщение от Otaka Посмотреть сообщение
Перл может и трудновато, а Луа элементарно встраивается
А не проще ли тогда сгенерить исходник на Си и не заморачиваться всякими скриптовыми языками?
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.06.2009, 17:55     Выполнить строку #16
Я так понял, что строки которые нужно вычислить подаются снаружи и могут быть разными.
Ну допустим исходник на C ты сгенеришь - а что ты с ним дальше делать будешь ? Компилировать ? Тогда тебе придется вместе с программой таскать еще и компилятор C. Например Visual Studio 2005 ))

А lua как раз это и есть - он тебе пропарсит и выполнит твое выражение.
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
28.06.2009, 19:14     Выполнить строку #17
Цитата Сообщение от odip Посмотреть сообщение
Ну допустим исходник на C ты сгенеришь - а что ты с ним дальше делать будешь ? Компилировать ? Тогда тебе придется вместе с программой таскать еще и компилятор C. Например Visual Studio 2005 ))
Да кому нужна эта программа, чтобы её куда-то таскать
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.06.2009, 20:24     Выполнить строку #18
Кому нужна программа - это уже вопрос к автору.

А чтобы дернуть компилятор из программы - тоже код писать нужно, обрабатывать ошибки, куда-то класть временные файлы и т.д.

Это в UNIX/Linux/BSD все просто - в 99% случаев в системе есть gcc, запустить его не составляет больших проблем. Но там и perl можно вызвать - это будет еще проще
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
28.06.2009, 22:42     Выполнить строку #19
Хорошо. Выскажу своё мнение открытым текстом. Товарищу нужно сделать задачу из разряда тех, что дают в институте, при этом он не знает как. Всякие заумные советы типа perl, lua - товарищ и слов-то таких наверное не слышал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2009, 23:02     Выполнить строку
Еще ссылки по теме:

В заданной числовой вещественной матрице размерности N*N поменять местами K-ую строку и L-ую строку - C++
Помогите пожалуйста написать прогу для консоли) В заданной числовой вещественной матрице размерности N*N поменять местами K-ую строку и...

Из строки сформировать отдельно строку латинских и строку русских букв - C++
1. Массивы и указатели. Ввести строку латинских и русских букв вперемешку в одинаковом количестве. Сформировать из нее отдельно две строки...

Заменить строку матрицы с максимальной суммой элементов на первую строку - C++
3.Заменить строку матрицы P(n,m) с максимальной суммой элементов на первую строку поэлементно.

Перед каждым вхождением заданного символа в строку S вставить строку S0 - C++
Дан символ C и строки S, S0 . Перед каждым вхождением символа C в строку S вставить строку S0 .

Преобразовать строку из файла, содержащую запись десятичного числа, в строку с двоичным числом - C++
Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа. И...


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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.06.2009, 23:02     Выполнить строку #20
Заумные советы типа сгенерировать C-ный файл, потом его откомпилировать - это IMHO не лучше
Yandex
Объявления
28.06.2009, 23:02     Выполнить строку
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru