Реализовать подменю - Pascal ABC
Формулировка задачи:
Решение задачи: «Реализовать подменю»
uses crt; //Массив названий пунктов меню const vybor:array[1..7] of string=('1-Треугольник', '2-Прямоугольник', '3-Круг', '4-Куб', '5-Квадрат', '6-Ромб', '7-Выход'); menu_trg:array[1..3] of string=('1-по 3 сторонам', '2-по 2 сторонам и углу между ними', '3-по стороне и высоте'); procedure Menyu(var k:byte;kol:byte); var kod: char; i:byte; begin clrscr; k:=1; repeat for i:=1 to kol do begin if i=k then begin textbackground(10); //Цвет стрелки выбора textcolor(9); //Цвет букв в меню end else begin textbackground(7); //задний фон букв в меню textcolor(0) end; gotoxy(25,i); write(vybor[i]); end; writeln; textbackground(7); //Задний фон который менятеся, после выбора фигуры, он же и остается далее writeln; repeat kod:=readkey; if kod=#0 then kod:=readkey; until kod in [#13, #38, #40]; case kod of #72: begin //стрелка вверх k:=k-1; if k=0 then k:=kol;//если верхний край, вниз end; #80: begin //стрелка вниз k:=k+1; if k>kol then k:=1;//если нижний край, вверх end; end; until kod=#13; //Enter - выбор end; procedure submenu(var k:byte;kol:byte); var kod: char; i:byte; begin k:=1; repeat for i:=1 to kol do begin if i=k then begin textbackground(10); //Цвет стрелки выбора textcolor(9); //Цвет букв в меню end else begin textbackground(7); //задний фон букв в меню textcolor(0) end; gotoxy(45,i); write(menu_trg[i]); end; writeln; textbackground(7); //Задний фон который менятеся, после выбора фигуры, он же и остается далее writeln; repeat kod:=readkey; until kod in [#13, #38, #40]; case kod of #38: begin //стрелка вверх k:=k-1; if k=0 then k:=kol;//если верхний край, вниз end; #40: begin //стрелка вниз k:=k+1; if k>kol then k:=1;//если нижний край, вверх end; end; until kod=#13; //Enter - выбор end; Procedure Triangle_1; var a,b,c,s,res:real; begin clrscr; write('Введите строну А: '); readln(a); write('Введите строну B: '); readln(b); write('Введите строну С: '); readln(c); s:= (a + b + c) / 2; res:= sqrt(s * (s - a) * (s - b) * (s - c)); //конечная Формула по которой мы узнали площадь треугольника. writeln('Площадь треугольника: ', res); readln; end; Procedure Triangle_2; var a,b,u,res:real; begin clrscr; write('Введите строну А: '); readln(a); write('Введите строну B: '); readln(b); repeat write('Введите угол между сторонами в градусах от 1 до 179: '); readln(u); until(u>=1)and(u<=179); u:=u*pi/180; res:= a*b*sin(u)/2; writeln('Площадь треугольника: ', res); readln; end; Procedure Triangle_3; var a,h,res:real; begin clrscr; write('Введите строну А: '); readln(a); write('Введите высоту H: '); readln(h); res:= a*h/2; writeln('Площадь треугольника: ', res); readln; end; Procedure Rectangle; var a,b,res:real; begin clrscr; write('Введите строну А: '); readln(a); write('Введите строну B: '); readln(b); res:= a * b; //Формула получения площади прямоугольника writeln('Площадь прямоугольника: ', res); readln; end; Procedure Circle; var d,res:real; begin write('Введите диаметр круга: '); //Вводим диаметр круга readln(d); res:= pi * sqr(d) / 4; //ПИ , я ввел в начале программы в const , т.к. оно не изменяется. writeln('Площадь круга: ', res); readln; end; Procedure Cube; var a,res:real; begin clrscr; write('Введите ребро куба: '); readln(a); res:=a*a*a; writeln('Площадь куба: ', res); readln; end; Procedure Square; var a,res:real; begin clrscr; write('Введите сторону квадрата: '); readln(a); res:=a*a; writeln('Площадь квадрата: ', res); readln; end; Procedure Rhombus; var a,b:real; begin clrscr; write('Введите длину диагонали A: '); readln(a); write('Введите длину диагонали B: '); readln(b); writeln('Площадь ромба равна: ', a * b / 2:0:4);// цифры ограничивают вывод десятичных чисел readln; end; var k,w:byte; begin repeat Menyu(k,7);{выводим меню} case k of{выбираем стрелками действие} 1:begin submenu(w,3); case w of 1: Triangle_1; 2: Triangle_2; 3: Triangle_3; end; end; 2:Rectangle; //Прямоугольник 3:Circle; //Круг 4:Cube; //Куб 5:Square; //Квадрат 6:Rhombus; //Ромб 7:exit; end; until k=7; end.
Объяснение кода листинга программы
Этот код представляет собой программу на языке Pascal ABC, которая выводит меню с различными действиями и функциями.
Верхний уровень структуры программы содержит переменные и процедуры, которые используются в основном блоке программы.
Переменные включают vybor
, menu_trg
и kod
. Переменная vybor
содержит массив названий пунктов меню, а переменная menu_trg
содержит массив строк, представляющих действия, которые можно выполнить при выборе определенного пункта меню. Переменная kod
используется для чтения кода, введенного пользователем.
Процедуры включают Menyu
и submenu
. Процедура Menyu
отвечает за отображение меню, а процедура submenu
отвечает за отображение подменю.
Внутри основного блока программы происходит последовательное отображение пунктов меню и их подменю. Пользователь может выбрать пункт меню или подменю, введя соответствующую цифру с клавиатуры.
Каждый пункт меню и подменю имеет свое уникальное действие, которое выполняется при выборе этого элемента. Например, при выборе пункта меню Треугольник
будет отображено окно с запросом для ввода сторон треугольника, а затем будет вычислена и отображена площадь треугольника.
В конце программы есть блок until
, который продолжается до тех пор, пока пользователь не выберет пункт меню Выход
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д