Użytkownik: reason
Tytuł: NEWS_bezpowtorzen3
Język: Pascal
Data: 8 lut 2010, 17:51
Link: http://3paste.com/s/177r/pascal/news_bezpowtorzen3
Ocena:
  1. // tablica jest of string i jezeli w napisie w danej komorce jest jedna z liter N, S, E, W to
  2. // mozemy z tego pola poruszac sie w odpowiednich kierunkach (np. jezeli mamy N i E to polnoc i wschod).
  3. // program sprawdza wszystkie mozliwe drogi i wypisuje kazda z nich w osobnej linii.
  4. // jedyny warunek jest nastepujacy - w kazdej drodze kazde pole tablicy mozna przejsc tylko raz.
  5.  
  6. program drogastring;
  7. uses crt;
  8. const
  9. n = 4;
  10. type
  11. tab = array[1..n, 1..n] of string;
  12. var
  13. qn, qs, qw, qe : boolean;
  14. t : tab;
  15. i, j : integer;
  16. droga : string;
  17.  
  18.  
  19. procedure kierunki(a : string); // procedura zmieniajaca wartosci globalne kierunkow w ktore mozna sie ruszyc
  20. var
  21. i, p : integer;
  22. begin
  23. p := length(a);
  24. for i := 1 to p do begin
  25. if a[i] = 'n' then qn := true;
  26. if a[i] = 's' then qs := true;
  27. if a[i] = 'e' then qe := true;
  28. if a[i] = 'w' then qw := true;
  29. end;
  30. end;
  31.  
  32. procedure wypisz(droga : string);
  33. begin
  34. writeln ('Dalo sie przejsc drogą: ',droga);
  35. droga := ''; // czyszcze droge dla kolejnego przejscia
  36. end;
  37.  
  38. procedure skok(i,j : integer; droga : string; t : tab);
  39. var
  40. a : string;
  41. begin
  42. a := t[i,j];
  43. kierunki(a);
  44. t[i,j] := '#';
  45. if (i = n) and (j = n) then wypisz(droga)
  46. else begin
  47. if (qn) and (j-1 > 0) then if (t[i,j-1] <> '#') then skok(i,j-1,droga + 'n ',t);
  48. if (qs) and (j+1 <= n) then if (t[i,j+1] <> '#') then skok(i,j+1,droga + 's ',t);
  49. if (qe) and (i+1 <= n) then if (t[i+1,j] <> '#') then skok(i+1,j,droga + 'e ',t);
  50. if (qw) and (i-1 > 0) then if (t[i-1,j] <> '#') then skok(i-1,j,droga + 'w ',t);
  51. end;
  52. end;
  53.  
  54. begin
  55. clrscr;
  56. droga := '';
  57. qn := false;
  58. qw := false;
  59. qe := false;
  60. qs := false;
  61. for j := 1 to n do
  62. for i := 1 to n do t[i,j] := 'nes';
  63. skok(1,1,droga,t);
  64. end.
© 2008 3paste.com Pytania i odpowiedzi | Kontakt | Zmiany 3paste_Poland 3paste_England