[C++] Zagnieżdżone menu w programie.

0

Witam,
Pisze program, który ma za zadanie wykonywanie różnego rodzaju operacji matematycznych. Chce to wykonać w taki sposób, aby użytkownik mógł wejść w daną grupę operacji, a następnie z ponownie wyświetlonego menu (danej kategorii) mógł wybrać już konkretną funkcje, którą chce użyć.

Problem polega jednak na tym, że uruchamiają się tylko odnośniki do bezpośrednich funkcji, a do podmenu w funkcjach już nie. Podejrzewam, że powód bardzo błahy, ale nie mogę go pomimo szczerych chęci zlokalizować.

 
#include <iostream>
#include <conio.h>
#include<math.h>
using namespace std;

void obkwadratu()
{
    int a,b;
    cout<<"Podaj długość boku kwadratu ";
    cin>>a;
    b=4*a;
    cout<<endl;
    cout<<"Obwód kwadratu wynosi "<<b<<endl;
}

void polkwadratu()
{
    int a,b;
    cout<<"Podaj długość boku kwadratu ";
    cin>>a;
    b=a*a;
    cout<<endl;
    cout<<"Pole kwadratu wynosi "<<b<<endl;
}

void obprostokata()
{
    int a,b,c;
    cout<<"Podaj długość pierwszego boku prostokąta ";
    cin>>a;
    cout<<"Podaj długość drugiego boku prostokąta ";
    cin>>b;
    c=2*a+2*b;
    cout<<endl;
    cout<<"Obwod prostokąta wynosi "<<c<<endl;
}

void polprostokata()
{
    int a,b,c;
    cout<<"Podaj długość pierwszego boku prostokąta ";
    cin>>a;
    cout<<"Podaj długość drugiego boku prostokąta ";
    cin>>b;
    c=a*b;
    cout<<endl;
    cout<<"Pole prostokąta wynosi "<<c<<endl;
}

void obrombu()
{
    int a,b;
    cout<<"Podaj dlugość boku rombu ";
    cin>>a;
    b=4*a;
    cout<<endl;
    cout<<"Obwod rombu wynosi "<<b<<endl;
}

void polrombu()
{
    int a,b,c;
    cout<<"Podaj długość pierwszej przekątnej ";
    cin>>a;
    cout<<"Podaj długość drugiej przekątnej ";
    cin>>b;
    c=a*b/2;
    cout<<endl;
    cout<<"Pole rombu wynosi "<<c<<endl;
}

void obtrapezu()
{
    int a,b,c,d;
    cout<<"Podaj długosc pierwszej podstawy ";
    cin>>a;
    cout<<"Podaj długosc drugiej podstawy ";
    cin>>b;
    cout<<"Podaj długość ramienia ";
    cin>>c;
    d=2*a+2*b+2*c;
    cout<<endl;
    cout<<"Obwod trapezu wynosi "<<d<<endl;
}

void poltrapezu()
{
    int a,b,c,d;
    cout<<"Podaj dlugosc pierwszej podstawy ";
    cin>>a;
    cout<<"Podaj dlugosc drugiej podstawy ";
    cin>>b;
    cout<<"Podaj dlugość wysokości trapezu ";
    cin>>c;
    d=(a+b)*c/2;
    cout<<endl;
    cout<<"Pole trapezu wynosi "<<d<<endl;
}

void obrownolegloboku()
{
    int a,b,c;
    cout<<"Podaj długość pierwszego boku rownolegloboku ";
    cin>>a;
    cout<<"Podaj długość drugiego boku rownolegloboku ";
    cin>>b;
    c=2*a+2*b;
    cout<<endl;
    cout<<"Obwod rownolegloboku wynosi "<<c<<endl;
}


void polrownolegloboku()
{
    int a,b,c;
    cout<<"Podaj długość podstawy rownolegloboku ";
    cin>>a;
    cout<<"Podaj długość wysokości równoległoboku ";
    cin>>b;
    c=a*b;
    cout<<endl;
    cout<<"Pole rownolegloboku wynosi "<<c<<endl;
}

