IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Вычисления выражени, Проблемка...
Relrin
сообщение 8.04.2011 16:03
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Необходима помощь в задаче. Суть ее состоит в следующем: Необходимо с помощью рекурсии вычислить значение выражения, представленного в виде некоторого "константного выражения". То есть, вы вводим некоторую строку, и потом работаем с нем, вычисляя необходимое smile.gif
Примеры таких выражений: 24; 2*2+2; (634+45); ((7-121)*32)

Мой код получился следующим:
Uses Crt;

Var
str : string;
c,op: char;
x,y : integer;

{Подсчет значения выражения с помощью рекурсии}
{i - индекс соотв. символа}
{s - строка с выражением}
Function Res(i:integer; s:string):integer;
Begin
c:=s[i];
{Перевод в число целого типа}
if (c>='0') and (c<='9') then
Res:=Ord©-ord('0')
{Арифметические операции с операндами}
else
begin
x:=Res(i,s);
inc(i);
op:=s[i];
inc(i);
c:=s[i];
y:=Res(i,s);
case op of
'+': Res:=x+y;
'-': Res:=x-y;
'*': Res:=x*y;
end;
inc(i);
c:=s[i];
end;
End;

{Основная программа}
Begin
clrscr;
write('Исходное выражение: ');
readln(str);
writeln('Значение выражения: ',Res(1,str));
readkey;
End.


Сообщение отредактировано: Relrin - 8.04.2011 16:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Relrin
сообщение 8.04.2011 22:04
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Цитата(TarasBer @ 8.04.2011 21:55) *

Не верю.
(634+45) работает в моём варианте.
В моём вообще всё работает (кроме пробелов), не?
Кстати, Д7 на твоё код выдаёт предупреждение: из-за того, что ты тмп+приор внёс в условие, оно стало "возможно не определено".
И ещё почему-то 2(2+2) стало равно 4.

У меня все обратно. Все так, в подправленном, работает как надо yes2.gif
Скриншот как подтверждение


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Relrin   Вычисления выражени   8.04.2011 16:03
Гость   Во-первых, не Function Res(i:integer; s:string):i...   8.04.2011 16:33
Relrin   C приоритетами и скобками пока не очень могу предс...   8.04.2011 19:05
Гость   1. Перепиши определитель числа без библиотечного v...   8.04.2011 19:51
Relrin   Переделал, теперь берет и longint числа :good: Fu...   8.04.2011 20:38
TarasBer   В общем, переделать чуть-чуть у меня не вышло, к с...   8.04.2011 20:55
Relrin   За помощь! Пока читаю "теорию"+разби...   8.04.2011 21:11
TarasBer   > До этого пару раз проверил пару примеров, тип...   8.04.2011 21:18
Relrin   Ошибка найдена! Вот это: if GetNumber then ...   8.04.2011 21:48
TarasBer   Не верю. (634+45) работает в моём варианте. В моём...   8.04.2011 21:55
Relrin   Не верю. (634+45) работает в моём варианте. В моё...   8.04.2011 22:04
TarasBer   Ты покажи выражение, которое НЕ работает в моём ва...   8.04.2011 22:10
Relrin   Ты покажи выражение, которое НЕ работает в моём в...   8.04.2011 22:17
TarasBer   > В изначальном варианте, у меня не работает ва...   8.04.2011 22:24
Relrin   Да ты просто походу пробел в начале выражения пос...   8.04.2011 22:44
TarasBer   Значит, что-то не то сделал с моим кодом. Судя по...   8.04.2011 22:47


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"