/*************************************************************************/ /* Seminarni prace - vedecka kalkulacka, Jan Dvorak 1 FORMAT.CPP */ /*************************************************************************/ #ifndef _FORMAT_CPP #define _FORMAT_CPP /*************************************************************************/ #include using namespace std; #include "format.h" /******************************************************************/ string Format::nahradRetezec(string x, string jaky, string cim) { //funkce jez nahrazuje urcite retezce jinym string::size_type a = 0; while((a = x.find(jaky, a)) != string::npos) { x.replace(a, jaky.length(), cim); } return x; } /*************************************************************************/ // TRIDA NahradAlias /*************************************************************************/ string Format::NahradAlias(string x) { //nahrazeni aliasu strojovym kodem x = nahradRetezec(x, "cotangens", "g"); x = nahradRetezec(x, "tangens", "t"); x = nahradRetezec(x, "cosinus", "c"); x = nahradRetezec(x, "acotan", "G"); x = nahradRetezec(x, "sinus", "s"); x = nahradRetezec(x, "cotan", "c"); x = nahradRetezec(x, "asin", "S"); x = nahradRetezec(x, "acos", "C"); x = nahradRetezec(x, "atan", "T"); x = nahradRetezec(x, "actg", "G"); x = nahradRetezec(x, "sqrt", "o"); x = nahradRetezec(x, "10na", "d"); x = nahradRetezec(x, "na-1", "v"); x = nahradRetezec(x, "odmz", "i"); x = nahradRetezec(x, "sin", "s"); x = nahradRetezec(x, "cos", "c"); x = nahradRetezec(x, "tan", "t"); x = nahradRetezec(x, "ctg", "g"); x = nahradRetezec(x, "atg", "T"); x = nahradRetezec(x, "log", "l"); x = nahradRetezec(x, "sqr", "q"); x = nahradRetezec(x, "odm", "o"); x = nahradRetezec(x, "ena", "u"); x = nahradRetezec(x, "na2", "q"); x = nahradRetezec(x, "na3", "h"); x = nahradRetezec(x, "eul", "U"); x = nahradRetezec(x, "tg", "t"); x = nahradRetezec(x, "ln", "n"); x = nahradRetezec(x, "pi", "I"); return x; } /*************************************************************************/ string Format::OdstranPrebytky(string x) { //osdstraneni prebytku - tj zbytenych mezer, zbytecnych zavorek, //nastaveni desetinne tecky x = nahradRetezec(x, " ", ""); //odstraneni mezer x = nahradRetezec(x, ", ", "."); //nastaven� desetinne tecky x = nahradRetezec(x, "()", ""); //smazani prebytecnych zavorek x = nahradRetezec(x, "I", "3.1415926535");//pi x = nahradRetezec(x, "U", "2.718281828459");//euerovo cislo return x; } /*************************************************************************/ string Format::DoplnZnaky(string x) { //doplneni znaku - zavorky, znamenko krat // ++ -> +..... uspech = true; //kontrola z�vorek unsigned int a = 0, b = 0; unsigned int i, o = 0; bool pm = false; for(i = 0; i < x.length(); i++) { switch(x[i]) { case '(': a++; break; case ')': b++; break; case '-': case '+': if(pm)o++; pm = true; break; default: pm = false; } } if(a < b)zobrazChybu("Retezec je spatne uzavorkovan!"); if(b < a)for(i = b; i < a; i++)x.operator +=(")"); //nahrazen� operac�... for( i =0; i < o; i++) { x = nahradRetezec(x, "++", "+"); x = nahradRetezec(x, "--", "+"); x = nahradRetezec(x, "+-", "-"); x = nahradRetezec(x, "-+", "-"); } //dopln�n� kr�t, uprava plus m�nus final i = 0; while(i < x.length()) { switch(x[i]) { case '+': if(pm)x.replace(i, 1, "p"); pm = false; break; case '-': if(pm)x.replace(i, 1, "m"); pm = false; break; //oper�tory pou��vaj�c� znam�nko case 's': case 'c': case 't': case 'g': case 'd': case 'S': case 'C': case 'T': case 'G': case 'l': case 'n': case 'u': case 'o': case 'r': case 'i': case 'K': case '(': case '*': case '/': case 'P': pm = false; break; //oper�tory nepou��vaj�c� zmam�nko default: pm = true; } // i++; } //dopln�n� zmam�nka kr�t i = 1; pm = false; while(i < x.length()) { switch(x[i]) { //bez vno�ov�n�... (const*const apod case 'U': case 'I': if(pm){x.insert(i, "*"); i++;} pm = true; break; //mo�n� vno�ov�n�, po sob� vy�aduj� operaci case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '!': case 'O': case '.': case ')': case 't': case 's': case 'v': pm = true; break; //x oper�tor y case 'p': case 'm': case '*': case '/': case '^': case 'i': case 'P': case 'K': pm = false; break; //p��padn� dopln�n� * default: if(pm)x.insert(i, "*"); pm = false; } // i++; } // if(uspech) return x; else return "//"; } /*************************************************************************/ void Format::zobrazChybu(string zprava) { //Zobrazeni chybove hlasky, ukonceni vypoctu uspech = false; cerr << "\n\nChyba:\n" << zprava << "\n\n"; } /*************************************************************************/ #endif