Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: C++ - menu

22.08.2012 21:26
1
PkSrlz
71
Konsul

C++ - menu

otóż w internecie nie mogłem znaleźć odpowiedzi więc prosiłbym tutaj o przykład menu, w którym po wybraniu np. 1 pod którym znajduje się hasło Graniastosłupy pokaże się kolejne menu, które wyświetli podkategorie. pierwsze zrobię przy pomocy switcha a później?

np.
cout<<" 1- Wzory skroconego mnozenia"<< endl;
cout<<" 2- Graniastoslupy"<< endl;
cout<<" 3- Kalkulator - Menu "<< endl;
cout<<" 1 - Dodawania"<< endl;
cout<<" 2 - Odejmowanie"<< endl;
cout<<" 3 - Mnozenie"<< endl;
cout<<" 4 - Dzielenie"<< endl;
cout<<" 5 - Procent liczby"<< endl;
cout<<" 6 - Potegowanie"<< endl;
cout<<" 7 - Pierwiastkowanie"<< endl;

Chodzi mi i coś takiego jak wyżej czyli po wpisaniu 3 otwiera się kolejne menu z podkategoriami dla kalkulatora. z góry wielkie dzięki.

22.08.2012 21:56
2
odpowiedz
zanonimizowany857551
4
Chorąży

Znowu switch (zagnieżdżony). Albo if, jak wolisz.

22.08.2012 21:59
master53
3
odpowiedz
master53
100
Legend

Tylko sugerowałbym podzielić całość na funkcje. Wielokrotnie zagnieżdżony switch nie jest najlepszym pomysłem.

22.08.2012 22:15
4
odpowiedz
PkSrlz
71
Konsul

master -> możesz dać mały przykład ? dlaczego wielokrotny switch będzie złym rozwiązaniem ?

22.08.2012 22:18
5
odpowiedz
zanonimizowany857551
4
Chorąży

Bo się szybko w nim pogubisz. Funkcjami rozbijesz na czytelne bloki.

Wiem, że nie jestem master53, ale myślę że dobrze mówię.

22.08.2012 22:55
6
odpowiedz
PkSrlz
71
Konsul

ok to jutro popróbuję sobie gdyż dzisiaj już nie mam siły.

ps. mógłbym prosić o pomoc z potęgowaniem i pierwiastkowaniem w takim zapisie:

case 7:
cout<<" Wybrales PROCENT LICZBY"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a % b;
cout<< Wynik;
break;

podałem przykład z procentami lecz chodzi tylko o układ. próbowałem a^b tak na logikę lecz nie działa, sqrt również odmawia posłuszeństwa..

22.08.2012 22:57
Arxel
7
odpowiedz
Arxel
232
Kostka Rubika

Czy a % b nie oznacza przypadkiem reszty z dzielenia..?
Spróbuj pow(a,b), gdzie a to podstawa, natomiast b to wykładnik potęgi..

22.08.2012 23:02
8
odpowiedz
zanonimizowany861943
46
Generał

Do tego potrzebujesz biblioteki cmath: http://www.cplusplus.com/reference/clibrary/cmath/

23.08.2012 16:41
9
odpowiedz
PkSrlz
71
Konsul

pyt. 1

mam cmath w include oraz robiąc pow(a,b) wychodzi zero w przypadku 2 do 2 a w przypadku 2 do 3 wynik to 1.

cout<<"Podaj liczbe: "<< endl;
cin>>liczba;
cout<<"Do ktorej potegi chcesz podniesc wybrania liczbe?: "<< endl;
cin>>potega;
cout << "pow(" << liczba << "," << potega << ")=" << pow( liczba, potega ) << endl;

pyt.2

jeszcze jedno odnośnie sub menu a więc

case 1:
cout<<" Wybrales KALKULATOR"<< endl;
cout<<endl;
if ( 1 = 1)
‹;
cout<<" 1 - Dodawanie "<< endl;
cout<<" 2 - Odejmowanie"<< endl;
›;
break;

po wybraniu 1 ma wyświetlać menu typu Dodawanie,Odejmowania lecz jak to tych cout'ów dodać kolejnego switcha?

case 1:
cout<<" Wybrales kalkulator"<< endl;
cout<<endl;
if ( 1 = 1)
‹;
cout<<" 1 Dodawanie "<< endl;
cout<<" 2 Odejmowania "<< endl;
›;
case 1:
cout<<" wybrales dodawanie"<< endl;
count<<" podaj liczbe"<< endl;
cin>>a;
cout<<" podaj kolejna"<< endl;
cin>>b;
itd...
break;

w tym stylu?

23.08.2012 16:54
10
odpowiedz
zanonimizowany861943
46
Generał

Liczby są jakiego typu? I jeśli dobrze rozumiem, chcesz żeby po wyborze to wyglądało tak?

1) A
2) B
-a
-b
-c
3) C
4) D

EDIT: I na cholerę ci 1=1 w ifie? Raz że jeśli to porównanie to zawsze prawda, a dwa, że "=" przypisuje a nie porównuje...

23.08.2012 17:09
11
odpowiedz
PkSrlz
71
Konsul

tak wiem pomyliłem się "==" to porównanie.. z Pascala mi się myli trochę.
zgadza się, chcę by po wybraniu opcji np. GEOMETRIA ukazywało się menu do tego działu z możliwością wyboru działań.
całość wygląda na chwilę obecną tak

<<part.1>>

#include <conio.h>
#include <iostream>
#include <math.h>
#include <cmath>

using namespace std;

int dzialanie,a,b,Wynik;
float liczba, potega;
int main()
‹;;
short x;

cout<<"<< Witaj >>" << endl;
cout<<"--------------------------------------------------------------"<< endl;

cout<<" Kalkulator - Menu "<< endl; // początek kalkulatora
cout<<endl;
cout<<"| 1 - Dodawania"<< endl;
cout<<"| 2 - Odejmowanie"<< endl;
cout<<"| 3 - Mnozenie"<< endl;
cout<<"| 4 - Dzielenie"<< endl;
cout<<"| 5 - Procent liczby"<< endl;
cout<<"| 6 - Potegowanie"<< endl;
cout<<"| 7 - Pierwiastkowanie"<< endl;
// zakończenie częsci kalkulatora
cout<<"--------------------------------------------------------------"<< endl;
cout<<" Figury - Pole,Obwod,Objetosc..."<< endl;
cout<<endl;
cout<<"| 8 - Czworokat"<< endl;
cout<<"| 9 - Trapez"<< endl;
cout<<"| 10 - Rownoleglobok"<< endl;
cout<<"| 11 - Romb"<< endl;
cout<<"| 12 - Prostokat"<< endl;
cout<<"| 13 - Kwadrat"<< endl;
cout<<"| 14 - Deltoid"<< endl;
cout<<"--------------------------------------------------------------"<< endl;
cout<<" GRANIASTOSLUPY - Pole,Objetosc... "<< endl;
cout<<endl;
cout<<"| 15 - Szescian"<< endl;
cout<<"| 16 - Prostopadloscian"<< endl;
cout<<"--------------------------------------------------------------"<< endl;
cin >> x;
switch (dzialanie)
‹;;
case 1:
cout<<" Wybrales DODAWANIE"<< endl;
cout<<endl;
if ( x==1)
‹;;
cout<<" 1 lol "<< endl;
cout<<" 2 lol "<< endl;
›;;
break;
case 2:
cout<<" Wybrales ODEJMOWANIE"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a - b;
cout<< Wynik;
break;
case 3:
cout<<" Wybrales MNOZENIE"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a * b;
cout<< Wynik;
break;
case 4:
cout<<" Wybrales DZIELENIE"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a / b;
cout<< Wynik;
break;
case 5:
cout<<" Wybrales PROCENT LICZBY"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a % b;
cout<< Wynik;
break;
case 6: // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<" Wybrales POTEGOWANIE"<< endl;
cout<<endl;
cout<<"Podaj liczbe: "<< endl;
cin>>liczba;
cout<<"Do ktorej potegi chcesz podniesc wybrania liczbe?: "<< endl;
cin>>potega;
cout << "pow(" << liczba << "," << potega << ")=" << pow( liczba, potega ) << endl;
break;
case 7: // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<" Wybrales PROCENT LICZBY"<< endl;
cout<<endl;
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
Wynik = a % b;
cout<< Wynik;
break;
default:
cout << "Zapraszam Ponownie :-)" << endl;
›;;

getch();
return 0;

›;;

czyli coś na tej zasadzie lecz to nie działa

case 1:
cout<<" Wybrales KALKULATOR"<< endl;
cout<<endl;

switch (kalkulator)

case 1:
cout<<" 1 dodawanie"<< endl;
cin>>a;
cin>>b;
cout<< a+b;

break;
case 2:
cout<<" 2 odejmowanie"<< endl;
cin>>a;
cin>>b;
cout<< a-b;
break;

czyli switch w switch'u..

23.08.2012 17:30
Wooler
12
odpowiedz
Wooler
81
Konsul

cin >> x;
switch (dzialanie)

wpisujesz nr opcji do x ale switcha obsługujesz na podstawie niezainicjalizowanej zmiennej dzialanie.
Potem nie rozumiem co ma to znaczyć w case 1:
if ( x==1)
‹;;
cout<<" 1 lol "<< endl;
cout<<" 2 lol "<< endl;
›;;

Procent liczby nie liczy się przez operator % bo odpowiada on za resztę z dzielenia.

23.08.2012 17:39
13
odpowiedz
PkSrlz
71
Konsul

cin >> x;
switch (dzialanie)

case 1:
cout<<" Wybrales kalkulator"<< endl;
cout<<endl;
if (x==1)

cout<<" wybralesdodawanie"<< endl;

break;

w sensie tak?

23.08.2012 18:21
Chudy The Barbarian
14
odpowiedz
Chudy The Barbarian
89
Legend

W sensie tak:

cin >> dzialanie;
switch(dzialanie)

//(...)

23.08.2012 18:22
15
odpowiedz
Tuminure
106
Senator

Pisanie funkcji jest naprawdę proste. Znacząco ułatwia pisanie programów i jeszcze bardziej ułatwia czytanie kodu osobom trzecim. Jeżeli chcesz pisać switche, w switchu, w ifie, w forze, w switchu... to nie wróżę Ci kariery programisty.

Po co te średniki po klamrach i przed nimi?

A teraz błędy.
1.
cin >> x;
switch (dzialanie)

Co to jest dzialanie? Dzialanie to x. Dlatego zrób dzialanie = x; Albo po prostu

cin >> x;
switch(x)

2.
int dzialanie,a,b,Wynik;
a = 5;
b = 2;
Wynik = a / b;
W zmiennej Wynik przesiaduje 2. A jak nietrudno się domyśleć, powinno być 2,5.
Typy zmiennych a, b, Wynik powinny być (co najmniej) double.

3.
Procent liczby to a * (b/100). Chyba o to chodzi.

@up
Zmienna x jest gdzieś jeszcze później wykorzystywana, dobrze by było aby się zdecydował na jedną z wersji.

23.08.2012 19:00
16
odpowiedz
zanonimizowany861943
46
Generał

Najzwyczajniej w świecie: zrób sobie funkcję która wyświetla główne menu, a potem w zależności od argumentu z jakim będzie wywołana czyści ekran i wyświetla menu główne z odpowiednim podmenu (zdecydowanie czytelniej by było gdybyś wyświetlanie podmenu napisał w osobnych funkcjach i to je przekazywał do głównej funkcji jako argument, ale tego robić nie musisz).

Typy zmiennych a, b, Wynik powinny być (co najmniej) double.

Nawet zwykły float wystarczy na taki prościutki kalkulator. Ważne, żeby nie int.

23.08.2012 21:40
17
odpowiedz
PkSrlz
71
Konsul

jednak zasięgnę jeszcze trochę do lektury i zrobię to funkcjami gdyż to jest faktycznie zbyt pogmatwane.

24.08.2012 11:03
18
odpowiedz
Tuminure
106
Senator

Gdybyś zrobił to funkcjami, to Twój program wyglądałby mniej więcej tak (nie mam kompilatora, a także nie chcę napisać wszystkiego za Ciebie, więc tak poglądowo tylko napisałem):

double dodawanie(a, b)
‹;
return a + b;
›;

double odejmowanie(a, b)
‹;
return a - b;
›;

int main()
‹;
cin >> dzialanie;
cin >> pierwsza;
cin >> druga;
switch(dzialanie)
case 1:
dodawanie(pierwsza, druga);
break;
case 2:
odejmowanie(pierwsza, druga);
break;
›;

24.08.2012 12:53
19
odpowiedz
PkSrlz
71
Konsul

no właśnie wielkie dzięki:) dzisiaj sobie poćwiczę nad jakimś krótkim programikiem by się z tym oswoić.

Forum: C++ - menu