Użytkownik: reason
Tytuł: NEWS_bezpowtorzen
Język: Pascal
Data: 8 lut 2010, 16:46
Link: http://3paste.com/s/174r/pascal/news_bezpowtorzen
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,t1 : 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. function byl(a : string) : boolean;
  33. var
  34. p : integer;
  35. begin
  36. p := length(a);
  37. if (a[p] = '#') then byl := true
  38. else byl := false;
  39. end;
  40.  
  41. procedure wypisz(droga : string);
  42. var
  43. i, j : integer;
  44. begin
  45. writeln ('Dalo sie przejsc drogą: ',droga);
  46. droga := '';
  47. for i := 1 to n do
  48. for j := 1 to n do t[i,j] := t1[i,j]; // przywracam kopie tablicy;
  49. end;
  50.  
  51. procedure skok(i,j,k : integer; droga : string);
  52. var
  53. a : string;
  54. begin
  55. t[i,j] := t[i,j] + '#';
  56. a := t[i,j];
  57. kierunki(a);
  58. if (i = n) and (j = n) then wypisz(droga)
  59. else begin
  60. if (qn) and (j >= 2) and not(byl(t[i,j-1])) then skok(i,j-1,k+1,droga + 'n ');
  61. if (qs) and (j <= n-1) and not(byl(t[i,j+1])) then skok(i,j+1,k+1,droga + 's ');
  62. if (qe) and (i <= n-1) and not(byl(t[i+1,j])) then skok(i+1,j,k+1,droga + 'e ');
  63. if (qw) and (i >= 2) and not(byl(t[i-1,j])) then skok(i-1,j,k+1,droga + 'w ');
  64. end;
  65. end;
  66.  
  67. begin
  68. clrscr;
  69. droga := '';
  70. qn := false;
  71. qw := false;
  72. qe := false;
  73. qs := false;
  74. for i := 1 to n do
  75. for j := 1 to n do t[i,j] := 'es';
  76. for i := 1 to n do
  77. for j := 1 to n do t1[i,j] := t[i,j]; // robie kopie tablicy, bo tablice t bede modyfikowal;
  78. {t[1,1] := 'darek';
  79. t[1,2] := 'nesw';
  80. t[1,3] := 'waln';
  81. t[1,4] := 'mores';
  82. t[2,1] := 'eokw';
  83. t[2,2] := 'wonads';
  84. t[2,3] := 'avon';
  85. t[2,4] := 'tadeusz';
  86. t[3,1] := 'wajche';
  87. t[3,2] := 'przeloz';
  88. t[3,3] := 'anbrozy';
  89. t[3,4] := 'nie';
  90. t[4,1] := 'przelozy';
  91. t[4,2] := 'ogorek';
  92. t[4,3] := 'kielbasa';
  93. t[4,4] := 'sznurek';}
  94. skok(1,1,0,droga);
  95. end.
© 2008 3paste.com Pytania i odpowiedzi | Kontakt | Zmiany 3paste_Poland 3paste_England