void poltrojkata()
{
    int a,b,c;
    cout<<"Podaj długość boku trójkąta ";
    cin>>a;
    cout<<"Podaj długość wysokości trójkąta ";
    cin>>b;
    c=a*b/2;
    cout<<endl;
    cout<<"Pole trójkąta wynosi "<<c<<endl;
}

void poltrojkatarown()
{
    int a,b;
    cout<<"Podaj długość boku trójkąta ";
    cin>>a;
    b=a*a*sqrt(3)/2;
    cout<<endl;
    cout<<"Pole trójkąta równobocznego wynosi "<<b<<endl;
}

void polkola()
{
    int a;
    float b;
    cout<<"Podaj promień koła ";
    cin>>a;
    b=a^2*3,14;
    cout<<endl;
    cout<<"Pole koła wynosi "<<b<<endl;
}

void obkola()
{
    int a;
    float b;
    cout<<"Podaj promień koła ";
    cin>>a;
    b=2*3,14*a;
    cout<<endl;
    cout<<"Obwód koła wynosi "<<b<<endl;
}

void polstozek()
{
    int r,h,l;
    float Pp,Pb,Pc,V;
    cout<<"Podaj promien podstawy ";
    cin>>r;
    cout<<"Podaj długość tworzącej stożka ";
    cin>>l;
    cout<<"Podaj wysokość stożka ";
    cin>>h;
    Pp=r^2*3,14;
    Pb=r*l*3,14;
    Pc=Pp+Pb;
    V=Pp*h/3;
    cout<<endl;
    cout<<"Pole podstawy stożka wynosi "<<Pp<<endl;
    cout<<"Pole powierzchni bocznej stożka wynosi "<<Pb<<endl;
    cout<<"Pole całkowite stożka wynosi "<<Pc<<endl;
    cout<<"Objętość stożka wynosi "<<V<<endl;
}

void polwalec()
{
    int r,h;
    float Pp,Pb,Pc,V;
    cout<<"Podaj promień podstawy ";
    cin>>r;
    cout<<"Podaj wysokość walca ";
    cin>>h;
    Pp=r^2*3,14;
    Pb=2*3,14*r*h;
    Pc=2*Pp+2*Pb;
    V=Pp*h;
    cout<<endl;
    cout<<"Pole podstawy walca wynosi "<<Pp<<endl;
    cout<<"Pole powierzchni bocznej walca wynosi "<<Pb<<endl;
    cout<<"Pole całkowite walca wynosi "<<Pc<<endl;
    cout<<"Objętość walca wynosi "<<V<<endl;
}

void polkuli()
{
    int r;
    float Pc,V;
    cout<<"Podaj promień kuli ";
    cin>>r;
    Pc=4*3,14*r^2;
    V=3,14*r^3*4/3;
    cout<<endl;
    cout<<"Pole całkowite kuli wynosi "<<Pc<<endl;
    cout<<"Objętość kuli wynosi "<<V<<endl;
}

void polprostopadloscian()
{
    int a,b,c,Pp,V,Pc;
    cout<<"Podaj długość pierwszego boku podstawy ";
    cin>>a;
    cout<<"Podaj długość drugiego boku podstawy ";
    cin>>b;
    cout<<"Podaj wysokość prostopadłościanu ";
    cin>>c;
    V=a*b*c;
    Pc=2*a*b+2*b*c+2*a*c;
    cout<<endl;
    cout<<"Pole całkowite prostopadłościanu wynosi "<<Pc<<endl;
    cout<<"Objętość prostopadłościanu wynosi "<<V<<endl;
}

void polszescian()
{
    int a,Pc,V;
    cout<<"Podaj długość boku sześcianu ";
    cin>>a;
    V=a^3;
    Pc=6*a^2;
    cout<<endl;
    cout<<"Pole całkowite sześcianu wynosi "<<Pc<<endl;
    cout<<"Objętość sześcianu wynosi "<<V<<endl;
}

