Disciplina: Programação I (INF1005) Primeira lista de exercícios 1. O Índice de Desenvolvimento Humano (IDH) é uma medida do bem estar de uma população. Engloba três dimensões: Educação (E), Longevidade (L) e a Riqueza (R). A dimensão educação (E) determina o método de cálculo do IDH de uma localidade, de acordo com as seguintes regras: a) Caso a dimensão Educação seja maior ou igual à soma das demais dimensões, a fórmula para o cálculo do IDH é: IDH = E * L * R / ((E + L + R) / 3); b) Caso a dimensão Educação não seja maior ou igual a soma das demais dimensões, a fórmula para o cálculo do IDH é: IDH = (E + L + R) / 3. Faça uma função que receba como parâmetros os valores das dimensões E, L e R de uma localidade e retorne o seu IDH, calculado de acordo com a descrição acima. Todos os valores são reais. 2. Sabe-se que o volume de uma caixa de lados a e b e altura h é dado por Vcaixa = a * b * h e que o volume de um cilindro de raio r e altura h é dado por Vcilindro = π * h * r2. Pede-se: a) Faça uma função para calcular e retornar o volume de uma caixa de lados a e b e altura h. Esta função deverá receber os valores de a, b e h como parâmetros; b) Faça uma função para calcular e retornar o volume de um cilindro de raio r e altura h. Esta função deverá receber o raio e a altura como parâmetros; c) Usando as funções dos itens anteriores, faça um programa para calcular o volume de uma caixa com um furo cilíndrico, com as dimensões ilustradas na figura abaixo; o programa deve ler os valores das dimensões da peça (a, b, h e r – todos reais) e exibir o volume calculado. Uma empresa deseja dar aos seus funcionários um abono de salário de acordo com a sua produtividade. Sabe-se que a empresa divide os seus funcionários nas seguintes categorias de acordo com o seu desempenho: Ótimo (categoria 1) - 20% de abono Bom (categoria 2) - 15% de abono Regular (categoria 3) - nenhum abono Implemente e teste um programa que leia o salário de um funcionário e a sua categoria de abono (inteiro) e imprima o salário total. Use função auxiliar. Disciplina: Programação I (INF1005) Faça um programa que leia quatro inteiros representando dois horários (horas e minutos de cada um dos horários) e exiba o total de minutos de cada horário e a diferença em minutos entre os dois horários. Considere que o segundo horário será sempre posterior ao primeiro. O seu programa deverá utilizar, obrigatoriamente, as seguintes funções feitas por você: a) converte: deverá receber como parâmetros dois inteiros representando um horário (horas e minutos) e retornar o valor correspondente em minutos; b) calcula_dif: deverá receber como parâmetros quatro inteiros representando dois horários (horas e minutos do primeiro horário e horas e minutos do segundo horário) e retornar a diferença em minutos entre os dois horários; a função deverá utilizar a função do item anterior para converter um horário em minutos. 3. Métodos numéricos para solução de problemas produzem, em geral, soluções aproximadas. O erro absoluto é definido pela diferença absoluta entre o valor exato de um número x e seu valor aproximado 𝑥̅ . O erro relativo é definido como o erro absoluto dividido pelo valor aproximado. O erro percentual é definido como a representação percentual do erro relativo. Fórmulas para cálculos dos erros: Erro absoluto: EAX = |𝑥 − 𝑥̅ | a) Erro relativo: Erro percentual: ERX = EAX / 𝑥̅ EPX = ER X * 100% Faça a função erro_absoluto que recebe como parâmetros o valor exato de um número e seu valor aproximado e retorna o erro absoluto. Seu protótipo é: float erro_absoluto(float exato, float aproximado); b) Faça a função erro_relativo que recebe como parâmetros o valor exato de um número e seu valor aproximado e retorna o erro relativo; a função deverá, obrigatoriamente, utilizar a função do item a. Seu protótipo é: float erro_relativo(float exato, float aproximado); c) Faça a função erro_percentual que recebe como parâmetros o valor exato de um número e seu valor aproximado e exibe o erro percentual; a função deverá, obrigatoriamente, utilizar a função do item b. Seu protótipo é: void erro_percentual(float exato, float aproximado); d) Faça um programa, utilizando adequadamente as funções acima (feitas nos itens a, b e c) que leia o valor exato de um x e seu valor aproximado 𝑥̅ e exiba o erro percentual. 4. A biblioteca distribui cartões magnéticos para os alunos da universidade. A senha de cada cartão é gerada automaticamente a partir da data de nascimento do aluno (dd/mm/aaaa): mmdd + ddmm + aaaa. Exemplos: nascimento 25/10/1995 2510 + 1025 + 1995 = 5530 nascimento 12/9/1995 1209 + 912 + 1995 = 4116 nascimento 2/11/1995 211 + 1102 + 1995 = 3308 nascimento 3/9/1995 309 + 903 + 1995 = 3207 Faça uma função chamada cria_numero que recebe como parâmetros dois números inteiros e retorna um a) número inteiro, conforme os exemplos abaixo: valores recebidos: 25 e 10 valor retornado: 2510 valores recebidos: 12 e 9 valor retornado: 1209 Protótipo da função: int cria_numero (int x, int y); (dica: 2510 2500 + 10) (dica: 1209 1200 + 9) Disciplina: Programação I (INF1005) b) Faça um programa, utilizando adequadamente a função cria_numero (feita no item a), que leia, inicialmente, a quantidade de alunos da universidade. Em seguida, para cada aluno, o programa deverá ler a matrícula (inteiro) e a data de nascimento (3 inteiros - dia, mês e ano) e exibir a senha do seu cartão. 5. Para resolver o abastecimento de água de uma grande cidade, o governo avalia a largura (em metros), a profundidade (em metros) e a vazão (litros/segundo) de um rio da região. A nota da avaliação do rio é calculada de acordo com as regras abaixo: largura inferior a 15 m: nota = zero; profundidade inferior a 6 m: nota = zero; para largura entre 15 e 30 m (incluindo os extremos) e profundidade maior ou igual a 6 m, há 2 possibilidades: a) o vazão inferior a 5000 l/s: nota = 5 + vazão / 2700; o vazão maior ou igual a 5000 l/s: nota = 5 + vazão / 2500; largura superior a 30 m e profundidade maior ou igual a 6 m: nota = 5 + vazão / 2000. Faça a função vazaoRio que recebe como parâmetros a largura, a profundidade e a velocidade do rio e retorna a vazão de acordo com a seguinte fórmula: vazão = largura2 x profundidade x velocidade; Protótipo da função: float vazaoRio (float largura, float profundidade, float velocidade); b) Faça a função notaRio que recebe como parâmetros a largura, a profundidade e a velocidade do rio e, utilizando, obrigatoriamente, a função do item a), retorna a nota de acordo com as regras acima. Protótipo da função: float notaRio (float largura, float profundidade, float velocidade); c) Faça um programa que leia a largura, a profundidade e a velocidade da água de um rio e, utilizando as funções vazaoRio e notaRio, exiba sua nota. O programa deverá exibir também a mensagem “Alternativa viável” se o rio for uma alternativa viável, isto é, a sua nota for maior ou igual a sete (7.0). 6. Uma livraria decidiu fornecer um vale para cada um dos seus 100 clientes. Para escolher o valor do vale, para cada cliente, foram solicitados os seguintes dados: idade, sexo (1 – feminino, 2 – masculino), quantidade de livros técnicos e quantidade de livros não técnicos que leu no ano de 2010. Critério para cálculo do valor do vale: menores de 18 anos: R$ 0,00 menos de 3 livros lidos : R$ 0,00 3 livros lidos mas apenas de um tipo : R$ 100,00 3 livros lidos dos dois tipos : R$ 150,00 a partir de 4 livros lidos: R$ 200,00 Faça um programa que, utilizando as funções abaixo, leia os dados digitados para cada um dos clientes e exiba o valor de seu vale: a) função maior_18: recebe a idade de uma pessoa (inteiro) e retorna 1 se for maior de idade ou 0, em caso contrário; b) função determina_vale: recebe a idade (inteiro), a quantidade de livros técnicos e não técnicos lidos (inteiros) e retorna o valor do vale (real); a função deve utilizar a função anterior. Disciplina: Programação I (INF1005) 7. Faça um programa que leia 15 números inteiros e imprima os dois menores números digitados que estejam no intervalo 257,8 a 875,2 (incluindo os extremos), em ordem crescente. O programa deve levar em consideração que podem existir 2, 1 ou nenhum número neste intervalo, imprimindo os números que aparecerem (2, 1 ou uma mensagem indicando que não houve nenhum número no intervalo). Para realizar um debate sobre ao acesso a dados considerados sigilosos em campanhas políticas, um professor de ética resolveu agrupar seus 400 alunos em 3 grupos: o grupo “pró”, o grupo “contra” e o grupo “neutro”. Para saber a qual grupo o aluno pertence, o professor aplicou um questionário cujas respostas podem ser sim (1) ou não (0). a) Faça uma função que recebe o número de questões, captura do teclado as respostas de cada uma das questões de um aluno e retorna a quantidade de respostas positivas. Obs: o aluno digita 1, quando concorda e 0 quando discorda da questão Protótipo: int contabiliza_respostas (int n) b) Faça um programa que inicialmente capture o número de respostas do questionário. A seguir, para cada aluno da turma, obtenha sua matrícula e respostas (utilizando a função do item a), e exiba o nome de seu grupo de acordo com o seguinte critério: 2/3 de respostas sim grupo “pró” 2/3 de respostas não grupo “contra” Demais situações grupo “neutro” Obs.: Faça uma função para exibir o grupo de respostas. Esta função recebe o número de questões e a quantidade de respostas SIM.