Disciplina: Programação I (INF1005) - PUC-Rio

Propaganda
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.
Download