W tym poście chciałbym przedstawić krótki projekt kalkulatora przygotowanego w C++. Projekt będzie obsługiwany za pomocą okna konsoli.
Jego działanie będzie się opierało na wykonywaniu operacji na dwóch liczbach.
Jego działanie będzie się opierało na wykonywaniu operacji na dwóch liczbach.
Będzie on posiadał następujące funkcje:
- dodawanie
- mnożenie
- dzielenie
- pierwiastkowanie
- potęgowanie
- silnia
- dodawanie oraz odejmowanie liczb w systemie dwójkowym
Poniżej wklejam kod z objaśnieniem:
Deklaracje funkcji oraz biblioteki jakie zostały dołączone są następujące:
- #include <iostream>
- #include <math.h>
- #include <windows.h>
- #include <cstdlib>
- using namespace std;
- //Czesc informacyjna dla uzytkownika
- void MenuGlowne();
- //instrukcja przechodzaca pomiedzy wszystkimi wywolaniami
- void PetlaGlowna(float, float, char);
- //Zamiana liczby z dziesietnej na binarna
- void ZamianaNaBinarna(int wynik);
- //Dodawanie
- void Dodaj(float liczba1, float liczba2);
- //Dodawanie binarne
- void DodawanieBinarne(float liczba1, float liczba2);
- //OdejmowanieBinarne
- void OdejmowanieBinarne(float liczba1, float liczba2);
- //Odejmowanie
- void Odejmij(float liczba1, float liczba2);
- //Mnozenie
- void Mnozenie(float liczba1, float liczba2);
- //Dzielenie
- void Dzielenie(float liczba1, float liczba2);
- //Silnia
- void Silnia(float liczba1);
- //Potega
- void Potega(float liczba1, float liczba2);
- //Pierwiastek
- void Pierwiastek(float liczba1);
Następnie poszczególne funkcje dokonujące obliczeń oraz wyświetlenia danych
- void MenuGlowne()
- {
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "Prosty kalkulator" << endl;
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "Operacje:" << endl;
- cout << "Dodawanie - '+'" << endl;
- cout << "Dodawanie binarne - 'b'" << endl;
- cout << "Odejmowanie binarne - 'o'" << endl;
- cout << "Odejmowanie - '-'" << endl;
- cout << "Mnozenie - '*'" << endl;
- cout << "Dzielenie - '/'" << endl;
- cout << "Potegowanie - '^'" << endl;
- cout << "Pierwiastkowanie - 's'" << endl;
- cout << "Silnia - '!'" << endl;
- cout << "Wyjscie - 'w'" << endl;
- }
- void PetlaGlowna(float liczba1, float liczba2, char znak)
- {
- switch(znak)
- {
- //Dodawanie
- case '+':
- {
- Dodaj(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Dodawanie binarne
- case 'b':
- {
- DodawanieBinarne(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //OdejmowanieBinarne
- case 'o':
- {
- OdejmowanieBinarne(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Odejmowanie
- case '-':
- {
- Odejmij(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Mnozenie
- case '*':
- {
- Mnozenie(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Dzielenie
- case '/':
- {
- Dzielenie(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Potegowanie
- case '^':
- {
- Potega(liczba1, liczba2);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Pierwiastek
- case 's':
- {
- Pierwiastek(liczba1);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- //Silnia
- case '!':
- {
- Silnia(liczba1);
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "------------------------------" << endl;
- break;
- }
- case 'w':
- {
- cout << "------------------------------" << endl;
- break;
- }
- default:
- {
- cout << "Podano zly znak" << endl;
- break;
- }
- }
- }
- //Zamiana liczby z dziesietnej na binarna
- void ZamianaNaBinarna(int wynik)
- {
- int i=0;
- int tab[31];
- //Bedzie wykonywane do momentu gdy libcza = 0
- while(wynik)
- {
- tab[i++]=wynik%2;
- wynik/=2;
- }
- for(int j=i-1;j>=0;j--)
- {
- cout<<tab[j];
- }
- cout << endl;
- }
- //Dodawanie
- void Dodaj(float liczba1, float liczba2)
- {
- float wynik;
- wynik = liczba1 + liczba2;
- cout << liczba1 << " + " << liczba2 << " = " <<wynik << endl;
- }
- //Dodawanie binarne
- void DodawanieBinarne(float liczba1, float liczba2)
- {
- int wynik;
- wynik = int(liczba1 + liczba2);
- cout << "Dziesietnie: " << wynik << endl;
- ZamianaNaBinarna(wynik);
- }
- //OdejmowanieBinarne
- void OdejmowanieBinarne(float liczba1, float liczba2)
- {
- int wynik;
- wynik = int(liczba1 - liczba2);
- cout << "Dziesietnie: " << wynik << endl;
- ZamianaNaBinarna(wynik);
- }
- //Odejmowanie
- void Odejmij(float liczba1, float liczba2)
- {
- float wynik;
- wynik = liczba1 - liczba2;
- cout << liczba1 << " - " << liczba2 << " = " <<wynik << endl;
- }
- //Mnozenie
- void Mnozenie(float liczba1, float liczba2)
- {
- float wynik;
- wynik = liczba1 * liczba2;
- cout << liczba1 << " * " << liczba2 << " = " <<wynik << endl;
- }
- //Dzielenie
- void Dzielenie(float liczba1, float liczba2)
- {
- float wynik;
- wynik = liczba1/liczba2;
- cout << liczba1 << " / " << liczba2 << " = " <<wynik << endl;
- }
- //Silnia
- void Silnia(float liczba1)
- {
- long long silnia = 1;
- for(int i=(int)liczba1;i>1;i--)
- {
- silnia*=(long long)i; //lub silnia = silnia * i
- }
- cout << (int)liczba1 << " ! " << "= " << silnia << endl;
- }
- //Potega
- void Potega(float liczba1, float liczba2)
- {
- float wynik;
- wynik = pow(liczba1, liczba2);
- cout << liczba1 << " ^ " << liczba2 << " = " <<wynik << endl;
- }
- //Pierwiastek
- void Pierwiastek(float liczba1)
- {
- float wynik;
- wynik = sqrt(liczba1);
- cout <<"sqrt( " << liczba1 << " ) = " <<wynik << endl;
- }
Główna funkcja main() programu:
- int main()
- {
- float liczba1 = 0;
- float liczba2 = 0;
- char znak;
- MenuGlowne();
- while(znak != 'w')
- {
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_INTENSITY );
- cin >> liczba1;
- cin >> znak;
- if(znak == '!' || znak == 's' || znak == 'w')
- {}
- else
- {
- cin >> liczba2;
- }
- PetlaGlowna(liczba1, liczba2, znak);
- }
- cout << "Zakonczono dzialanie" << endl;
- }
Na rysunku 1 znajduje się przykładowe okno programu z przeprowadzoną operacją
Rys. 1. Okno programu