Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Вот у меня есть созданный код для выявление в введеной строке консоле трех единиц. Если ввожу сразу 111 то получаю ответ что строка правльная, если иначе --0111, -1011 --что неправильная, хотя это уведомления должно было появляться лиш при например 00011 Код: plaintext 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. 63. 64. 65. 66. 67. 68. 69. 70. 71. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 04:41 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
stut, То есть если в начале есть 0 то cout<<state; выводит что состояние 0 --= хотя потом могут идти 1 которые при состояние 0 увеличивают его на 1. Если 10111 -- то состояние 1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 04:46 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
stut, да вы шутите. Пройдитесь циклом по массиву, и в счётчик просуммируйте количество единиц. Код: plaintext 1. 2. 3. 4. 5. PS Ваш код выше полностью некорректен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 06:37 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
подробнее на всякий случай. SSstut, да вы шутите. Пройдитесь циклом по массиву, и в счётчик просуммируйте количество единиц. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 06:39 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Ищи ошибку в этой строчке. stut Код: plaintext 1. Как написал - так и работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 06:48 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Хорошие у вас подсказки о сумирование. for (int i=0; k[i]!='0'; i++) ---> for (int i=0; k[i]!='\0'; i++) -- вот спасибо очень -- а то бы еще долго искал. У меня еще другой пример уже не к конечным автоматам, а к МП-автоматам с магазинной памяттью. У них должен быть магазин (где нули заставляют стек увеличиватся на 1, а 1--выталкивают некий условный символ Z. D начале есть еще в стеке символ пустого пространства-p.)/ Мне надо следующий код записать с помошью стека. надо распознавателем проверить строку: {In0n |n=5} + {Im0m |n=4} n--верхний индекс -- я так понимаю мне надо найти такую строку в входных цепях: 1111100000|00001111 или если между двумя подмножествами может быть иная упорядоченость символов то например 1111100000|0001|00001111. Это я делаю с помошью кода такого как предыдущий а надо с помощью стека. Не подскажите как это делать. Я так понимаю--состояние1--вход 1 (занесение в стек), 2-потом вход 0 выталикание со стека. Потом надо наверное изменить ход работы стека на занесение Z при встече 0 в {Im0m |n=4}, а потом выталкивание при встрече 1. Вот код который подходит под ка, а не мп-автомат. Код: plaintext 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. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 11:45 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
stutУ меня еще другой пример уже не к конечным автоматам, а к МП-автоматам с магазинной памяттью. У них должен быть магазин (где нули заставляют стек увеличиватся на 1, а 1--выталкивают некий условный символ Z. D начале есть еще в стеке символ пустого пространства-p.)/ Мне надо следующий код записать с помошью стека. надо распознавателем проверить строку: {In0n |n=5} + {Im0m |n=4} n--верхний индекс -- я так понимаю мне надо найти такую строку в входных цепях: 1111100000|00001111 или если между двумя подмножествами может быть иная упорядоченость символов то например 1111100000|0001|00001111. Это я делаю с помошью кода такого как предыдущий а надо с помощью стека. Не подскажите как это делать. Я так понимаю--состояние1--вход 1 (занесение в стек), 2-потом вход 0 выталикание со стека. Потом надо наверное изменить ход работы стека на занесение Z при встече 0 в {Im0m |n=4}, а потом выталкивание при встрече 1. Ничего не понял. Какой-то поток сознания. Объясни на простом примере чего делаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 12:30 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Dima TНичего не понял. Какой-то поток сознания. Объясни на простом примере чего делаешь. Да лабы человек делает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 14:39 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Интерес бы представлял генератор который такие автоматы создаёт. Но копать рукотворный код весьма уныло. Он слишком плоский чтобы представлять интерес для изучения, но и слишком объёмный (этакую "простыню" только под спойлер) чтобы рассматривать его как учебное пособие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 16:49 |
|
||
|
Неправильная работа распознавателя единиц
|
|||
|---|---|---|---|
|
#18+
Дан МП-автомат точнее строка которую он распознает. {In0n |n=5} + {Im0m |n=4}. Знаю что первый или второй компонент занчит что после ен или ем 0 (1) идет столько же другой двоечной цыфри. А что значит сумирование точно не знаю. Хотя вполне логичное предположение я сделал. Потом есть код который рапознает эти строчки: #include <stdio.h> #include <iostream> #include <string.h> using namespace std; int state=0; void rozpiznavach () { char k[20]; cout<<"Vvedit ryadok 0 i 1:"; cin >>k; for (int i=0; k[i]!='\0'; i++) { switch (state) { case 0: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=1; break;}; break; } case 1: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=2; break;}; break; } case 2: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=3; break;}; break; } case 3: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=4; break;}; break; } case 4: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=5; break;}; break; case 5: { if (k[i]=='0') {state=6; break;}; if (k[i]=='1') {state=20; break;}; break; } case 6: { if (k[i]=='0') {state=7; break;}; if (k[i]=='1') {state=20; break;}; break; } case 7: { if (k[i]=='0') {state=8; break;}; if (k[i]=='1') {state=20; break;}; break; } case 8: { if (k[i]=='0') {state=9; break;}; if (k[i]=='1') {state=20; break;}; break; } case 9: { if (k[i]=='0') {state=10; break;}; if (k[i]=='1') {state=20; break;}; break; } case 10: { if (k[i]=='0') {state=11; break;}; if (k[i]=='1') {state=20; break;}; break; } case 11: { if (k[i]=='0') {state=12; break;}; if (k[i]=='1') {state=20; break;}; break; } case 12: { if (k[i]=='0') {state=13; break;}; if (k[i]=='1') {state=20; break;}; break; } case 13: { if (k[i]=='0') {state=14; break;}; if (k[i]=='1') {state=20; break;}; break; } case 14: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=15; break;}; break; } case 15: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=16; break;}; break; } case 16: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=17; break;}; break; } case 17: { if (k[i]=='0') {state=20; break;}; if (k[i]=='1') {state=18; break;}; break; } } } } } int main() { rozpiznavach (); if (state==18) cout<<"ryadok pravylnyy"; else cout<<"ryadok ne mistyt 3-yoh odynyc"; return 0; } --но это только один вариант. Вообще МП-автомат работает со стеком. Сперва помещается символ пустого пространства --потом при поступление нулей стек заполняется знаком Z--потом при входе 1. выталкивается.Е если все 1 выталкнуты значит строчка подходит под правило. {0mIm |n=4} -- а не под {Im0m |n=4}. Думаю схема со {In0n |n=5} --аналогична. Здесь сумирование этих действий? Потому и вопрос как сделать со стеком. stack.push (V) пустое пространтсво. if (k[i]==1) stack.push (Z); if (k[i]==0) stack.pop; if stack.top==V; cout<<число единиц равно число нулей в даной цепочке. Хотя Если не поставит счетчик после каждого push или pop то наверное не подсчитает сколько там подоряд было единиц и нулей -- 5 или 10 или 100. В теории МП-автоматы именно через стек моделируются а что через код невозможно реализовать-- задание такое ж ведь есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 22:42 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2019036]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get first new msg: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 202ms |

| 0 / 0 |
