Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- using namespace std;
- //#include "riesenie4.h"
- #ifndef _RIESENIE_H_
- #define _RIESENIE_H_
- //1. uloha
- class CISLO {
- int hodnota;
- public:
- void vlozCislo(int cislo);
- bool vlozDesiatkoveCislo(const string cislo);
- string vratDesiatkoveCislo();
- int vratHodnotu();
- };
- //2. uloha
- class CISLO_V_SUSTAVE : public CISLO {
- int sustava;
- public:
- bool vlozSustavu(int sustava0);
- int vratSustavu();
- bool vlozCisloVSustave(const string cislo);
- string vratCisloVSustave();
- };
- //3. uloha
- class KALKULACKA {
- protected:
- CISLO_V_SUSTAVE vysledok;
- public:
- string vypocitaj(int op1, char operator0, int op2);
- int vratVysledok();
- };
- //4. uloha
- class KALKULACKA_V_SUSTAVE : public KALKULACKA {
- int sustava;
- public:
- bool vlozSustavu(int sustava0);
- int vratSustavu();
- string vypocitajVSustave(const string op1, char operator0, const string op2);
- //5. uloha
- string vypocitajVyraz(const string vyrazVSustave);
- };
- #endif
- int DUMMY_INT = -999;
- bool DUMMY_BOOL = false;
- string DUMMY_STRING = "";
- /*
- */
- int ZLE_CISLO = -9999;
- //Prevzate zdrojaky z 3.cvicenia
- int pocetVyskytovZnaku(const string vstup, char znak) {
- return DUMMY_INT;
- }
- int kontrolaZnakov(const string zdroj, const string zoznamZnakov) {
- return DUMMY_INT;
- }
- bool kontrolaSpravnostiCisla(const string cislo0, int sustava) {
- return DUMMY_BOOL;
- }
- int umocnenie(int a, int b) {
- int ret = 1;
- for (int i = 1; i <= b; i++) {
- ret = ret*a;
- }
- return ret;
- }
- int konverziaDoDesiatkovej(const string cislo, int sustava) {
- int ret = 0;
- bool minus = false;
- if (sustava == 15) {return -9999;}
- if (cislo.size() == 0) {return ZLE_CISLO;}
- for (unsigned int i = 0; i < cislo.size(); i++){
- if (cislo[i] == '-') {minus = true;}
- else {
- if (cislo[i]-'0'>=sustava)
- {
- return ZLE_CISLO;
- }
- ret += (cislo[i]-'0')*(umocnenie(sustava, cislo.size()-1-i));
- }
- }
- if (minus == true) {ret = ret*(-1);}
- return ret;
- }
- string cisloNaString(int c) {
- if (c == 0) {
- return "0";
- }
- int cislo = c;
- bool znamienko = false;
- if (c < 0) {
- znamienko = true;
- cislo *= -1;
- }
- string otocenyVysledok = "";
- while (cislo > 0) {
- otocenyVysledok += (cislo % 10) + '0';
- cislo /= 10;
- }
- string vysledok = znamienko ? "-" : "";
- for (int i = otocenyVysledok.size() - 1; i > -1; i--) {
- vysledok += otocenyVysledok[i];
- }
- return vysledok;
- }
- string konverziaDesiatkovehoCislaDoSustavy(int c, int sustava) {
- if (c == 0) {
- return "0";
- }
- if (sustava < 2 || sustava > 10) {
- return "ZLA_SUSTAVA";
- }
- int cislo = c;
- bool znamienko = false;
- if (c < 0) {
- znamienko = true;
- cislo *= -1;
- }
- string otocenyVysledok = "";
- while (cislo > 0) {
- otocenyVysledok += (cislo % sustava) + '0';
- cislo /= sustava;
- }
- string vysledok = znamienko ? "-" : "";
- for (int i = otocenyVysledok.size() - 1; i > -1; i--) {
- vysledok += otocenyVysledok[i];
- }
- return vysledok;
- }
- //**********************************************************************************
- //1. uloha
- void CISLO::vlozCislo(int cislo) {
- hodnota = cislo;
- }
- bool CISLO::vlozDesiatkoveCislo(string cislo) {
- int c2 = 0;
- int moc = 0;
- bool minus = true;
- int velkost = cislo.size();
- if ((cislo[0] != '-') && (cislo[0] - '0' < 0) || (cislo[0] - '0' > 9)) {
- return false;}
- else {
- if (cislo[0] != '-') {
- c2 = cislo[0] - '0';
- minus = false;
- }
- }
- if (minus == true) {velkost--;}
- for (unsigned int i = 1; i<cislo.size(); i++) {
- if ((cislo[i] - '0' < 0) || (cislo[i] - '0' > 9)) {
- return false;}
- else {
- moc = 1;
- for (unsigned int j = velkost - 1 ; j>=i; j--) {
- moc *= 10;
- }
- c2 += (cislo[i] - '0')*moc;
- }
- }
- if (minus = true) {c2 *= -1;}
- hodnota = c2;
- return true;
- }
- string CISLO::vratDesiatkoveCislo() {
- if (hodnota == 0) {
- return "0";
- }
- int cislo1 = hodnota;
- bool znamienko = false;
- if (hodnota < 0) {
- znamienko = true;
- cislo1 *= -1;
- }
- string otocenyVysledok = "";
- while (cislo1 > 0) {
- otocenyVysledok += (cislo1 % 10) + '0';
- cislo1 /= 10;
- }
- string vysledok = znamienko ? "-" : "";
- for (int i = otocenyVysledok.size() - 1; i > -1; i--) {
- vysledok += otocenyVysledok[i];
- }
- return vysledok;
- }
- int CISLO::vratHodnotu() {
- return hodnota;
- }
- //2. uloha
- bool CISLO_V_SUSTAVE::vlozSustavu(int sustava0) {
- //DUMMY_BOOL = false;
- if (sustava0 < 2 || sustava0 > 10) {
- return false;
- }
- sustava = sustava0;
- DUMMY_BOOL = true;
- return DUMMY_BOOL;
- }
- int CISLO_V_SUSTAVE::vratSustavu() {
- DUMMY_INT = sustava;
- return DUMMY_INT;
- }
- bool CISLO_V_SUSTAVE::vlozCisloVSustave(string cislo0) {
- int pomCislo;
- for (unsigned int i = 0; i < cislo0.size(); i++) {
- int ityClen = cislo0[i] - '0';
- if ((ityClen < 0) || (ityClen > vratSustavu())) {
- return false;
- }
- }
- pomCislo = konverziaDoDesiatkovej(cislo0, vratSustavu());
- CISLO::vlozCislo(pomCislo);
- DUMMY_BOOL = true;
- return DUMMY_BOOL;
- }
- string CISLO_V_SUSTAVE::vratCisloVSustave() {
- DUMMY_STRING = konverziaDesiatkovehoCislaDoSustavy(CISLO::vratHodnotu(), CISLO_V_SUSTAVE::vratSustavu());
- return DUMMY_STRING;
- }
- //3. uloha
- string KALKULACKA::vypocitaj(int op1, char operator0, int op2) {
- int vysledok;
- //Ak operator0 nie je jeden z povolenych operatorov +-*/, vrat "NEZNAMY OPERATOR".
- //Inak vypocitaj jednoduchy aritmeticky vyraz a vysledok
- //vloz do clenskej premennej vysledok.
- //Tento vysledok vrat ako string. Pozor na delenie nulou.
- if (operator0 != '+' && int(operator0) != '-' && int(operator0) != '*' && int(operator0) != '/'){
- return "NEZNAMY OPERATOR";
- }
- if (int(operator0) == '+'){
- vysledok = op1 + op2;
- return cisloNaString(vysledok);
- }
- if (int(operator0) == '-'){
- vysledok = op1 - op2;
- return cisloNaString(vysledok);
- }
- if (int(operator0) == '*'){
- vysledok = op1 * op2;
- return cisloNaString(vysledok);
- }
- if (int(operator0) == '/' && op1 != 0 && op2 != 0){
- vysledok = op1 / op2;
- return cisloNaString(vysledok);
- }
- else{
- return "DELENIE NULOU";
- }
- }
- int KALKULACKA::vratVysledok() {
- return DUMMY_INT;
- }
- //4. uloha
- bool KALKULACKA_V_SUSTAVE::vlozSustavu(int sustava0) {
- //Ak vstupna sustava nie je povolena, vrat false.
- //Inak ju vloz do clenskej premennej sustava a vrat true.
- if(sustava0 < 2 || sustava0 > 10){
- return false;
- }
- else{
- sustava = sustava0;
- return true;
- }
- }
- int KALKULACKA_V_SUSTAVE::vratSustavu() {
- //Vrat clensku premennu sustava.
- return sustava;
- }
- string KALKULACKA_V_SUSTAVE::vypocitajVSustave(const string op1, char operator0, const string op2) {
- int cislo1, cislo2, vysledok;
- //Skonvertuj oba operandy v zadanej sustave do celych cisel.
- //Ak je niektore cislo nespravne v danej sustave, vrat "ZLE_CISLO".
- //Ak operator0 nie je jeden z povolenych operatorov +-*/, vrat "NEZNAMY OPERATOR".
- //Inak vypocitaj jednoduchy aritmeticky vyraz a vysledok
- //vloz do clenskej premennej vysledok.
- //Tento vysledok vrat ako string. Pozor na delenie nulou.
- for (unsigned int i = 0; i < op1.size(); i++) {
- int ityClen = op1[i] - '0';
- if ((ityClen < 0) || (ityClen >= sustava)) {
- return "ZLE_CISLO";
- break;
- }
- }
- for (unsigned int i = 0; i < op2.size(); i++) {
- int ityClen = op2[i] - '0';
- if ((ityClen < 0) || (ityClen >= sustava)) {
- return "ZLE_CISLO";
- break;
- }
- }
- cislo1=konverziaDoDesiatkovej(op1, sustava);
- cislo2=konverziaDoDesiatkovej(op2, sustava);
- if (operator0 != '+' && int(operator0) != '-' && int(operator0) != '*' && int(operator0) != '/'){
- return "NEZNAMY OPERATOR";
- }
- if (int(operator0) == '+'){
- vysledok = cislo1 + cislo2;
- return konverziaDesiatkovehoCislaDoSustavy(vysledok, sustava);
- }
- if (int(operator0) == '-'){
- vysledok = cislo1 - cislo2;
- return konverziaDesiatkovehoCislaDoSustavy(vysledok, sustava);
- }
- if (int(operator0) == '*'){
- vysledok = cislo1 * cislo2;
- return konverziaDesiatkovehoCislaDoSustavy(vysledok, sustava);
- }
- if (int(operator0) == '/' && cislo1 != 0 && cislo2 != 0){
- vysledok = cislo1 / cislo2;
- return konverziaDesiatkovehoCislaDoSustavy(vysledok, sustava);
- }
- else{
- return "DELENIE NULOU";
- }
- }
- //5. uloha
- string KALKULACKA_V_SUSTAVE::vypocitajVyraz(const string vyraz) {
- //Metoda najprv rozparsuje vstupny vyraz na <operand><operator><operand>.
- //Ak nie je vyraz spravny v zadanej sustave, vrat "ZLY VYRAZ".
- //Skonvertuj oba operandy v zadanej sustave do celych cisel.
- //Ak je niektore cislo nespravne v danej sustave, vrat "ZLE_CISLO".
- //Ak operator0 nie je jeden z povolenych operatorov +-*/, vrat "NEZNAMY OPERATOR".
- //Inak vypocitaj jednoduchy aritmeticky vyraz a vysledok
- //vloz do clenskej premennej vysledok.
- //Tento vysledok vrat ako string. Pozor na delenie nulou.
- return DUMMY_STRING;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement