Exercícios de Programação P1
| Nome | Matrícula |
|---|---|
| Danilo Naves do Nascimento | 221022515 |
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;
}
}