Baixe o app para aproveitar ainda mais
Prévia do material em texto
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS Algoritmos para Engenharia – 1º sem. 2020 Professor: Luiz Flávio F. B. Oliveira 3ª LISTA DE EXERCÍCIOS (5 pontos) (para ser feita em grupos de até 3 alunos) 1. ESPECIFICAÇÕES: Todos os programas dos exercícios devem ser codificados em C, preferencialmente no Code Blocks. Para quem não tiver permissão para instalar o Code Blocks (por exemplo, em um computador da empresa em que trabalha), sugiro o uso de compiladores C online, como os indicados abaixo: OnlineGDB online compiler and debugger for c/c++ https://www.onlinegdb.com/ (Links para um site externo.) repl from Repo https://repl.it/ Cada programa deve possuir um cabeçalho (veja no exemplo abaixo) com o nome completo do aluno, a data, o número da lista, o número do exercício e a descrição do programa. Além disso, cada programa deve imprimir na tela o nome completo do aluno, o número da lista e o número do exercício. Os códigos-fonte dos programas devem ser entregues em arquivos no formato .c (não devem ser entregues os projetos completos). Respostas de exercícios em que não há código, devem ser entregues em formato .txt. Os arquivos devem ser compactados conjuntamente em formato .zip e entregues no SGA. Cópias grosseiras serão desconsideradas, ou seja, a nota será igual a 0 (zero). #include <stdio.h> #include <stdlib.h> #include <locale.h> /* * Nome: Nome do(a) aluno(a) * Data: 01/01/2020 * * Lista 1 - Exercício 1 * Descrição: Escreva um algoritmo para calcular e mostrar na tela o perímetro de um círculo, * dado o seu raio. */ int main() { setlocale(LC_ALL, "portuguese"); // Declaração de variáveis float raio = 2.5, perimetro; // Processamento dos dados perimetro = 2 * 3.1416 * raio; // Saída da informação printf("O perímetro de um círculo de raio %.2f é igual a %.2f.\n", raio, perimetro); return 0; } 2. Resolva os exercícios a seguir. Considere, nos enunciados, que imprimir significa o mesmo que escrever na tela e que ler significa digitar os dados solicitados no teclado. 1. Escreva uma função que peça ao usuário um valor real maior ou igual a zero e, caso o valor digitado seja menor do que zero, mostre a mensagem “O valor deverá ser maior ou igual a zero!” e peça novamente um novo número. A função só poderá retornar um valor válido. Escreva uma outra função que receba os valores dos catetos de um triângulo retângulo e retorne o valor da hipotenusa. Faça um programa que leia um conjunto indeterminado de pares de valores (cada valor correspondendo a um cateto de um triângulo retângulo) e imprima o valor da hipotenusa. A leitura cessa quando qualquer um dos valores digitados for igual a zero (flag). Utilize a primeira função para ler os valores dos catetos e a segunda função para calcular o valor da hipotenusa. #include <stdio.h> #include <stdlib.h> #include <locale.h> int LeValor() { int numero = -1; do { printf("Escreva um valor inteiro maior ou igual a zero.\n"); scanf("%d", &numero); if (numero < 0) { system("cls"); printf("O valor dever´ser maior ou igual a zero!\n\n"); } } while (numero < 0); return numero; } float CalculaHipotenusa(int cateto1, int cateto2){ float hipotenusa = -1; if ((cateto1 != 0) && (cateto2 != 0)) //hipotenusa = sqrt(pow(cateto1, 2) + pow(cateto2, 2)); hipotenusa = sqrt(cateto1*cateto1 + cateto2*cateto2); return hipotenusa; } int main() { setlocale(LC_ALL, "portuguese"); int cateto1, cateto2; float hipotenusa; do { printf("Digite o valor do primeiro cateto (inteiro) ou zero para terminar.\n"); cateto1 = LeValor(); printf("\nDigite o valor do segunto cateto (inteiro) ou zero para terminar.\n"); cateto2 = LeValor(); hipotenusa = CalculaHipotenusa(cateto1, cateto2); if (hipotenusa != -1) { printf("\nLados triângulo retângulo:\n"); printf("1º cateto: %d\n", cateto1); printf("2º cateto: %d\n", cateto2); printf("Hipotenusa: %.2f\n", hipotenusa); printf("\n"); } } while (hipotenusa != -1); return 0; } 2. Crie uma função para determinar se um número inteiro é divisível por outro. Faça um programa para ler um número indeterminado de pares de dados inteiros. A leitura encerra quanto for lido um par de dados igual a (zero, zero), que não deverá ser considerado. Utilize a função criada para determinar quais pares lidos têm o primeiro valor divisível pelo segundo e apresente essa informação na tela. #include <stdio.h> #include <stdlib.h> #include <locale.h> int EDivisivel(int Num1, int Num2) { if (Num2 != 0) { return Num1 % Num2 == 0; } else return 0; } int main() { setlocale(LC_ALL, "portuguese"); int num1, num2; do { printf("Digite o valor do dividendo (inteiro) ou zero para terminar: "); scanf("%d", &num1); printf("\nDigite o valor do divisor (inteiro) ou zero para terminar: "); scanf("%d", &num2); if ((num1 !=0) || (num2 !=0)) { if (EDivisivel(num1, num2)) { printf("\n%d é divisível por %d.\n", num1, num2); } else { printf("\n%d não é divisível por %d.\n", num1, num2); } printf("\n"); printf("Digite qualquer tecla para continuar\n"); getchar(); getchar(); system("cls"); } } while ((num1 !=0) || (num2 !=0)); return 0; } 3. Escreva uma função que receba como parâmetro de entrada o código de um produto e que retorne o preço da mercadoria de acordo com a tabela abaixo, que deverá ser criada utilizando-se um vetor. Código Preço 100 1,20 101 1,50 102 2,50 103 2,75 Faça um programa que peça ao usuário o código e a quantidade de um produto e, utilizando o método anterior, apresente o preço total do item consultado. #include <stdio.h> #include <stdlib.h> #include <locale.h> float ConsultaPreco(int produto, float *tabela) { float valor = 0; if ((produto >= 100) && (produto <= 103)) valor = tabela[produto - 100]; return valor; } int main() { setlocale(LC_ALL, "portuguese"); float precos[] = { 1.20, 1.50, 2.50, 2.75 }; int produto = 0; float quantidade = 0.0; printf("Entre com o código do produto a ser consultado (100 - 103): "); scanf("%d", &produto); printf("\nEntre com a quantidade: "); scanf("%f", &quantidade); float preco = ConsultaPreco(produto, precos) * quantidade; if ((produto >= 100) && (produto <= 103)) printf("O valor de %.2f item(ns) código %d é R$ %.2f\n", quantidade, produto, preco); else printf("O produto %d não existe.\n", produto); printf("Pressione qualquer tecla.\n"); getchar(); return 0; } 4. Faça um programa que leia dois valores e chame um procedimento que recebe estes 2 valores como entrada e que retorna o maior valor no primeiro parâmetro e o menor valor no segundo parâmetro. Escreva o conteúdo das 2 variáveis na tela antes e depois da chamada da função (utilize referência na passagem de parâmetros). #include <stdio.h> #include <stdlib.h> #include <locale.h> void OrdenaParametros(float *P1, float *P2) { if (*P1 < *P2) { float aux = *P1; *P1 = *P2; *P2 = aux; } } int main() { setlocale(LC_ALL, "portuguese"); float PrimeiroParametro = 0; float SegundoParametro = 0; printf("Digite o primeiro valor: "); scanf("%f", &PrimeiroParametro); printf("Digite o segundo valor: "); scanf("%f", &SegundoParametro); system("cls");printf("Valores antes da chamada do procedimento:\n"); printf("\nPrimeiro parâmetro: %.2f\n", PrimeiroParametro); printf("Segundo parâmetro: %.2f\n", SegundoParametro); OrdenaParametros(&PrimeiroParametro, &SegundoParametro); printf("\n\nValores depois da chamada do procedimento:\n"); printf("\nPrimeiro parâmetro: %.2f\n", PrimeiroParametro); printf("Segundo parâmetro: %.2f\n", SegundoParametro); getchar(); return 0; } 5. Escreva uma função int ContaImpar (int n1, int n2), que retorna a quantidade de números inteiros ímpares que existem entre n1 e n2 (inclusive ambos, se for o caso). A função deve funcionar inclusive se o valor de n2 for menor que n1. #include <stdio.h> #include <stdlib.h> #include <locale.h> int ContaImpar(int n1, int n2) { int inicio = n1; int fim = n2; int contador = 0; if (n1 > n2) { inicio = n2; fim = n1; } for (int i = inicio; i <= fim; i++) { if (i % 2 != 0) contador++; } return contador; } int main() { setlocale(LC_ALL, "portuguese"); int numero1 = 0; int numero2 = 0; printf("Qual o valor do primeiro número? "); scanf("%d", &numero1); printf("\nQual o valor do segundo número? "); scanf("%d", &numero2); printf("\nExistem %d inteiros ímpares no intervalor %d - %d\n", ContaImpar(numero1, numero2), numero1, numero2); getchar(); return 0; } 6. Construa um programa que leia um vetor de 10 elementos e imprima o conteúdo do vetor e os valores do maior e do menor elemento, bem como suas respectivas posições. Lembre-se de que poderão existir elementos repetidos neste vetor. #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "portuguese"); int i, vetor[10]; int maior, menor; printf("Entre com o %dº elemento: ", 1); scanf("%d", &vetor[0]); printf("\n"); maior = vetor[0]; menor = vetor[0]; for(i = 1; i < 10; i++) { printf("Entre com o %dº elemento: ", i+1); scanf("%d", &vetor[i]); printf("\n"); if (vetor[i] > maior) { maior = vetor[i]; } if (vetor[i] < menor) { menor = vetor[i]; } } printf("\n"); printf("Vetor = [ "); for(i = 0; i < 10; i++) printf("%d ", vetor[i]); printf("]\n"); printf("Menor elemento:\n"); for(i = 0; i < 10; i++) { if (vetor[i] == menor) { printf("Posicao %d, valor %d\n", i, menor); } } printf("\nMaior elemento:\n"); for(i = 0; i < 10; i++) { if (vetor[i] == maior) { printf("Posicao %d, valor %d\n", i, maior); } } getchar(); return 0; } 7. Escreva um programa para ler uma matriz de 4x4 e imprimir a soma dos elementos de sua diagonal secundária. #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "portuguese"); int i, j, matriz[4][4]; for(i = 0; i < 4; i++) for (j = 0; j < 4; j++) { printf("Entre com o elemento %d, %d: ", i, j); scanf("%d", &matriz[i][j]); } system("cls"); int diagonalsecundaria = 0; for(i = 0; i < 4; i++){ for (j = 0; j < 4; j++) { printf("%d\t", matriz[i][j]); if (i+j == 3){ diagonalsecundaria = diagonalsecundaria + matriz[i][j];} } printf("\n"); } printf("\nA soma dos elementos de sua diagonal secundária é %d.\n", diagonalsecundaria); getchar(); return 0; } 8. Um armazém trabalha com 100 mercadorias diferentes, identificadas pelos números inteiros de 1 a 100. O dono do armazém anota a quantidade de cada mercadoria vendida durante o mês. Ele tem uma tabela que indica para cada mercadoria o preço de venda. Escreva um programa para : a. Ler a quantidade vendida de cada mercadoria b. Ler o preço de venda de cada mercadoria c. Calcular o faturamento mensal do armazém, isto é: = = 100 1 )Pr*( i ii eçoQuantidadeoFaturament Sugestão: para testar seu programa, trabalhe com uma quantidade pequena de mercadorias. #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "portuguese"); float quantidades[101]; // Para simplificar, o elemento 0 será ignorado e usaremos os elementos de 1 a 100 float precos[101]; float faturamento = 0; float quantidadevendida = 0; // Teste com 5 elementos for (int i = 1; i < 6; i++) { printf("Entre com a quantidade vendida da mercadoria %d: ", i); scanf("%f", &quantidades[i]); printf("Entre com o preço da mercadoria %d: ", i); scanf("%f", &precos[i]); faturamento += quantidades[i] * precos[i]; quantidadevendida = quantidadevendida + quantidades[i]; } printf("\nForam vendidos %.2f itens e o faturamento do mês foi %.2f.\n", quantidadevendida, faturamento); getchar(); return 0; } 9. Escreva uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias. Escreva um programa que leia a idade de uma pessoa (anos, meses e dias) e que, usando a função implementada acima, calcule a resposta e imprima os valores digitados e o valor total em dias. #include <stdio.h> #include <stdlib.h> #include <locale.h> int DiasDeIdade(int anos, int meses, int dias) { return anos * 365 + meses * 30 + dias; } int main() { setlocale(LC_ALL, "portuguese"); int anos =0, meses =0, dias =0; printf("Entre com o número de anos: "); scanf("%d", &anos); printf("Entre com o número de meses: "); scanf("%d", &meses); printf("Entre com o número de dias: "); scanf("%d", &dias); printf("\nA idade em dias é %d.\n", DiasDeIdade(anos, meses, dias)); getchar(); return 0; } 10. Implemente uma função que recebe 3 valores reais (a, b e c) e verifique se formam um triângulo. Em qualquer triângulo, o comprimento de qualquer um dos lados é menor do que a soma dos comprimentos dos outros dois. Essa função deve retornar: 0 - Se não for um triângulo 1 - Se for um triângulo equilátero 2 - Se for um triângulo isósceles 3 - Se for um triângulo escaleno Escreva um programa que leia os três valores, que chame a função e que escreva na tela, de acordo com o valor de retorno: 1. Os 3 valores digitados; 2. Se é um triângulo; 3. Se for um triângulo, que tipo de triângulo é. #include <stdio.h> #include <stdlib.h> #include <locale.h> int ETriangulo(float a, float b, float c) { if ((a < b + c ) && (b < a + c) && (c < a + b)) { if ((a == b) && (b == c)) return 1; else if ((a == b) || (a == c) || (b == c)) return 2; else return 3; } else return 0; } int main() { setlocale(LC_ALL, "portuguese"); float a=0, b=0, c=0; printf("Entre com o lado A: "); scanf("%f", &a); printf("Entre com o lado B: "); scanf("%f", &b); printf("Entre com o lado C: "); scanf("%f", &c); int Triangulo = ETriangulo(a, b, c); system("cls"); printf("Lado A = %.2f, lado b = %.2f, lado c = %.2f\n", a, b, c); switch (Triangulo) { case 0: printf("Não é um triângulo!\n"); break; case 1: printf("É um triângulo equilátero!\n"); break; case 2: printf("É um triângulo isósceles!\n"); break; case 3: printf("É um triângulo escaleno!\n"); break; default: break; } getchar(); return 0; }
Compartilhar