fork download
  1. program ideone;
  2.  
  3. type
  4. PMenu=^TMenu;
  5. TProc=procedure(menu:PMenu);
  6. TMenu=record
  7. Text:String;
  8. Proc:TProc;
  9. Menu:PMenu;
  10. end;
  11.  
  12. procedure RunMenu(menu:PMenu);
  13. var P,N:Word;
  14. var tmp:PMenu;
  15. begin
  16. while true do
  17. begin
  18. N:=1;
  19. tmp:=menu;
  20. while tmp^.Proc<>nil do
  21. begin
  22. WriteLn(N,': ',tmp^.Text);
  23. tmp:=tmp+1;
  24. Inc(N);
  25. end;
  26. WriteLn('0: ',tmp^.Text);
  27. Write('Wybór: ');
  28. ReadLn(P);
  29. if P<N then
  30. begin
  31. if P=0 then Exit;
  32. tmp:=menu+(P-1);
  33. WriteLn;
  34. WriteLn('Wybrano menu: ',tmp^.Text);
  35. tmp^.Proc(tmp^.Menu);
  36. WriteLn;
  37. end
  38. else WriteLn('Nie ma takiej opcji');
  39. end;
  40. end;
  41.  
  42. procedure Dodaj(menu:PMenu);
  43. begin
  44. WriteLn('Dodawanie');
  45. end;
  46.  
  47. procedure Pokaz(menu:PMenu);
  48. begin
  49. WriteLn('Pokazywanie');
  50. end;
  51.  
  52. procedure Usun(menu:PMenu);
  53. begin
  54. WriteLn('Usuwanie');
  55. end;
  56.  
  57. procedure SortBy1(menu:PMenu);
  58. begin
  59. WriteLn('Sortowanie Wg 1-go parametru');
  60. end;
  61.  
  62. procedure SortBy2(menu:PMenu);
  63. begin
  64. WriteLn('Sortowanie Wg 2-go parametru');
  65. end;
  66.  
  67. const Sort:array[0..2]of TMenu=
  68. (
  69. (Text:'Sortuj wg 1';Proc:@SortBy1),
  70. (Text:'Sortuj wg 2';Proc:@SortBy2),
  71. (Text:'Wróć';Proc:nil)
  72. );
  73.  
  74. const Main:array[0..4]of TMenu=
  75. (
  76. (Text:'Dodaj';Proc:@Dodaj),
  77. (Text:'Sortuj';Proc:@RunMenu;Menu:@Sort[0]),
  78. (Text:'Pokaż';Proc:@Pokaz),
  79. (Text:'Usuń';Proc:@Usun),
  80. (Text:'Koniec';Proc:nil)
  81. );
  82.  
  83. begin
  84. RunMenu(@Main[0]);
  85. end.
Success #stdin #stdout 0s 232KB
stdin
1
2
1
2
3
0
3
4
5
0
stdout
1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: 
Wybrano menu: Dodaj
Dodawanie

1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: 
Wybrano menu: Sortuj
1: Sortuj wg 1
2: Sortuj wg 2
0: Wróć
Wybór: 
Wybrano menu: Sortuj wg 1
Sortowanie Wg 1-go parametru

1: Sortuj wg 1
2: Sortuj wg 2
0: Wróć
Wybór: 
Wybrano menu: Sortuj wg 2
Sortowanie Wg 2-go parametru

1: Sortuj wg 1
2: Sortuj wg 2
0: Wróć
Wybór: Nie ma takiej opcji
1: Sortuj wg 1
2: Sortuj wg 2
0: Wróć
Wybór: 
1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: 
Wybrano menu: Pokaż
Pokazywanie

1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: 
Wybrano menu: Usuń
Usuwanie

1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: Nie ma takiej opcji
1: Dodaj
2: Sortuj
3: Pokaż
4: Usuń
0: Koniec
Wybór: