Ocena Mojego Pierwszego większego programu

3

Witam, niedawno zacząłem programować w moim pierwszym języku czyli C++. Aktualnie jestem na 6 odc. kursu C++ na kanale "Pasja Informatyki".

Ostatnio stworzyłem dwa programy, jeden to kalkulator, drugi oblicza objętości figur. Postanowiłem połączyć go w jeden. Poniżej wklejam efekty mojej pracy. Prawdopodobnie złapiecie się za głowę, bo ma mnóstwo błędów, na które starsi programiści by sobie nie pozwolili. Proszę o opinię oraz co mógłbym zmienić. W przyszłości chciałbym dodać tu jeszcze więcej programów np. Obliczanie pola itp. Chciałbym także dodać taką opcję, że kiedy już wejdę do kalkulatora to po wydrukowaniu wyniku nadal pozostaje w kalkulatorze a nie wchodzę ponownie do Menu.

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

void kalkulator()
{
    system("cls");

    int choice;
    float a, b;

    std::cout << "   MENU GLOWNE\n";
    std::cout << "-----------------\n";
    std::cout << "1. Dodawanie\n";
    std::cout << "2. Odejmowanie\n";
    std::cout << "3. Mnozenie\n";
    std::cout << "4. Dzielenie\n";
    std::cout << "5. Pierwiastkowanie\n";
    std::cout << "6. Potegowanie\n";
    std::cout << "\nCo wybierasz[0-6]? ";

    choice = getch();

    switch (choice) {
    case '1':
        system("cls");
        std::cout << "======[Dodawanie]======\n\n";
        std::cout << "Podaj 1 liczbe: ";
        std::cin >> a;
        std::cout << "Podaj 2 liczbe: ";
        std::cin >> b;
        std::cout << "===================\n";
        std::cout << "\n      Suma: " << a + b;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '2':
        system("cls");
        std::cout << "======[Odejmowanie]======\n\n";
        std::cout << "Podaj 1 liczbe: ";
        std::cin >> a;
        std::cout << "Podaj 2 liczbe: ";
        std::cin >> b;
        std::cout << "===================\n";
        std::cout << "\n    Roznica: " << a - b;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '3':
        system("cls");
        std::cout << "======[Mnozenie]======\n\n";
        std::cout << "Podaj 1 liczbe: ";
        std::cin >> a;
        std::cout << "Podaj 2 liczbe: ";
        std::cin >> b;
        std::cout << "===================\n";
        std::cout << "\n   Iloczyn: " << a * b;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '4':
        system("cls");
        std::cout << "======[Dzielenie]======\n\n";
        std::cout << "Podaj 1 liczbe: ";
        std::cin >> a;
        std::cout << "Podaj 2 liczbe: ";
        std::cin >> b;
        std::cout << "\n   Iloraz: " << a / b;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '5':
        system("cls");
        std::cout << "======[Pierwiastkowanie]======\n\n";
        std::cout << "Podaj stopien pierwiastka: ";
        std::cin >> b;
        std::cout << "Podaj liczbe ktora bedzie pierwiastkowana: ";
        std::cin >> a;
        std::cout << "===================\n";
        std::cout << "Wynik wynosi: " << pow(a, (1 / b));
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '6':
        system("cls");
        std::cout << "======[Potegowanie]======\n\n";
        std::cout << "Podaj liczbe ktora bedzie potegowana: ";
        std::cin >> a;
        std::cout << "Podaj potege: ";
        std::cin >> b;
        std::cout << "===================\n";
        std::cout << "Wynik wynosi: " << pow(a, b);
        std::cin.ignore();
        getchar();
        system("cls");
        break;
    }
}

void v_figur()
{
    int wybor;
    float pp, h, r;
    system("cls");

    std::cout << "       MENU GlOWNE\n";
    std::cout << "--------------------------\n";
    std::cout << "1. V czworoscianu foremnego\n";
    std::cout << "2. V ostroslupa czworokatnego\n";
    std::cout << "3. V ostroslupa prawidlowego czworokatnego\n";
    std::cout << "4. V szescianu\n";
    std::cout << "5. V graniastoslupa trojkatnego\n";
    std::cout << "6. V graniastoslupa prawidlowego pieciokatnego\n";
    std::cout << "7. V walca\n";
    std::cout << "8. V stozka\n";
    std::cout << "9. V kuli\n\n";
    std::cout << "Co wybierasz?[0-9]: ";

    wybor = getch();

    switch (wybor) {
    case '1':
        system("cls");
        std::cout << "======[Objetosc czworoscianu foremnego]======\n\n";
        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc czworoscianu foremnego V= " << 0.33 * pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '2':
        system("cls");
        std::cout << "======[Objetosc ostroslupa czworokatnego]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc ostroslupa czworokatnego V= " << 0.33 * pp * h;
        std::cin.ignore();
        getchar();
        system("cls");

        break;

    case '3':
        system("cls");
        std::cout << "======[Objetosc ostroslupa prawidlowego czworokatnego]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc ostroslupa prawidlowego czworokatnego V= " << 0.33 * pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '4':
    	system("cls");
        std::cout << "======[Objetosc szescianu]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc szescianu V= " << pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '5':
        system("cls");
		std::cout << "======[Objetosc graniastoslupa trojkatnego]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc graniastoslupa trojkatnego V= " << pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '6':
    	system("cls");
        std::cout << "======[Objetosc graniastoslupa prawidlowego pieciokatnego]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc graniastoslupa prawidlowego pieciokatnego V= " << pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '7':
        system("cls");
		std::cout << "======[Objetosc walca]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc walca V= " << pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '8':
        system("cls");
		std::cout << "======[Objetosc stozka]======\n\n";

        std::cout << "Podaj pole podstawy pp= ";
        std::cin >> pp;

        std::cout << "Podaj wysokosc h= ";
        std::cin >> h;
        std::cout << "==========================================\n";
        std::cout << "Objetosc stozka V= " << 0.33 * pp * h;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

    case '9':
        system("cls");
		std::cout << "======[Objetosc kuli]======\n\n";

        std::cout << "Podaj promien r= ";
        std::cin >> r;
        std::cout << "==========================================\n";
        std::cout << "Objetosc kuli wynosi V= " << 4 / 3 * M_PI * r * r * r;
        std::cin.ignore();
        getchar();
        system("cls");
        break;
    default:
        std::cout << "\n\nNie ma takiej opcji w Menu Glownym :(";
        getchar();
        system("cls");
    }
}

int main()
{
    int wybor;
    system("cls");
    std::cout << "Autor: Jakub Jagodzinski\n\n";

    do {
        std::cout << "    MENU GLOWNE\n";
        std::cout << "===================\n";
        std::cout << "0. Zamknij\n";
        std::cout << "1. Kalkulator\n";
        std::cout << "2. Obliczanie V Figur\n";
        std::cout << "====================\n";
        std::cout << "Co wybierasz [0-2]? ";

        wybor = getch();

        switch (wybor) {
        
        case '1':
            kalkulator();
            break;

        case '2':
            v_figur();
            break;
        }
    } while (wybor = 0);
}



0

Nie jestem jakimś ekspertem, ale spytam się po 1) po co jednocześnie importujesz bibliotekę math.h oraz cmath ?

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

Po 2) w takim programie możesz spokojnie użyć using namespace std;
Nie będziesz musiał każdorazowo pisać std::

Po 3) pasja informatyki to trochę stare źródło i raczej jest adresowane pod zdanie egzaminu na technika informatyka, niż na rzetelną, praktyczną wiedzę. Jeśli znasz angielski, to polecam kanał użytkownika The Cherno:

Po 4) lepiej nie używać polskich nazw takich jak np. wybor. Lepiej zawsze używać angielskich nazw np. Choice.

Po 5) w takim switchu zamiast np. 1,2,3 można użyć wartość wyliczeniowych, bo łatwiej jest zrozumieć case SQUARE_FIELD niż case 5.
Ogólnie to warto poznać co nieco C przed nauką C++, wtedy jest łatwiej.

0

odpowiadając na pytania:

  1. nie mam pojęcia, przekopiowałem biblioteki z dwóch programów i chyba omyłkowo wstawiłem
    2)fakt, mogłem ale kiedy poprosiłem o opinię samego kalkulatora to ludzie pisali, że lepiej wywalić namespace i dawać std::
  2. dzięki, na pewno zajrzę :)
0

Dev-C++

Kuba Jagodzinski napisał(a):

odpowiadając na pytania:

  1. nie mam pojęcia, przekopiowałem biblioteki z dwóch programów i chyba omyłkowo wstawiłem
    2)fakt, mogłem ale kiedy poprosiłem o opinię samego kalkulatora to ludzie pisali, że lepiej wywalić namespace i dawać std::
  2. dzięki, na pewno zajrzę :)

faktycznie, usunąłem cmath oraz ostream i dałem namespace samiast std::

0
Kuba Jagodzinski napisał(a):

Dev-C++

U mnie na studiach, na pierwszym roku, jeden z wykładowców wyrzuciłby ciebie z sali za używanie dev'a c++ :-)

0
Mirai napisał(a):
Kuba Jagodzinski napisał(a):

Dev-C++

U mnie na studiach, na pierwszym roku, jeden z wykładowców wyrzuciłby ciebie z sali za używanie dev'a c++ :-)

Czyli mówisz, że Qt Creator Community lepszy? To w takim razie przetestuje.

0
Kuba Jagodzinski napisał(a):
Mirai napisał(a):
Kuba Jagodzinski napisał(a):

Dev-C++

U mnie na studiach, na pierwszym roku, jeden z wykładowców wyrzuciłby ciebie z sali za używanie dev'a c++ :-)

Czyli mówisz, że Qt Creator Community lepszy? To w takim razie przetestuje.

Nie mówię, że lepszy po prostu fajnie podpowiada składnię no i można sobie doinstalować jaki kompilator się chce. A do dev'a jak chcesz nowszy kompilator c++ to musisz wiedzieć co to są zmienne środowiskowe w systemie.

0

Jeśli chodzi o materiały książkowe do c++ to dla ultra laików można wymienić Symfonię C++ Jerzego Grębosza (teraz chyba najnowsza wersja nazywa się Opus Magnum C++), zaś dla kogoś kogo obraża podejście pisarza do czytelnika to można wymienić ,,Szkołę programowania C++" Stephena Praty. Oczywiście materiałów papierowych i elektronicznych jest znacznie więcej, także polecam szukać i sprawdzać co ci bardziej pasuje.

0
Mirai napisał(a):

Jeśli chodzi o materiały książkowe do c++ to dla ultra laików można wymienić Symfonię C++ Jerzego Grębosza (teraz chyba najnowsza wersja nazywa się Opus Magnum C++), zaś dla kogoś kogo obraża podejście pisarza do czytelnika to można wymienić ,,Szkołę programowania C++" Stephena Praty. Oczywiście materiałów papierowych i elektronicznych jest znacznie więcej, także polecam szukać i sprawdzać co ci bardziej pasuje.

dzięki ;)

Kuba Jagodzinski napisał(a):
Mirai napisał(a):

Jeśli chodzi o materiały książkowe do c++ to dla ultra laików można wymienić Symfonię C++ Jerzego Grębosza (teraz chyba najnowsza wersja nazywa się Opus Magnum C++), zaś dla kogoś kogo obraża podejście pisarza do czytelnika to można wymienić ,,Szkołę programowania C++" Stephena Praty. Oczywiście materiałów papierowych i elektronicznych jest znacznie więcej, także polecam szukać i sprawdzać co ci bardziej pasuje.

dzięki ;)
Ja bardziej się zastanawiam czy tego C++ ciągnąć dalej czy jednak pójść np w Pythona. Jak czytam opinię o C++ to ludzie piszą, że jest bezużyteczny i lepszy jest Python. Ale jak na razie chyba pociągnę dalej C++

1

Tak z połowa (jak nie więcej) Twojego kodu to jest jeden wielki switch/case. Do tego z 90% każdej z opcji się potarza, masz cały czas coś w stylu

        system("cls");
        std::cout << "======[Odejmowanie]======\n\n";
        std::cout << "Podaj 1 liczbe: ";
        std::cin >> a;
        std::cout << "Podaj 2 liczbe: ";
        std::cin >> b;
        std::cout << "===================\n";
        std::cout << "\n    Roznica: " << a - b;
        std::cin.ignore();
        getchar();
        system("cls");
        break;

Nie byłoby lepiej wydzielić do do osobnej funkcji, a całego switch/case przerobić tak, aby dla każdego przypadku cały kod sprowadzał się do wywołania tej funkcji ze stosownymi argumentami?

0

Chyba powinno być 1.33 zamiast 4 / 3

td::cout << "Podaj promien r= ";
        std::cin >> r;
        std::cout << "==========================================\n";
        std::cout << "Objetosc kuli wynosi V= " << 1.33 * M_PI * r * r * r;
        std::cin.ignore();
        getchar();
        system("cls");
        break;
4

Na końcu każdego case 3 linijki się powtarzają więc chyba można je usunąć wszędzie a wstawić raz za instrukcją Switch :) powodzenia chłopie, przypomina mi się mój pierwszy kalkulator, wyglądał identyko 😍🤗

0
Grzegorz Świdwa napisał(a):

Na końcu każdego case 3 linijki się powtarzają więc chyba można je usunąć wszędzie a wstawić raz za instrukcją Switch :) powodzenia chłopie, przypomina mi się mój pierwszy kalkulator, wyglądał identyko 😍🤗

Dzięki !

1

Dodałem kilka programów i wygląda to tak, nic nie zmieniłem jeśli chodzi o samą budowę. Zastanawiam się żeby na chwilę ''porzucić'' C++ i wziąć się za tworzenie stron internetowych. Co o tym myślicie? Btw. Jak mam się za to tworzenie stron zabrać? Kurs HTML oraz CSS u "Pasja informatyki"?

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

