Czy ten kod jest dobrze zbudowany?

0

Witam, chciałbym się zapytać czy ten kod, który odpowiada za prosty kalkulator jest czytelny i dobrze zbudowany, gdyż jestem początkującym. Z góry dzięki :)

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <time.h>



int main()

{
    using namespace std;




    int wybor, ab, wybo, wyboo;

    double a, b, wynik;
    double reszta = fmod (a,b);





    do{

    cout << "Podaj a.\n\n";
      cin >> a;

    cout << "Podaj b.\n\n";
      cin >> b;

    cout << "Podaj dzia³anie, które chcesz wykonaæ: [1] Dodawanie, [2] Odejmowanie,\n [3] Mno¿enie, [4] Dzielenie\n\n";
      cin >> wybor;




    switch(wybor)
{

      case 1:

          wynik = a + b;

          cout << "a + b = " << wynik << endl << endl;

        break;

      case 2:

          wynik = a - b;

          cout << "a - b = " << wynik <<"\n\n";

        break;

      case 3:

          wynik = a * b;

          cout << "a * b = " << wynik << endl << endl;

        break;

      case 4:

          wynik = a / b;

          cout << "a / b = " << wynik << "\n\n";



          cout << "Reszta z dzielenia to " << fmod(a,b) << endl << endl;



        break;


      default:

          system ("cls");

          cout << "Wybierz liczbê od 1 do 4!\n";

          cout << "Zresetuj program i spróbuj ponownie.\n";

          _sleep(10000000000000);

}


    cout << "Jeśli chcesz ponowić liczenie wpisz 1, jeśli chcesz wyjść wpisz 2" << endl;
    cin >> wyboo;



} while(wyboo == 1);


system("cls");
system("pause");


} 
3

Nie jest dobrze, bo wszystko zapisałeś w metodzie inicjalizującej main(). Powinieneś rozbić logikę na funkcje pośrednie np. jedna niech zbierze informacje, a druga liczy. Jeszcze inna może być odpowiedzialna za wyświetlenie wyniku. Funkcje muszą współdziałać ze sobą, main powinien uruchomić jedną z nich, a nie być odpowiedzialnym za wszystko.

A to nie w main() tylko pod biblioteczkami, które wczytujesz, chyba, że nie wiem, o jakichś nowych konwencjach.

using namespace std;
4

To co mi się rzuciło w oczy:

  • wcięcia
  • system
  • jak pozbędziesz się system to pozbądź się również windows.h, conio.h i time.h
  • do sleepa używaj std::this_thread::sleep_for()
  • po co Ci fmod() skoro jest operator % Zapomniałem, że to zmiennoprzecinkowe
  • int wybor, ab, wybo, wyboo; ?
  • ok to jest większym wtf :p
 
    double a, b, wynik;
    double reszta = fmod (a,b);
  • podziel to na funkcje
  • jak chcesz dać możliwość obliczenia reszty z dzielenia to daj to do menu jako oddzielny wybór, a nie wrzucasz do zwykłego dzielenia
5
  1. int wybor, ab, wybo, wyboo; normalnie to nazwij
  2. _sleep(10000000000000); no co to ma być
  3. formatuj kod
  4. zmienna wynik nie bardzo jest potrzebna
0

Niektóre treści mogą być już nudne ale polecam obejrzeć sobie całe szkolenie na Youtube nie jakiego pana MirosławaZelenta. Dowiesz się jak pisać funkcje, zadbać o stylizacje kodu na co zwracać uwagę. I powolutku przejdziesz wszystko, oczywiście warto też pooglądać jakieś gotowe kody i porównać, sprawdzić różnice i zrozumieć dlaczego tak a nie inaczej. No i po kilku dnia mógłbyś już napisać go obiektowo.

0

Dzięki wszystkim za pomoc, wyszło z tego coś takiego, ale dalej nie wiem o co dokładnie Wam chodzi z tymi wcięciami, tzn. czy za dużo/ za mało i w jakich miejscach się ich wystrzegać/używać.

 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <math.h>


using namespace std;


double dodawanie(double a, double b) //funkcja dodawania
{
    return a + b;
}

double odejmowanie (double a, double b) //funkcja odejmowania
{
    return a - b;
}

double mnozenie (double a, double b) //funkcja mnożenia
{
    return a * b;
}

double dzielenie (double a, double b) //funkcja dzielenia
{
    return a / b;
}

double kalkulator (double a, double b, int menu)

{

switch(menu) //wybór operacjii matematyczniej
{

      case 1:

          return dodawanie (a, b);

        break;

      case 2:

          return odejmowanie (a, b);

        break;

      case 3:

          return mnozenie (a, b);

        break;

      case 4:
          {
            return dzielenie (a, b);
          }




        break;

      default:
{

          return 0;

          cout << "Wybierz liczbê od 1 do 4!\n";

          exit(0);


}
}
}
int main()

{

      int menu, ponowienie;

      double a, b;


    do{ //pętla odpowiedzialna za ponownienie programu

    cout << "Podaj a:\n\n"; //wybór składników
      cin >> a;

    cout << "Podaj b:\n\n";
      cin >> b;

    cout << "Podaj działanie, które chcesz wykonać:\n [1] Dodawanie,\n [2] Odejmowanie,\n [3] Mnożenie,\n [4] Dzielenie:\n\n"; //wybór operacji matematycznej
      cin >> menu;


    cout << "Twój wynik to " << kalkulator (a, b, menu) << endl; //wynik


    cout << "Jeśli chcesz ponowić liczenie wpisz 1, jeśli chcesz wyjść wpisz 2." << endl;
    cin >> ponowienie;



} while(ponowienie == 1);

return 0;

}
1

Lepiej, ale:

  1. zamiast math.h użyj cmath
  2. te funkcje do podstawowych operacji matematycznych sobie odpuść. Po co odejmowanie(a, b) skoro można ładniej, czytelniej, prościej, krócej a - b
0

Pooglądaj sobie jak wyglądają przykładowe programy, jakie tam są wcięcia. Program źle sformatowany nie będzie różnił się w działaniu, ale gdy jakiś programista zobaczy taki syfiasty kod to się za łep złapie.
U mnie to się rozwiązuje wciskając jeden skrót klawiszowy... cały kod jest potem dobrze sformatowany. Większość IDE formatuje w jakiś sposób kod. Czego ty używasz do pisania kodu? Windowsowego notatnika? _

0

no no nie wygląda tragicznie. A6W robiłeś?

1
double dodawanie(double a, double b) //funkcja dodawania

Zbędny komentarz, który nic nie wnosi. Funkcja też zbędna, ale o tym już wspomniał @pingwindyktator

return dodawanie (a, b);
break;

po return już nic się nie wykona, więc break zbędny

return 0;
cout << "Wybierz liczbê od 1 do 4!\n";
exit(0);

Patrzy wyżej. W dodatku nie używaj exit() dopóki nie będziesz wiedział dokładnie co robi. Tobie return powinien wystarczyć.

ale dalej nie wiem o co dokładnie Wam chodzi z tymi wcięciami
Popatrz na ten kod i porównaj ze swoim:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;

double dodawanie(double a, double b)
{
    return a + b;
}

double odejmowanie (double a, double b)
{
    return a - b;
}

double mnozenie (double a, double b)
{
    return a * b;
}

double dzielenie (double a, double b)
{
    return a / b;
}

double kalkulator (double a, double b, int menu)
{
    switch(menu) //wybór operacjii matematyczniej
    {
    case 1:
        return dodawanie (a, b);

    case 2:
        return odejmowanie (a, b);

    case 3:
        return mnozenie (a, b);

    case 4:
        return dzielenie (a, b);
        
    default:
        return 0;
    }
}

int main()
{
    int menu, ponowienie;
    double a, b;
    do
    { //pętla odpowiedzialna za ponownienie programu
        cout << "Podaj a:\n\n"; //wybór składników
        cin >> a;
        cout << "Podaj b:\n\n";
        cin >> b;
        cout << "Podaj działanie, które chcesz wykonać:\n [1] Dodawanie,\n [2] Odejmowanie,\n [3] Mnożenie,\n [4] Dzielenie:\n\n"; //wybór operacji matematycznej
        cin >> menu;
        cout << "Twój wynik to " << kalkulator (a, b, menu) << endl; //wynik
        cout << "Jeśli chcesz ponowić liczenie wpisz 1, jeśli chcesz wyjść wpisz 2." << endl;
        cin >> ponowienie;
    } while(ponowienie == 1);
    
    return 0;
}
0

Ok dzięki wszystkim za odpowiedzi :D

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