void polgraniastoslupu()
{
    int n,a,r,b,Pp,Pb,Pc,V,h;
    cout<<"Podaj ilu kątna jest podstawa ";
    cin>>n;
    cout<<"Podaj długość boku podstawy ";
    cin>>a;
    cout<<"Podaj promień podstawy ";
    cin>>r;
    cout<<"Podaj wysokość graniastosłupa ";
    cin>>b;
    Pp=n*a*r/2;
    Pb=a*n*h;
    Pc=2*Pp+Pb;
    V=Pp*h;
    cout<<endl;
    cout<<"Pole powierzchni bocznej graniastosłupu wynosi "<<Pb<<endl;
    cout<<"Pole całkowite graniastosłupu wynosi "<<Pc<<endl;
    cout<<"Objętość graniastosłupu wynosi "<<V<<endl;
}

void polostroslup()
{
    int n,r,a,h;
    float Obp,Pp,Pb,Pc,V;
    cout<<"Podaj ilu kątna jest podstawa ";
    cin>>n;
    cout<<"Podaj promień podstawy ";
    cin>>r;
    cout<<"Podaj długośc boku ostrosłupa ";
    cin>>a;
    cout<<"Podaj wysokość ostrosłupa ";
    cin>>h;
    Obp=a*n;
    Pp=n*a*r/2;
    Pb=Pp*h;
    Pc=Pb+Pp;
    V=Pp*h/3;
    cout<<endl;
    cout<<"Pole powierzchni bocznej ostrosłupa wynosi "<<Pb<<endl;
    cout<<"Pole całkowite ostrosłupa wynosi "<<Pc<<endl;
    cout<<"Objętość ostrosłupa wynosi "<<V<<endl;
}

void silnia()
   {
    int liczba;
    long int silnia=1;
    cout<<"Podaj";
    cin>>liczba;
    for(int i=2;i<=liczba;i++)
    silnia = silnia *i;
   cout<<"Silnia wynosi "<<silnia<<endl;
   }



void podmenu1()
{
    int choice;

   while(choice != 0)
   {
      system("CLS");

                    cout << "\n\n\t\t'1' - Pole kwadratu ";
                    cout << "\n\n\t\t'2' - Obwód kwadratu";
                    cout << "\n\n\t\t'3' - Pole prostokąta";
                    cout << "\n\n\t\t'4' - Obwód prostokąta";
                    cout << "\n\n\t\t'5' - Pole rombu";
                    cout << "\n\n\t\t'6' - Obwód rombu";
                    cout << "\n\n\t\t'7' - Pole trapezu";
                    cout << "\n\n\t\t'8' - Obwód trapezu";
                    cout << "\n\n\t\t'9' - Pole równoległoboku";
                    cout << "\n\n\t\t'10' - Obwód równoległoboku";
                    cout << "\n\n\t\t'11' - Pole trójkąta";
                    cout << "\n\n\t\t'12' - Pole trójkąta równobocznego";
                    cout << "\n\n\t\t'13' - Pole koła";
                    cout << "\n\n\t\t'14' - Obwód koła";
                    cout << "\n\n\t\t'0' - Do menu głównego\n\n\t\t";

      cout << ">>";
      cin >> choice;
      cin.ignore();




         switch(choice)
         {
          case 1:
          system("CLS");
          polkwadratu();
          system("pause");
          break;


          case 2:
          system("CLS");
          obkwadratu();
          system("pause");
          break;

          case 3:
          system("CLS");
          polprostokata();
          system("pause");
          break;

          case 4:
          system("CLS");
          obprostokata();
          system("pause");
          break;

          case 5:
          system("CLS");
          polrombu();
          system("pause");
          break;

          case 6:
          system("CLS");
          obrombu();
          system("pause");
          break;

          case 7:
          system("CLS");
          poltrapezu();
          system("pause");
          break;

          case 8:
          system("CLS");
          obtrapezu();
          system("pause");
          break;

          case 9:
          system("CLS");
          polrownolegloboku();
          system("pause");
          break;

          case 10:
          system("CLS");
          obrownolegloboku();
          system("pause");
          break;

          case 11:
          system("CLS");
          poltrojkata();
          system("pause");
          break;

          case 12:
          system("CLS");
          poltrojkatarown();
          system("pause");
          break;

          case 13:
          system("CLS");
          polkola();
          system("pause");
          break;

          case 14:
          system("CLS");
          obkola();
          system("pause");
          break;

         }
   }
};

