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;
}