INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E EDUCAÇÃO DA BAHIA
CAMPUS JEQUIÉ
CURSO TÉCNICO DE INFORMÁTICA
MODALIDADE SUBSEQÜENTE
PROF°.: ALEXANDRO DOS SANTOS SILVA
LINGUAGEM DE PROGRAMAÇÃO I
LISTA DE EXERCÍCIOS 03
Instruções:
Para resolução das questões abaixo, será admitido o uso apenas da sintaxe adotada para escrita de programas em
C/C++.
1.
Desenvolver
um programa que, a partir da entrada dos horários de entrada e saída de
n
funcionários de uma
determinada empresa, identifique e exiba a quantidade de horas e minutos durante o qual os mesmos permaneceram
na empresa. Um funcionário que registra sua entrada às 08h30min e encerra seu expediente às 16h15min, por
exemplo, permaneceu na empresa 7 horas e 15 minutos.
Observação: sobre a quantidade de funcionários, para os quais serão informados os horários de entrada e saída
(formato minutos e horas), será solicitado a entrada deste valor ao próprio usuário.
Resp.: a estratégia adotada aqui é converter os horários de entrada e saída no montante de minutos decorridos desde o
início dos dias, às 00:00 (assume-se aqui que os funcionários não registram entradas e saídas em dias diferentes). Veja
o que ocorre com o exemplo colocado na questão:
08h30min
08 × 60 + 05 min = 485 min
16h15min
15 × 60 + 15 min = 915 min
Após a conversão, extrai-se a diferença entre os valores obtidos, no que representa o tempo de permanência em
minutos; para conversão para o formato hh:min, divide-se a diferença por 60 (no que é encontrado a quantidade de
horas) e obtêm-se o resto dessa mesma diferença por 60 (no que é encontrado a quantidade de minutos no formato
hh:min). Segue abaixo o código que implementa este algoritmo.
#include <iostream.h>
int main() {
int hr1, min1; // variáveis para horário de entrada int hr2, min2; // variáveis para horário de saída
int n; // variável para entrada de quantidade de funcionários
cout << "Informe a quantidade de funcionarios: ";
cin >> n; // entrada de quantidade de funcionários
// cálculo de tempo de permanência na empresa para cada funcionário for (int i=1; i<=n; i++) {
cout << "\nFuncionario " << i << " --> Horario Entrada (hh mm): "; cin >> hr1 >> min1; // entrada de horário de entrada
cout << "Funcionario " << i << " --> Horario Saida (hh mm)..: "; cin >> hr2 >> min2; // entrada de horário de saída
// conversão de horário de entrada (hh:mm) em minutos decorridos // desde o início do dia
int t1 = hr1 * 60 + min1;
// conversão de horário de saída (hh:mm) em minutos decorridos // desde o início do dia
int t2 = hr2 * 60 + min2;
// tempo de permanência em minutos int tempo = t2 - t1;
// conversão de tempo de permanência em minutos para o formato hh:min int hr3 = tempo / 60;
int min3 = tempo % 60;
cout << "Funcionario " << i << " --> Tempo Permanencia...: " << hr3 << "hr " << min3 << "min\n";
}
2.
Readapte o programa da questão anterior, de modo que seja informado, ao término da entrada de dados, o quantitativo
de horas-extras trabalhadas por todos os funcionários, em conjunto. Considere que qualquer quantitativo de horas
superior a 8 horas será computado como horário extra. Para um funcionário que registra sua entrada às 08h30min e
encerra seu expediente às 17h15min, por exemplo, serão considerados 15 min de horário-extra (neste caso, o
funcionário permaneceu na empresa 8 horas e 15 minutos).
Resp.: sobre o tempo-extra, assim será considerado se o tempo de permanência for superior a 480 minutos (8 × 60).
Segue abaixo a solução.
#include <iostream.h>
int main() {
int hr1, min1; // variáveis para horário de entrada int hr2, min2; // variáveis para horário de saída
int n; // variável para entrada de quantidade de funcionários int tempoextra = 0; // variável para total de horas-extras (em minutos)
cout << "Informe a quantidade de funcionarios: ";
cin >> n; // entrada de quantidade de funcionários
// cálculo de tempo de permanência na empresa para cada funcionário for (int i=1; i<=n; i++) {
cout << "\nFuncionario " << i << " --> Horario Entrada (hh mm): "; cin >> hr1 >> min1; // entrada de horário de entrada
cout << "Funcionario " << i << " --> Horario Saida (hh mm)..: "; cin >> hr2 >> min2; // entrada de horário de saída
// conversão de horário de entrada (hh:mm) em minutos decorridos // desde o início do dia
int t1 = hr1 * 60 + min1;
// conversão de horário de saída (hh:mm) em minutos decorridos // desde o início do dia
int t2 = hr2 * 60 + min2;
// tempo de permanência em minutos int tempo = t2 - t1;
// se o tempo de permanência for superior à 480 min, acrescenta-se a // diferença ao total de horas-extras (em minutos)
if (tempo > 480) {
tempoextra = tempoextra + (tempo - 480); }
// conversão de tempo de permanência em minutos para o formato hh:min int hr3 = tempo / 60;
int min3 = tempo % 60;
// impressão do tempo de permanência no formato hh:min
cout << "Funcionario " << i << " --> Tempo Permanencia...: " << hr3 << "hr " << min3 << "min\n";
}
// conversão do total de horas-extras (em minutos) para o formato hh:min int hr = tempoextra / 60;
int min = tempoextra % 60;
// impressão do total de horas-extras (em minutos) no formato hh:min cout << "\n\nHORAS-EXTRAS...: "
<< hr << "hr " << min << "min\n"; system("pause");
}
Observação: o número 0 (zero) não deverá constar do cálculo da média aritmética.
Resp.:
#include <iostream.h>
int main() {
float n, media, soma = 0, qtd = 0;
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do primeiro número
while (n != 0) { // enquanto o próximo número for diferente de 0... soma = soma + n; // adiciona-se o número informado à soma
qtd++; // incremento da quantidade de números informados
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do próximo número }
if (qtd != 0) { // se quantidade de números for diferente de zero... media = soma/qtd; // cálculo da média
cout << "MEDIA: " << media << "\n"; // exibição da média }
system("pause"); }
4.
Readapte o programa da questão anterior, de modo que, além da identificação da média aritmética, sejam exibidos o
maior e o menor número.
Resp.:
#include <iostream.h>
int main() {
float n, media, soma = 0, qtd = 0;
float maior, menor; // variáveis para maior e menor número
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do primeiro número
while (n != 0) { // enquanto o próximo número for diferente de 0... soma = soma + n; // adiciona-se o número informado à soma
qtd++; // incremento da quantidade de números informados
if (qtd == 1) { // se for o primeiro número...
maior = n; // assume-se que ele é o maior número inicialmente menor = n; // assume-se que ele é o menor número inicialmente }
else { // caso contrário, verifica-se o número atual...
if (n > maior) // se o número atual for maior que o número maior anterior... maior = n; // esse número passará a ser o maior número
if (n < menor) // se o número atual for menor que o número menor anterior... menor = n; // esse número passará a ser o menor número
}
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do próximo número }
if (qtd != 0) { // se quantidade de números for diferente de zero... media = soma/qtd; // cálculo da média
cout << "MEDIA: " << media << "\n" // exibição da média
<< "MENOR: " << menor << "\n" // exibição de menor número << "MAIOR: " << maior << "\n"; // exibição de maior número }
5.
Desenvolver um programa que, a partir da entrada de uma sequência de números inteiros finalizada por 0 (zero),
exiba a média aritmética dos números ímpares e a soma dos números pares.
Resp.:
#include <iostream.h>
int main() { int n;
float media, somaimpar = 0, qtd = 0; // soma, média e quantidade de ímpares float somapar = 0; // soma de números pares
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do primeiro número
while (n != 0) { // enquanto o próximo número for diferente de 0... int resto = n % 2; // cálculo de resto da divisão do número por 2
if (resto == 1) { // se o resto for 0 (ou seja, se o número for ímpar) // adiciona-se o número informado à soma de ímpares
somaimpar = somaimpar + n;
qtd++; // incremento da quantidade de números informados }
else { // caso contrário, o número é par // adiciona-se o número informado à soma de pares somapar = somapar + n;
}
cout << "Entre com um numero (ou 0 para sair): "; cin >> n; // entrada do próximo número }
if (qtd != 0) { // se quantidade de números ímpares for diferente de 0... media = somaimpar/qtd; // cálculo da média de ímpares
cout << "MEDIA IMPARES: " << media << "\n"; // exibição da média }
cout << "SOMA PARES...: " << somapar << "\n"; // exibição da soma de pares system("pause");
}
6.
Um determinado cinema, com capacidade para 100 lugares, sempre se encontra com ocupação razoável. Deseja-se
desenvolver um programa para entrada e processamento de um questionário realizado com todos os espectadores,
realizado certo dia. Nesse questionário, constam as seguintes perguntas:
Idade;
Opinião sobre o filme exibido no dia; trata-se de valor numérico entre 1 e 5, conforme relação abaixo:
1.
Ótimo;
2.
Bom;
3.
Regular;
4.
Ruim;
5.
Péssimo.
Sobre o programa, após a entrada das respostas do questionário, devem ser exibidas as seguintes informações:
A quantidade de espectadores que consideraram o filme assistido no dia
ótimo
;
A porcentagem de espectadores que consideram o filme
bom
ou
regular
, em relação ao total de respostas;
A média de idade dos espectadores que consideram o filme
ruim
;
A quantidade de pessoas que, com idade acima de 65 anos, consideram o filme
péssimo
.
Observação: sobre a entrada das respostas, a mesma será finalizada quando for informado 0 (zero) ou um valor
negativo, quando solicitada a idade do próximo espectador.
Resp.:
#include <iostream.h>
int main() {
int idade, opiniao; // idade e opinião de cada espectador float qtd = 0; // quantidade total de espectadores
float qtd1 = 0; // quantidade de espectadores com avaliação ótima
float qtd3 = 0; // quantidade de espectadores com avaliação ruim float soma3 = 0; // soma de idade de espectadores com avaliação ruim float qtd4 = 0; // quantidade de espectadores com avaliação péssima
cout << "Idade: ";
cin >> idade; // entrada de idade do primeiro espectador
// enquanto a idade do próximo espectador for positiva... while (idade > 0) {
cout << "Opiniao sobre o filme (de 1 a 5): ";
cin >> opiniao; // entrada da opinião sobre o filme
qtd++; // incremento da quantidade de espectadores
if (opiniao==1) { // se opinião for ótima...
qtd1++; // incremento da quantidade de opiniões ótimas }
if (opiniao==2 || opiniao==3) { // se opinião for boa ou regular...
qtd2++; // incremento da quantidade de opiniões boas ou regulares }
if (opiniao==4) { // se opinião for ruim
qtd3++; // incremento da quantidade de opiniões ruins
soma3 += idade; // acrescenta-se a idade do espectador ao somatório }
// se a opinião for péssima e a idade acima de 65 anos... if (opiniao==5 && idade>=65) {
qtd4++; // incremento da quantidade de opiniões boas ou regulares }
cout << "\nIdade: ";
cin >> idade; // entrada de idade do próximo espectador }
float pr2 = 0; // porcentagem espectadores com avaliação boa ou regular if (qtd2 > 0) { // se existirem espectadores com tal avaliação...
pr2 = qtd2 / qtd * 100; // cálculo da porcentagem sobre total }
float med3 = 0; // média espectadores com avaliação ruim
if (qtd3 > 0) { // se existirem espectadores com tal avaliação... med3 = soma3 / qtd3; // cálculo de média idade espectadores }
// impressão de estatísticas
cout << "\nQtd. Espectadores Opiniao Otima...: " << qtd1 << "\n"; cout << "% Espectadores Opiniao Boa ou Regular...: " << pr2 << "\n"; cout << "Media Idade Espectadores Opiniao Ruim...: " << med3 << "\n"; cout << "Qtd. Espectadores (acima 65 anos) Opiniao Pessima: " << qtd4 << "\n";
system("pause"); }
7.
Desenvolver um programa que controle o saldo bancário de uma determinada conta corrente. Inicialmente, deverá ser
informado, pelo usuário, o saldo anterior da referida conta. Em seguida, caberá também ao usuário informar as
operações realizadas. Para cada operação, deverá ser informado seu código e o montante (valor) envolvido na
operação. Sobre o código, adote a tabela abaixo:
Saque em dinheiro: código 10;
Depósito: código 33;
Caso o saldo da conta se torne negativo, após a entrada de uma determinada operação, caberá ao programa exibir uma
mensagem em que seja informado
apenas
que o saldo da conta se encontra negativo,
a partir daquela operação
. Em
relação ao montante, o mesmo deverá ser solicitado novamente, se for informado um valor negativo ou o próprio 0
(zero).
Resp.:
#include <iostream.h>
int main() {
float saldo; // variável para armazenamento do saldo int operacao, valor;
cout << "Informe o saldo inicial: ";
cin >> saldo; // entrada de saldo inicial
cout << "\nCodigo Operacao (10 para saque ou 33 para deposito): "; cin >> operacao; // entrada de código da primeira operação
// enquanto código da próxima operação for diferente de 0 (zero)... while (operacao != 0) {
// se código de operação for inválido... if (operacao!=10 && operacao!=33) {
cout << "CODIGO DE OPERACAO INVALIDO!\n"; }
else { // caso contrário, código de operação é válido cout << "Valor Operacao: ";
cin >> valor; // entrada do valor da operação
// enquanto valor da operação informada não for positivo... while (valor <= 0) {
cout << "Valor Operacao Invalido! Informe novamente: "; cin >> valor; // entrada do valor da operação novamente }
if (operacao==10) { // se operação for saque...
saldo -= valor; // subtrae valor informado do saldo }
else { // caso contrário, operação de depósito... saldo += valor; // adiciona-se o valor informado ao saldo }
if (saldo < 0) { // se saldo for negativo... cout << "SALDO NEGATIVO!\n";
} }
cout << "\nCodigo Operacao (10 para saque ou 33 para deposito): "; cin >> operacao; // entrada de código da prósima operação }
// exibição de saldo final
cout << "\nSALDO FINAL: " << saldo << "\n"; system("pause");