Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Działanie instrukcji switch...case

jedrus55 28 Mar 2011 19:53 5246 11
  • #1 28 Mar 2011 19:53
    jedrus55
    Poziom 12  

    Witam mam mały problem ponieważ w C++ jestem bardzo początkujący. Chodzi mi o instrukcje switch...case. Zrobiłem prosty kalkulator dla dwóch liczb. Wygląda to tak:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Wszystko działa ok ale muszę wpisywać kolejne cyfry np. dla obliczenia sumy 1. A jak zrobić żeby do wyboru sumy musiałbym wpisać "suma"?

    0 11
  • #2 28 Mar 2011 20:56
    na_kacu
    Poziom 9  

    Zainkluduj <string>
    Zmienną dzialanie zmień na typ std::string.
    Potem:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Można użyć też std::map,ale skoro jesteś początkujący to może zrób to na if-ach.

    0
  • #3 28 Mar 2011 21:17
    jedrus55
    Poziom 12  

    No faktycznie na ifach też da rade ale czy da sie to zrobić za pomocą switch...case?

    0
  • #5 29 Mar 2011 00:21
    H0miczek
    Poziom 20  

    Da się.
    wszystko sie da. oplacalność jest odrębną kwestią ;)
    Majac tabelkę stringów {"suma", "roznica",... }, (albo moze i nawet niekoniecznie lecz wygodniej), porównujesz wprowadzony ciąg znakow. z prostych operacji bitowych/innych na koniec masz numerek (pisało się rózne parsery, na chwilę obecną nie jestem w stanie podać konkretów) i switch'ujesz analogicznie i wszystko dziala..
    W tym zastosowaniu jednak zalecam if'y, co najwyżej w wolnej chwili w ramach doksztalcania mozesz pomyślec jak to zrobic inaczej

    0
  • #6 29 Mar 2011 01:56
    na_kacu
    Poziom 9  

    Żeby tylko nie z armatą na wróbla. :D

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #7 29 Mar 2011 10:18
    Dariusz Bismor
    Poziom 17  

    Oto potęga języka C++:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Natomiast czy jest to opłacalne to już tak zwana inna para gniadoszy.
    HTH,
    Dariusz

    0
  • #8 29 Mar 2011 11:20
    na_kacu
    Poziom 9  

    Jak pisałem.Ten wróbel już się nie podniesie. :D

    0
  • #9 29 Mar 2011 19:12
    kolokat
    Poziom 26  

    Ludzie...
    Chłopak początkujący z C++ a Wy mu klasami zarzucacie?
    Przecież on nawet składni dobrze nie zna, a w dodatku stosuje int'a do dzielenia.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #10 29 Mar 2011 19:55
    Dariusz Bismor
    Poziom 17  

    Wiem, że jako nauczyciel powinienem być cierpliwy, ale czasami ręce opadają...

    Po raz N-ty na tym forum powtarzam: nauka C++ nie polega na nauce najpierw C, a potem "tych dodatków". Kolego kolokat, czy "Chłopak początkujący z C++ a Wy mu klasami zarzucacie?" powiesz osobie, która uczy się Javy jako pierwszego języka? Co ona ma zrobić, jak nie zacząć używać klas? Uwierzcie, wszyscy początkujący: klasy to nic strasznego!. Ot, taki zapis funkcji i danych w jednym miejscu.

    Rozwiązanie podane przez kolegę kolokat-a ma same wady. Żeby wymienić kilka: wielokrotne powtarzanie tego samego kodu, niezalecana duża długość zapisu "case", brak kontroli wprowadzonej operacji. Krótko, gdyby ktoś coś takiego mi dał do oceny, byłaby to ocena negatywna.

    Ale najważniejsze: nie jest to odpowiedź na postawiony problem, który, przypomnę, brzmiał:

    Cytat:
    A jak zrobić żeby do wyboru sumy musiałbym wpisać "suma"?


    I jeszcze jedno, kolego kolokat. Czyżby rezultat dzielenia, np. 2 przez 5 - w dziedzinie liczb całkowitych - nie był Ci znany?

    HTH,
    Dariusz

    0
  • #11 29 Mar 2011 20:25
    kolokat
    Poziom 26  

    Dariusz Bismor napisał:
    Wiem, że jako nauczyciel powinienem być cierpliwy, ale czasami ręce opadają...

    Po raz N-ty na tym forum powtarzam: nauka C++ nie polega na nauce najpierw C, a potem "tych dodatków". Kolego kolokat, czy "Chłopak początkujący z C++ a Wy mu klasami zarzucacie?" powiesz osobie, która uczy się Javy jako pierwszego języka? Co ona ma zrobić, jak nie zacząć używać klas? Uwierzcie, wszyscy początkujący: klasy to nic strasznego!. Ot, taki zapis funkcji i danych w jednym miejscu.

    Rozwiązanie podane przez kolegę kolokat-a ma same wady. Żeby wymienić kilka: wielokrotne powtarzanie tego samego kodu, niezalecana duża długość zapisu "case", brak kontroli wprowadzonej operacji. Krótko, gdyby ktoś coś takiego mi dał do oceny, byłaby to ocena negatywna.

    Ale najważniejsze: nie jest to odpowiedź na postawiony problem, który, przypomnę, brzmiał:
    Cytat:
    A jak zrobić żeby do wyboru sumy musiałbym wpisać "suma"?


    I jeszcze jedno, kolego kolokat. Czyżby rezultat dzielenia, np. 2 przez 5 - w dziedzinie liczb całkowitych - nie był Ci znany?

    HTH,
    Dariusz


    To współczuje twoim uczniom.
    Co to za przykład z Java? Podajesz przykład zastosowania klas dla języka, który się na klasach opiera?

    Jak ma się nauczyć ich stosowania? Na wprowadzeniu, które porówna tą samą operacje z użyciem klas i iteracyjnie. Wtedy najlepiej zrozumie, bo będzie wiedział, że przyspieszy mu to pracę i skróci kod. Ale to wymaga tłumaczenia, nie każdy musi świetnie składnie rozumieć.

    Jeśli ty zarzucasz kodem z klasami uczniom, z którymi na poprzednich zajęciach robiłeś powiedzmy tablice dwuwymiarowe, to gwarantuje, ze 70% bez wejściówki nie złapie.

    Ty masz prawo mieć swoje zdanie, a ja mam prawo mieć je gdzieś.
    Ten kod jest dla każdego zrozumiały, bo tak ma być.
    Uczę 13-latka C++ i nie zamierzam go do tego zniechęcać. A ten kod, jest prosty i przejrzysty.


    Znam. Ale rzadko przy dzieleniu dostajesz liczby całkowite, a szczególnie w "kalkulatorze"
    PS. W mojej ocenie byłaby pozytywna.

    0
  • #12 14 Kwi 2011 11:52
    nero_pat
    Poziom 9  

    Heh... Dariuszu dziękujemy Ci za wyczerpujący wykład, ale jak problem nie był rozwiązany, tak i nie jest ^^ I ciesz się, że Ciebie nikt nie ocenia z Twoich predyspozycji edukacyjnych..

    Moderowany przez arnoldziq:

    I za tę światłą i tak wiele wnoszącą do dyskusji uwagę, udzielam koledze Ostrzeżenia #1.
    3.1.11. (10.2, 10.7, 12) Zabronione jest publikowanie wpisów nie zawierających merytorycznej treści[...]
    3.1.14. (8.3) Zabronione jest publikowanie wpisów niezgodnych z tematyką danego forum.
    3.1.9. (4, 10.8, 10.4) Zabronione jest rozpowszechnianie treści ironizujących, prześmiewczych lub złośliwych, stanowiących przejaw braku szacunku do innych Użytkowników lub osób trzecich.

    0