void podmenu2()
{
    int choice;

   while(choice != 0)
   {
      system("CLS");

                    cout << "\n\n\t\t'1' - Pole Stożka ";
                    cout << "\n\n\t\t'2' - Pole Kuli";
                    cout << "\n\n\t\t'3' - Pole Walca";
                    cout << "\n\n\t\t'0' - Do menu głównego\n\n\t\t";


      cout << ">>";
      cin >> choice;
      cin.ignore();




         switch(choice)
         {
          case 1:
          system("CLS");
          polstozek();
          system("pause");
          break;

          case 2:
          system("CLS");
          polkuli();
          system("pause");
          break;

          case 3:
          system("CLS");
          polwalec();
          system("pause");
          break;

         }
   }
};

void podmenu3()
{
    int choice;

   while(choice != 0)
   {
      system("CLS");

                    cout << "\n\n\t\t'1' - Silnia ";
                    cout << "\n\n\t\t'2' - Wkrotce";
                    cout << "\n\n\t\t'3' - Wkrotce";
                    cout << "\n\n\t\t'0' - Do menu głównego\n\n\t\t";


      cout << ">>";
      cin >> choice;
      cin.ignore();




         switch(choice)
         {
          case 1:
          system("CLS");
          silnia();
          system("pause");
          break;

          }
   }
};



void menu()
{
    int choice;

   while(choice != 0)
   {
      system("CLS");

      cout << "\n\n\t\t'1' - Figury płaskie";
      cout << "\n\n\t\t'2' - Bryły obrotowe";
      cout << "\n\n\t\t'3' - Prostopadłościan";
      cout << "\n\n\t\t'4' - Sześcian";
      cout << "\n\n\t\t'5' - Graniastosłupy";
      cout << "\n\n\t\t'6' - Ostrosłupy";
      cout << "\n\n\t\t'7' - Inne działania matematyczne";
      cout << "\n\n\t\t'0' - Zakończ program\n\n\t\t";


      cout << ">>";
      cin >> choice;
      cin.ignore();



         switch(choice)
         {
          case 1:
          podmenu1();
          system("pause");
          break;

          case 2:
          podmenu2();
          system("pause");
          break;

          case 3:
          system("CLS");
          polprostopadloscian();
          system("pause");
          break;

          case 4:
          system("CLS");
          polszescian();
          system("pause");
          break;

          case 5:
          system("CLS");
          polgraniastoslupu();
          system("pause");
          break;

          case 6:
          system("CLS");
          polostroslup();
          system("pause");
          break;

          case 7:
          podmenu3();
          system("pause");
          break;

         }

         }

};





int main()
{
    menu();
    getch();
    system("pause");
   }




Z góry dziękuje za pomoc!

0

w c++ jest możliwość programowania obiektowego, żeby problem jaki próbujesz rozpracować wyglądał klarowniej i szybciej się go pisało. Masz dużo wywołań tego samego kodu, co nie wygląda fajnie, zawsze możesz wywołać funkcję powtarzające się w każdym case, poza switchem raz. O system("bleble"); nie powiem dużo bo w co drugim temacie na tym forum ktoś jedzie po nim (i słusznie), więc odpuść sobie może wywoływanie osobnych procesów.

0

Skasuj to póki mało osób widziało. Następnie napisz od nowa, tym razem poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1