Prévia do material em texto
<p>CADERNO DE RESPOSTAS DA</p><p>ATIVIDADE PRÁTICA DE:</p><p>Linguagem de Programação</p><p>ALUNO:</p><p>Prof. Winston Sen Lun Fung, Esp.</p><p>ANO</p><p>2024</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>1</p><p>PRÁTICA 01</p><p>Escreva um algoritmo em linguagem C que atenda os seguintes requisitos:</p><p>• Crie um registro para armazenar o seu Nome Completo e o seu RU.</p><p>• Solicite ao usuário que digite o seu RU e o seu Nome Completo.</p><p>• Crie um ponteiro para o registro.</p><p>• Através do ponteiro para o registro verifique se o RU digitado é um número par</p><p>ou ímpar e informe a resposta na tela.</p><p>• Através do ponteiro para o registro imprima o Nome Completo informado de traz</p><p>para frente, invertido. Por exemplo:</p><p>Pedro Alvares Cabral -> larbaC seravlA ordeP</p><p>Para demonstrar o funcionamento faça as capturas de tela do terminal utilizando</p><p>seu nome completo e o seu RU.</p><p>I. Apresentação do código-fonte:</p><p>#include <stdio.h></p><p>#include <string.h></p><p>#include <ctype.h></p><p>// Definição do registro</p><p>typedef struct {</p><p>char nomeCompleto[100];</p><p>int ru;</p><p>} Registro;</p><p>int main() {</p><p>// Declaração do ponteiro para o registro</p><p>Registro *registro = (Registro *)malloc(sizeof(Registro));</p><p>if (registro == NULL) {</p><p>printf("Erro ao alocar memória.\n");</p><p>return 1;</p><p>}</p><p>// Solicita ao usuário o RU e o Nome Completo</p><p>printf("Digite o seu RU: ");</p><p>scanf("%d", ®istro->ru);</p><p>getchar(); // Limpa o buffer do teclado</p><p>printf("Digite o seu Nome Completo: ");</p><p>fgets(registro->nomeCompleto, sizeof(registro->nomeCompleto), stdin);</p><p>// Remove o caractere de nova linha do final da string, se existir</p><p>size_t len = strlen(registro->nomeCompleto);</p><p>if (len > 0 && registro->nomeCompleto[len - 1] == '\n') {</p><p>registro->nomeCompleto[len - 1] = '\0';</p><p>}</p><p>// Verifica se o RU é par ou ímpar</p><p>if (registro->ru % 2 == 0) {</p><p>printf("O RU %d é par.\n", registro->ru);</p><p>} else {</p><p>printf("O RU %d é ímpar.\n", registro->ru);</p><p>}</p><p>// Inverte o Nome Completo e imprime</p><p>size_t nomeLen = strlen(registro->nomeCompleto);</p><p>printf("Nome Completo invertido: ");</p><p>for (int i = nomeLen - 1; i >= 0; i--) {</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>2</p><p>printf("%c", registro->nomeCompleto[i]);</p><p>}</p><p>printf("\n");</p><p>// Libera a memória alocada</p><p>free(registro);</p><p>return 0;</p><p>}</p><p>II. Apresentar a captura de tela evidenciando o funcionamento:</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>3</p><p>PRÁTICA 02</p><p>Escreva um algoritmo em linguagem C que atenda os seguintes requisitos:</p><p>• Crie um vetor com a quantidade de dígitos do seu RU.</p><p>• Solicite que usuário digite o seu RU, cada digito digitado deve ser armazenado</p><p>em uma posição do vetor.</p><p>• Utilizando ponteiros verifique qual o maior e menor número contido neste vetor</p><p>e imprima na tela.</p><p>Para demonstrar o funcionamento faça as capturas de tela do terminal utilizando</p><p>seu RU.</p><p>III. Apresentação do código-fonte:</p><p>#include <stdio.h></p><p>#include <stdlib.h></p><p>#include <ctype.h></p><p>#define MAX_DIGITOS 10 // Supondo que o RU tenha no máximo 10 dígitos</p><p>int main() {</p><p>char entrada[MAX_DIGITOS + 1];</p><p>int ru[MAX_DIGITOS];</p><p>int tamanho = 0;</p><p>int maior, menor;</p><p>// Solicita ao usuário que digite o RU</p><p>printf("Digite o seu RU (pressione Enter quando terminar): ");</p><p>fgets(entrada, sizeof(entrada), stdin);</p><p>// Converte a string em dígitos e armazena no vetor</p><p>for (int i = 0; entrada[i] != '\0' && entrada[i] != '\n'; i++) {</p><p>if (isdigit(entrada[i])) {</p><p>ru[tamanho++] = entrada[i] - '0';</p><p>}</p><p>}</p><p>// Verifica se algum dígito foi inserido</p><p>if (tamanho == 0) {</p><p>printf("Nenhum dígito válido foi inserido.\n");</p><p>return 1;</p><p>}</p><p>// Inicializa o maior e o menor com o primeiro dígito</p><p>maior = menor = ru[0];</p><p>// Utiliza ponteiros para encontrar o maior e o menor número</p><p>for (int i = 1; i < tamanho; i++) {</p><p>if (ru[i] > maior) maior = ru[i];</p><p>if (ru[i] < menor) menor = ru[i];</p><p>}</p><p>// Imprime o maior e o menor número</p><p>printf("O maior dígito do RU é: %d\n", maior);</p><p>printf("O menor dígito do RU é: %d\n", menor);</p><p>return 0;</p><p>}</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>4</p><p>IV. Apresentar a captura de tela evidenciando o funcionamento:</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>5</p><p>PRÁTICA 03</p><p>Faça um programa, em linguagem C, para calcular a área e o perímetro de um</p><p>hexágono. O programa deve implementar uma função chamada calc_hexa que</p><p>calcula a área e o perímetro de um hexágono regular de lado L.</p><p>O programa deve solicitar ao usuário o lado do polígono, calcular e imprimir a área</p><p>e o perímetro do polígono.</p><p>O programa termina quando for digitado um valor negativo qualquer para o lado. A</p><p>função deve obedecer ao seguinte protótipo:</p><p>void calc_hexa(float l, floar *area, float *perimetro);</p><p>Lembrando que a área e o perímetro de um hexágono regular são dados por:</p><p>𝒂𝒓𝒆𝒂 =</p><p>𝟑 × 𝑳𝟐 × √𝟑</p><p>𝟐</p><p>𝒑𝒆𝒓í𝒎𝒆𝒕𝒓𝒐 = 𝟔 × 𝑳</p><p>Para demonstrar o funcionamento faça os print de tela utilizando o primeiro número</p><p>do seu RU.</p><p>V. Apresentação do código-fonte:</p><p>#include <stdio.h></p><p>#include <math.h></p><p>// Protótipo da função</p><p>void calc_hexa(float l, float *area, float *perimetro);</p><p>int main() {</p><p>float lado;</p><p>float area, perimetro;</p><p>while (1) {</p><p>// Solicita ao usuário o lado do hexágono</p><p>printf("Digite o lado do hexágono (valor negativo para sair): ");</p><p>scanf("%f", &lado);</p><p>// Verifica se o valor é negativo para sair do loop</p><p>if (lado < 0) {</p><p>break;</p><p>}</p><p>// Calcula a área e o perímetro do hexágono</p><p>calc_hexa(lado, &area, &perimetro);</p><p>// Imprime a área e o perímetro</p><p>printf("Área do hexágono: %.2f\n", area);</p><p>printf("Perímetro do hexágono: %.2f\n", perimetro);</p><p>}</p><p>return 0;</p><p>}</p><p>// Implementação da função calc_hexa</p><p>void calc_hexa(float l, float *area, float *perimetro) {</p><p>*perimetro = 6 * l;</p><p>*area = (3 * l * l * sqrt(3)) / 2;</p><p>}</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>6</p><p>VI. Apresentar a captura de tela evidenciando o funcionamento:</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>7</p><p>PRÁTICA 04</p><p>Faça, em linguagem C, uma função recursiva para o cálculo potenciação. Sabe-se</p><p>que o cálculo pode ser feito através de multiplicações sucessivas.</p><p>Para demonstrar o funcionamento utilize o primeiro digito do seu RU como base e</p><p>o último digito como expoente.</p><p>VII. Apresentação do código-fonte:</p><p>#include <stdio.h></p><p>// Protótipo da função recursiva</p><p>int potencia(int base, int expoente);</p><p>int main() {</p><p>int base, expoente;</p><p>// Digite o primeiro e o último dígito do seu RU para base e expoente</p><p>printf("Digite o primeiro dígito do seu RU (base): ");</p><p>scanf("%d", &base);</p><p>printf("Digite o último dígito do seu RU (expoente): ");</p><p>scanf("%d", &expoente);</p><p>// Verifica se o expoente é negativo</p><p>if (expoente < 0) {</p><p>printf("Expoente não pode ser negativo.\n");</p><p>return 1;</p><p>}</p><p>// Calcula a potência usando a função recursiva</p><p>int resultado = potencia(base, expoente);</p><p>// Imprime o resultado</p><p>printf("%d^%d = %d\n", base, expoente, resultado);</p><p>return 0;</p><p>}</p><p>// Implementação da função recursiva para cálculo da potência</p><p>int potencia(int base, int expoente) {</p><p>if (expoente == 0) {</p><p>return 1; // Caso base: qualquer número elevado a 0 é 1</p><p>} else {</p><p>return base * potencia(base, expoente - 1); // Chamada recursiva</p><p>}</p><p>}</p><p>Caderno</p><p>de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>8</p><p>VIII. Apresentar a captura de tela evidenciando o funcionamento:</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>9</p><p>PRÁTICA 05</p><p>Crie um programa, em linguagem C, que receba 10 registros contendo, Nome, RU,</p><p>telefone email. Solicite que sejam digitados todos os dados de todos os registros e</p><p>ao final salve-os em um arquivo.csv, utilize o ; (ponto e vírgula) para separador e</p><p>campo. O nome do arquivo deve ser o seu número de RU [N°_DO_RU.CSV].</p><p>ATENÇÃO: ASSISTA OS VIDEOS DA AULA 8 – MATERIAL COMPLEMENTAR.</p><p>IX. Apresentação do código-fonte:</p><p>#include <stdio.h></p><p>#include <stdlib.h></p><p>#define NUM_REGISTROS 10</p><p>#define MAX_STRING 100</p><p>// Estrutura para armazenar os dados do registro</p><p>typedef struct {</p><p>char nome[MAX_STRING];</p><p>char ru[MAX_STRING];</p><p>char telefone[MAX_STRING];</p><p>char email[MAX_STRING];</p><p>} Registro;</p><p>void salvar_em_arquivo(const char *nome_arquivo, Registro registros[],</p><p>int num_registros);</p><p>int main() {</p><p>Registro registros[NUM_REGISTROS];</p><p>char nome_arquivo[MAX_STRING];</p><p>// Solicita ao usuário o número do RU para nomear o arquivo</p><p>printf("Digite o número do RU (para nomear o arquivo): ");</p><p>fgets(nome_arquivo, sizeof(nome_arquivo), stdin);</p><p>// Remove o caractere de nova linha do final da string, se existir</p><p>size_t len = strlen(nome_arquivo);</p><p>if (len > 0 && nome_arquivo[len - 1] == '\n') {</p><p>nome_arquivo[len - 1] = '\0';</p><p>}</p><p>// Cria o nome do arquivo com a extensão .csv</p><p>snprintf(nome_arquivo, sizeof(nome_arquivo), "%s.csv", nome_arquivo);</p><p>// Solicita os dados para 10 registros</p><p>for (int i = 0; i < NUM_REGISTROS; i++) {</p><p>printf("Registro %d\n", i + 1);</p><p>printf("Nome: ");</p><p>fgets(registros[i].nome, sizeof(registros[i].nome), stdin);</p><p>// Remove o caractere de nova linha do final da string, se existir</p><p>len = strlen(registros[i].nome);</p><p>if (len > 0 && registros[i].nome[len - 1] == '\n') {</p><p>registros[i].nome[len - 1] = '\0';</p><p>}</p><p>printf("RU: ");</p><p>fgets(registros[i].ru, sizeof(registros[i].ru), stdin);</p><p>len = strlen(registros[i].ru);</p><p>if (len > 0 && registros[i].ru[len - 1] == '\n') {</p><p>registros[i].ru[len - 1] = '\0';</p><p>}</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>10</p><p>printf("Telefone: ");</p><p>fgets(registros[i].telefone, sizeof(registros[i].telefone), stdin);</p><p>len = strlen(registros[i].telefone);</p><p>if (len > 0 && registros[i].telefone[len - 1] == '\n') {</p><p>registros[i].telefone[len - 1] = '\0';</p><p>}</p><p>printf("Email: ");</p><p>fgets(registros[i].email, sizeof(registros[i].email), stdin);</p><p>len = strlen(registros[i].email);</p><p>if (len > 0 && registros[i].email[len - 1] == '\n') {</p><p>registros[i].email[len - 1] = '\0';</p><p>}</p><p>}</p><p>// Salva os registros no arquivo CSV</p><p>salvar_em_arquivo(nome_arquivo, registros, NUM_REGISTROS);</p><p>printf("Dados salvos no arquivo %s\n", nome_arquivo);</p><p>return 0;</p><p>}</p><p>// Função para salvar os registros em um arquivo CSV</p><p>void salvar_em_arquivo(const char *nome_arquivo, Registro registros[],</p><p>int num_registros) {</p><p>FILE *arquivo = fopen(nome_arquivo, "w");</p><p>if (arquivo == NULL) {</p><p>perror("Não foi possível abrir o arquivo");</p><p>exit(EXIT_FAILURE);</p><p>}</p><p>// Escreve os registros no arquivo CSV</p><p>for (int i = 0; i < num_registros; i++) {</p><p>fprintf(arquivo, "%s;%s;%s;%s\n", registros[i].nome, registros[i].ru,</p><p>registros[i].telefone, registros[i].email);</p><p>}</p><p>fclose(arquivo);</p><p>}</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>11</p><p>X. Apresentar a captura de tela evidenciando o funcionamento:</p><p>Caderno de Resolução da</p><p>Atividade Prática de</p><p>Linguagem de Programação</p><p>12</p><p>XI. Apresentar a captura de tela do arquivo CSV:</p>