From 60a0c0def3a890cc80386b57aedfe6c071e95d20 Mon Sep 17 00:00:00 2001 From: hnu202326010401 <2263510185@qq.com> Date: Tue, 30 Sep 2025 15:43:39 +0800 Subject: [PATCH] ADD file via upload --- src/question_product.cpp | 115 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/question_product.cpp diff --git a/src/question_product.cpp b/src/question_product.cpp new file mode 100644 index 0000000..392ed9f --- /dev/null +++ b/src/question_product.cpp @@ -0,0 +1,115 @@ +#include"question_product.h" +#include +#include + +int QuestionProduction::randnum(int min,int max){ + int num = (rand()%(max - min + 1)) + min; + return num; +} + +Question QuestionProduction::questionProduction(int questionId,const std::string& usertype){ + int operationnum = randnum(1,5); + std::vector operations; + + for(int i = 0;i < operationnum;i++){ + operations.push_back(randnum(1,100)); + } + + if(usertype == "小学"){ + return primaryProduction(questionId,operations); + }else if(usertype == "初中"){ + return juniorProduction(questionId,operations); + }else if(usertype == "高中"){ + return seniorProduction(questionId,operations); + } +} + + +Question QuestionProduction::primaryProduction(int questionId,const std::vector&operation){ + if(operation.size() == 1){ + std::string expression = std::to_string(operation[0]); + return Question(questionId,expression); + } + + std::string expression = std::to_string(operation[0]); + + for(int i = 1;i < operation.size();i++){ + std::string op = primaryWay[randnum(0,primaryWay.size() - 1)]; + bool ifbracket = randnum(0,1); + if(ifbracket){ + expression = "(" + expression + " " + op + " " + std::to_string(operation[i]) + ")"; + }else{ + expression = expression + " " + op + " " + std::to_string(operation[i]); + } + } + + return Question(questionId,expression); +} + +Question QuestionProduction::juniorProduction(int questionId,const std::vector&operation){ + std::string expression = std::to_string(operation[0]); + bool ifSpecialop = false; + + for(int i = 1;i < operation.size();i++){ + if(randnum(0,1) == 1){ + if(randnum(0,1) == 1){ + expression = "√" + expression; + }else{ + expression = "(" + expression + ")?"; + } + ifSpecialop = true; + } + std::string op = primaryWay[randnum(0,primaryWay.size() - 1)]; + bool ifbracket = randnum(0,1); + if(ifbracket){ + expression = "(" + expression + " " + op + " " + std::to_string(operation[i]) + ")"; + }else{ + expression = expression + " " + op + " " + std::to_string(operation[i]); + } + } + + if(!ifSpecialop){ + if(randnum(0,1) == 1){ + expression = "√" + expression; + }else{ + expression = "(" + expression + ")?"; + } + } + + return Question(questionId,expression); +} + +Question QuestionProduction::seniorProduction(int questionId,const std::vector&operation){ + std::string expression = std::to_string(operation[0]); + bool ifTrigonometric = false; + + for(int i = 1;i < operation.size();i++){ + if(randnum(0,1)){ + std::vectortrigFuns = {"sin","cos","tan"}; + std::string trigFun = trigFuns[randnum(0,2)]; + expression = trigFun + "(" + expression + ")"; + ifTrigonometric = true; + }else if(randnum(0,2) == 0){ + if(randnum(0,1) == 1){ + expression = "√" + expression; + }else{ + expression = "(" + expression + ")?"; + } + } + std::string op = primaryWay[randnum(0,primaryWay.size() - 1)]; + bool ifbracket = randnum(0,1); + if(ifbracket){ + expression = "(" + expression + " " + op + " " + std::to_string(operation[i]) + ")"; + }else{ + expression = expression + " " + op + " " + std::to_string(operation[i]); + } + } + + if(!ifTrigonometric){ + std::vectortrigFuns = {"sin","cos","tan"}; + std::string trigFun = trigFuns[randnum(0,2)]; + expression = trigFun + "(" + expression + ")"; + } + + return Question(questionId,expression); +}