using namespace std;

void kalkulator()
{
    system("cls");

    int choice;
    float a, b;

    cout << "   MENU GLOWNE\n";
    cout << "-----------------\n";
    cout << "1. Dodawanie\n";
    cout << "2. Odejmowanie\n";
    cout << "3. Mnozenie\n";
    cout << "4. Dzielenie\n";
    cout << "5. Pierwiastkowanie\n";
    cout << "6. Potegowanie\n";
    cout << "\nCo wybierasz[0-6]? ";

    choice = getch();

    switch (choice) {
    case '1':
        system("cls");
        cout << "======[Dodawanie]======\n\n";
        cout << "Podaj 1 liczbe: ";
        cin >> a;
        cout << "Podaj 2 liczbe: ";
        cin >> b;
        cout << "===================\n";
        cout << "\n     Suma: " << a + b;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '2':
        system("cls");
        cout << "======[Odejmowanie]======\n\n";
        cout << "Podaj 1 liczbe: ";
        cin >> a;
        cout << "Podaj 2 liczbe: ";
        cin >> b;
        cout << "===================\n";
        cout << "\n    Roznica: " << a - b;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '3':
        system("cls");
        cout << "======[Mnozenie]======\n\n";
        cout << "Podaj 1 liczbe: ";
        cin >> a;
        cout << "Podaj 2 liczbe: ";
        cin >> b;
        cout << "===================\n";
        cout << "\n   Iloczyn: " << a * b;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '4':
        system("cls");
        cout << "======[Dzielenie]======\n\n";
        cout << "Podaj 1 liczbe: ";
        cin >> a;
        cout << "Podaj 2 liczbe: ";
        cin >> b;
        cout << "\n   Iloraz: " << a / b;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '5':
        system("cls");
        cout << "======[Pierwiastkowanie]======\n\n";
        cout << "Podaj stopien pierwiastka: ";
        cin >> b;
        cout << "Podaj liczbe ktora bedzie pierwiastkowana: ";
        cin >> a;
        cout << "===================\n";
        cout << "Wynik wynosi: " << pow(a, (1 / b));
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '6':
        system("cls");
        cout << "======[Potegowanie]======\n\n";
        cout << "Podaj liczbe ktora bedzie potegowana: ";
        cin >> a;
        cout << "Podaj potege: ";
        cin >> b;
        cout << "===================\n";
        cout << "Wynik wynosi: " << pow(a, b);
        cin.ignore();
        getchar();
        system("cls");
        break;
        
	default : cout<<"\n\nNie ma takiej opcji w Menu"; getchar(); system("cls");	  
    }
}

