Не получается меню - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Бодрого дня, господа. Ни как не могу сваять свое меню. Я понимаю. Образцов кругом хоть пруд пруди. Но... Везде образцы рассчитаны на то, что будет только одно меню. Типичный пример:
Листинг программы
  1. m:array[1..5] of string=('Имя файла ',
  2. 'Создать ',
  3. 'Посмотреть ',
  4. 'Редактировать',
  5. 'Выход ');
или
Листинг программы
  1. const
  2. N=4;
  3. var
  4. menu:array[1..N] of string[20];
т. е. применяется массив с конкретным количеством пунктов, заданном константой. В моем случае все чуток по другому. Мне необходимо 4 меню. В каждом разное количество пунктов. И сами пункты, разумеется, разные. Пробовал применять динамичный массив - не катит.

Решение задачи: «Не получается меню»

textual
Листинг программы
  1. {$mode objfpc}
  2. uses Crt;
  3.  
  4. function Menu(const items : array of string) : integer;
  5. var
  6.   i : integer;
  7.   kod : char;
  8. begin
  9.   result := 0;
  10.   repeat
  11.     TextAttr := 16 * Black + LightGray;
  12.     clrscr;
  13.     for i := 0 to High(items) do
  14.     begin
  15.       if i = result then TextAttr := 16 * LightGray + Black
  16.       else TextAttr := 16 * Black + LightGray;
  17.       writeln(items[i]:20);
  18.     end;
  19.  
  20.     kod := readkey;
  21.     case kod of
  22.     #0:
  23.     case readkey of
  24.     #72:
  25.       begin
  26.        dec(result);
  27.        if result < 0 then result := high(items);
  28.       end;
  29.     #80:
  30.       result := succ(result) mod length(items);
  31.     end;
  32.     end;
  33.   until kod=#13;
  34.   inc(result);
  35. end;
  36.  
  37. var
  38.   b_main, b_sub : boolean;
  39. begin
  40.   b_main := false;
  41.   repeat
  42.   case Menu(['main 1', 'main 2', 'main 3', 'main 4', 'exit']) of
  43.   1: repeat
  44.      b_sub := false;
  45.      case Menu(['sub1_1', 'sub1_2', 'sub1_3', 'exit']) of
  46.      1 : writeln('1_1');
  47.      2 : writeln('1_2');
  48.      3 : writeln('1_3');
  49.      4 : b_sub := true;
  50.      end;
  51.      until b_sub;
  52.   2: repeat
  53.      b_sub := false;
  54.      case Menu(['sub2_1', 'sub2_2', 'exit']) of
  55.      1 : writeln('2_1');
  56.      2 : writeln('2_2');
  57.      3 : b_sub := true;
  58.      end;
  59.      until b_sub;
  60.   // ...
  61.   5: b_main := true;
  62.   end;
  63.   until b_main;
  64.  
  65. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы