ericek111

Calculator - main.cpp

Jan 25th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <fstream>
  6.  
  7. #include "calculator.h"
  8. #include "generator.h"
  9.  
  10. using namespace std;
  11.  
  12. string EOL = "\n";
  13.  
  14. int main() {
  15.     srand ( time(NULL) );
  16.     bool doloop = true;
  17.     while(doloop) {
  18.         cout << "Zvoľte režim: " << EOL;
  19.         cout << "1 - kalkulačka " << EOL;
  20.         cout << "2 - generátor príkladov " << EOL;
  21.         cout << "q - ukončiť program " << EOL;
  22.        
  23.         Calculator calc = Calculator();
  24.         Generator gen = Generator();
  25.  
  26.         /*double result = calc.evaldigitexpr("10+213+30+4", 0); // TEST DEBUG EXPR.
  27.         cout << "\n\n RESULT: " << result << "\n\n";
  28.         break;*/
  29.  
  30.        
  31.         string mode;
  32.         cin >> mode;
  33.         if(mode == "1") {
  34.             while(true) {
  35.                 cout << "Zadaj vyraz:\n";
  36.                 string expr = "";
  37.                 cin >> expr;
  38.                 if(expr == "q") break;
  39.                 cout << "= " << calc.eval(expr) << "\n";
  40.             }
  41.         } else if(mode == "2") {
  42.         int level = 0;
  43.         int problemsperlevel = 2;
  44.         int problemsleft = problemsperlevel;
  45.         bool interrupted = false;
  46.         std::string savefilename = "save.txt";
  47.         std::ifstream savefile(savefilename);
  48.         if(savefile) {
  49.             std::string str((std::istreambuf_iterator<char>(savefile)), std::istreambuf_iterator<char>());
  50.             level = std::stoi(str.substr(0, str.find("|")));
  51.             int problemsleftfile = std::stoi(str.substr(str.find("|")+1, std::string::npos));
  52.             problemsleft = problemsleftfile > 0 ? problemsleftfile : problemsleft;
  53.             cout << "File exists! Returning to level " << level << ".\n";
  54.         }
  55.        
  56.         double nums[] = { 1.0, 2.5 };
  57.         char* ops = "+" ;
  58.         int min = 0;
  59.         int max = 20;
  60.         int difficultmin = 0;
  61.         int difficultmax = 5;
  62.         int exprlen = 1;
  63.         bool negativenumbers = false;
  64.         //string prob = gen.formatproblem(nums, ops, 2);
  65.         cout << "TEST PROBLEM: " << gen.generateproblem(0, 100, 0, 5, ops, 1, 0, false) << "\n";
  66.  
  67.         while(true) {
  68.             // (min, max, difficultmin, difficultmax, char ops[], oplen, exprlen, divisibleby, bool negativenumbers)
  69.             //string prob = gen.generateproblem(min, max, difficultmin, difficultmax, ops, sizeof(ops), 3, 0, negativenumbers);
  70.             string prob = gen.generateproblem(min, max, difficultmin, difficultmax, ops, exprlen, 0, negativenumbers); //ops = "*";
  71.             switch(level) {
  72.                 case 0: ops = "+"; prob = gen.generateproblem(0, 20, 0, 5, ops, 1, 0, false); break;
  73.                 case 1: prob = gen.generateproblem(0, 50, 0, 5, ops, 1, 0, false); break;
  74.                 case 2: ops = "+-*"; prob = gen.generateproblem(0, 100, 0, 5, ops, 1, 0, false); break;
  75.                 case 3: ops = "+-"; prob = gen.generateproblem(0, 100, 0, 10, ops, 1, 0, false); break;
  76.                 case 4: ops = "+-*"; prob = gen.generateproblem(0, 300, 0, 30, ops, 1, 0, false); break;
  77.                 case 5: ops = "/"; prob = gen.generateproblem(0, 100, 0, 5, ops, 1, 1, false); break;
  78.                 default:
  79.                     break;
  80.             }
  81.             cout << level << ": " << (problemsperlevel-problemsleft+1) << "/" << problemsperlevel << " -> "<< prob << " -> ";
  82.            
  83.             string userres = "";
  84.             cin >> userres;
  85.             const char * userreschararr = userres.c_str();
  86.             if(userreschararr[0] == 'P' || userreschararr[0] == 'p' || userreschararr[0] == 'q' || userreschararr[0] == 'Q') {
  87.                 cout << "Saving level!\n";
  88.                 std::ofstream outfile(savefilename, std::ofstream::out | std::ofstream::trunc);
  89.                 outfile << level << "|" << problemsleft;
  90.                 outfile.close();
  91.                 interrupted = true;
  92.                 break;
  93.             }
  94.             if(userreschararr[0] == 'r' || userreschararr[0] == 'R') {
  95.                 cout << "Restarting game!\n";
  96.                 std::ofstream outfile(savefilename, std::ofstream::out | std::ofstream::trunc);
  97.                 outfile << "0|" << problemsleft;
  98.                 outfile.close();
  99.                 level = 0;
  100.                 problemsleft = problemsperlevel;
  101.                 continue;
  102.             }
  103.             double userresparsed = 0;
  104.             userresparsed = std::atof(userreschararr);
  105.             if(userresparsed == calc.evaldigitexpr(prob)) {
  106.                 problemsleft--;
  107.                 if(problemsleft <= 0) {
  108.                     level++;
  109.                     problemsleft = problemsperlevel;
  110.                 }
  111.             } else {
  112.                 problemsleft++;
  113.                 cout << "Wrong answer! Douche, learn maths!\n";
  114.                 cout << "Input: " << userresparsed << " --- Answer: " << calc.evaldigitexpr(prob) << "\n\n";
  115.             }
  116.         }
  117.         if(!interrupted) {
  118.             std::ofstream outfile(savefilename, std::ofstream::out | std::ofstream::trunc);
  119.             outfile << "0|0";
  120.             outfile.close();
  121.         }
  122.         } else if(mode == "q") {
  123.             break;
  124.         } else {
  125.             cout << "Nesprávna voľba! " << EOL;
  126.         }
  127.     }
  128.  
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment