#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>

// Funções da Calculadora Simples
void calculadora_simples() {
    double a, b;
    char op;
    printf("Digite a operação (ex: 5 + 3): ");
    scanf("%lf %c %lf", &a, &op, &b);
    switch(op) {
        case '+': printf("Resultado: %.2lf\n", a + b); break;
        case '-': printf("Resultado: %.2lf\n", a - b); break;
        case '*': printf("Resultado: %.2lf\n", a * b); break;
        case '/': 
            if (b != 0)
                printf("Resultado: %.2lf\n", a / b);
            else
                printf("Erro: divisão por zero!\n");
            break;
        default: printf("Operação inválida!\n");
    }
}

// Funções da Calculadora Científica
void calculadora_cientifica() {
    int escolha;
    double x;
    printf("Escolha a função:\n");
    printf("1 - Seno\n2 - Cosseno\n3 - Tangente\n4 - Logaritmo Natural\n5 - Potência\n");
    scanf("%d", &escolha);

    if (escolha == 5) {
        double y;
        printf("Digite a base e o expoente: ");
        scanf("%lf %lf", &x, &y);
        printf("Resultado: %.2lf\n", pow(x, y));
    } else {
        printf("Digite o valor: ");
        scanf("%lf", &x);
        switch(escolha) {
            case 1: printf("Seno: %.5lf\n", sin(x)); break;
            case 2: printf("Cosseno: %.5lf\n", cos(x)); break;
            case 3: printf("Tangente: %.5lf\n", tan(x)); break;
            case 4: printf("Logaritmo Natural: %.5lf\n", log(x)); break;
            default: printf("Escolha inválida!\n");
        }
    }
}

// Funções da Calculadora Financeira
void calculadora_financeira() {
    int escolha;
    printf("Escolha a função financeira:\n");
    printf("1 - Juros Simples\n2 - Juros Compostos\n3 - Valor Presente\n4 - Valor Futuro\n");
    scanf("%d", &escolha);

    double P, r, t, FV, PV;
    switch(escolha) {
        case 1:
            printf("Capital inicial: ");
            scanf("%lf", &P);
            printf("Taxa de juros anual (%%): ");
            scanf("%lf", &r);
            printf("Tempo em anos: ");
            scanf("%lf", &t);
            printf("Juros Simples: %.2lf\n", P * (r/100) * t);
            break;
        case 2:
            printf("Capital inicial: ");
            scanf("%lf", &P);
            printf("Taxa de juros anual (%%): ");
            scanf("%lf", &r);
            printf("Tempo em anos: ");
            scanf("%lf", &t);
            printf("Montante: %.2lf\n", P * pow(1 + r/100, t));
            break;
        case 3:
            printf("Valor Futuro: ");
            scanf("%lf", &FV);
            printf("Taxa de juros anual (%%): ");
            scanf("%lf", &r);
            printf("Tempo em anos: ");
            scanf("%lf", &t);
            printf("Valor Presente: %.2lf\n", FV / pow(1 + r/100, t));
            break;
        case 4:
            printf("Valor Presente: ");
            scanf("%lf", &PV);
            printf("Taxa de juros anual (%%): ");
            scanf("%lf", &r);
            printf("Tempo em anos: ");
            scanf("%lf", &t);
            printf("Valor Futuro: %.2lf\n", PV * pow(1 + r/100, t));
            break;
        default:
            printf("Escolha inválida!\n");
    }
}

// Funções da Calculadora Complexa
void calculadora_complexa() {
    double a_real, a_imag, b_real, b_imag;
    char op;
    printf("Digite o primeiro número complexo (parte real e imaginária): ");
    scanf("%lf %lf", &a_real, &a_imag);
    printf("Digite o operador (+, -, *, /): ");
    scanf(" %c", &op);
    printf("Digite o segundo número complexo (parte real e imaginária): ");
    scanf("%lf %lf", &b_real, &b_imag);

    double complex z1 = a_real + a_imag * I;
    double complex z2 = b_real + b_imag * I;
    double complex resultado;

    switch(op) {
        case '+': resultado = z1 + z2; break;
        case '-': resultado = z1 - z2; break;
        case '*': resultado = z1 * z2; break;
        case '/': resultado = z1 / z2; break;
        default: printf("Operador inválido!\n"); return;
    }
    printf("Resultado: %.2lf + %.2lfi\n", creal(resultado), cimag(resultado));
}

// Menu Principal
int main() {
    int modo;
    while (1) {
        printf("\n==== CALCULADORA MULTIFUNÇÕES ====\n");
        printf("1 - Simples\n2 - Científica\n3 - Financeira\n4 - Complexa\n5 - Sair\n");
        printf("Escolha o modo: ");
        scanf("%d", &modo);

        switch(modo) {
            case 1: calculadora_simples(); break;
            case 2: calculadora_cientifica(); break;
            case 3: calculadora_financeira(); break;
            case 4: calculadora_complexa(); break;
            case 5: printf("Encerrando...\n"); exit(0);
            default: printf("Modo inválido!\n");
        }
    }
    return 0;
}