Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "Misiu musi przejść przez rzeczkę..." - Pomoc przy programie
Plasot
post 19.05.2017, 07:24:06
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


Witam. Mój nauczyciel dał mi do wykonania program, który sprawi czy misiek dojdzie od startu do mety poruszając się wyłącznie po parzystych polach(bez cofania). Pola stworzyłem jako tablicę dwuwymiarową. W tej chwili program wygląda tak:
  1. <body>
  2. <?php
  3. $dane[0][0] = rand(1, 4);
  4. $dane[0][1] = rand(1, 4);
  5. $dane[0][2] = rand(1, 4);
  6. $dane[0][3] = rand(1, 4);
  7.  
  8. $dane[1][0] = rand(1, 4);
  9. $dane[1][1] = rand(1, 4);
  10. $dane[1][2] = rand(1, 4);
  11. $dane[1][3] = rand(1, 4);
  12.  
  13. $dane[2][0] = rand(1, 4);
  14. $dane[2][1] = rand(1, 4);
  15. $dane[2][2] = rand(1, 4);
  16. $dane[2][3] = rand(1, 4);
  17.  
  18. $dane[3][0] = rand(1, 4);
  19. $dane[3][1] = rand(1, 4);
  20. $dane[3][2] = rand(1, 4);
  21. $dane[3][3] = rand(1, 4);
  22. ?>
  23. Czy miś dojdzie do miodu, jeżeli będzie sie poruszał po samych przystych polach?
  24. <table>
  25. <tr>
  26. <td>-------</td><td>-------</td><td>Start</td><td>-------</td>
  27. </tr>
  28. <tr>
  29. <td><?php echo $dane[0][0]; ?></td> <td><?php echo $dane[0][1]; ?></td> <td><?php echo $dane[0][2]; ?></td> <td><?php echo $dane[0][3]; ?></td>
  30. </tr>
  31. <tr>
  32. <td><?php echo $dane[1][0]; ?></td> <td><?php echo $dane[1][1]; ?></td> <td><?php echo $dane[1][2]; ?></td> <td><?php echo $dane[1][3]; ?></td>
  33. </tr>
  34. <tr>
  35. <td><?php echo $dane[2][0]; ?></td> <td><?php echo $dane[2][1]; ?></td> <td><?php echo $dane[2][2]; ?></td> <td><?php echo $dane[2][3]; ?></td>
  36. </tr>
  37. <tr>
  38. <td><?php echo $dane[3][0]; ?></td> <td><?php echo $dane[3][1]; ?></td> <td><?php echo $dane[3][2]; ?></td> <td><?php echo $dane[3][3]; ?></td>
  39. </tr>
  40. <tr>
  41. <td>-------</td><td>Start</td><td>-------</td><td>-------</td>
  42. </tr>
  43. </table>
  44. <br>
  45. <body>


Będę wdzięczny za pomoc w wykonaniu programu.
Pozdrawiam.

Ten post edytował Plasot 19.05.2017, 07:26:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kshyhoo
post 19.05.2017, 18:43:14
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Mam nadzieję, że nospor nie znajdzie dziury w całym ;p
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4.  
  5. <p>Czy miś dojdzie do miodu, jeżeli będzie sie poruszał po samych parzystych polach?</p><br />
  6.  
  7. <?php
  8. $dane[0][0] = rand(1, 4);
  9. $dane[0][1] = rand(1, 4);
  10. $dane[0][2] = rand(1, 4);
  11. $dane[0][3] = rand(1, 4);
  12.  
  13. $dane[1][0] = rand(1, 4);
  14. $dane[1][1] = rand(1, 4);
  15. $dane[1][2] = rand(1, 4);
  16. $dane[1][3] = rand(1, 4);
  17.  
  18. $dane[2][0] = rand(1, 4);
  19. $dane[2][1] = rand(1, 4);
  20. $dane[2][2] = rand(1, 4);
  21. $dane[2][3] = rand(1, 4);
  22.  
  23. $dane[3][0] = rand(1, 4);
  24. $dane[3][1] = rand(1, 4);
  25. $dane[3][2] = rand(1, 4);
  26. $dane[3][3] = rand(1, 4);
  27.  
  28. ?>
  29.  
  30. <table border="1" cellpadding="0" cellspacing="0">
  31. <tr>
  32. <td>-----</td>
  33. <td>-----</td>
  34. <td>Start</td>
  35. <td>-----</td>
  36. </tr>
  37. <tr>
  38. <td><?php echo $dane[0][0]; ?></td>
  39. <td><?php echo $dane[0][1]; ?></td>
  40. <td><?php echo $dane[0][2]; ?></td>
  41. <td><?php echo $dane[0][3]; ?></td>
  42. </tr>
  43. <tr>
  44. <td><?php echo $dane[1][0]; ?></td>
  45. <td><?php echo $dane[1][1]; ?></td>
  46. <td><?php echo $dane[1][2]; ?></td>
  47. <td><?php echo $dane[1][3]; ?></td>
  48. </tr>
  49. <tr>
  50. <td><?php echo $dane[2][0]; ?></td>
  51. <td><?php echo $dane[2][1]; ?></td>
  52. <td><?php echo $dane[2][2]; ?></td>
  53. <td><?php echo $dane[2][3]; ?></td>
  54. </tr>
  55. <tr>
  56. <td><?php echo $dane[3][0]; ?></td>
  57. <td><?php echo $dane[3][1]; ?></td>
  58. <td><?php echo $dane[3][2]; ?></td>
  59. <td><?php echo $dane[3][3]; ?></td>
  60. </tr>
  61. <tr>
  62. <td>-----</td>
  63. <td>Meta</td>
  64. <td>-----</td>
  65. <td>-----</td>
  66. </tr>
  67. </table>
  68.  
  69. <?php
  70.  
  71. echo '<br />';
  72. echo "przed zmianą: <br />";
  73. //echo "<pre>";
  74. print_r($dane);
  75. //echo "</pre>";
  76. echo '<br /><br />';
  77.  
  78. // zmiana liczb parzystych na kropki a nieparzystych na gwiazdki
  79. array_walk_recursive($dane, function(&$value) {
  80. $value = ($value %2 == 0) ? '.' : '*';
  81. });
  82.  
  83. ?>
  84.  
  85. <table border="1" cellpadding="0" cellspacing="0">
  86. <tr>
  87. <td>-----</td>
  88. <td>-----</td>
  89. <td>Start</td>
  90. <td>-----</td>
  91. </tr>
  92. <tr>
  93. <td><?php echo $dane[0][0]; ?></td>
  94. <td><?php echo $dane[0][1]; ?></td>
  95. <td><?php echo $dane[0][2]; ?></td>
  96. <td><?php echo $dane[0][3]; ?></td>
  97. </tr>
  98. <tr>
  99. <td><?php echo $dane[1][0]; ?></td>
  100. <td><?php echo $dane[1][1]; ?></td>
  101. <td><?php echo $dane[1][2]; ?></td>
  102. <td><?php echo $dane[1][3]; ?></td>
  103. </tr>
  104. <tr>
  105. <td><?php echo $dane[2][0]; ?></td>
  106. <td><?php echo $dane[2][1]; ?></td>
  107. <td><?php echo $dane[2][2]; ?></td>
  108. <td><?php echo $dane[2][3]; ?></td>
  109. </tr>
  110. <tr>
  111. <td><?php echo $dane[3][0]; ?></td>
  112. <td><?php echo $dane[3][1]; ?></td>
  113. <td><?php echo $dane[3][2]; ?></td>
  114. <td><?php echo $dane[3][3]; ?></td>
  115. </tr>
  116. <tr>
  117. <td>-----</td>
  118. <td>Meta</td>
  119. <td>-----</td>
  120. <td>-----</td>
  121. </tr>
  122. </table>
  123.  
  124. <?php
  125.  
  126. echo '<br />';
  127. echo "Po zmianie: <br />";
  128. //echo "<pre>";
  129. print_r($dane);
  130. //echo "</pre>";
  131. echo '<br />';
  132.  
  133.  
  134. // start i meta
  135. $wynik = trasa($dane, array(0, 2), array(3, 1));
  136.  
  137. if (count($wynik) == 0)
  138. echo "<p>Brak trasy</p>";
  139. if (count($wynik) == 1)
  140. echo "<p>Nie nastąpiło przemieszczenie</p>";
  141. if (count($wynik) > 1) {
  142. echo "<p>Jest trasa przejścia, jej współrzędne: </p>";
  143. foreach($wynik as $punkt)
  144. echo "($punkt[0], $punkt[1]) ";
  145. }
  146.  
  147. function trasa($dane, $start, $stop) {
  148. // nie można wykonać obliczeń, gdy punkty startowy i końcowy są zajęte
  149. if ($dane[$stop[1]][$stop[0]] <> '.' or $dane[$start[1]][$start[0]] <> '.') return;
  150.  
  151. $licznik = 1; // licznik określa kolejne odległości od końca
  152. $dane[$stop[1]][$stop[0]] = $licznik;
  153. $punkty[] = $stop;
  154. while(count($punkty) > 0) {
  155. $licznik++;
  156. foreach($punkty as $p) {
  157. $x = $p[0];
  158. $y = $p[1];
  159. if ($x == $start[0] and $y == $start[1]) {
  160. $jest = true;
  161. unset($n);
  162. break;
  163. }
  164. if ($dane[$y][$x - 1] == '.') { $dane[$y][$x - 1] = $licznik; $n[] = array($x - 1, $y); }
  165. if ($dane[$y][$x + 1] == '.') { $dane[$y][$x + 1] = $licznik; $n[] = array($x + 1, $y); }
  166. if ($dane[$y + 1][$x] == '.') { $dane[$y + 1][$x] = $licznik; $n[] = array($x, $y + 1); }
  167. if ($dane[$y - 1][$x] == '.') { $dane[$y - 1][$x] = $licznik; $n[] = array($x, $y - 1); }
  168. }
  169. $punkty = $n;
  170. unset($n);
  171. }
  172.  
  173. // jeżeli nie udało się od końca dotrzeć do początku, nie ma przejścia
  174. if (!$jest)
  175. return;
  176.  
  177. while($dane[$start[1]][$start[0]] > 1) {
  178. $x = $start[0];
  179. $y = $start[1];
  180. if ($dane[$y][$x - 1] > 0 and $dane[$y][$x - 1]<$dane[$y][$x]) $start = array($x - 1, $y);
  181. if ($dane[$y][$x + 1] > 0 and $dane[$y][$x + 1]<$dane[$y][$x]) $start = array($x + 1, $y);
  182. if ($dane[$y + 1][$x] > 0 and $dane[$y + 1][$x]<$dane[$y][$x]) $start = array($x, $y + 1);
  183. if ($dane[$y - 1][$x] > 0 and $dane[$y - 1][$x]<$dane[$y][$x]) $start = array($x, $y - 1);
  184. $wynik[] = array($x,$y);
  185. }
  186. $wynik[] = array($stop[0], $stop[1]);
  187.  
  188. return $wynik;
  189. }
  190.  
  191. ?>
  192.  
  193. </body>
  194. </html>

Kod sprawdza wszystkie cztery kierunki, ale można zakomentować ruch wstecz. Tablica o tak małych wymiarach jest nieco uciążliwa, drogę znajduje raz na kilkanaście razy...


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- Plasot   "Misiu musi przejść przez rzeczkę..." - Pomoc przy programie   19.05.2017, 07:24:06
- - nospor   To co tutaj masz to problem skoczka szachowego, in...   19.05.2017, 08:05:09
- - Kshyhoo   Mam nadzieję, że nospor nie znajdzie dziury w cały...   19.05.2017, 18:43:14
- - nospor   CytatMam nadzieję, że nospor nie znajdzie dziury w...   19.05.2017, 20:29:03
- - Kshyhoo   No właśnie, że nie gotowca, bo jego założenia były...   19.05.2017, 20:34:55
- - nospor   Tez mi wykazanie... skasowanie jednej linijki w go...   19.05.2017, 21:19:22
- - Kshyhoo   No właśnie, mam tablicę złożoną ze współrzędnymi ś...   19.05.2017, 21:31:55
- - nospor   Ale mozesz mi napisac co ty chcesz osiagnac? Bo te...   19.05.2017, 21:50:01
- - Kshyhoo   Chciałbym wygenerować tabelkę ze znalezioną ścieżk...   19.05.2017, 22:02:05
- - nospor   No i dobrze. To czemu tego nie robisz przy generow...   19.05.2017, 22:23:38
- - Kshyhoo   Nie wiedzieć czemu, nic nie kombinując mam tak: Cy...   22.05.2017, 16:43:09
- - nospor   Ale w ktorej petli while?   22.05.2017, 16:46:49
- - Kshyhoo   W drugiej. [PHP] pobierz, plaintext while($...   22.05.2017, 17:06:39
- - nospor   MI tam dziala. Jestes pewien ze NIC nie zmieniales...   22.05.2017, 17:40:22
- - Kshyhoo   Już działa, literówka ;p I nadal nie wiem, jak mam...   22.05.2017, 17:42:44
- - nospor   CytatNie wiedzieć czemu, nic nie kombinując mam ta...   22.05.2017, 17:44:27
- - Kshyhoo   RE: "Misiu musi przejść przez rzeczkę..." - Pomoc przy programie   22.05.2017, 17:54:42
- - nospor   Rozwiazanie z rekurencja to jedno z mozliwych rozw...   26.05.2017, 10:52:52


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:26