Baixe o app para aproveitar ainda mais
Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER ESCOLA SUPERIOR POLITÉCNICA BACHARELADO EM ENGENHARIA DA COMPUTAÇÃO DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO ATIVIDADE PRÁTICA LINGUAGEM DE PROGRAMAÇÃO CURITIBA – PR 2022 PRÁTICA 01 A cidade de Springfield possui um único posto telefônico. Por este posto são feitas todas as ligações interurbanas da cidade. O valor a ser pago é calculado seguindo as seguintes regras: – Taxa de r$ 2,00 pela ligação, r$ 1,00 para os 3 primeiros minutos; – Acima de três primeiros minutos as regras são de r$1,50 para cada intervalo de 5 minutos e r$ 0,25 para cada minuto abaixo disto. Para demonstrar o funcionamento mostre o resultado informando como tempo de ligação. Atenção: se o dígito solicitado do seu RU for zero utilize o dígito a direita. Solução: #define _CRT_SECURE_NO_WARNINGS //Restrição para rodar sem conflitos #include <stdio.h>//Biblioteca de Input/Output double preco(int min); int main()//Função Menu { int min; printf("Qual o tempo da chamada em minutos? ");//Recebe o valor do RU scanf(" %d", &min);//Armazenamento de variável printf("\nValor total da chamada: R$%.2lf\n", preco(min));//Retorna o cálculo de acordo com o valor informado return 0; //Finalização do programa } double preco(int min) { double valor = 3.0;//Função para calcular até três minutos de chamada min -= 3; while (1) { if ((min - 5) < 0)//Função para calcular a partir três minutos de ligação, com intervalo de cinco em cinco minutos { break; } else { min -= 5; valor += 1.5; } } if (min > 0) { valor += 0.25 * min;//Função para calcular o tempo restante min -= min; } return valor; } PRÁTICA 02 Uma agência espiã deseja enviar mensagens secretas para seus agentes. O código dessas mensagens é a substituição das vogais por números, sendo que as vogais A E I O U correspondem a 2 3 4 5 6. Nesse código a frase “EU ESTOU NA AULA” corresponde à frase: “36 3ST56 N2 26L2”. Caso sejam encontrados números na frase original eles devem ser substituídos pelas suas vogais correspondentes. Faça um programa em C que receba uma frase e a codifique-a. A frase deve possuir no máximo 60 caracteres. Faça toda a manipulação da frase informada utilizando ponteiros. Mostre o programa funcionando utilizando de entrada seu Nome completo e o seu RU simultaneamente. Solução: #include <stdio.h>//Biblioteca de Input/Output #include <stdlib.h>//Biblioteca para uso de funções #include <string.h>//Biblioteca para converter números em caracteres. int main(void) {//Função menu char frase[61];//Irá armazenar as frase digitada com no máximo 60 caracteres int cont; printf("Digite sua mensagem: "); fgets(frase, 60, stdin); //Realiza a leitura da frase, especifica o tamanho da string e limpa o buffer do teclado for (cont = 0; cont < 61; cont++)//Definição do laço de repetição { if (frase[cont] == 'A' || frase[cont] == 'a') {//Definição das intruções para execução e conversão das letras para números frase[cont] = '2'; } else if (frase[cont] == 'E' || frase[cont] == 'e') { frase[cont] = '3'; } else if (frase[cont] == 'I' || frase[cont] == 'i') { frase[cont] = '4'; } else if (frase[cont] == 'O' || frase[cont] == 'o') { frase[cont] = '5'; } else if (frase[cont] == 'U' || frase[cont] == 'u') { frase[cont] = '6'; } else if (frase[cont] == '2') {//Definição das intruções para execução e conversão dos números para letras frase[cont] = 'a'; } else if (frase[cont] == '3') { frase[cont] = 'e'; } else if (frase[cont] == '4') { frase[cont] = 'i'; } else if (frase[cont] == '5') { frase[cont] = 'o'; } else if (frase[cont] == '6') { frase[cont] = 'u'; } } printf("\n\nMENSAGEM CODIFICADA", frase); printf("\n %s\n\n", frase);//Impressão da frase codificada return 0; } PRÁTICA 03 Implementar a função cujo cabeçalho é apresentado a seguir: unsigned int calculaParidade (unsigned char b); Interferências, ruídos e outros fenômenos que prejudicam a integridade dos dados são problemas fundamentais quando computadores se comunicam em rede. Para detectar alterações em bits, os dados são sempre enviados com redundâncias computadas a partir dos bits originais. Este tipo de técnica de detecção de erros costuma receber o nome de checksum, e segue o mesmo princípio dos dígitos verificadores presentes em diversos documentos e identificadores numéricos (por exemplo, números de contas e agências bancárias). Uma das técnicas de detecção de erros mais simples e mais usadas é o teste de paridade. Cada byte é enviado junto com um bit adicional, que indica se o número de bits com valor 1 no byte é par (bit redundante = 0) ou ímpar (bit redundante = 1). Por exemplo um byte com o valor 8 tem os bits 00001000, ou seja, apenas 1 bit “setado”, portanto a sua paridade é 1. Já um byte com o valor 0x55 é representado pelos bits 01010101 – 4 bits “setados”, portanto a sua paridade é 0 (zero). A função calculaParidade deve receber como parâmetro um byte enviado ou recebido através de uma conexão, e retornar o valor do bit redundante (0 ou 1). Para demonstrar o funcionamento demonstre o cálculo de pariedade de cada dígito do seu primeiro nome. Utilize o valor dos caracteres na tabela ASCII (disponível no anexo). Solução: #define _CRT_SECURE_NO_WARNINGS//Restrição para rodar sem conflitos #include <stdio.h>//Biblioteca de Input/Output unsigned int calculaParidade(unsigned char b);//Cabeçalho int main()//Função menu { unsigned char frase[101];//Conversão do Byte em ASCII int i; printf("Digite uma palavra:\n");//Recebe a frase scanf(" %100[^\n]", frase);//Armazena a frase for (i = 0; frase[i]; i++) { printf("%c - paridade: %u\n", frase[i], calculaParidade(frase[i]));//Imprime o a frase e a paridade dela } return 0; } unsigned int calculaParidade(unsigned char b)//Verificação se os números inteiros e positivos são pares ou ímpares { int x = (int)b;//Valor decimal int dgs[8]; int i = 7, j; int cont = 0; while (x > 1) { dgs[i] = x % 2;//Restante da divisão i--; x /= 2;//Restante da divisão por 2 } dgs[i] = x; for (j = i; j < 8; j++) { if (dgs[j] == 1) { cont++;//Se o resultado for 1, incrementa cont } } if ((cont % 2) == 0)//Se o resultado for par, retorna 0 { return 0; } else { return 1;//Se o resultado for impar, retorna 1 } } PRÁTICA 04. Faça, em linguagem C, uma função recursiva que calcule a soma dos dígitos do seu RU. O RU deverá ser digitado pelo usuário. Para demonstrar o funcionamento utilize o seu RU como entrada e mostre a saída da função. Solução: #define _CRT_SECURE_NO_WARNINGS //Restrição para rodar sem conflitos #include <stdio.h> //Biblioteca de Input/Output #include <locale.h>//Biblioteca para utilização de acentuação int soma(int num); int main() //Função menu { int num; //Irá armazenar os números inteiros. setlocale(LC_ALL, "");//Irá imprimir as acentuações printf("Quais números deseja somar? "); scanf(" %d", &num);//Armazenamento da variavel printf("\Esse é o resultado da sua soma: %d.\n",soma(num)); return 0;//Finalização do programa } int soma(int num)//Definição da soma { if (num == 0)//Definição de verdadeiro { return 0; } else//Definição de falso { return ((num % 10) + soma(num / 10));//Cálculo dos números } } PRÁTICA 05 Crie um programa, em linguagem C, que faça sugestões automáticas de jogos para a Mega Sena. Deverá ser informado quantos jogos (de seis números) o usuário deseja (no máximo vinte jogos). ✓ Crie um registro para armazenar cada jogo.✓ Crie um vetor para armazenar os jogos gerados. ✓ Verifique se não existem números repetidos no jogo. ✓ Verifique se não existem jogos repetidos. Ao final mostre os jogos na tela e pergunte ao usuário se ele deseja gerar um arquivo com os jogos Os jogos deverão ser armazenados em um arquivo formato CSV, com cada número em um campo diferente. O arquivo CSV é um arquivo que utiliza um separador entre os campos. Utilize o ; (ponto e vírgula) para separador e campo. O nome do arquivo deve ser o seu número de RU. Para demonstrar o funcionamento utilize a soma do segundo dígito com o quarto digito do seu RU como a quantidade de jogos. Coloque a imagem da tela com os números gerados e imagem do arquivo aberto no Bloco de Notas ou no Excel com os jogos gerados (caso não disponha do Bloco de Notas ou Excel utilize o programa equivalente disponível em seu computador). Solução: #define _CRT_SECURE_NO_WARNINGS //Restrição para rodar sem conflitos #include <stdio.h>//Biblioteca de Input/Output #include <stdlib.h>//Biblioteca para uso de funções #include <time.h>//Biblioteca para data e hora padrão typedef struct//Definição do Struct Registro a onde irá receber os dados { int n[6];//Armazenamento de números inteiros com no máximo 6 números (vetor) } JOGO; int main()//Função menu { srand(time(NULL)); JOGO aposta[1000]; int i, j, k, l;//Declaração de variáveis int qtd; char op; printf("Quantas apostas deseja fazer? ");//Entrada dos valores scanf(" %d", &qtd); for (k = 0; k < qtd; k++) { for (i = 0; i < 6; i++) { aposta[k].n[i] = rand() % 60 + 1;//Gera os jogos do 1 ao 60 if (i > 0) { for (j = 0; j < i; j++) { if (aposta[k].n[i] == aposta[k].n[j])//Verifica se houve números repetidos { aposta[k].n[i] = rand() % 60 + 1; j = -1; } } } } if (k > 0) { for (i = 0; i < k; i++) { for (j = 0, l = 0; j < 6; j++) { if (aposta[k].n[j] == aposta[i].n[j]) { l++; } } if (l == 6) { k -= 1; break; } } } } printf("\n"); printf("\n_____APOSTAS_____\n"); for (i = 0; i < qtd; i++) { for (j = 0; j < 6; j++) { printf("%02d ", aposta[i].n[j]);//Imprime o vetor preenchido com os números da aposta } printf("\n"); } printf("\nDeseja salvar em Excel? (S/N)\n"); scanf(" %c", &op); if (op == 's' || op == 'S'); { FILE* arq = fopen("33333.CSV", "w"); //Abre o arquivo em modo de escrita for (i = 0; i < qtd; i++)//Salva os dados impressos { for (j = 0; j < 6; j++) { fprintf(arq, "%02d;", aposta[i].n[j]); } fprintf(arq, "\n"); } printf("\nArquivo gerado!\n"); fclose(arq);//Fecha o arquivo } return 0; }
Compartilhar