Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 9

Ввод и интерпретация арифметического выражения

03.06.2012, 21:03. Показов 3297. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу ввода и интерпретации арифметического выражения (операнды - целые числа).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2012, 21:03
Ответы с готовыми решениями:

Ввод и интерпретация арифметического выражения
Спасите Меня! Есть задачка, надо написать в пролог и лисп, сама разобраться не успею, а сдавать экзамен очень уж не хочется!!! Заранее...

Расстояние между точками как интерпретация выражения
Почему мы интерпретируем выражение |z_2 - z_1 | как расстояние между двумя точками? Мы же не говорим, что |2 - 4| это расстояние между...

В строке содержится запись арифметического выражения. Есть ли в записи выражения скобки?
В строке содержится запись арифметического выражения. Есть ли в записи выражения скобки?

10
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
04.06.2012, 10:18
Ну это просто:
Lisp
1
(eval (read))
read выполняет ввод выражения, а eval — интерпретацию.

А поконкретней нельзя? Хотя бы в каком виде выражение задается.
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 9
08.06.2012, 12:32  [ТС]
Мне пояснили так, что надо вводить выражение и затем оно должно решаться.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.06.2012, 12:39
Johnnie, ну дык в моем примере выражение как раз сначала вводится, а потом решается. Разве что еще можно print добавить. Ну и loop заодно.
0
08.06.2012, 12:45

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Разве что еще можно print добавить. Ну и loop заодно.
Где-то я это уже видел. :scratch:

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
11.06.2012, 09:55
Вот работающий код (среда HomeLisp). Код не вполне мой.

Взято вот отсюда:

;;; An infix to prefix converter for algebraic expressions.
;;; From Winston and Horn, Second Edition, pp 185-189.
;;;
;;;Adapted as a lisp macro by:
;;;Jonathan Roger Greenblatt (jonnyg@rover.umd.edu)
;;;University of Maryland at College Park

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;; Вес операции
 
(DEFUN weight (x) 
    (COND ((EQ x (QUOTE +)) 1)
          ((EQ x (QUOTE -)) 1) 
          ((EQ x (QUOTE *)) 2) 
          ((EQ x (QUOTE \)) 2) 
          ((EQ x (QUOTE /)) 2) 
          ((EQ x (QUOTE ^)) 3) 
          (T 5))) 
 
;; Код операции
 
(DEFUN opcode (op) 
    (COND ((EQ op (QUOTE +)) (QUOTE PLUS))
          ((EQ op (QUOTE -)) (QUOTE DIFFERENCE)) 
          ((EQ op (QUOTE *)) (QUOTE TIMES))
          ((EQ op (QUOTE \)) (QUOTE QUOTIENT))
          ((EQ op (QUOTE /)) (QUOTE DIVIDE))
          ((EQ op (QUOTE ^)) (QUOTE EXPT))
          (T (RAISEERROR (STRCAT "Неверен код операции " (OUTPUT op)))))) 
 
;; Вспомогательные функции
 
(DEFUN inf-aux (ae operators operands) 
    (inf-iter (CDR ae) operators (CONS (CAR ae) operands))) 
 
 
(DEFUN inf-iter (ae operators operands) 
    (PROG NIL 
          (COND ((AND (NULL ae) (NULL operators)) (RETURN (CAR operands))))
          (COND ((AND (NOT (NULL ae)) (OR (NULL operators) 
                                          (GREATERP (weight (CAR ae)) 
                                          (weight (CAR operators))))) 
                (RETURN (inf-aux (CDR ae) (CONS (CAR ae) operators) operands))))
          (RETURN (inf-iter ae (CDR operators) 
                               (CONS (LIST (opcode (CAR operators))
                                           (CADR operands) (CAR operands))
                                           (CDDR operands)))))) 
 
;; Ведущая функция преобразования из инфиксной формы в префиксную
 
(DEFUN inf2pref (x) 
    (PROG (hd tl cc xx rr) 
          (COND ((ATOMLIST x) (RETURN (inf-aux x NIL NIL))))
          (SETQ rr NIL) 
          (SETQ xx x) 
     LOOP (SETQ hd (CAR xx)) 
          (SETQ tl (CDR xx))
          (COND ((memb hd (QUOTE (SIN COS LOG EXP ATN ASN ACS SH CH SQR SIGN ABS))) 
                (PROGN (SETQ rr (APPEND rr (LIST (LIST hd (inf2pref (CAR tl))))))
                       (SETQ tl (CDR tl))))
                ((ATOM hd) (SETQ rr (APPEND rr (LIST hd))))
                (T (SETQ rr (APPEND rr (LIST (inf2pref hd))))))
         (COND ((NULL tl) (RETURN (inf-aux rr NIL NIL)))) 
         (SETQ xx tl) 
         (GO LOOP))) 
 
;; собственно вычисление 
 
(DEFUN Calc (expression)
       (eval (inf2pref (parse expression))))
Функция PARSE в HomeLisp берет строку, а возвращает список Лиспа:

Lisp
1
2
3
(parse "1+6*3/(11+7)")
 
==> (1 + 6 * 3 / (11 + 7))
Приведенный выше код переводит инфиксную форму алгебраического выражения в префиксную, а потом просто вычисляет результат (вызовом eval). Все это выглядит так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(calc "4+7*3")
 
==> 25
 
(calc "sin(3.14*0.5)")
 
==> 0.999999682931835
 
(calc "1+1/2+1/6+1/24+1/120")
 
==> 1.71666666666667
 
(calc "(1+6)*(1+7)")
 
==> 56
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 9
12.06.2012, 20:56  [ТС]
Огромное Спасибо! Выручили!
Только не сочтите меня наглым, такую программу возможно быстро переписать на такие языки как Prolog и Haskel?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
12.06.2012, 21:08
На Haskell точно можно. Да и на Пролог, вероятно, тоже. Только я не знаю Пролога совсем, а c Haskell-ом знаком очень поверхностно.
0
12.06.2012, 21:23
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
12.06.2012, 21:29
О!!! Замечательно. Огромное спасибо!
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 9
12.06.2012, 22:14  [ТС]
Так а по ссылке то что скинули, то есть там решение этой задачи на всех 3 языках есть? Извиняюсь за тупку...

Можете выдернуть их и сказать какие команды надо вбивать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2012, 22:14
Помогаю со студенческими работами здесь

В строке содержится запись арифметического выражения. Есть ли в записи выражения скобки?
В строке содержится запись арифметического выражения. Есть ли в записи выражения скобки?

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

Команды арифметического сопроцессора и ввод
В программе хочу использовать функции сопроцессора. Как поняла, команда FABS - модуль числа, FCHS - меняет знак, FDIV - целочисленное...

Расчет арифметического выражения
Помогите с формулой не могу понять

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru