Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ как сделать в пунктах подпункты?

Автор: INZA 31.10.2011 1:36

как сделать в пунктах подпункты?

 Program L3;
Uses crt;
Var a1,b1,c1,d1,e1,f1,x :integer;
a,b,c:boolean;
pr:char;
i,Old_Color :byte;
ch :char;
Begin
Old_Color:=Textattr;
Repeat
window(1,1,80,25);
textattr:=black shl 4+cyan;
clrscr;
gotoxy(5,1);
write(' JIa6apaTopHa9I #3');
window(20,8,60,18);
textattr:=black shl 4+cyan;
clrscr;
gotoxy(11,4);
write(' 1-zadanie 1');
gotoxy(11,5);
write(' 2-zadanie 2');
gotoxy(11,6);
write(' 3-o proge');
gotoxy(11,8);
write(' Esc-exit ');
textcolor(cyan); gotoxy(12,2);write(' Baw BbI6op? ');
ch:=readkey;
if ch<>#0 then
begin
window(5,3,75,18);
textattr:=black shl 4+Cyan;
clrscr;
case ch of
#49:Begin
TextAttr:=Black shl 4+Cyan;
ClrScr;

readln(pr);
if pr='1' then
begin

end;
if pr= '2' then
begin

end;

Readkey;
End;
#50:Begin
TextAttr:=black shl 4+Yellow;

Readkey;
End;
#51:Begin

Readkey;
End;
#27:exit;
End;
end;
until(ch=#27);
window(1,1,80,25);
textattr:=Old_Color;
clrscr;
END.


Автор: Rian 31.10.2011 18:27

если проще думаю хватит объявить пункты двумерным массивом

pars:array [0..2, 0..5] of record cmd:integer; text:string end;

и в цикле сначала вывести, а потом проверить cmd

Автор: INZA 31.10.2011 21:47

Цитата(Rian @ 31.10.2011 15:27) *

если проще думаю хватит объявить пункты двумерным массивом

pars:array [0..2, 0..5] of record cmd:integer; text:string end;

и в цикле сначала вывести, а потом проверить cmd

а case в case фигня получиться ?

Автор: Гость 31.10.2011 21:52

Цитата(INZA @ 31.10.2011 17:47) *

а case в case фигня получиться ?


смотря что нужно... вход в подпункты будет пошаговым? 1.1.3.5 ? или по абсолютной нумерации?
1
-2
-3
-4

5
-6
-7
--8
--9

Автор: INZA 31.10.2011 23:20

Цитата(Гость @ 31.10.2011 18:52) *

смотря что нужно... вход в подпункты будет пошаговым? 1.1.3.5 ? или по абсолютной нумерации?
1
-2
-3
-4

5
-6
-7
--8
--9

нужно
1-задание 1 (при открытии )
1-1подпункт
2-2подпункт
и т.д.
2-задание 2 (при открытии )
1-1подпункт
и т.д.

Автор: Rian 31.10.2011 23:27

ну тогда readkey записывае в cmd1, cmd2
и во вложеном case используй ее

только для вывода на экран все равно будет лучше многомерный массив... ну мне так кажется и для проверок

Автор: INZA 1.11.2011 0:07

Цитата(Rian @ 31.10.2011 20:27) *

ну тогда readkey записывае в cmd1, cmd2
и во вложеном case используй ее

только для вывода на экран все равно будет лучше многомерный массив... ну мне так кажется и для проверок

ну попытаюсь сделать

Автор: IUnknown 1.11.2011 2:59

Пишется простейшая функция, которая, собственно, отображает менюшку, и делается так:

Меню любой степени вложенности (Показать/Скрыть)
(не надо никаких двумерных массивов: в одном подменю может быть 9 пунктов, в другом - 2, что, их все под одну гребенку, и всем место под 9 элементов выделять? "Это не наш метод" (С))

Автор: Rian 1.11.2011 4:04

Цитата(IUnknown @ 31.10.2011 21:59) *

(не надо никаких двумерных массивов: в одном подменю может быть 9 пунктов, в другом - 2, что, их все под одну гребенку, и всем место под 9 элементов выделять? "Это не наш метод" (С))

очень привык к динамическим smile.gif

Автор: INZA 5.11.2011 0:19

Цитата(IUnknown @ 31.10.2011 23:59) *

Пишется простейшая функция, которая, собственно, отображает менюшку, и делается так:

Меню любой степени вложенности (Показать/Скрыть)
(не надо никаких двумерных массивов: в одном подменю может быть 9 пунктов, в другом - 2, что, их все под одну гребенку, и всем место под 9 элементов выделять? "Это не наш метод" (С))

спасибо

Автор: INZA 26.11.2011 21:50

Цитата(IUnknown @ 31.10.2011 23:59) *

Меню любой степени вложенности (Показать/Скрыть)


error 67:string expression expected.

Автор: IUnknown 26.11.2011 21:55

Какой компилятор?

Автор: INZA 26.11.2011 21:58

Цитата(IUnknown @ 26.11.2011 18:55) *

Какой компилятор?

Free Pascal

Автор: IUnknown 26.11.2011 22:05

Не знаю, у меня, FPC нормально компилирует этот код (причем в любом режиме). А вот Turbo Pascal - отказывается. Для совместимости с TP можно заменить Length на High:

function menu(TA : byte; const items : array of string) : integer;
var
i : integer;
ch : char;
begin
TextAttr := TA;
clrscr;
for i := 0 to High(items) do
begin
gotoxy(11, 4 + i);
write(items[ i ]);
end;
gotoxy(12, 2);
write(' Your choice : ');
repeat
ch := readkey;
until (Ord(ch) - Ord('0')) in [1 .. High(items) + 1];
menu := Ord(ch) - Ord('0');
end;

Автор: INZA 26.11.2011 22:14

Цитата(IUnknown @ 26.11.2011 19:05) *

Не знаю, у меня, FPC нормально компилирует этот код (причем в любом режиме). А вот Turbo Pascal - отказывается. Для совместимости с TP можно заменить Length на High:

function menu(TA : byte; const items : array of string) : integer;
var
i : integer;
ch : char;
begin
TextAttr := TA;
clrscr;
for i := 0 to High(items) do
begin
gotoxy(11, 4 + i);
write(items[ i ]);
end;
gotoxy(12, 2);
write(' Your choice : ');
repeat
ch := readkey;
until (Ord(ch) - Ord('0')) in [1 .. High(items) + 1];
menu := Ord(ch) - Ord('0');
end;


а нет перепутал извините всё таки турбо
запустил на free всё пошло))) ещё раз спасибо

Автор: INZA 11.12.2011 22:56

Цитата(IUnknown @ 26.11.2011 19:05) *

Не знаю, у меня, FPC нормально компилирует этот код (причем в любом режиме). А вот Turbo Pascal - отказывается. Для совместимости с TP можно заменить Length на High:

function menu(TA : byte; const items : array of string) : integer;
var
i : integer;
ch : char;
begin
TextAttr := TA;
clrscr;
for i := 0 to High(items) do
begin
gotoxy(11, 4 + i);
write(items[ i ]);
end;
gotoxy(12, 2);
write(' Your choice : ');
repeat
ch := readkey;
until (Ord(ch) - Ord('0')) in [1 .. High(items) + 1];
menu := Ord(ch) - Ord('0');
end;


почему то когда так сделал пропал пункт Exit,не скажете почему?
всё не надо я сделал