rooq37

ZMPO3 "Drzewo"

Nov 22nd, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.97 KB | None | 0 0
  1. #ifndef CNode_h
  2. #include <vector>
  3. #include <iostream>
  4. #include <string>
  5. #define CNode_h
  6. using namespace std;
  7. class CNode {
  8. public:
  9.     CNode(string sValue, CNode * pParent);
  10.     void vAddChild(CNode * pChild);
  11.     string sGetValue();
  12.     void sSetValue(string sText);
  13.     CNode * pGetParent();
  14.     void pSetParent(CNode * pParent);
  15.     vector<CNode*> * pvGetChildren();
  16.     void sGetValuesOfChildren();
  17.     ~CNode();
  18. private:
  19.     string sValue;
  20.     vector < CNode* > pvChildren;
  21.     CNode *pParent;
  22. };
  23. #endif
  24.  
  25.  
  26. #include "CNode.h"
  27.  
  28. CNode::CNode(string sValue, CNode *pParent) {
  29.     this->sValue = sValue;
  30.     this->pParent = pParent;
  31. }
  32.  
  33. void CNode::vAddChild(CNode *pChild) {
  34.     this->pvChildren.push_back(pChild);
  35. }
  36.  
  37. string CNode::sGetValue() {
  38.     return sValue;
  39. }
  40.  
  41. void CNode::sSetValue(string sText) {
  42.     this->sValue = sText;
  43. }
  44.  
  45. CNode * CNode::pGetParent() {
  46.     return pParent;
  47. }
  48.  
  49. void CNode::pSetParent(CNode * pParent) {
  50.     this->pParent = pParent;
  51. }
  52.  
  53. vector<CNode*> * CNode::pvGetChildren() {
  54.     return &pvChildren;
  55. }
  56.  
  57. void CNode::sGetValuesOfChildren() {
  58.     for (int i = 0; i < pvChildren.size(); i++) {
  59.         cout << pvChildren[i]->sGetValue()<<", ";
  60.     }
  61. }
  62.  
  63. CNode::~CNode() {
  64.     for (int i = 0; i < pvChildren.size(); i++) {
  65.         delete pvChildren[i];
  66.     }
  67. }
  68.  
  69.  
  70. #ifndef CTree_h
  71. #include "CNode.h"
  72. #include "CUtils.h"
  73. #include <cstdlib>
  74. #include <math.h>
  75. #define CTree_h
  76. using namespace std;
  77. class CTree {
  78. public:
  79.     CTree();
  80.     CTree(CNode * pRoot);
  81.     string sPrintTree();
  82.     float iCountTree();
  83.     bool bParseExpression(string sText);
  84.     CTree * operator+(const CTree & pcOtherTree);
  85.     void operator=(CTree & pcOtherTree);
  86.     vector<string>* pvGetVariables();
  87.     string sPrintVariables();
  88.     void vRepairTree();
  89.     ~CTree();
  90. private:
  91.     CNode *pRoot;
  92.     string sPrintHelper(CNode * pStartNode);
  93.     int iIsOperator(string sText);
  94.     void vRepairHelper(CNode * pStartNode);
  95.     float iCountHelper(CNode * pStartNode);
  96. };
  97. #endif
  98.  
  99.  
  100. #include "CTree.h"
  101.  
  102. CTree::CTree(CNode *pRoot) {
  103.     this->pRoot = pRoot;
  104. }
  105.  
  106. CTree::CTree() {
  107.     this->pRoot = NULL;
  108. }
  109.  
  110. string CTree::sPrintHelper(CNode *pStartNode) {
  111.     string sTemp = "";
  112.     sTemp += pStartNode->sGetValue();
  113.     for (int i = 0; i < pStartNode->pvGetChildren()->size(); i++) {
  114.         sTemp += " ";
  115.         sTemp += sPrintHelper((*(pStartNode->pvGetChildren()))[i]);
  116.     }
  117.     return sTemp;
  118. }
  119.  
  120. string CTree::sPrintTree() {
  121.     return sPrintHelper(pRoot);
  122. }
  123.  
  124. int CTree::iIsOperator(string sText){
  125.     if (sText == "+") return 1;
  126.     if (sText == "-") return 2;
  127.     if (sText == "*") return 3;
  128.     if (sText == "/") return 4;
  129.     if (sText == "sin") return 5;
  130.     if (sText == "cos") return 6;
  131.     return 0;
  132. }
  133.  
  134. float CTree::iCountTree() {
  135.     return iCountHelper(pRoot);
  136. }
  137.  
  138. float CTree::iCountHelper(CNode *pStartNode) {
  139.     float iSum = 0;
  140.     switch (iIsOperator(pStartNode->sGetValue())) {
  141.     case 1: {
  142.         if ((pStartNode->pvGetChildren()->size()) == 2) {
  143.             iSum += (iCountHelper((*(pStartNode->pvGetChildren()))[0]) + iCountHelper((*(pStartNode->pvGetChildren()))[1]));
  144.         }
  145.         break;
  146.     }
  147.     case 2: {
  148.         if ((pStartNode->pvGetChildren()->size()) == 2) {
  149.             iSum += (iCountHelper((*(pStartNode->pvGetChildren()))[0]) - iCountHelper((*(pStartNode->pvGetChildren()))[1]));
  150.         }
  151.         break;
  152.     }
  153.     case 3: {
  154.         if ((pStartNode->pvGetChildren()->size()) == 2) {
  155.             iSum += (iCountHelper((*(pStartNode->pvGetChildren()))[0]) * iCountHelper((*(pStartNode->pvGetChildren()))[1]));
  156.         }
  157.         break;
  158.     }
  159.     case 4: {
  160.         if ((pStartNode->pvGetChildren()->size()) == 2) {
  161.             iSum += (iCountHelper((*(pStartNode->pvGetChildren()))[0]) / iCountHelper((*(pStartNode->pvGetChildren()))[1]));
  162.         }
  163.         break;
  164.     }
  165.     case 5: {
  166.         if ((pStartNode->pvGetChildren()->size()) == 1) {
  167.             iSum += sin(iCountHelper((*(pStartNode->pvGetChildren()))[0]));
  168.         }
  169.         break;
  170.     }
  171.     case 6: {
  172.         if ((pStartNode->pvGetChildren()->size()) == 1) {
  173.             iSum += cos(iCountHelper((*(pStartNode->pvGetChildren()))[0]));
  174.         }
  175.         break;
  176.     }
  177.     case 0: {
  178.         string sTemp = pStartNode->sGetValue();
  179.         iSum += atof(sTemp.c_str());
  180.         break;
  181.     }
  182.     }
  183.     return iSum;
  184. }
  185.  
  186. vector<string> * CTree::pvGetVariables() {
  187.     vector<string> * vTemp = new vector<string>;
  188.     string sTree = sPrintTree();
  189.     int i = 0;
  190.     string sTemp = "";
  191.     bool bIsAdded = false;
  192.     while (i <= sTree.size()) {
  193.         if (sTree[i] != ' ') {
  194.             sTemp += sTree[i];
  195.             i++;
  196.         }
  197.         else {
  198.             while (i + 1 <= sTree.size() && sTree[i + 1] == ' ') {
  199.                 i++;
  200.             }
  201.             if (iIsOperator(sTemp) == 0 && CUtils::bIsVariable(sTemp)) {
  202.                 for (int i = 0; i < vTemp->size(); i++) {
  203.                     if ((*vTemp)[i] == sTemp) bIsAdded = true;
  204.                 }
  205.                 if (!bIsAdded) {
  206.                     vTemp->push_back(sTemp);
  207.                 }
  208.                 bIsAdded = false;
  209.             }
  210.             sTemp = "";
  211.             i++;
  212.         }
  213.         if (i == sTree.size()) {
  214.             if (iIsOperator(sTemp) == 0 && CUtils::bIsVariable(sTemp)) {
  215.                 for (int i = 0; i < vTemp->size(); i++) {
  216.                     if ((*vTemp)[i] == sTemp) bIsAdded = true;
  217.                 }
  218.                 if (!bIsAdded) {
  219.                     vTemp->push_back(sTemp);
  220.                 }
  221.                 bIsAdded = false;
  222.             }
  223.         }
  224.     }
  225.     return vTemp;
  226. }
  227.  
  228. string CTree::sPrintVariables() {
  229.     vector <string> *vTemp = pvGetVariables();
  230.     string sTemp = "";
  231.     for (int i = 0; i < vTemp->size(); i++) {
  232.         sTemp += (*vTemp)[i];
  233.         sTemp += " ";
  234.     }
  235.     delete vTemp;
  236.     return sTemp;
  237. }
  238.  
  239. void CTree::vRepairTree() {
  240.     vRepairHelper(pRoot);
  241. }
  242.  
  243. void CTree::vRepairHelper(CNode *pStartNode) {
  244.    
  245.     if (iIsOperator(pStartNode->sGetValue()) > 0 && iIsOperator(pStartNode->sGetValue()) < 5) {
  246.         if ((pStartNode->pvGetChildren()->size()) == 1) {
  247.             pStartNode->vAddChild(new CNode("1", pStartNode));
  248.         }
  249.         if ((pStartNode->pvGetChildren()->size()) == 0) {
  250.             pStartNode->vAddChild(new CNode("1", pStartNode));
  251.             pStartNode->vAddChild(new CNode("1", pStartNode));
  252.         }
  253.     }
  254.     if (iIsOperator(pStartNode->sGetValue()) > 4 && iIsOperator(pStartNode->sGetValue()) < 7) {
  255.         if ((pStartNode->pvGetChildren()->size()) < 1) {
  256.             pStartNode->vAddChild(new CNode("1", pStartNode));
  257.         }
  258.     }
  259.     for (int i = 0; i < pStartNode->pvGetChildren()->size(); i++) {
  260.         vRepairHelper((*(pStartNode->pvGetChildren()))[i]);
  261.     }
  262. }
  263.  
  264. bool CTree::bParseExpression(string sText) {
  265.     pRoot = new CNode(CUtils::sGetHead(sText), NULL);
  266.     string sTemp = CUtils::sGetTail(sText);
  267.     CNode * pCurrentNode = pRoot;
  268.     CNode * pTempNode;
  269.     bool bSkipped = false;
  270.  
  271.     while (sTemp.size() > 0) {
  272.         if (iIsOperator(pCurrentNode->sGetValue()) >= 1 && iIsOperator(pCurrentNode->sGetValue()) <= 4) {
  273.             if (pCurrentNode->pvGetChildren()->size() < 2) {
  274.                 pTempNode = new CNode(CUtils::sGetHead(sTemp), pCurrentNode);
  275.                 sTemp = CUtils::sGetTail(sTemp);
  276.                 pCurrentNode->vAddChild(pTempNode);
  277.                 pCurrentNode = pTempNode;
  278.             }
  279.             else {
  280.                 if (pCurrentNode->pGetParent() == NULL) {
  281.                     bSkipped = true;
  282.                     sTemp = CUtils::sGetTail(sTemp);
  283.                 }
  284.                 else pCurrentNode = pCurrentNode->pGetParent();
  285.             }
  286.         }
  287.         else if (iIsOperator(pCurrentNode->sGetValue()) >= 5 && iIsOperator(pCurrentNode->sGetValue()) <= 6) {
  288.             if (pCurrentNode->pvGetChildren()->size() < 1) {
  289.                 pTempNode = new CNode(CUtils::sGetHead(sTemp), pCurrentNode);
  290.                 sTemp = CUtils::sGetTail(sTemp);
  291.                 pCurrentNode->vAddChild(pTempNode);
  292.                 pCurrentNode = pTempNode;
  293.             }
  294.             else {
  295.                 if (pCurrentNode->pGetParent() == NULL) {
  296.                     bSkipped = true;
  297.                     sTemp = CUtils::sGetTail(sTemp);
  298.                 }
  299.                 else pCurrentNode = pCurrentNode->pGetParent();
  300.             }
  301.         }
  302.         else if (iIsOperator(pCurrentNode->sGetValue()) == 0) {
  303.             if (pCurrentNode->pGetParent() == NULL) {
  304.                 bSkipped = true;
  305.                 sTemp = CUtils::sGetTail(sTemp);
  306.             }
  307.             else pCurrentNode = pCurrentNode->pGetParent();
  308.         }
  309.     }
  310.     return bSkipped;
  311. }
  312.  
  313. CTree* CTree::operator+(const CTree & pcOtherTree) {
  314.     string sFirstTree = this->sPrintTree();
  315.     string sSecondTree = sPrintHelper(pcOtherTree.pRoot);
  316.     int i = 0;
  317.     string sFinallyTree = "";
  318.     string sTemp = "";
  319.     bool bAdded = false;
  320.     while (i < (sFirstTree.size())) {
  321.         if (sFirstTree[i] != ' ') {
  322.             sTemp += sFirstTree[i];
  323.             i++;
  324.         }
  325.         else if ((!bAdded) && (iIsOperator(sTemp) == 0)) {
  326.             sFinallyTree += " ";
  327.             sFinallyTree += sSecondTree;
  328.             bAdded = true;
  329.             sTemp = "";
  330.             i++;
  331.         }
  332.         else {
  333.             sFinallyTree += " " + sTemp;
  334.             sTemp = "";
  335.             i++;
  336.         }
  337.         if (i == sFirstTree.size()) {
  338.             sFinallyTree += " " + sTemp;
  339.             sTemp = "";
  340.             i++;
  341.         }
  342.     }
  343.     CTree *cTempTree = new CTree;
  344.     cTempTree->bParseExpression(sFinallyTree);
  345.     return cTempTree;
  346. }
  347.  
  348. void CTree::operator=(CTree &pcOtherTree)
  349. {
  350.     this->pRoot = (pcOtherTree.pRoot);
  351. }
  352.  
  353. CTree::~CTree() {
  354.     delete pRoot;
  355. }
  356.  
  357.  
  358. #ifndef CUtils_h
  359. #include <string>
  360. #define CUtils_h
  361. using namespace std;
  362. class CUtils {
  363. public:
  364.     static bool bIsLetter(char cTemp);
  365.     static bool bIsVariable(string sText);
  366.     static string sGetHead(string sText);
  367.     static string sGetTail(string sText);
  368.     static bool bIsNumber(string sText);
  369.     static bool bIsAuthorizedCharacter(char cTemp);
  370. };
  371. #endif
  372.  
  373.  
  374. #include "CUtils.h"
  375. bool CUtils::bIsLetter(char cTemp) {
  376.     int iAsci = cTemp;
  377.     if ((iAsci >= 65 && iAsci <= 90) || (iAsci >= 97 && iAsci <= 122)) {
  378.         return true;
  379.     }
  380.     return false;
  381. }
  382. /*
  383. bool CUtils::bIsVariable(string sText) {
  384.     for (int i = 0; i<sText.size(); i++) {
  385.         if (bIsLetter(sText[i])) {
  386.             return true;
  387.         }
  388.     }
  389.     return false;
  390. }
  391. */
  392. bool CUtils::bIsNumber(string sText) {
  393.     int iTemp;
  394.     for (int i = 0; i < sText.size(); i++) {
  395.         iTemp = sText[i];
  396.         if (iTemp < 48 && iTemp > 57) {
  397.             return false;
  398.         }
  399.     }
  400.     return true;
  401. }
  402.  
  403. bool CUtils::bIsAuthorizedCharacter(char cTemp) {
  404.     int iTemp = cTemp;
  405.     if ((iTemp >= 48 && iTemp <= 57) || (iTemp >= 65 && iTemp <= 90) || (iTemp >= 97 && iTemp <= 122) || (cTemp == '+') || (cTemp == '-') || (cTemp == '*') || (cTemp == '/') || (iTemp == 32) || (iTemp == 0)) {
  406.         return true;
  407.     }
  408.     return false;
  409. }
  410.  
  411. bool CUtils::bIsVariable(string sText) {
  412.     int iTemp;
  413.     if (sText == "sin" || sText == "cos") {
  414.         return false;
  415.     }
  416.     for (int i = 0; i < sText.size(); i++) {
  417.         iTemp = sText[i];
  418.         if (((iTemp >= 97 && iTemp <= 122) || (iTemp >= 65 && iTemp <= 90))) {
  419.             return true;
  420.         }
  421.     }
  422.     return false;
  423. }
  424.  
  425. string CUtils::sGetHead(string sText) {
  426.     int iIndex = 0;
  427.     string sTemp = "";
  428.     while (iIndex < sText.size() && sText[iIndex] == ' ') {
  429.         iIndex++;
  430.     }
  431.     while (iIndex < (sText.size())) {
  432.         if (sText[iIndex] != ' ') {
  433.             sTemp += sText[iIndex];
  434.             iIndex++;
  435.         }
  436.         else {
  437.             return sTemp;
  438.         }
  439.     }
  440.     return sTemp;
  441. }
  442.  
  443. string CUtils::sGetTail(string sText) {
  444.     int iIndex = 0;
  445.     bool bStop = true;
  446.     string sTemp = "";
  447.     while (iIndex < sText.size() && sText[iIndex] == ' ') {
  448.         iIndex++;
  449.     }
  450.     while (iIndex < (sText.size()) && bStop) {
  451.         if (sText[iIndex] != ' ') {
  452.             iIndex++;
  453.         }
  454.         else {
  455.             bStop = false;
  456.         }
  457.     }
  458.     for (int i = iIndex; i < sText.size(); i++) {
  459.         sTemp += sText[i];
  460.     }
  461.     return sTemp;
  462. }
  463.  
  464.  
  465. #ifndef CInterface_h
  466. #include "CTree.h"
  467. #include <stdlib.h>
  468. #define CInterface_h
  469. class CInterface {
  470. public:
  471.     void vPrintHelp();
  472.     void vStep();
  473. private:
  474.     CTree *cMainTree = new CTree;
  475.     void vEnter(string sText);
  476.     void vVars();
  477.     void vPrint();
  478.     void vComp(string sValues);
  479.     void vJoin(string sText);
  480. };
  481. #endif
  482.  
  483.  
  484. #include "CInterface.h"
  485.  
  486. void CInterface::vEnter(string sText) {
  487.     cMainTree = new CTree;
  488.     bool bUnauthorizedCharacters = false;
  489.     string sExpression = "";
  490.     int iIndex = 0;
  491.     while (iIndex < (sText.size())) {
  492.         if (CUtils::bIsAuthorizedCharacter(sText[iIndex])){
  493.             sExpression += sText[iIndex];
  494.             iIndex++;
  495.         }
  496.         else {
  497.             bUnauthorizedCharacters = true;
  498.             iIndex++;
  499.         }
  500.     }
  501.     if (bUnauthorizedCharacters) {
  502.         cout << "W wyrazeniu napotkano niedozwolone znaki, ktore zostaly pominiete!" << endl;
  503.     }
  504.     if (cMainTree->bParseExpression(sExpression)) {
  505.         cout << "W wyrazeniu napotkano wartosci/zmienne nie pasujace do operatorow, ktore zostaly pominiete!" << endl;
  506.     }
  507.     sExpression = cMainTree->sPrintTree();
  508.     cMainTree->vRepairTree();
  509.     if (sExpression != (cMainTree->sPrintTree())) {
  510.         cout << "Wyrazenie wymagalo naprawy! - Naprawiono pomyslnie." << endl;
  511.     }
  512.     cout << "Aktualne wyrazenie: " << cMainTree->sPrintTree()<<endl;
  513. }
  514.  
  515. void CInterface::vVars() {
  516.     if (cMainTree->sPrintVariables().size() < 1) {
  517.         cout << "Brak zmiennych w drzewie." << endl;
  518.     }
  519.     else {
  520.         cout << "Zmienne: " << cMainTree->sPrintVariables() << endl;
  521.     }
  522. }
  523.  
  524. void CInterface::vPrint() {
  525.     cout << "Aktualne drzewo: " << cMainTree->sPrintTree() << endl;
  526. }
  527.  
  528. void CInterface::vComp(string sValues) {
  529.     vector<string> *pvVariables = cMainTree->pvGetVariables();
  530.     if (pvVariables->size() == 0) {
  531.         cout << "Wynik: " << cMainTree->iCountTree() << endl;
  532.         return;
  533.     }
  534.     string sTemp = sValues;
  535.     vector<string> pvValues;
  536.     while (sTemp.size() > 0) {
  537.         pvValues.push_back(CUtils::sGetHead(sTemp));
  538.         sTemp = CUtils::sGetTail(sTemp);
  539.     }
  540.     if (pvVariables->size() != (&pvValues)->size()) {
  541.         cout << "Liczba podanych argumentow nie zgadza sie z liczba zmiennych znalozionych w drzewie!" << endl;
  542.         return;
  543.     }
  544.     for (int i = 0; i < (&pvValues)->size(); i++) {
  545.         if (!CUtils::bIsNumber((pvValues)[i])) {
  546.             cout << "Wsrod podanych wartosci znajduja sie wartosci, ktore nie sa liczba!" << endl;
  547.             return;
  548.         }
  549.     }
  550.  
  551.     bool bAdded = false;
  552.     string sTree = cMainTree->sPrintTree();
  553.     string sNewTree = "";
  554.     while (sTree.size() > 0) {
  555.         if (CUtils::bIsVariable(CUtils::sGetHead(sTree))) {
  556.             for (int i=0; i < pvVariables->size(); i++) {
  557.                 if ((CUtils::sGetHead(sTree)) == (*pvVariables)[i]) {
  558.                     sNewTree += " ";
  559.                     sNewTree += (pvValues)[i];
  560.                 }
  561.             }
  562.         }
  563.         else {
  564.             sNewTree += " ";
  565.             sNewTree += CUtils::sGetHead(sTree);
  566.         }
  567.         sTree = CUtils::sGetTail(sTree);
  568.     }
  569.     cout << "Uzupelnione drzewo: " << sNewTree << endl;
  570.     CTree cNewTree;
  571.     cNewTree.bParseExpression(sNewTree);
  572.     cout << "Wynik: " << cNewTree.iCountTree() << endl;
  573. }
  574.  
  575. void CInterface::vJoin(string sText) {
  576.     CTree cSecondTree;
  577.     bool bUnauthorizedCharacters = false;
  578.     string sExpression = "";
  579.     int i = 0;
  580.     while (i < (sText.size())) {
  581.         if (CUtils::bIsAuthorizedCharacter(sText[i])) {
  582.             sExpression += sText[i];
  583.             i++;
  584.         }
  585.         else {
  586.             bUnauthorizedCharacters = true;
  587.             i++;
  588.         }
  589.     }
  590.     if (bUnauthorizedCharacters) {
  591.         cout << "W wyrazeniu napotkano niedozwolone znaki, ktore zostaly pominiete!" << endl;
  592.     }
  593.     if ((&cSecondTree)->bParseExpression(sExpression)) {
  594.         cout << "W wyrazeniu napotkano wartosci/zmienne nie pasujace do operatorow, ktore zostaly pominiete!" << endl;
  595.     }
  596.     sExpression = (&cSecondTree)->sPrintTree();
  597.     (&cSecondTree)->vRepairTree();
  598.     if (sExpression != ((&cSecondTree)->sPrintTree())) {
  599.         cout << "Wyrazenie wymagalo naprawy! - Naprawiono pomyslnie." << endl;
  600.     }
  601.     cMainTree = *cMainTree + cSecondTree;
  602.     cout << "Aktualne wyrazenie: " << cMainTree->sPrintTree() << endl;
  603. }
  604.  
  605. void CInterface::vPrintHelp() {
  606.     system("cls");
  607.     cout << "Dostepne komendy:" << endl;
  608.     cout << "- enter <formula> - tworzy drzewo na podstawie podanego wyrazenia" << endl;
  609.     cout << "- vars - wypisuje wszystkie zmienne z aktualnego drzewa" << endl;
  610.     cout << "- print - wypisuje aktualne drzewo w postaci prefiksowej" << endl;
  611.     cout << "- comp <var0> <var1>... - obliczenie wyniku dla wprowadzonych wartosci" << endl;
  612.     cout << "- join <formula> - dokleja wyrazenie do obecnego drzewa" << endl;
  613.     cout << "- help - wyswietla liste komend" << endl;
  614. }
  615.  
  616. void CInterface::vStep() {
  617.     cout << "> ";
  618.     string sLine;
  619.     getline(cin, sLine);
  620.  
  621.     if (!cin) cin.clear();
  622.  
  623.     if (sLine.length()<1) {
  624.         cout << "Wprowadz komende" << endl;
  625.         vStep();
  626.     }
  627.     else if (CUtils::sGetHead(sLine) == "enter") {
  628.         if (CUtils::sGetTail(sLine).size() > 0) {
  629.             vEnter(CUtils::sGetTail(sLine));
  630.         }
  631.     }
  632.     else if (CUtils::sGetHead(sLine) == "vars") {
  633.             vVars();
  634.     }
  635.     else if (CUtils::sGetHead(sLine) == "print") {
  636.         vPrint();
  637.     }
  638.     else if (CUtils::sGetHead(sLine) == "comp") {
  639.             vComp(CUtils::sGetTail(sLine));
  640.     }
  641.     else if (CUtils::sGetHead(sLine) == "join") {
  642.         if (CUtils::sGetTail(sLine).size() > 0) {
  643.             vJoin(CUtils::sGetTail(sLine));
  644.         }
  645.     }
  646.     else if (CUtils::sGetHead(sLine) == "help") {
  647.         vPrintHelp();
  648.     }
  649.     else {
  650.         cout << "Nie znaleziono podanej komendy." << endl;
  651.         vStep();
  652.     }
  653. }
  654.  
  655.  
  656. #include "CInterface.h"
  657. using namespace std;
  658. int main() {
  659.     CInterface interface;
  660.     interface.vPrintHelp();
  661.     while (true) {
  662.         interface.vStep();
  663.     }
  664.     return 0;
  665. }
Advertisement
Add Comment
Please, Sign In to add comment