Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.25 KB | None | 0 0
  1. 0. fizzbuzz
  2. easy
  3. 1. на вход подаётся center_x, center_y, radius, x, y
  4. определить принадлежит ли точка кругу (граница тоже круг)
  5.  
  6. 2. дальше там задания всякие легкие например проверить принадлежность точки кругу.
  7. возможно ли провести через данные три точки окружность (а хотя лол это не очень легко. придётся загуглить как вообще проводить через три точки прямую) а потом загуглить уравнение прямой.
  8.  
  9. 3. дана функция y = k*x^2.
  10. На вход функции подаётся y, x. На выходе ожидается в точке x. Описать функцию (как угодно) заодно сказать что неверно в задаче.
  11.  
  12. medium
  13.  
  14. 4. экзотический язык
  15. (язык операций над списками (найти палиндром))
  16. (befunge всякие двумерные языки)
  17.  
  18.  
  19. 5. стековый язык
  20. большинство высокоуровневых языков на самом деле не выполняют команды напрямую, а преобразуются в машинные языки. и так исторически сложилось, что машинные языки являются стековыми. Хотя раньше предлагались и другие идеи, но проще жить со стеком. Предлагается написать программу на таком облегченном (на самом деле несуществующем) языке. Итак в нашем языке присутствует ввод числа или буквы (не важно) и его вывод на экран. Все операции производятся с вершиной стека. При вводе указатель на вершину стека сдвигается на одну позицию вверх число записывается в эту позицию. При выводе наоборот указатель сдвигается вниз.
  21. Операторы языка (далее одинарные кавычки будут указывать названия или величины которые вы сами указываете):
  22. ; - комментарий
  23. read - прочитать один символ.
  24. write - вывести символ с вершины стека.
  25. push x - кладёт число х на вершину стека
  26. push 'x' - кладёт символ х на вершину стека (где х - цифра или буква, но не строка, например можно написать push '1' но не push '11')
  27. pop - удаляет что-либо с вершины стека
  28. dup - копирует вершину стека. дублирует получается.
  29. 'метка': - метка для перехода. то есть последовательность символов без пробела до двоеточия, будут доступны в любом месте программы для перехода, как комманда метка пропускается.
  30. Изначально доступна одна метка end для перехода в конец программы (т.е. завершения)
  31. GoTo 'метка' - безусловный переход на указанную метку
  32. ifNullGoTo 'метка' - переходит на указанную метку если на вершине стека 0
  33. ifNotNullGoTo 'метка'
  34. ifEqualGoTo 'метка' - переход если последние два элемента на вершине стека равны
  35. + складывает 2 значения на вершине стека. сами величины удаляются и на вершину стека кладётся результат сложения
  36. -, *, / - другие арифместические операторы.
  37. разве что стоит пояснить про целочисленое деление: 43 / 10 = 4; 4 / 10 = 0
  38. Если операция запрашивает больше элементов, чем их есть в стеке (например программа начинается с write или в стеке одно число а мы пытаемся сложить) то на вершину стека будет помещен 0.
  39. Пример ввода\вывода: Пользователь вводит слово "qwer" в консоль.
  40. программа (у нас нет простого цикла):
  41. read ; стек: q
  42. read ; стек: qw
  43. read ; стек: qwe
  44. read ; стек: qwer
  45. write ; стек: qwe
  46. write ; стек: qw
  47. write ; стек: q
  48. write ; стек:
  49. вывод: rewq
  50. чтобы вывести в прямой последовательности:
  51. read ; стек q
  52. write ; стек
  53. read ; стек w
  54. write ; стек
  55. read ; стек e
  56. write ; стек
  57. read ; стек r
  58. write ; стек
  59. вывод: qwer
  60.  
  61. Очевидно, что программа заранее знает сколько символов будет введено. В реальности нам редко предстаёт такая возможность. Будем считать, что строки вводимые пользователем нуль-детерменированные как в языке C. То есть последний символ 0.
  62. Пример расчета факториала: пользователь вводит число.
  63. Программа:
  64. ;для начала символ с консоли в число
  65. ;когда пользователь вводит символ '0' мы получаем число 30 (см. http://ru.wikipedia.org/wiki/ASCII)
  66. ;'1' = 31 и т.д. поэтому вычитаем из числа '0'.
  67. push 0 ; число в начале стека к которому будем прибавлять цифры из ввода
  68. read
  69. ifNullGoTo end ; если сразу конец строки то тут что-то не так и завершаем программу.
  70. readNumber:
  71. push '0' ;отнимем '0' получим число
  72. -
  73. + ;складываем накопленное число с последней цифрой
  74. push 10 ;умножим на 10 чтобы прибавить следющую цифру
  75. *
  76. read
  77. ifNullGoTo endOfReadNumber ;tесли 0 то конец ввода и идём дальше
  78. GoTO readNumber ;иначе в начало цикла
  79.  
  80. endOfReadNumber:
  81. push 10 ; у насв стеке хранится число лишний раз умноженное на 10
  82. / ; поэтому поделим на 10 и у нас то что нужно
  83. ; наконец у нас на вершине стека введеное число
  84. ;по определению факториала 0! = 1. n! = n*(n-1)! так что отдельно обработаем 0
  85. ifNotNullGoTo getMultipliers
  86. pop
  87. push 1
  88.  
  89. getMultipliers: ;получаем множетели для факториала
  90. dup ; берем n c вершины
  91. push 1 ; записываем
  92. - ; n - 1
  93. ifNotNullGoTo getMultipliers ;и так до тех пор пока не остаётся 0
  94. pop ; убираем 0 - он нам не пригодится
  95.  
  96. multiplicate:
  97. *
  98. ifNotNullGoTo multiplicate ;перемножаем до тех пор пока есть что перемножать
  99. pop ; снова убираем 0
  100. ; и вот у нас на вершине стека факториал. теперь самое сложное вывести его на экран.
  101. ; попытаюсь объяснить идею на примере
  102. ; у нас есть число 1234 запишем в стек (1234, 123, 123, 12, 12, 1, 1)
  103. ; то есть продублируем поделим на 10 и ещё аз продублируем и так до конца
  104. ; потом вершину выведем на экран следющее число умножим на 10. вычтем и выведем на экран
  105. ; получаем "1" потом 12 - 1*10 = 2 и т.д. "1234"
  106.  
  107. getNumberTop:
  108. dup
  109. push 10
  110. /
  111. dup
  112. ifNotNullGoTo getNumberTop
  113. pop
  114. pop ; убираем 2 нуля
  115.  
  116. print:
  117. push '0'
  118. +
  119. write
  120. push 10
  121. *
  122. ifNullGoTo end
  123. -
  124. GoTo print
  125.  
  126.  
  127. Вот такими несложными манипуляциями получаем факториал. К счастью вам не придется работать с числами.
  128. Вам предлагается задание вывести введеную пользователем строку без повторяющихся символов.
  129. пример ввода: hello world
  130. пример вывода: helo world
  131. Главное описать что вы собираетесь делать. Код второстепенен - все равно нет ни одного компилятора этого языка.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement