Prévia do material em texto
CADERNO DE RESPOSTAS DA
ATIVIDADE PRÁTICA DE:
Linguagem de Programação
ALUNO: [Leonardo Bernardes Santana] –
[4750487]
Prof. Winston Sen Lun Fung, Esp.
ANO
2024
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
1
PRÁTICA 01
Escreva um algoritmo em linguagem C que atenda os seguintes requisitos:
Crie um registro para armazenar o seu Nome Completo e o seu RU.
Solicite ao usuário que digite o seu RU e o seu Nome Completo.
Crie um ponteiro para o registro.
Através do ponteiro para o registro verifique se o RU digitado é um número par
ou ímpar e informe a resposta na tela.
Através do ponteiro para o registro imprima o Nome Completo informado de traz
para frente, invertido. Por exemplo:
Pedro Alvares Cabral -> larbaC seravlA ordeP
Para demonstrar o funcionamento faça as capturas de tela do terminal utilizando
seu nome completo e o seu RU.
I. Apresentação do código-fonte:
#include
#include
// Estrutura para armazenar informações do aluno
typedef struct {
char nomeCompleto[100]; // Nome completo do aluno
int ru; // Registro Único do aluno
} Aluno;
// Função para ler os dados do aluno
void lerDadosAluno(Aluno *aluno) {
printf("Digite seu RU: ");
if (scanf("%d", &aluno->ru) != 1) {
printf("Erro: RU inválido.\n");
exit(EXIT_FAILURE); // Encerra o programa em caso de erro
}
getchar();
printf("Digite seu Nome Completo: ");
fgets(aluno->nomeCompleto, sizeof(aluno->nomeCompleto), stdin);
// Remover nova linha se presente
for (int i = 0; aluno->nomeCompleto[i] != '\0'; i++) {
if (aluno->nomeCompleto[i] == '\n') {
aluno->nomeCompleto[i] = '\0'; // Substitui nova linha por terminador de string
break;
}
}
}
// Função para verificar se o RU é par ou ímpar
void verificarParOuImpar(int ru) {
if (ru % 2 == 0) {
printf("O RU %d é par.\n", ru);
} else {
printf("O RU %d é ímpar.\n", ru);
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
2
}
}
// Função para imprimir o nome completo invertido
void imprimirNomeInvertido(const char *nome) {
int len = 0;
// Calcular o comprimento da string
while (nome[len] != '\0') {
len++;
}
printf("Nome Completo invertido: ");
for (int i = len - 1; i >= 0; i--) {
putchar(nome[i]);
}
printf("\n");
}
// Função principal
int main() {
Aluno *aluno = (Aluno *)malloc(sizeof(Aluno));
if (aluno == NULL) {
printf("Erro: Falha ao alocar memória.\n");
return EXIT_FAILURE; // Encerra se a alocação falhar
}
// Ler dados do aluno
lerDadosAluno(aluno);
// Verificar se o RU é par ou ímpar
verificarParOuImpar(aluno->ru);
// Imprimir o nome completo invertido
imprimirNomeInvertido(aluno->nomeCompleto);
// Liberar a memória alocada
free(aluno);
return 0; //Finalizado o código
}
II. Apresentar a captura de tela evidenciando o funcionamento:
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
3
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
4
PRÁTICA 02
Escreva um algoritmo em linguagem C que atenda os seguintes requisitos:
Crie um vetor com a quantidade de dígitos do seu RU.
Solicite que usuário digite o seu RU, cada digito digitado deve ser armazenado
em uma posição do vetor.
Utilizando ponteiros verifique qual o maior e menor número contido neste vetor
e imprima na tela.
Para demonstrar o funcionamento faça as capturas de tela do terminal utilizando
seu RU.
III. Apresentação do código-fonte:
#include
#include
// Função para contar o número de dígitos em um número
int contarDigitos(int numero) {
int contador = 0;
while (numero > 0) {
numero /= 10;
contador++;
}
return contador;
}
// Função para armazenar os dígitos em um vetor
void armazenarDigitos(int numero, int *vetor, int numDigitos) {
for (int i = numDigitos - 1; i >= 0; i--) {
vetor[i] = numero % 10; // Armazena o dígito menos significativo
numero /= 10;
}
}
// Função para encontrar o maior e o menor dígito em um vetor
void encontrarMaiorEMenor(int *vetor, int numDigitos, int *maior, int *menor) {
*maior = vetor[0]; // Inicializa maior com o primeiro dígito
*menor = vetor[0]; // Inicializa menor com o primeiro dígito
for (int i = 1; i *maior) {
*maior = vetor[i];
}
if (vetor[i]
#include
// Prototipo da função
void calcularHexagono(float lado, float *area, float *perimetro);
// Função principal
int main() {
float lado, area, perimetro;
while (1) {
// Solicitar ao usuário o lado do hexágono
printf("Digite o lado do hexágono (valor negativo para sair): ");
if (scanf("%f", &lado) != 1) {
printf("Erro: Entrada inválida. Tente novamente.\n");
while (getchar() != '\n'); // Limpa o buffer
continue; // Retorna ao início do loop
}
// Verificar se o lado é negativo
if (ladodo hexágono: %.2f\n", area);
printf("Perímetro do hexágono: %.2f\n", perimetro);
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
8
}
return 0; //Finalizado o código
}
// Função para calcular a área e o perímetro de um hexágono regular
void calcularHexagono(float lado, float *area, float *perimetro) {
*perimetro = 6 * lado; // Perímetro do hexágono
*area = (3 * lado * lado * sqrt(3)) / 2; // Área do hexágono
}
VI. Apresentar a captura de tela evidenciando o funcionamento:
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
9
PRÁTICA 04
Faça, em linguagem C, uma função recursiva para o cálculo potenciação. Sabe-se
que o cálculo pode ser feito através de multiplicações sucessivas.
Para demonstrar o funcionamento utilize o primeiro digito do seu RU como base e
o último digito como expoente.
VII. Apresentação do código-fonte:
#include
// Função recursiva para calcular a potência
float calcularPotencia(int base, int expoente) {
// Caso base: qualquer número elevado a 0 é 1
if (expoente == 0) {
return 1;
}
// Caso recursivo: base^expoente = base * base^(expoente - 1)
return base * calcularPotencia(base, expoente - 1);
}
// Função principal
int main() {
int base, expoente;
// Solicitar ao usuário a base e o expoente
printf("Digite a base: ");
if (scanf("%d", &base) != 1) {
printf("Erro: Entrada inválida para a base.\n");
return 1; // Encerra o programa em caso de erro
}
printf("Digite o expoente: ");
if (scanf("%d", &expoente) != 1) {
printf("Erro: Entrada inválida para o expoente.\n");
return 1; // Encerra o programa em caso de erro
}
// Calcular a potência usando a função recursiva
float resultado = calcularPotencia(base, expoente);
// Imprimir o resultado
printf("%d elevado a %d é igual a %.2f\n", base, expoente, resultado);
return 0; //Finalizado o código
}
VIII. Apresentar a captura de tela evidenciando o funcionamento:
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
10
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
11
PRÁTICA 05
Crie um programa, em linguagem C, que receba 10 registros contendo, Nome, RU,
telefone email. Solicite que sejam digitados todos os dados de todos os registros e
ao final salve-os em um arquivo.csv, utilize o ; (ponto e vírgula) para separador e
campo. O nome do arquivo deve ser o seu número de RU [N°_DO_RU.CSV].
ATENÇÃO: ASSISTA OS VIDEOS DA AULA 8 – MATERIAL COMPLEMENTAR.
IX. Apresentação do código-fonte:
#include
#include
#include
#define MAX_REGISTROS 10
#define MAX_NOME 100
#define MAX_TELEFONE 15
#define MAX_EMAIL 100
// Estrutura para armazenar informações do registro
typedef struct {
char nome[MAX_NOME];
int ru;
char telefone[MAX_TELEFONE];
char email[MAX_EMAIL];
} Registro;
// Função para coletar dados do registro
void coletarDados(Registro *registro) {
printf("Digite o Nome: ");
fgets(registro->nome, sizeof(registro->nome), stdin);
registro->nome[strcspn(registro->nome, "\n")] = 0; // Remove a nova linha
printf("Digite o RU: ");
while (scanf("%d", ®istro->ru) != 1) {
printf("Erro: RU inválido. Digite novamente: ");
while(getchar() != '\n'); // Limpar buffer
}
getchar(); // Para consumir o caractere de nova linha
printf("Digite o Telefone: ");
fgets(registro->telefone, sizeof(registro->telefone), stdin);
registro->telefone[strcspn(registro->telefone, "\n")] = 0; // Remove a nova linha
printf("Digite o Email: ");
fgets(registro->email, sizeof(registro->email), stdin);
registro->email[strcspn(registro->email, "\n")] = 0; // Remove a nova linha
printf("\n");
}
// Função para salvar os registros em um arquivo CSV
void salvarRegistros(Registro *registros, int numRegistros) {
// Nome do arquivo CSV baseado no RU do primeiro registro
char nomeArquivo[20];
sprintf(nomeArquivo, "%d.csv", registros[0].ru);
// Abrir arquivo para escrita
FILE *arquivo = fopen(nomeArquivo, "w");
Caderno de Resolução da
Atividade Prática de
Linguagem de Programação
12
if (arquivo == NULL) {
perror("Erro ao abrir o arquivo");
exit(EXIT_FAILURE); // Encerra se não conseguir abrir o arquivo
}
// Escrever cabeçalho
fprintf(arquivo, "Nome;RU;Telefone;Email\n");
// Escrever os registros
for (int i = 0; i