void v_figur()
{
    int wybor;
    float pp, h, r;
    system("cls");

    cout << "       MENU GlOWNE\n";
    cout << "--------------------------\n";
    cout << "1. V czworoscianu foremnego\n";
    cout << "2. V ostroslupa czworokatnego\n";
    cout << "3. V ostroslupa prawidlowego czworokatnego\n";
    cout << "4. V szescianu\n";
    cout << "5. V graniastoslupa trojkatnego\n";
    cout << "6. V graniastoslupa prawidlowego pieciokatnego\n";
    cout << "7. V walca\n";
    cout << "8. V stozka\n";
    cout << "9. V kuli\n\n";
    cout << "Co wybierasz?[0-9]: ";

    wybor = getch();

    switch (wybor) {
    case '1':
        system("cls");
        cout << "======[Objetosc czworoscianu foremnego]======\n\n";
        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc czworoscianu foremnego V= " << 0.33 * pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '2':
        system("cls");
        cout << "======[Objetosc ostroslupa czworokatnego]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc ostroslupa czworokatnego V= " << 0.33 * pp * h;
        cin.ignore();
        getchar();
        system("cls");

        break;

    case '3':
        system("cls");
        cout << "======[Objetosc ostroslupa prawidlowego czworokatnego]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc ostroslupa prawidlowego czworokatnego V= " << 0.33 * pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '4':
    	system("cls");
        cout << "======[Objetosc szescianu]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc szescianu V= " << pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '5':
        system("cls");
		cout << "======[Objetosc graniastoslupa trojkatnego]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc graniastoslupa trojkatnego V= " << pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '6':
    	system("cls");
        cout << "======[Objetosc graniastoslupa prawidlowego pieciokatnego]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc graniastoslupa prawidlowego pieciokatnego V= " << pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '7':
        system("cls");
		cout << "======[Objetosc walca]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc walca V= " << pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '8':
        system("cls");
		cout << "======[Objetosc stozka]======\n\n";

        cout << "Podaj pole podstawy pp= ";
        cin >> pp;

        cout << "Podaj wysokosc h= ";
        cin >> h;
        cout << "==========================================\n";
        cout << "Objetosc stozka V= " << 0.33 * pp * h;
        cin.ignore();
        getchar();
        system("cls");
        break;

    case '9':
        system("cls");
		cout << "======[Objetosc kuli]======\n\n";

        cout << "Podaj promien r= ";
        cin >> r;
        cout << "==========================================\n";
        cout << "Objetosc kuli wynosi V= " << 1.33 * M_PI * r * r * r;
        cin.ignore();
        getchar();
        system("cls");
        break;
    default:
        cout << "\n\nNie ma takiej opcji w Menu Glownym :(";
        getchar();
        system("cls");
    }
}
void pole()
{
	system("cls");
	int wybor;
	float a, b, h, d1, d2;
	
	cout << "   MENU GLOWNE\n";
    cout << "-----------------\n";
    cout << "1. Pole trojkata\n";
    cout << "2. Pole trojkata rownobocznego\n";
    cout << "3. Pole prostokata\n";
    cout << "4. Pole kwadratu\n";
    cout << "5. Pole rownolegloboku\n";
    cout << "6. Pole deltoidu\n";
    cout << "7. Pole rombu\n";
    cout << "8. Pole trapezu\n";
    cout << "\nCo wybierasz[0-6]? ";
    
    wybor = getch();
    
    switch(wybor)
    {
    	case '1':
    		system("cls");
			cout<<"======[Pole Trojkata]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
	
			cout<<"Podaj wysokosc h= ";
			cin>>h;
			
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<0.5*a*h;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '2':
    		system("cls");
			cout<<"======[Pole Trojkata Rownobocznego]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
			
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<a*a*1.732 / 4;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '3':
    		system("cls");
			cout<<"======[Pole Prostokata]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
	
			cout<<"Podaj wysokosc b= ";
			cin>>b;
			
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<a*b;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '4':
    		system("cls");
			cout<<"======[Pole Kwadratu]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
	
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<a*a;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '5':
    		system("cls");
			cout<<"======[Pole Rownolegloboku]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
			
			cout<<"Podaj wysokosc h= ";
			cin>>h;
	
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<a*h;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '6':
    		system("cls");
			cout<<"======[Pole Deltoidu]======\n\n";
			cout<<"Podaj dlugosc przekatnej d1= ";
			cin>>d1;
			
			cout<<"Podaj dlugosc przekatnej d2= ";
			cin>>d2;
	
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<0.5*d1*d2;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '7':
    		system("cls");
			cout<<"======[Pole Rombu]======\n\n";
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
			
			cout<<"Podaj wysokosc h= ";
			cin>>h;
	
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<a*h;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	case '8':
    		system("cls");
			cout<<"======[Pole Trapezu]======\n\n";
			
			cout<<"Podaj dlugosc boku a= ";
			cin>>a;
			
			cout<<"Podaj dlugosc boku b= ";
			cin>>b;
			
			cout<<"Podaj wysokosc h= ";
			cin>>h;
	
			cout<<"======================\n";
			cout<<"Pole powierzchni P= "<<(a+b)*h / 2;
			cin.ignore();
        	getchar();
        	system("cls");
        	break;
        	
        	default : cout<<"Nie ma takiej opcji w Menu";	getchar(); system("cls");
        	
	}		
}
void nwwnwd()
{
	system("cls");
	int wybor, a, b, c;
	
	cout << "   MENU GLOWNE\n";
    cout << "-----------------\n";
    cout << "1. NWD\n";
    cout << "2. NWW\n";
	cout << "Co wybierasz[1-2]? ";
	
	wybor = getch();
	
	switch(wybor)
	{
		case '1':
			system("cls");
			cout << "======[NWD]======\n\n";
			cout << "Podaj 1 liczbe : ";
			cin >> a;
	
			cout << "Podaj 2 liczbe : ";
			cin >> b;
	
			while (b!=0) {
				c = a % b;
				a = b;
				b = c;
			}
	
	cout << "====================\n";
	cout << "      NWD : " << a;
	cin.ignore();
	getchar();
	system("cls");
	break;
		
		case '2':
		system("cls");
		cout << "======[NWW]======\n\n";
		int a, b, iloczyn;
    	cout << "Podaj 1 liczbe: ";
    	cin >> a;
    	cout << "Podaj 2 liczbe: ";
    	cin >> b;

    iloczyn = a * b;
    do
    {
        if(a > b) {
           a = a - b;
        } else {
            b = b - a;
        }
    }
    while(a != b);

    cout << "====================\n";
	cout << "      NWW: " << iloczyn/a;
	cin.ignore();
	getchar();
	system("cls");
	break;
	
	default: cout<<"\n============================="<<"\nNie ma takiej opjcji w Menu "; getchar(); system("cls"); 		
	}
		
	}
void srednia()
{
	system("cls");
	cout << "======[Obliczanie sredniej]======\n";
	int ilosc;
    float ocena;
    float srednia;
    int waga;
    cout << "\nPodaj ilosc ocen: ";
    cin >> ilosc;
   
    srednia = 0;
    for( int i = 1; i <= ilosc; i++ )
    {
       
        cout << "==============";
		cout << "\nPodaj ocene nr " << i << ": ";
        cin >> ocena;
        cout << "Podaj wage: ";
        cin >> waga;
        srednia =( ocena * waga ) * ilosc / waga * ilosc;
    }
    if( ilosc > 0 ) srednia = ocena * waga / waga;;
    cout << "==================\n";
	cout << "\n  Srednia ocen to: " << srednia;
	cin.ignore();
	getchar();
	system("cls");
}
void rok()
{
	int rok;
	
	system("cls");
	cout << "======[Czy rok jest przestepny?]======\n";
	cout << "\nPodaj rok: ";
	cin >> rok;
	
	if(((rok % 4 == 0)&&(rok % 100 != 0))||(rok % 400 == 0))
	{
	cout << "\nTen rok jest przestepny ";
	cin.ignore();
	getchar();
	system("cls");
	}
	else
	{
	cout << "\nTen rok nie jest przestepny ";
	cin.ignore();
	getchar();
	system("cls");
	}
}	
void gra()
{
system("cls");

int liczba, strzal, ile_prob = 0;

cout << "======[Zgadnij jaka liczba]======\n\n";
cout << "Witaj pomyslalem o pewnej liczbie 1..100\nZgadnij o jakiej!\n";
srand(time(NULL));
liczba = rand() % 100 + 1;

while (strzal != liczba) {
    ile_prob++;
    cout << "\nTo twoja " << ile_prob << " proba: ";
    cin >> strzal;

    if (strzal < liczba) {
        cout << "\n   To za malo\n";
    }
    if (strzal > liczba) {
        cout << "\n   To za duzo\n";
    }
    if (strzal == liczba) {
        cout << "\nBrawo! Wygrales w " << ile_prob << " probie.";
        cin.ignore();
        getchar();
        system("cls");
    }
}


}	
int main()
{
    int wybor;
    system("cls");
    cout << "Autor: Jakub Jagodzinski\n\n";
   	
	
	do {
        cout << "    MENU GLOWNE\n";
        cout << "===================\n";
        cout << "0. Zamknij\n";
        cout << "1. Kalkulator\n";
        cout << "2. Obliczanie V Figur\n";
        cout << "3. Obliczanie Pol Figur\n";
        cout << "4. NWD i NWW liczb\n";
        cout << "5. Obliczanie sredniej ocen\n";
        cout << "6. Czy rok jest przestepny?\n";
        cout << "7. Gra 'Zgadnij liczbe' \n";
        cout << "====================\n";
        cout << "Co wybierasz [0-7]? ";
		
        wybor = getch();

        switch (wybor) {
    	
    	case '0':
    		exit(0);
    		break;
    
		case '1':
            kalkulator();
            break;
			
        case '2':
            v_figur();
            break;
       	
		case '3':
			pole();
			break;
			
		case '4':
			nwwnwd();
			break;
		
		case '5':
			srednia();			     
            break;
            
        case '6':
			rok();
			break;
			
		case '7':
			gra();
			break;
			    
        default: cout<<"\n\nNie ma takiej opcji w MENU"; getchar(); system("cls");    
        }
    } while (wybor != 0);
	
}

1
Kuba Jagodzinski napisał(a):

Witam, niedawno zacząłem programować w moim pierwszym języku czyli C++. Aktualnie jestem na 6 odc. kursu C++ na kanale "Pasja Informatyki".

Ostatnio stworzyłem dwa programy, jeden to kalkulator, drugi oblicza objętości figur. Postanowiłem połączyć go w jeden. Poniżej wklejam efekty mojej pracy.

Gratuluje i pozdrawiam! Program fajny. Poniżej moja wersja. Wykorzystuje pewne podobieństwa jednej i drugiej części programu. Np. obliczenie_objetosci jest DZIEDZICZONE z klasy konkretne_dzialanie<MNOZENIE>. Templejtami się na razie nie przejmuj, chciałem tylko zademonstrować jak można to napisać.

Paweł Biernacki


#include <string>
#include <iostream>
#include <math.h>

enum dzialanie_typ { DODAWANIE = 1, ODEJMOWANIE, MNOZENIE, DZIELENIE, PIERWIASTKOWANIE, POTEGOWANIE };
enum figura_typ { CZWOROSCIAN_FOREMNY = 1, OSTROSLUP_CZWOROKATNY, OSTROSLUP_PRAWIDLOWY_CZWOROKATNY,
	SZESCIAN, GRANIASTOSLUP_TROJKATNY, GRANIASTOSLUP_PRAWIDLOWY_PIECIOKATNY, WALEC, STOZEK, KULA };

class dzialanie
{
protected:
	float a,b;
	
public:
	void wykonaj();

	virtual std::string daj_nazwe() const = 0;
	
protected:
	virtual void wczytaj_drugi_operand_jesli_jest();
	
	virtual std::string daj_nazwe_wyniku() const = 0;
	virtual float daj_wynik() const = 0;
	
	virtual std::string daj_nazwe_pierwszego_operandu() const { return "1 liczbe"; }
	virtual std::string daj_nazwe_drugiego_operandu() const { return "2 liczbe"; }
	
public:
};



void dzialanie::wykonaj()
{
	std::cout << "======[" << daj_nazwe() << "]======\n\n";
    std::cout << "Podaj " << daj_nazwe_pierwszego_operandu() << ": ";
    std::cin >> a;
	
	
	wczytaj_drugi_operand_jesli_jest();
	
    std::cout << "===================\n";
    std::cout << "\n      " << daj_nazwe_wyniku() << ":" << daj_wynik() << "\n";
}


void dzialanie::wczytaj_drugi_operand_jesli_jest()
{
    std::cout << "Podaj " << daj_nazwe_drugiego_operandu() << ": ";
    std::cin >> b;
}


template <int TYP> class konkretne_dzialanie;

template <> class konkretne_dzialanie<DODAWANIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Dodawanie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Suma"; }
	virtual float daj_wynik() const { return a+b; }
};

template <> class konkretne_dzialanie<ODEJMOWANIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Odejmowanie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Roznica"; }
	virtual float daj_wynik() const { return a-b; }
};

template <> class konkretne_dzialanie<MNOZENIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Mnozenie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Iloczyn"; }
	virtual float daj_wynik() const { return a*b; }
};

template <> class konkretne_dzialanie<DZIELENIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Dzielenie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Iloraz"; }
	virtual float daj_wynik() const { return a/b; }
};

template <> class konkretne_dzialanie<PIERWIASTKOWANIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Pierwiastkowanie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Wynik"; }
	virtual float daj_wynik() const { return pow(a, 1.0f/b); }
	
	virtual std::string daj_nazwe_pierwszego_operandu() const { return "stopien pierwiastka"; }
	virtual std::string daj_nazwe_drugiego_operandu() const { return "liczbe, ktora bedzie pierwiastkowana"; }
};

template <> class konkretne_dzialanie<POTEGOWANIE>: public dzialanie
{
public:
	virtual std::string daj_nazwe() const { return "Potegowanie"; } 
protected:
	virtual std::string daj_nazwe_wyniku() const { return "Wynik"; }
	virtual float daj_wynik() const { return pow(a, b); }
	
	virtual std::string daj_nazwe_pierwszego_operandu() const { return "liczbe, ktora bedzie potegowana"; }
	virtual std::string daj_nazwe_drugiego_operandu() const { return "potege"; }
};



template <int POCZATEK> class iteruj_po_dzialaniach;

template <> class iteruj_po_dzialaniach<POTEGOWANIE>
{
public:
	void wyswietl_menu(std::ostream & s) const
	{
		konkretne_dzialanie<POTEGOWANIE> d;
		s << POTEGOWANIE << " " << d.daj_nazwe() << "\n";
	}
	
	void wykonaj(int i)
	{
		if (i == POTEGOWANIE)
		{
			konkretne_dzialanie<POTEGOWANIE> d;
			d.wykonaj();
		}
	}
};

template <int DZIALANIE> class iteruj_po_dzialaniach: public iteruj_po_dzialaniach<DZIALANIE+1>
{
public:
	void wyswietl_menu(std::ostream & s) const
	{
		konkretne_dzialanie<DZIALANIE> d;
		s << DZIALANIE << " " << d.daj_nazwe() << "\n";

		iteruj_po_dzialaniach<DZIALANIE+1>::wyswietl_menu(s);
	}
	void wykonaj(int i)
	{
		if (i == DZIALANIE)
		{
			konkretne_dzialanie<DZIALANIE> d;
			d.wykonaj();
		}
		else
		{
			iteruj_po_dzialaniach<DZIALANIE+1>::wykonaj(i);
		}
	}
};


class obliczenie_objetosci: public konkretne_dzialanie<MNOZENIE>
{
protected:
	virtual std::string daj_nazwe_pierwszego_operandu() const { return "pole podstawy"; }
	virtual std::string daj_nazwe_drugiego_operandu() const { return "wysokosc"; }
	
	virtual std::string daj_nazwe_wyniku() const { return daj_nazwe(); }
};

class obliczenie_objetosci_ostroslupow_i_stozkow: public obliczenie_objetosci
{
protected:
	virtual float daj_wynik() const { return a*b/3.0f; }	
};


template <int FIGURA> class konkretne_obliczenie_objetosci;

template <> class konkretne_obliczenie_objetosci<CZWOROSCIAN_FOREMNY>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc czworoscianu foremnego"; }
};

template <> class konkretne_obliczenie_objetosci<OSTROSLUP_CZWOROKATNY>: public obliczenie_objetosci_ostroslupow_i_stozkow
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc ostroslupa czworokatnego"; }
};

template <> class konkretne_obliczenie_objetosci<OSTROSLUP_PRAWIDLOWY_CZWOROKATNY>: public obliczenie_objetosci_ostroslupow_i_stozkow
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc ostroslupa prawidlowego czworokatnego"; }
};

template <> class konkretne_obliczenie_objetosci<SZESCIAN>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc szescianu"; }
};

template <> class konkretne_obliczenie_objetosci<GRANIASTOSLUP_TROJKATNY>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc graniastoslupa trojkatnego"; }
};

template <> class konkretne_obliczenie_objetosci<GRANIASTOSLUP_PRAWIDLOWY_PIECIOKATNY>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc graniastoslupa prawidlowego pieciokatnego"; }
};

template <> class konkretne_obliczenie_objetosci<WALEC>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc walca"; }
};

template <> class konkretne_obliczenie_objetosci<STOZEK>: public obliczenie_objetosci_ostroslupow_i_stozkow
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc stozka"; }
};

template <> class konkretne_obliczenie_objetosci<KULA>: public obliczenie_objetosci
{
public:
	virtual std::string daj_nazwe() const { return "Objetosc kuli"; }
protected:
	virtual void wczytaj_drugi_operand_jesli_jest() {}
	virtual float daj_wynik() const { return M_PI*a*a*a*4.0f/3.0f; }
	virtual std::string daj_nazwe_pierwszego_operandu() const { return "promien"; }
};


template <int POCZATEK> class iteruj_po_figurach;


template <> class iteruj_po_figurach<KULA>
{
public:
	void wyswietl_menu(std::ostream & s) const
	{
		konkretne_obliczenie_objetosci<KULA> d;
		s << KULA << " " << d.daj_nazwe() << "\n";
	}
	
	void wykonaj(int i)
	{
		if (i == KULA)
		{
			konkretne_obliczenie_objetosci<KULA> d;
			d.wykonaj();
		}
	}
};

template <int FIGURA> class iteruj_po_figurach: public iteruj_po_figurach<FIGURA+1>
{
public:
	void wyswietl_menu(std::ostream & s) const
	{
		konkretne_obliczenie_objetosci<FIGURA> d;
		s << FIGURA << " " << d.daj_nazwe() << "\n";
		
		iteruj_po_figurach<FIGURA+1>::wyswietl_menu(s);
	}
	void wykonaj(int i)
	{
		if (i == FIGURA)
		{
			konkretne_obliczenie_objetosci<FIGURA> d;
			d.wykonaj();
		}
		else
		{
			iteruj_po_figurach<FIGURA+1>::wykonaj(i);
		}
	}
};


void kalkulator()
{
	iteruj_po_dzialaniach<DODAWANIE> i;
	int wybor;
	
	i.wyswietl_menu(std::cout);
	
	std::cout << "\nCo wybierasz[0-6]? ";
	
	std::cin >> wybor;
	
	i.wykonaj(wybor);
}

void obliczanie_V_figury()
{
	int wybor;
	iteruj_po_figurach<CZWOROSCIAN_FOREMNY> j;
	j.wyswietl_menu(std::cout);

	std::cout << "\nCo wybierasz[0-9]? ";
	
	std::cin >> wybor;
		
	j.wykonaj(wybor);
}


int main()
{
	int wybor;
	
	do {
        std::cout << "    MENU GLOWNE\n";
        std::cout << "===================\n";
        std::cout << "0. Zamknij\n";
        std::cout << "1. Kalkulator\n";
        std::cout << "2. Obliczanie V Figur\n";
        std::cout << "====================\n";
        std::cout << "Co wybierasz [0-2]? ";

        std::cin >> wybor;

        switch (wybor) {

        case 1:
            kalkulator();
            break;

        case 2:
            obliczanie_V_figury();
            break;
        }
    } 
    while (wybor);	
	
	return 0;
}

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