Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- #include <dos.h>
- #include <iostream.h>
- #include <string.h>
- #include <vcl.h>
- #pragma hdrstop
- #pragma argsused
- //---------------------------------------------------------------------------
- float calcult(std::string& inpt, int x){
- unsigned int i = 0;
- unsigned int i1 = 0;
- unsigned int i2 = 0;
- float opr1 = 1;
- float opr = 0;
- float res = 0;
- bool numHasBegun = false, goOut = false, wasMul = false, wasDiv = false, firstTime = true;
- std::string formtd = "";
- std::string inBuf = "";
- std::string num = "";
- char xToNum[11];
- i1 = 0;
- while(i1 < inpt.length()){
- if(inpt[i1] == 'x' || inpt[i1] == 'X'){
- itoa(x, xToNum, 10);
- inBuf += xToNum;
- }
- else
- inBuf += inpt[i1];
- i1++;
- }
- i1 = 0;
- while(i1 < inBuf.length()){
- while(inBuf[i1] == '+'){
- i2++;
- i1++;
- }
- if(i2 && formtd.length() > 0)
- i1--;
- i2 = 0;
- while(inBuf[i1] == '-'){
- i2++;
- i1++;
- }
- if(i2 % 2)
- formtd += "-";
- if(!(i2 % 2) && i2 != 0 && inBuf.length() > 0)
- formtd += "+";
- formtd += inBuf[i1];
- i2 = 0;
- i1++;
- }
- while(i < formtd.length()){
- num = "";
- numHasBegun = false;
- goOut = false;
- while((isdigit(formtd[i]) || formtd[i] == '+' || formtd[i] == '-' || formtd[i] == '.' || formtd[i] == 'x') && !goOut){
- if(numHasBegun && (formtd[i] == '+' || formtd[i] == '-'))
- goOut = true;
- num += formtd[i];
- numHasBegun = true;
- if(!goOut)
- i++;
- }
- opr = atof(num.c_str());
- if(!wasMul && !wasDiv && formtd[i] != '*' && formtd[i] != '/')
- res += opr;
- if(formtd[i] == '*' || wasMul){
- opr1 *= opr;
- wasMul = true;
- if(formtd[i] != '*' && formtd[i] != '/'){
- wasMul = false;
- res += opr1;
- opr1 = 1;
- }
- if(formtd[i] == '/'){
- wasDiv = true;
- wasMul = false;
- }
- }
- if(formtd[i] == '/' || wasDiv){
- if(firstTime){
- opr1 = opr;
- firstTime = false;
- }
- else
- opr1 = opr1 / opr;
- wasDiv = true;
- if(formtd[i] != '/' && formtd[i] != '*'){
- cout << opr1 << endl;
- wasDiv = false;
- firstTime = true;
- res += opr1;
- opr1 = 1;
- }
- if(formtd[i] == '*'){
- wasDiv = false;
- wasMul = true;
- }
- }
- if(!goOut)
- i++;
- }
- return res;
- }
- int main(int argc, char* argv[]){
- const min = -10, max = 10;
- unsigned int i = 0, brktBorder = 0, brktBorder1 = 0;
- int x = 2;
- bool mode = false, brkts = true;
- int decP, sign;
- std::string input = "";
- std::string buffer = "";
- std::string out = "";
- /*
- while(input != "mn" && input != "at"){
- cout << "Ruchnoi ili auto rezhim? (mn/at): ";
- std::getline(std::cin, input);
- i = 0;
- while(i < input.length()){
- while(input[i] == ' ')
- input.erase(i, 1);
- i++;
- }
- }
- if(input == "mn")
- mode = true;
- if(input == "at")
- mode = false;
- */
- cout << "Vvedite formulu funktcii: ";
- std::getline(std::cin, input);
- i = 0;
- while(i < input.length()){
- while(input[i] == ' ')
- input.erase(i, 1);
- i++;
- }
- while(brkts){
- i = 0;
- brkts = false;
- brktBorder = 0;
- brktBorder1 = 0;
- out = "";
- while(i < input.length()){
- if(input[i] == '('){
- brktBorder = i;
- brkts = true;
- }
- i++;
- }
- i = brktBorder;
- buffer = "";
- while(input[i] != ')' && i < input.length()){
- buffer += input[i];
- i++;
- }
- brktBorder1 = i;
- if(brktBorder1 >= input.length())
- brktBorder1 = input.length() - 1;
- buffer = fcvt(calcult(buffer, x), 15, &decP, &sign);
- buffer.insert(decP, ".");
- i = 0;
- while(i < brktBorder){
- out += input[i];
- i++;
- }
- out += buffer;
- i = brktBorder1 + 1;
- while(i < input.length() && brktBorder1 < input.length() - 1){
- out += input[i];
- i++;
- }
- input = out;
- }
- cout << out << endl;
- system("pause");
- return 0;
- }
- //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement