• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego nie działa? Problem switch case funkcje

Object Storage Arubacloud
0 głosów
758 wizyt
pytanie zadane 14 stycznia 2018 w C i C++ przez KotDrewniany Początkujący (250 p.)
#include<iostream>
using namespace std;

void WybierzMenu(double &a, double &b, char wybor);
double ObliczKwadrat(double a);
double ObliczProstokat(double a, double b);
double ObliczKolo(double a);

int main()
{
    char wybor;
    double a=0, b=0;
    cout << "Wybierz figure ktorej chcesz policzyc obwod i pole" << endl;
    cout << "K - kwadrat, P - prostokat, O - okrag. "; cin >> wybor;
    WybierzMenu(a, b, wybor);

    return 0;
}

void WybierzMenu(double &a, double &b, char wybor)
{
    switch (wybor)
    {
    case 'K' : ObliczKwadrat(a);
    case 'P' : ObliczProstokat(a,b);
    case 'O' : ObliczKolo(a);
    }
}
double ObliczKwadrat(double &a)
{
    cout << "Podaj bok kwadratu: "; cin >> a;
    cout << "Obwod kwadratu wynosi = " << a*4;
    cout << "Pole kwadratu wynosi = " << a*a;
}

double ObliczProstokat(double &a, double &b)
{
    cout << "Podaj 1 bok prostokata: "; cin >> a;
    cout << "Podaj 2 bok prostokata: "; cin >> b;
    cout << "Obwod prostokata wynosi = " << a*2+b*2;
    cout << "Pole prostokata wynosi = " << a*b;
}
double ObliczKolo(double &a)
{
    cout << "Podaj promien kola: "; cin >> a;
    cout << "Obwod kola wynosi = " << 2*a*3.14;
    cout << "Pole prostokata wynosi = " << 3.14*a*a;
}

 

komentarz 14 stycznia 2018 przez KotDrewniany Początkujący (250 p.)
Zrobiłam tak jak mówiliście ale i tak się nie kompiluje

#include<iostream>
using namespace std;

class Obliczenia
{
public:

void WybierzMenu(void &a, void &b, char wybor)
{
    switch (wybor)
    {
    case 'K' : ObliczKwadrat(a); break;
    case 'P' : ObliczProstokat(a,b); break;
    case 'O' : ObliczKolo(a);
    }
}
double ObliczKwadrat(void &a)
{
    cout << "Podaj bok kwadratu: "; cin >> a;
    cout << "Obwod kwadratu wynosi = " << a*4<<endl;
    cout << "Pole kwadratu wynosi = " << a*a<<endl;
}

double ObliczProstokat(void &a, void &b)
{
    cout << "Podaj 1 bok prostokata: "; cin >> a;
    cout << "Podaj 2 bok prostokata: "; cin >> b;
    cout << "Obwod prostokata wynosi = " << a*2+b*2<<endl;
    cout << "Pole prostokata wynosi = " << a*b<<endl;
}
double ObliczKolo(void &a)
{
    cout << "Podaj promien kola: "; cin >> a;
    cout << "Obwod kola wynosi = " << 2*a*3.14<<endl;
    cout << "Pole prostokata wynosi = " << 3.14*a*a<<endl;
}
};

int main()
{
    char wybor;
    double a=0, b=0;
    cout << "Wybierz figure ktorej chcesz policzyc obwod i pole" << endl;
    cout << "K - kwadrat, P - prostokat, O - okrag. "; cin >> wybor;
    WybierzMenu(a, b, wybor);

    return 0;
}

Pisze tak:

error: cannot declare reference to 'void'

Jak jest double to pisze

że "WybierzMenu" was not declared in this scope

komentarz 14 stycznia 2018 przez KotDrewniany Początkujący (250 p.)

Działa!

#include<iostream>
using namespace std;

void ObliczKwadrat(double &a);
void ObliczProstokat(double &a, double &b);
void ObliczKolo(double &a);

void WybierzMenu(double &a, double &b, char wybor)
{
    switch (wybor)
    {
    case 'K' : ObliczKwadrat(a); break;
    case 'P' : ObliczProstokat(a,b); break;
    case 'O' : ObliczKolo(a);
    }
}
void ObliczKwadrat(double &a)
{
    cout << "Podaj bok kwadratu: "; cin >> a;
    cout << "Obwod kwadratu wynosi = " << a*4<<endl;
    cout << "Pole kwadratu wynosi = " << a*a<<endl;
}

void ObliczProstokat(double &a, double &b)
{
    cout << "Podaj 1 bok prostokata: "; cin >> a;
    cout << "Podaj 2 bok prostokata: "; cin >> b;
    cout << "Obwod prostokata wynosi = " << a*2+b*2<<endl;
    cout << "Pole prostokata wynosi = " << a*b<<endl;
}
void ObliczKolo(double &a)
{
    cout << "Podaj promien kola: "; cin >> a;
    cout << "Obwod kola wynosi = " << 2*a*3.14<<endl;
    cout << "Pole prostokata wynosi = " << 3.14*a*a<<endl;
}

int main()
{
    char wybor;
    double a=0, b=0;
    cout << "Wybierz figure ktorej chcesz policzyc obwod i pole" << endl;
    cout << "K - kwadrat, P - prostokat, O - okrag. "; cin >> wybor;
    WybierzMenu(a, b, wybor);

    return 0;
}


Dziękuję serdecznie za pomoc!!! smiley

komentarz 14 stycznia 2018 przez Pabiak Gaduła (4,450 p.)
Cieszę się, że działa, to z klasa też by zadziałało, ale nie utworzyłaś obiektu a funkcje w klasie powinny być napisane tak: void ObliczKolo(double &a). Typ funkcji void, parametry typu double. Zobacz swój kod z klasami i mój, który podałem niżej, może kiedyś Ci się przydać :D

3 odpowiedzi

0 głosów
odpowiedź 14 stycznia 2018 przez tangarr Mędrzec (154,860 p.)

Musisz przerwać wykonywanie kodu z wewnątrz switcha instrukcją break.

void WybierzMenu(double &a, double &b, char wybor)
{
    switch (wybor)
    {
    case 'K' : 
        ObliczKwadrat(a); 
        break;
    case 'P' : 
        ObliczProstokat(a,b); 
        break;
    case 'O' : 
        ObliczKolo(a);
        // ostatnia opcja nie potrzebuje breaka.
    }
}

Switch działa tak, że wyszukuje twój wybór a następnie przetwarza resztę kodu linia po lini.

komentarz 14 stycznia 2018 przez KotDrewniany Początkujący (250 p.)

Niestety nie dzialasad. Pisze tak:

komentarz 14 stycznia 2018 przez tangarr Mędrzec (154,860 p.)
Nic nie widać na tym obrazku.
Wklej tekst.
0 głosów
odpowiedź 14 stycznia 2018 przez Pabiak Gaduła (4,450 p.)
edycja 14 stycznia 2018 przez Pabiak

Nie jestem jakimś ekspertem, ale wydaje mi się, że lepiej zrobić do tego klasę.

#include<iostream>
using namespace std;

class Obliczenia
{
public:

void WybierzMenu(double &a, double &b, char wybor)
{
    switch (wybor)
    {
    case 'K' : ObliczKwadrat(a); break;
    case 'P' : ObliczProstokat(a,b); break;
    case 'O' : ObliczKolo(a);
    }
}
double ObliczKwadrat(double &a)
{
    cout << "Podaj bok kwadratu: "; cin >> a;
    cout << "Obwod kwadratu wynosi = " << a*4<<endl;
    cout << "Pole kwadratu wynosi = " << a*a<<endl;
}

double ObliczProstokat(double &a, double &b)
{
    cout << "Podaj 1 bok prostokata: "; cin >> a;
    cout << "Podaj 2 bok prostokata: "; cin >> b;
    cout << "Obwod prostokata wynosi = " << a*2+b*2<<endl;
    cout << "Pole prostokata wynosi = " << a*b<<endl;
}
double ObliczKolo(double &a)
{
    cout << "Podaj promien kola: "; cin >> a;
    cout << "Obwod kola wynosi = " << 2*a*3.14<<endl;
    cout << "Pole prostokata wynosi = " << 3.14*a*a<<endl;
}

};
int main()
{
    Obliczenia o;
    char wybor;
    double a=0, b=0;
    cout << "Wybierz figure ktorej chcesz policzyc obwod i pole" << endl;
    cout << "K - kwadrat, P - prostokat, O - okrag. "; cin >> wybor;
    o.WybierzMenu(a, b, wybor);

    return 0;
}

Po skompilowaniu działa ;)

//EDIT

W codeblocks przechodzi, ale w visual studio wywala błędy, bo nie zwracasz wartości w funkcji double, zamień ją na void i po sprawie.

0 głosów
odpowiedź 14 stycznia 2018 przez Mimir Nowicjusz (140 p.)
Wydaje mi się, że funkcje obliczające pole powierzchni powinny być typu "void", a nie "double", ponieważ nie zwracają wartości, a jedynie wypisują dane.

Podobne pytania

0 głosów
2 odpowiedzi 724 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez mcsobieski00 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 220 wizyt
0 głosów
4 odpowiedzi 1,264 wizyt
pytanie zadane 3 stycznia 2017 w C i C++ przez pokrywa1 Użytkownik (990 p.)

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...