Реализовать подменю - Pascal ABC

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

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

Как сделать подменю? Искал, ничего полезного не нашел. К примеру: После выбора Треугольника, не запрашивало сразу его стороны, а для начала, чтобы я мог выбрать через какую формулу хочу.
Puporev на помощь!

Решение задачи: «Реализовать подменю»

textual
Листинг программы
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, который продолжается до тех пор, пока пользователь не выберет пункт меню Выход.

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


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

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

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