In periode 3 van het 1e jaar MBO hebben we geleerd wat recursie is, en nu moesten we dat natuurlijk toepassen in een nieuwe podracht.
We mochten beginnen met een string als “+1+2” omdat dat makkelijker is. Daarna kunnen we aftrekken en vermenigvuldigen proberen, en het eerste plusje weg te laten.
#include <iostream> #include <stdlib.h> #include <string.h> #include <math.h> int rekenen(int antw,int getal,char som[1]){ switch (som[0]){ case '-': return antw-getal; break; case '+': return antw+getal; break; case '/': return antw/getal; break; case ':': return antw/getal; break; case '*': return antw*getal; break; case 'x': return antw*getal; break; case '%': return antw%getal; break; case '^': return pow(antw,getal); break; default: return antw+getal; } } int getal_length(char som[]){ int i, r = 0; !isdigit(som[0])?i=1:i=0; while (1){ if (!isdigit(som[i]) || som[i]==0){ if(!isdigit(som[0])) return r+1; else return r; } r++; i++; } } int doeSom(char som[], int* antw, int beginning=0){ if (som[0]==0) return 1; int length = getal_length(som); char som2[length], newsom[] = " "; strncpy(som2,som,length); if (!isdigit(som[0])) *antw = rekenen(*antw,atoi(&som2[1]),som2); else if (beginning) *antw = *antw + atoi(&som[0]); strncpy(newsom,&som[length],40); doeSom(newsom,antw); } int main(){ using namespace std; int antw = 0; char som[] = "88+2:2"; doeSom(som,&antw,1); cout << som << " = " << antw << endl; cin.get(); return 1; }