Python to OAM Ассемблер
Я пытаюсь преобразовать свою программу на Python в язык ассемблера, но не знаю, как это сделать. Вот программа Python:
numberofscores=float(input("Please enter the number of test scores to be entered:"))
sumofscores = 0
count = 1
while count <= numberofscores :
score1=float(input("Please enter the test score:"))
sumofscores=sumofscores+score1
count=count+1
average=sumofscores/numberofscores
print average
1 ответ
Хм, я никогда не слышал об этом учебном ресурсе под названием One Address Machine
и это на веб-основе OAMulator
( 1, 2, 3), который поддерживает OAMPL
(Язык программирования OAM) и (который компилируется) для OAM Assembly
,
Так что я обманул..
Во-первых, я "проанализировал" ваш python-код (я тоже не знаю python) и перевел его на OAMPL
:
PRINT "Please enter the number of test scores to be entered:"
READ numberofscores
sumofscores = 0
LOOP numberofscores
PRINT "Please enter the test score:"
READ testscore
sumofscores = (+ sumofscores testscore)
END
PRINT "the answer is:"
PRINT (/ sumofscores numberofscores)
EXIT
Примечание: я не переводил ваш float
потому что это должно быть int
(хотя каждый счет может быть поплавком). После некоторого тестирования я обнаружил, что вход 2.5
в любом случае "читается" как float. Я также отказался от count
переменная (так как LOOP
инструкция работала без него) и average
переменная (так как мне это не нужно)...
Нажатие кнопки compile
Renders (это, вероятно, ваш ответ):
# Emitted by the OAMPL compiler
1. BR 5 # branch to program block
# Variable storage allocation block
2. numberofscores, NOOP # variable numberofscores
3. sumofscores, NOOP # variable sumofscores
4. testscore, NOOP # variable testscore
# Begin OAM program block
# OAMPL: PRINT "Please enter the number of test scores to be entered:"
5. SET "Please enter the number of test scores to be entered:"
6. STA stdout
# OAMPL: READ numberofscores
7. LDA stdin
8. STA numberofscores
# OAMPL: sumofscores = 0
9. SET 0
10. STA sumofscores
# OAMPL: LOOP numberofscores
11. LDA numberofscores
12. BR L13
13. NOOP # loop counter
# OAMPL: PRINT "Please enter the test score:"
14. SET "Please enter the test score:"
15. STA stdout
# OAMPL: READ testscore
16. LDA stdin
17. STA testscore
# OAMPL: sumofscores = (+ sumofscores testscore)
18. LDA testscore
19. STA 21
20. BR 22
21. NOOP # intermediate value
22. LDA sumofscores
23. ADD 21
24. STA sumofscores
# OAMPL: END
25. LDA 13
26. DEC
27. L13, STA 13
28. BRP 14
# OAMPL: PRINT "the answer is:"
29. SET "the answer is:"
30. STA stdout
# OAMPL: PRINT (/ sumofscores numberofscores)
31. LDA numberofscores
32. STA 34
33. BR 35
34. NOOP # intermediate value
35. LDA sumofscores
36. DIV 34
37. STA stdout
# OAMPL: EXIT
38. HLT
Учитывая input (one per line)
:
3
71.4
33
21.6
Примечание: отвечает "3" на вопрос, который запрашивает количество тестов, а затем отвечает "71,4", "33" и "21,6" на вопрос, который запрашивает отдельные тестовые баллы. (это не интерактивный ввод, который отбросил меня на 15 минут... эта штука может серьезно помочь META II
)
Если я execute
вышеупомянутая сборка OAM (после компиляции!!) и подача ей вышеупомянутого ввода, тогда вывод выводит:
Please enter the number of test scores to be entered:
Please enter the test score:
Please enter the test score:
Please enter the test score:
the answer is:
42
... святой с.. ответ 42, это ответ на все...
(Это круто.. без полезной документации, угадывание языка программирования... это как-то крутой вопрос, на который я ответил)
Надеюсь это поможет!
PS: Пожалуйста, добавьте несколько ссылок на документацию / синтаксис этой сборки OAMPL и OAM в комментариях ниже!!! Онлайн-документы ( 1, 2, 3), которые я мог найти, не очень помогли (например, WRITE
из примера 'hello world' не сработало.. и т. д., и я понятия не имею, какой синтаксис поддерживает OAMPL, кроме чит-листа, найденного здесь).