/*
 * Soubor:  20110325-Fri-matematic.c
 * Datum:   25.03.2011 10:08
 * Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
 * Licence: GNU/GPL 
 * Úloha: 
 * Popis:   
 ****************************************************/
#define _ISOC99_SOURCE
#define _GNU_SOURCE
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>

/* ***************    Makra    ******************** */
#define ARREYC 1024

/* ***************   Funkce    ******************** */

int plus(char priklad[])
{
    int a = rand() % 99;
    int b = rand() % (100 - a);
    sprintf(priklad, "%d + %d", a, b);
    return a + b;
}

int minus(char priklad[])
{
    int a = rand() % 99;
    int b = rand() % 99;
    if (a < b) {
        int bagr = a;
        a = b;
        b = bagr;
    }
    sprintf(priklad, "%d - %d", a, b);
    return a - b;
}

int krat(char priklad[])
{
    int a = rand() % 11;
    int b = rand() % 11;
    sprintf(priklad, "%d * %d", a, b);
    return a * b;
}

int deleno(char priklad[])
{
    int a = (rand() % 10) + 1;
    int b = rand() % 11;
    sprintf(priklad, "%d : %d", a * b, a);
    return b;
}

/****************************************************
 *               Hlavní program.
 ****************************************************/
int main(int argc, char *argv[])
{
    srand(time(NULL));

    // typedef říká, že ODKAZ není identifikátor proměnné, ale 
    // identifikátor datového typu.

    // odkaz na funkci, která vrací int a přebírá řetězec.
    typedef int (*OPERACE) (char *);
    OPERACE operace;

    OPERACE zadani[128];
    int zadanic = 0;            // počet prvků v poli zadani

    puts("zadej matematické operace");
    char radek[128];
    fgets(radek, 128, stdin);
    char znak;
    int i = 0;
    while ((znak = radek[i]) != '\0') {
        if (znak == '+') {
            zadani[zadanic] = plus;
            zadanic++;
        } else if (znak == '-') {
            zadani[zadanic] = minus;
            zadanic++;
        } else if (znak == '*') {
            zadani[zadanic] = krat;
            zadanic++;
        } else if (znak == ':') {
            zadani[zadanic] = deleno;
            zadanic++;
        }
        i++;
    }

    if (zadanic == 0) {
        zadani[0] = plus;
        zadani[1] = minus;
        zadani[2] = krat;
        zadani[3] = deleno;
        zadanic = 4;
    }

    int j=0;
    while (++j<30) {
        int vysledek;
        char priklad[128];
        operace = zadani[rand() % zadanic];
        vysledek = operace(priklad);
        printf("%s = %d\n", priklad, vysledek);
    }

    return 0;
}

