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

Kalkulator c++ opinie

VPS Starter Arubacloud
0 głosów
778 wizyt
pytanie zadane 4 sierpnia 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)

Cześć,

Stworzyłem kalkulator z zadania:

"
Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco: 
1. Wypisuje obecny wynik 
2. Wprowadź liczbę 
3. Wybierz działanie (jeżeli liczba różna od 0) 
4. Wykonaj obliczenia (jeżeli liczba różna od 0) 
5. Wróć do kroku 1. 
6. Jeżeli wprowadzoną liczbą jest 0, zakończ program. 
" Trochę dodałem od siebie np. spr. czy to liczba itp.

Robiąc wszystko samemu, nie wiem jak można wykonać zadania inaczej/ czytelniej, dlatego chciałem to skonsultować tutaj. Proszę o wszelkie opinie, a jak by komuś się chciało zrobić zadanie inaczej to byłbym wdzięczny.

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <stdio.h>

using namespace std;

int main()
{
    int wybor, dzialac_dalej;
    do{
        cout<<"MENU GLOWNE\n";
        cout<<"-----------------\n";
        cout<<"[1]Dodawanie\n";
        cout<<"[2]Odejmowanie\n";
        cout<<"[3]Mnozenie\n";
        cout<<"[4]Dzielenie\n";
        cout<<"[5]Wyjscie\n";
        cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
        wybor=getch();

        switch(wybor){
            case '1':{
                int liczba[3],wynik;
                bool stan_liczba[3];
                do{
                    cout<<"Dodawanie\n";
                    cout<<"Podaj 1 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[0];
                    stan_liczba[0]=cin.good();
                    cout<<"Podaj 2 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[1];
                    stan_liczba[1]=cin.good();
                    cout<<"Podaj 3 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[2];
                    stan_liczba[2]=cin.good();

                    if((stan_liczba[0]==1)&&(stan_liczba[1]==1)&&(stan_liczba[2]==1)&&(liczba[0]!=0)&&(liczba[1]!=0)&&(liczba[2]!=0)){
                        wynik=liczba[0]+liczba[1]+liczba[2];
                        cout<<"Wynik: "<<wynik<<endl;
                        cout<<"Czy wrocic do menu glownego?\n";
                        cout<<"[1]Tak\n";
                        cout<<"[2]Nie/ Opusc program\n";
                        cin>>dzialac_dalej;
                        if(dzialac_dalej==1){
                            system("cls");
                            break;
                        }
                        else
                            exit(0);
                    }
                    else{
                        system("cls");
                        cout<<"Wprowadziles zle dane!\n";
                        cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
                        stan_liczba[0]=false;   // dlatego to dodalem bo w while(..) musial bym
                        stan_liczba[1]=false;   // dodac dodatkowe argumenty dla liczba[i]==0
                        stan_liczba[2]=false;
                    }
                }while((stan_liczba[0]==false)||(stan_liczba[1]==false)||(stan_liczba[2]==false));
                break;
            }
            case '2':{
                int liczba[2], wynik;
                bool stan_liczba[2];
                do{
                    cout<<"Odejmowanie\n";
                    cout<<"Podaj 1 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[0];
                    stan_liczba[0]=cin.good();
                    cout<<"Podaj 2 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[1];
                    stan_liczba[1]=cin.good();
                    if((stan_liczba[0]==1)&&(stan_liczba[1]==1)&&(liczba[0]!=0)&&(liczba[1]!=0)){
                        wynik=liczba[0]-liczba[1];
                        cout<<"Wynik: "<<wynik<<endl;
                        cout<<"Czy wrocic do menu glownego?\n";
                        cout<<"[1]Tak\n";
                        cout<<"[2]Nie/ Opusc program\n";
                        cin>>dzialac_dalej;
                        if(dzialac_dalej==1){
                            system("cls");
                            break;
                        }
                        else
                            exit(0);
                    }
                    else{
                        system("cls");
                        cout<<"Wprowadziles zle dane!\n";
                        cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
                        stan_liczba[0]=false;
                        stan_liczba[1]=false;
                    }
                }while((stan_liczba[0]==false)||(stan_liczba[1]==false));
                break;
            }
            case '3':{
                int liczba[3], wynik;
                bool stan_liczba[3];
                do{
                    cout<<"Podaj 1 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[0];
                    stan_liczba[0]=cin.good();
                    cout<<"Podaj 2 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[1];
                    stan_liczba[1]=cin.good();
                    cout<<"Podaj 3 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[2];
                    stan_liczba[2]=cin.good();
                    if((stan_liczba[0]==1)&&(stan_liczba[1]==1)&&(stan_liczba[2]==1)&&(liczba[0]!=0)&&(liczba[1]!=0)&&(liczba[2]!=0)){
                        wynik=liczba[0]*liczba[1]*liczba[2];
                        cout<<"Wynik: "<<wynik<<endl;
                        cout<<"Czy wrocic do menu glownego?\n";
                        cout<<"[1]Tak\n";
                        cout<<"[2]Nie/ Opusc program\n";
                        cin>>dzialac_dalej;
                        if(dzialac_dalej==1){
                            system("cls");
                            break;
                        }
                        else
                            exit(0);
                    }
                    else{
                        system("cls");
                        cout<<"Wprowadziles zle dane!\n";
                        cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
                        stan_liczba[0]=false;
                        stan_liczba[1]=false;
                        stan_liczba[2]=false;
                    }
                }while((stan_liczba[0]==false)||(stan_liczba[1]==false)||(stan_liczba[2]==false));
                break;
            }
            case '4':{
                int liczba[3], wynik;
                bool stan_liczba[2];
                do{
                    cout<<"Podaj 1 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[0];
                    stan_liczba[0]=cin.good();
                    cout<<"Podaj 2 liczbe: ";
                    cin.clear();
                    cin.sync();
                    cin>>liczba[1];
                    stan_liczba[1]=cin.good();
                    if((stan_liczba[0]==1)&&(stan_liczba[1]=1)&&(liczba[0]!=0)&&(liczba[1]!=0)){
                        wynik=liczba[0]/liczba[1];
                        cout<<"Wynik: "<<wynik<<endl;
                        cout<<"Czy wrocic do menu glownego?\n";
                        cout<<"[1]Tak\n";
                        cout<<"[2]Nie/ Opusc program\n";
                        cin>>dzialac_dalej;
                        if(dzialac_dalej==1){
                            system("cls");
                            break;
                        }
                        else
                            exit(0);
                    }
                    else{
                        system("cls");
                        cout<<"Wprowadziles zle dane!\n";
                        cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
                        stan_liczba[0]=false;
                        stan_liczba[1]=false;
                        stan_liczba[2]=false;
                    }
                }while((stan_liczba[0]==false)||(stan_liczba[1]==false));
                break;
            }
            case '5':
                exit(0);
            default:{
                system("cls");
                cout<<"Wybrano z poza zakresu!\n\n";
                dzialac_dalej=1;
            }
        }
    }while(dzialac_dalej==1);
    getchar();getchar();

    return 0;
}

Z góry dzięki za przeanalizowanie kodu, wypisanie swojego itp.

Pozdrawiam,
Hinzeq

 

EDIT:
Proszę jeszcze o alternatywę dla <conio.h>, lepiej chyba by było multiplatformowe tak?

komentarz 5 sierpnia 2018 przez niezalogowany
Czemu przy dodawaniu/mnożeniu są 3 liczby?
komentarz 6 sierpnia 2018 przez Hinzeq Użytkownik (860 p.)

Sprawdzałem jak się zachowa w takiej konfiguracji, a potem zapomniałem usunąć.

 

4 odpowiedzi

0 głosów
odpowiedź 5 sierpnia 2018 przez Bondrusiek Maniak (61,370 p.)
wybrane 6 sierpnia 2018 przez Hinzeq
 
Najlepsza

Witam,

tak jak mówili przedmówcy warto użyć funkcji aby podzielić projekt na moduły wykonujące określone zadanie np.

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <stdio.h>

using namespace std;

void wyswietlMenu()
{
    cout<<"MENU GLOWNE\n";
    cout<<"-----------------\n";
    cout<<"[1]Dodawanie\n";
    cout<<"[2]Odejmowanie\n";
    cout<<"[3]Mnozenie\n";
    cout<<"[4]Dzielenie\n";
    cout<<"[5]Wyjscie\n";
    cout<<"NALEZY PODAC LICZBY INNE NIZ 0\n\n";
}

int main()
{
    int wybor, dzialac_dalej;
    do{
        wyswietlMenu();
        wybor=getch();
...

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Funkcje-pierwsze-starcie/291

Dodając pliki nagłówkowy z języka C w nowszych standardach powinno się dodać literę c przed i usunąć .h np.

#include <cstdlib> // zamiast #include <stdlib.h>
#include <stdio.h> // można poprawic na #include <cstdio>

 

+1 głos
odpowiedź 5 sierpnia 2018 przez j23 Mędrzec (194,920 p.)
  1. Stwórz funkcję pobierającą liczbę od użytkownika, bo teraz powtarzasz ten sam kod w czterech case'ach po dwa razy.
  2. po co ten sync? Rozumiesz znaczenie tej metody?
  3. linia 20: dlaczego getch, a nie cin.get?
0 głosów
odpowiedź 5 sierpnia 2018 przez mokrowski Mędrzec (155,460 p.)
Zasadnicze pytanie to to czy znasz funkcje. Jeśli je znasz, to wydzielisz kod do funkcji i podniesiesz czytelność kodu. Oczywiście coś dało by się zrobić i teraz. Nie dało by to jednak tak istotnych wyników w stosunku do podziału na funkcjonalności do funkcji.

Alternatywą wielo-platformową dla conio.h jest ncurses. Jeśli używasz mingw-w64 w środowisku MS WIndows, to jest dostępne w pakietach. Jeśli to GNU/Linux, pakiety dystrybucji Ci to zapewniają.

PS. Jest kilka błędów/niezręczności w kodzie już teraz ale proponuję najpierw kod zmodularyzować.
0 głosów
odpowiedź 6 sierpnia 2018 przez Hinzeq Użytkownik (860 p.)
Widzę jest co poprawiać, dzięki za Waszą pomoc!

Podobne pytania

0 głosów
1 odpowiedź 843 wizyt
0 głosów
1 odpowiedź 267 wizyt

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...