Buscar

Lista de exercícios 03 - solução

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

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; 
}

Continue navegando