#include <stdio.h>
#include <math.h>
#include "minirechner.h"

int run_minirechner() {
    float zahl1, zahl2, erg;
    int r_op;

    printf("Rechenoperationen: \n");
    printf("<1> addieren\n<2> subtrahieren\n<3> multiplizieren\n<4> dividieren\n<5> rest\n<6> groesster gemeinsammer Teiler\n<7> kleinstes gemeinsammes Vielfaches\n");

    scanf("%d", &r_op);

    printf("Zahl 1: ");
    scanf("%f", &zahl1);

    printf("Zahl 2: ");
    scanf("%f", &zahl2);

    switch (r_op) {
    // Der Rechner gibt die gegebenen Zahlen (im Sinne der Optik) mit einer und das Ergebnis mit zwei Nachkommastellen aus.
    case 1:
        erg = addieren(zahl1, zahl2);
        printf("%.1f + %.1f = %.2f\n", zahl1, zahl2, erg);
        break;

    case 2:
        erg = subtrahieren(zahl1, zahl2);
        printf("%.1f - %.1f = %.2f\n", zahl1, zahl2, erg);
        break;

    case 3:
        erg = multiplizieren(zahl1, zahl2);
        printf("%.1f * %.1f = %.2f\n", zahl1, zahl2, erg);
        break;

    case 4:
        erg = dividieren(zahl1, zahl2);
        if (erg != 0) {
            printf("%.1f / %.1f = %.2f\n", zahl1, zahl2, erg);
        }
        break;

    case 5:
        erg = rest(zahl1, zahl2);
            printf("%.1f / %.1f rest= %.2f\n", zahl1, zahl2, erg);
        break;

    case 6:
        erg = groesster_gemeinsammer_teiler(zahl1, zahl2);
        printf("%.2f\n", erg);
        break;

    case 7:   
        erg = kleinstes_gemeinsammes_vielfaches(zahl1, zahl2);
        printf("%.2f\n", erg);
        break;

    default:
        printf("Bitte verwenden sie eine der gegebenen Ziffern");
    }
    return 0;
}

//addieren
float addieren(float a, float b) {
    return a + b;
}

//subtrahieren
float subtrahieren(float a, float b) {
    return a - b;
}

//multiplizieren
float multiplizieren(float a, float b) {
    return a * b;
}

//dividieren
float dividieren(float a, float b) {
    if (b == 0) {
        printf("Bitte nicht durch 0 dividieren\n");
        return 0;
    }
    else {
        return a / b;
    }
}

//rest
float rest(float a, float b) {
    return fmod(a, b);
}

// groesster gemeinsammer Teiler
float groesster_gemeinsammer_teiler(float a, float b) {
    float gr, kl;
    float rest = 1;
    if (a > b) {
        gr = a;
        kl = b;
    }
    else {
        gr = b;
        kl = a;
    }
    while (rest != 0) {
        rest = fmod(gr, kl);
        gr = kl;
        kl = rest;
    }
    return gr;
}

// kleinstes gemeinsammes Vielfaches
float kleinstes_gemeinsammes_vielfaches(float a, float b) {
    float erg = a * b / groesster_gemeinsammer_teiler(a, b);
    return erg;
}