Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. // JanBaranskiLab3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string> //funkcja stoi tego uzywa
  6. #include <regex>
  7. using namespace std;
  8. void dodaj(int* a, int* b) {
  9.     cout << "Wynik: " << *a + *b;
  10. }
  11. void odejmij(int* a, int* b, int* wynik) {
  12.     //ten wynik ma ten sam adres co zadeklarowany w linijce 56
  13.     //wszystkie zmiany, ktore tu zastosuje na tej zmiennej(wynik) beda widoczne na zewnatrz
  14.     *wynik = *a - *b;
  15. }
  16. void pomnoz(int* a, int* b) {
  17.     cout << "Wynik: " << *a * *b;
  18. }
  19. void podziel(int* a, int* b) {
  20.     if (*b != 0)
  21.         cout << "Wynik: " << (float)*a / (float)*b;
  22.     else {
  23.         cout << "Nie mozna dzielic przez 0";
  24.     }
  25. }
  26.  
  27. int main()
  28. {
  29.     string dzialanie;
  30.     while (1) {
  31.         cout<<endl << "Podaj dzialanie: ";
  32.         cin >> dzialanie;
  33.         // \\d liczba dziesietna * -ma wystapic 1 lub wiecej razy czyli np. 1 lub 34 lub 3452
  34.         // [+\\-*/] potem ma byc znak +, -, * lub /. Ten znak \\ jest tylko potrzebny zeby ten minus byl minusem
  35.         // \\d i potem znowu liczba dziesietna
  36.  
  37.         // sprawdz czy istnieje takie dopasowanie?
  38.         if (regex_match(dzialanie, regex("(\\d*[+\\-*/]\\d*)"))) {
  39.             smatch matches;
  40.  
  41.             //nawias to jedna grupa
  42.             // \\d liczba dziesietna - grupa nr. 1
  43.             // [+-/*] znak to grupa nr. 2
  44.             // \\d grupa nr. 3
  45.             if (regex_search(dzialanie, matches, regex("(\\d*)([+-/*])(\\d*)"))) {
  46.                 int a, b;
  47.                 string znak;
  48.                 //zerowa grupa to wszystko
  49.                 a = stoi(matches[1]); //pierwsza grupa: (\\d*) ; stoi - konwersja string do inta
  50.                 znak = matches[2]; //druga grupa: ([+-/*])
  51.                 b = stoi(matches[3]); //trzecia grupa: (\\d*)
  52.  
  53.                 //wysylam adres zmiennej, w funkcji bede pracowac na oryginalnych zmiennych
  54.                 // potwierdzenie na funkcji odejmij
  55.                 if (znak == "+") dodaj(&a, &b);
  56.                 else if (znak == "-") {
  57.                     int wynik = 0;
  58.                     odejmij(&a, &b, &wynik);
  59.                     // normalnie gdybym nie pracowal na oryginale wartosc wynik nie ulegla by zmianie
  60.                     cout << "Wynik: " << wynik;
  61.                 }
  62.                 else if (znak == "*") pomnoz(&a, &b);
  63.                 else if (znak == "/") podziel(&a, &b);
  64.                 else cout << "Error!";
  65.             }
  66.         }
  67.         else
  68.             cout << "Niepoprawne dane!";
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement