2017-07-27 75 views
-1

在我的程序中,給定隨機數的隨機操作,使用隨機數ex。 2 + 5/2 - 5 + 2 *(9 - 5)/ 2 - 我需要檢查計算數字時是否會出現除零誤差。我將如何做到這一點,而且我自己也不會發生錯誤?檢查除以零

代碼:

for (int i = 0; i < randNumOfOperations; i++) { 
    int randDecision = rand() % 5 + 1; 
    int randDecision2 = rand() % 4 + 1; // inside() operations 
    int randDecision3 = rand() % 4 + 1; // outside() operations 
    int randNum = rand() % 15 + 1; 
    int parenRandNum = rand() % 20 + 1; 
    int parenRandNum2 = rand() % 20 + 1; 
    std::string tempstr = std::to_string(randNum); 
    std::string tempstr2 = std::to_string(parenRandNum); 
    std::string tempstr3 = std::to_string(parenRandNum2); 
switch (randDecision) { 
     case 1: 
      nStr.append(tempstr); 
      nStr.append(" + "); 
      break; 
     case 2: 
      nStr.append(tempstr); 
      nStr.append(" - "); 
      break; 
     case 3: 
      nStr.append(tempstr); 
      nStr.append(" * "); 
      break; 
     case 4: 
      nStr.append(tempstr); 
      nStr.append("/"); 
      break; 
     default: 
      break; 
    } 

    if (randDecision == 5) { //() operations 
     nStr.append(" ("); 
     switch (randDecision2) { 
     case 1: 
      nStr.append(tempstr2); 
      nStr.append(" + "); 
      nStr.append(tempstr3); 
      break; 
     case 2: 
      nStr.append(tempstr2); 
      nStr.append(" - "); 
      nStr.append(tempstr3); 
      break; 
     case 3: 
      nStr.append(tempstr2); 
      nStr.append(" * "); 
      nStr.append(tempstr3); 
      break; 
     case 4: 
      nStr.append(tempstr2); 
      nStr.append("/"); 
      nStr.append(tempstr3); 
      break; 
     default: 
      break; 
     } 

     nStr.append(") "); 

     switch (randDecision3) { 
     case 1: 
      nStr.append(" + "); 
      break; 
     case 2: 
      nStr.append(" - "); 
      break; 
     case 3: 
      nStr.append(" * "); 
      break; 
     case 4: 
      nStr.append("/"); 
      break; 
     default: 
      break; 
     } 

    } 
} 

該代碼把該隨機表達到字符串NSTR。

+5

你如何評價表達?如果您正在解析它並處理分析樹,則可以在每個分割節點中檢查除數是否爲零。 –

+0

我會咬人。你爲什麼需要這個? –

+0

用我的代碼更新了帖子以生成表達式。 – africantraplord

回答

-1

我會去了解一下如何構建表達式樹並使用它來評估表達式。這將使檢查除以零的操作變得簡單,而且效率很高。您以後也可以將其用於許多不同的應用程序。 http://www.geeksforgeeks.org/expression-tree/

-2

檢查一次u有它全部解析if語句以0將返回false

if(devisor) 
result=result/devisor; 

我有一個類似的項目在GitHub上做
for a recursive approach
using a list and stack

+0

如果在表達式中顯然是parens,你怎麼能假設標記化? –

+0

你可以做一個函數雙操作符(雙a,char操作符,雙b) –

+0

這根本不應答任何東西。 –