Практическая работа 24-09-24
Задание:
Повторить теоретический материал Тема «Полноэкранные программы» п.2.11.
Составить программы:
1. Программа из учебника movehello.pas. Набрать и отладить программу
2. Программа из учебника movingstar.pas. Набрать и отладить программу
3. Программа из приложения. Набрать и отладить программу. Изучить работу программы. Дописать реализацию соответствующих функций.
uses crt; Type MenuType = (Vertical, Horizontal); const width = 9; { Максимальная длина элементов (букв) меню } Items1 = 5; { Количество элементов меню 1 } optText1: array [0..Items1-1] of string = ('Сложение', 'Вычитание', 'Деление', 'Умножение', 'Выход'); Items2 = 3; { Количество элементов меню 2 } optText2: array [0..Items2-1] of string = ( 'item 1', 'item 2', 'item 3' ); optNormal = LightGray; { цвет невыделенных элементов меню } optSelected = Yellow; { цвет выделенных элементов меню } var X, Y, selected, { Индекс элемента, который будет подсвечиваться в начале программы } row: integer; _style: menuType; { Указывает на тип меню: вертикальный (Vertical) или горизонтальный (Horizontal) } { Эта процедура используется процедурой MenuOption для построения меню } procedure MakeMenu (optText: array of string; MaxItems: integer); var i, _X: byte; begin Y := row; _X := X; for i := 0 to MaxItems-1 do begin GoToXY (_X, Y); if i = selected then TextColor (optSelected) else TextColor (optNormal); write (optText[i]); If _style = Horizontal Then inc (_X, width + 1) Else inc (Y, 2); end; end; { выбираем нужный элемент меню этой функцией } function MenuOption (optText: array of string; MaxItems: integer): byte; var ch: char; begin selected := 0; If _style = Vertical then begin X := (80 - width) div 2; row := (25 - MaxItems) div 2; End Else Begin X := (80 - MaxItems * width) div 2; row := 2; { строчка, в которой будет находиться горизонтальное меню } GotoXY(1, row); ClrEol; { ... а для горизонтального - только строку где будет меню. } End; repeat MakeMenu (optText, MaxItems); ch := readkey; if ch = #0 then ch := readkey; case ch of #80, #77: {Down/Right} begin inc (Selected); if Selected = MaxItems then Selected := 0; MakeMenu (optText, MaxItems); end; #72, #75: {Up/Left} begin dec (Selected); if Selected < 0 then Selected := MaxItems-1; MakeMenu (optText, MaxItems); end; end; until ch = #13; {Enter} MenuOption := Selected + 1; TextColor (optNormal); If _style = Vertical Then clrscr; end; procedure Add; begin end; procedure Subtract; begin end; procedure Divide; begin end; procedure Multiply; begin end; var Option: byte; { номер выбранного пункта } begin clrscr; _style := Vertical; { вертикальное меню } Option := MenuOption (optText1, Items1); case option of 1: Add; { сложить числа } 2: Subtract; { вычесть числа } 3: Divide; { поделить числа } 4: Multiply; { умножить числа } 5: exit; { Выйти из программы } end; { вывести (если нужно) номер выбранного пункта } writeln ('Номер пункта: ', option); readln; _style := Horizontal; { горизонтальное меню } Option := MenuOption (optText2, Items2); end.