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

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

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

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

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

textual
Листинг программы
{$mode objfpc}
uses Crt;
 
function Menu(const items : array of string) : integer;
var
  i : integer;
  kod : char;
begin
  result := 0;
  repeat
    TextAttr := 16 * Black + LightGray;
    clrscr;
    for i := 0 to High(items) do
    begin
      if i = result then TextAttr := 16 * LightGray + Black
      else TextAttr := 16 * Black + LightGray;
      writeln(items[i]:20);
    end;
 
    kod := readkey;
    case kod of
    #0:
    case readkey of
    #72:
      begin
       dec(result);
       if result < 0 then result := high(items);
      end;
    #80:
      result := succ(result) mod length(items);
    end;
    end;
  until kod=#13;
  inc(result);
end;
 
var
  b_main, b_sub : boolean;
begin
  b_main := false;
  repeat
  case Menu(['main 1', 'main 2', 'main 3', 'main 4', 'exit']) of
  1: repeat
     b_sub := false;
     case Menu(['sub1_1', 'sub1_2', 'sub1_3', 'exit']) of
     1 : writeln('1_1');
     2 : writeln('1_2');
     3 : writeln('1_3');
     4 : b_sub := true;
     end;
     until b_sub;
  2: repeat
     b_sub := false;
     case Menu(['sub2_1', 'sub2_2', 'exit']) of
     1 : writeln('2_1');
     2 : writeln('2_2');
     3 : b_sub := true;
     end;
     until b_sub;
  // ...
  5: b_main := true;
  end;
  until b_main;
 
end.

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


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

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

5   голосов , оценка 3.8 из 5
Похожие ответы