Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // JanBaranskiLab3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
- //
- #include <iostream>
- #include <fstream>
- #include <string> //funkcja stoi tego uzywa
- #include <regex>
- using namespace std;
- void dodaj(int* a, int* b) {
- cout << "Wynik: " << *a + *b;
- }
- void odejmij(int* a, int* b, int* wynik) {
- //ten wynik ma ten sam adres co zadeklarowany w linijce 56
- //wszystkie zmiany, ktore tu zastosuje na tej zmiennej(wynik) beda widoczne na zewnatrz
- *wynik = *a - *b;
- }
- void pomnoz(int* a, int* b) {
- cout << "Wynik: " << *a * *b;
- }
- void podziel(int* a, int* b) {
- if (*b != 0)
- cout << "Wynik: " << (float)*a / (float)*b;
- else {
- cout << "Nie mozna dzielic przez 0";
- }
- }
- int main()
- {
- string dzialanie;
- while (1) {
- cout<<endl << "Podaj dzialanie: ";
- cin >> dzialanie;
- // \\d liczba dziesietna * -ma wystapic 1 lub wiecej razy czyli np. 1 lub 34 lub 3452
- // [+\\-*/] potem ma byc znak +, -, * lub /. Ten znak \\ jest tylko potrzebny zeby ten minus byl minusem
- // \\d i potem znowu liczba dziesietna
- // sprawdz czy istnieje takie dopasowanie?
- if (regex_match(dzialanie, regex("(\\d*[+\\-*/]\\d*)"))) {
- smatch matches;
- //nawias to jedna grupa
- // \\d liczba dziesietna - grupa nr. 1
- // [+-/*] znak to grupa nr. 2
- // \\d grupa nr. 3
- if (regex_search(dzialanie, matches, regex("(\\d*)([+-/*])(\\d*)"))) {
- int a, b;
- string znak;
- //zerowa grupa to wszystko
- a = stoi(matches[1]); //pierwsza grupa: (\\d*) ; stoi - konwersja string do inta
- znak = matches[2]; //druga grupa: ([+-/*])
- b = stoi(matches[3]); //trzecia grupa: (\\d*)
- //wysylam adres zmiennej, w funkcji bede pracowac na oryginalnych zmiennych
- // potwierdzenie na funkcji odejmij
- if (znak == "+") dodaj(&a, &b);
- else if (znak == "-") {
- int wynik = 0;
- odejmij(&a, &b, &wynik);
- // normalnie gdybym nie pracowal na oryginale wartosc wynik nie ulegla by zmianie
- cout << "Wynik: " << wynik;
- }
- else if (znak == "*") pomnoz(&a, &b);
- else if (znak == "/") podziel(&a, &b);
- else cout << "Error!";
- }
- }
- else
- cout << "Niepoprawne dane!";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement