OneCompiler

Exercícios de Programação P1

NomeMatrícula
Danilo Naves do Nascimento221022515

A versão utilizada do gcc foi "gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"

Para compilar o código abaixo basta usar:

gcc -o nome_executavel lista_exercicios.c

Onde lista_exercicios.c é o nome do arquivo em C que o código foi salvo.

Observação da função MOD: % em C funciona para inteiros positivos e aceita restos negativos.

#include <stdio.h>

int fatorial(int n)
{
    if (n == 0)
        return 1;
    return n * fatorial(n - 1);
}

int fibonacci(int n)
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

void impressao_recursiva(int n)
{

    if (n == 0)
    {
        return;
    }

    impressao_recursiva(n - 1);

    printf("%d\n", n);
}

int soma_recursiva(int n)
{
    if (n == 0)
    {
        return 0;
    }

    return n + soma_recursiva(n - 1);
}

int Euclides(int numeroA, int numeroB)
{
    if (numeroB == 0)
    {
        return numeroA;
    }

    int a = numeroA;
    int b = numeroB;

    while (b != 0)
    {
        int resto = a % b;
        a = b;
        b = resto;
    }

    return a;
}

int calcular_mmc(int a, int b)
{
    return (a * b) / Euclides(a, b);
}

void tabelaZ_adicao(int Zn)
{
    int tabelaZ[Zn][Zn];

    for (int i = 0; i < Zn; i++)
    {
        for (int j = 0; j < Zn; j++)
        {
            tabelaZ[i][j] = (i + j) % Zn;
        }
    }

    for (int i = 0; i < Zn; i++)
    {
        printf("|");
        for (int j = 0; j < Zn; j++)
        {
            printf(" %d |", tabelaZ[j][i]);
        }

        printf("\n");
    }
}

void tabelaZ_multiplicacao(int Zn)
{
    int tabelaZ[Zn][Zn];

    for (int i = 0; i < Zn; i++)
    {
        for (int j = 0; j < Zn; j++)
        {
            tabelaZ[i][j] = (i * j) % Zn;
        }
    }

    for (int i = 0; i < Zn; i++)
    {
        printf("|");
        for (int j = 0; j < Zn; j++)
        {
            printf(" %d |", tabelaZ[j][i]);
        }

        printf("\n");
    }
}

int main()
{
    int opcao;
    printf("Selecione o numero da atividade!\n");
    printf("[1]. Fatorial de N\n");
    printf("[2]. Fibonacci de N\n");
    printf("[3]. Impressao recursiva de 1 a N\n");
    printf("[4]. Soma Recursiva de N\n");
    printf("[5]. MDC de a e b\n");
    printf("[6]. MMC de a e b usando algoritmo de Euclides\n");
    printf("[7]. Tabela de Adicao Modular de Zn\n");
    printf("[8]. Tabela de multiplicacao Modular de Zn\n");
    scanf("%d", &opcao);

    int entrada1, entrada2;
    switch (opcao)
    {
    case 1:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        printf("O resultado é: %d\n", fatorial(entrada1));
        break;
    case 2:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        printf("O resultado é: %d\n", fibonacci(entrada1));
        break;
    case 3:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        impressao_recursiva(entrada1);
        break;
    case 4:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        printf("O resultado é:  %d\n", soma_recursiva(entrada1));
        break;
    case 5:
        printf("Digite valores de A e B\n");
        scanf("%d %d", &entrada1, &entrada2);
        printf("O resultado é: %d\n", Euclides(entrada1, entrada2));
        break;
    case 6:
        printf("Digite valores de A e B\n");
        scanf("%d %d", &entrada1, &entrada2);
        printf("O resultado é: %d\n", calcular_mmc(entrada1, entrada2));
        break;
    case 7:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        printf("A tabela de Adicao modular de Z%d: \n", entrada1);
        tabelaZ_adicao(entrada1);
        break;
    case 8:
        printf("Digite um valor de N\n");
        scanf("%d", &entrada1);
        printf("A tabela de Multiplicacao modular de Z%d: \n", entrada1);
        tabelaZ_multiplicacao(entrada1);
        break;
    default:
        break;
    }
}