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 02
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 calcule o valor a ser pago a uma concessionária de energia elétrica por uma
determinada
classe consumidora
, da forma que se segue:
a)
Como entrada de dados, para efeito de cálculo, deverão ser fornecidos o tipo da classe consumidora (conforme
definido na tabela 1) e o consumo em quilowatts/hora (KWh);
b)
O cálculo do
Valor de Fornecimento
(VF), expresso em reais (R$), é definido pela seguinte fórmula:
VF = Consumo x Tarifa,
onde a tarifa é definida na tabela 1, conforme a classe consumidora;
c)
O valor a ser pago (VP) é definido pela seguinte fórmula:
VP = VF + ICMS,
onde a taxa de ICMS (Imposto sobre Circulação de Mercadorias e Serviços) é calculada com a aplicação de uma
alíquota de 30% ao valor do fornecimento.
Classe Consumidora
Tarifa (R$)
A
0,5
B
0,8
C
1,0
Tabela 1
Resp.:
#include <iostream.h>
int main() { char classe;
double consumo, vf, vp, tarifa, icms; // Entrada de dados
cout << "Classe Consumidora (A, B ou C): "; cin >> classe;
cout << "Consumo KWh...: "; cin >> consumo;
// validação de entrada de dados ref. à classe consumidora if (classe != 'A' && classe != 'B' && classe != 'C') { cout << "Classe consumidora informada invalida!\n"; }
else {
// identificação de valor da tarifa por quilowatt/hora if (classe == 'A') // se classe consumidora for A... tarifa = 0.5;
else if (classe == 'B') // se classe consumidora for B... tarifa = 0.8;
else // se classe consumidora não for nem A nem B... tarifa = 1.0;
vf = consumo * tarifa; // cálculo do valor de fornecimento
icms = vf * 0.3; // cálculo de ICMS (30% sobre valor de fornecimento) vp = vf + icms; // cálculo de valor a ser pago
cout << "Valor a Pagar: " << vp << "\n"; // impressão de valor a pagar }
system("pause"); }
2.
O acesso a um determinado laboratório é controlado a partir de uma porta automática. Para abrir a porta do referido
laboratório, é necessário o uso de uma senha, composta por 4 dígitos, no formato
Y = d
1d
2d
3C
, em que
C
é o dígito de
controle da senha (e.g, se Y = 5329, então d
1= 5,
d
2= 3
d
3= 2 e C = 9). O dígito
C
da senha é uma forma de segurança
3 mod d 10 mod )] d * (2 * 3) K * (2 [ = C 3 1 k k 3 1 = K kAssim, se d
1= 5,
d
2= 3,
d
3= 2 e C =
9
, a senha é válida e a porta será aberta. Se a senha digitada for Y = 7206, por sua
vez, a senha é inválida e a porta permanece fechada. Desenvolva um programa que, após a entrada de um número
Y =
d
1d
2d
3C
(digitado de uma única vez), informe se a senha é válida ou não.
Resp.:
#include <iostream.h>
int main() {
int senha, d1, d2, d3, d, c, soma1, soma2, k, ctemp;
// entrada de senha
cout << "Informe sua senha de 4 digitos: "; cin >> senha;
// extração de dígitos
d1 = senha / 1000 % 10; // extração de primeiro dígito d2 = senha / 100 % 10; // extração de segundo dígito d3 = senha / 10 % 10; // extração de terceiro dígito c = senha % 10; // extração de dígito verificador C
// cálculo do somatório (2 * k + 3) * (2 * d), de k = 1 a k = 3 for (k=1; k<=3; k++) {
// seleção de dígito a ser usado no cálculo if (k == 1) // se for o primeiro dígito d = d1;
else if (k == 2) // se for o segundo dígito d = d2;
else // se não for nem o primeiro dígito, nem o segundo... d = 3;
soma1 = soma1 + (2 * k + 3) * (2 * d); }
// cálculo do somatório dk, de k = 1 a k = 3 soma2 = d1 + d2 + d3;
// cálculo de dígito correto (última posição da senha) ctemp = (soma1 % 10) + (soma2 % 3);
// verificação de dígito informado com dígito correto if (c == ctemp) { // se forem idênticos, senha válida cout << "SENHA VALIDA!\n";
}
else { // caso contrário, senha inválida cout << "SENHA INVALIDA!\n";
}
system("pause"); }
3.
Desenvolver um programa para impressão de todos os números pares entre 1 e 100. Além disso, será necessário
exibir, logo à frente de cada número par, o quadrado do mesmo.
Resp.:
#include <iostream.h>
int main() {
int i; // declaração de contador
for (i=2; i<100; i++) { // contagem entre 2 e 99 (99 < 100) if (i % 2 == 0) { // se contador for par...
cout << i << "\t" << i * i << "\n"; // impressão de número par e seu quadrado }
}
4.
Desenvolver um programa para entra de um número
n
, após o qual devem ser exibidos todos os múltiplos de 3 e 5, ao
mesmo tempo, no intervalo fechado entre 1 e
n
.
Resp.:
#include <iostream.h>
int main() {
int i; // declaração de contador
int n; // declaração de variável para entrada de um número n cout << "Informe um numero: ";
cin >> n; // entrada de número
// contagem entre 1 e o próprio número informado (intervalo fechado) for (i=1; i<=n; i++) {
int r3 = i % 3; // resto da divisão entre contador e 3; int r5 = i % 5; // resto da divisão entre contador e 5;
// se restos iguais a 0 (zero), contador é múltiplo de 3 e 5 if (r3==0 && r5==0) {
cout << i << "\n"; // impressão de contador }
}
system("pause"); }
5.
Desenvolver um programa para encontrar o
enésimo
termo da sequência de Fibonacci. Nesta sequência, o primeiro
termo é 0, o segundo termo é 1 e, a partir do terceiro, cada termo é obtido a partir da soma dos dois termos anteriores.
Os primeiros 10 números da sequência são, portanto, 0, 1, 1, 2, 3, 5, 8, 13, 21 e 34. A posição do enésimo termo (
n
)
deverá ser informada pelo próprio usuário.
Resp.:
#include <iostream.h>
int main() {
// declaração de variáveis para armazenamento dos dois últimos termos da série int n1 = 0, n2 = 1;
int pos; // declaração de variável para entrada de posição do termo
cout << "Informe a posicao do termo desejado (a partir de 1): "; cin >> pos; // entrada de posição do enésimo termo
if (pos < 1) { // se posição for inferior a 1, inválida cout << "ENESIMO TERMO INVALIDO!\n";
}
else { // caso contrário, prossegue com o cálculo
int termo; // declaração de variável para valor do enésimo termo if (pos == 1) // se for primeiro termo, valor é 0 (n1)
termo = n1;
else if (pos == 2) // se for segundo termo, valor é 1 (n2) termo = n2;
else {
// a partir do terceiro termo, procede-se com o cálculo dos termos // intermediários até alcançar o termo da posição informada
for (int i=3; i<=pos; i++) {
termo = n1 + n2; // cálculo do próximo termo n
n1 = n2; // substituição do termo n-2 (n1) por n-1 (n2) n2 = termo; // substituição do termo n-1 (n2) pelo próximo termo n }
}
// impressão de enésimo termo
cout << "TERMO NR " << pos << " = " << termo << "\n"; }
system("pause"); }
6.
Desenvolver um programa para exibir a soma dos
n
primeiros termos da sequência de Fibonacci, após a entrada da
Resp.:
#include <iostream.h>
int main() {
// declaração de variáveis para armazenamento dos dois últimos termos da série int n1 = 0, n2 = 1;
int soma = 0; // declaração de variável para soma dos termos
int qtd; // declaração de variável para entrada da quantidade de termos
cout << "Informe a quantidade de termos a somar (a partir de 1): "; cin >> qtd; // entrada da quantidade de termos
if (qtd < 1) { // se quantidade for inferir a 1, inválida cout << "QUANTIDADE INVALIDA!\n";
}
else { // caso contrário, prossegue com a soma
int termo; // declaração de variável para valor do enésimo termo if (qtd == 1) // se quantidade for apenas 1, soma é 0
soma = n1;
else if (qtd == 2) // se quantidade for 2, soma é 1 (0 + 1) soma = n2;
else { // para quantidades maiores que 2... soma = n1 + n2; // soma dos dois primeiros termos
// procede-se com o cálculo dos termos intermediários até alcançar // o termo da posição final (todos serão adicionados à soma)
for (int i=3; i<=qtd; i++) {
termo = n1 + n2; // cálculo do próximo termo n
n1 = n2; // substituição do termo n-2 (n1) por n-1 (n2) n2 = termo; // substituição do termo n-1 (n2) pelo próximo termo n soma = soma + termo; // acréscimo de termo calculado à soma
} }
// impressão de soma de termos
cout << "SOMA DE " << qtd << " TERMO(S) = " << soma << "\n"; }
system("pause"); }
7.
Desenvolver um programa para verificar se um dado número n é primo.
Resp.:
#include <iostream.h>
int main() {
int n; // número a ser testado
int primo = 1; // assume-se que inicialmente o número a ser informado é primo
cout << "Informe um numero: ";
cin >> n; // entrada de número a ser testado
// cálculo de restos das divisões entre o número informado e todos os números // entre 2 e o imediato antecessor do número informado (n-1)
for (int i=2; i<=n-1; i++) {
int resto = n % i; // cálculo do resto entre o número (n) e contador (i)
// se resto igual a 0 (zero), número é divisível e, portanto, não é primo if (resto == 0) {
primo = 0; // atualização da variável de controle com 0 (zero) break; // interrupção da execução do laço de repetição }
}
// teste da variável de controle PRIMO; se for 0 (zero), indicativo de que // o número não é primo, já que foi encontrado um divisor
if (primo == 0)
cout << n << " NAO EH PRIMO!\n";
cout << n << " EH PRIMO!\n"; system("pause");
}
8.
Desenvolver um programa que implemente um jogo de senhas (para duas pessoas), da forma que se segue:
a)
O jogador 1 digitará uma senha (valor inteiro entre 0 e 30) sem o conhecimento do jogador 2;
b)
O jogador 2 terá 5 chances para descobrir a senha digitada pelo jogador 1;
c)
A cada tentativa do jogador 2, deverá ser informado pelo programa se o valor digitado é maior, menor ou igual à
senha;
d)
Se o jogador 2 acertar a senha, o programa não deve permitir a realização de mais nenhuma tentativa e o mesmo
será declarado como vencedor.
e)
Caso o jogador 2 não acerte a senha, ao término das 5 tentativas, o mesmo será declarado como perdedor.
Sugestão
: para que o jogador 2 não tenha conhecimento da senha digitada pelo jogador 1, use uma das seguintes
instruções, após a entrada da senha
, para “limpeza da tela”
:
system("cls"); system("clear");
Resp.:
#include <iostream.h>
int main() {
int senha1; // senha do jogador 1
int senha2; // senha do jogador 2, para efeito de tentativa int tentativa = 1; // contador de tentativas
cout << "JOGADOR 1 - ENTRE COM SUA SENHA: "; cin >> senha1; // entrada da senha do jogador 1
system("cls"); // apaga ("limpa a tela") todos os caracteres exibidos até então
// execução de 5 tentativas para acerto da senha
cout << "JOGADOR 2: VOCE TEM 5 TENTATIVAS PARA ACERTAR A SENHA DO JOGADOR 1\n"; do {
cout << "\nTentativa " << tentativa << " de 5 -> ENTRE COM SUA SENHA: "; cin >> senha2; // entada da senha do jogador 2
if (senha1 == senha2)
cout << "\nSENHAS CONFEREM! JOGADOR 2 VENCEDOR!\n"; else if (senha2 < senha1)
cout << "JOGADOR 2, SUA SENHA EH MENOR QUE A SENHA DO JOGADOR 1!\n"; else
cout << "JOGADOR 2, SUA SENHA EH MAIOR QUE A SENHA DO JOGADOR 1!\n";
tentativa++; // incremento do contador de tentativas } while (tentativa <= 5 && senha1 != senha2);
if (tentativa>5) { // se número de tentativas for superior a 5... cout << "\nJOGADOR 2, INFELIZMENTE VOCE EH O PERDEDOR!\n";
}
system("pause"); }
9.
Readapte o programa da questão anterior de modo que haja uma validação sobre a senha digitada pelo jogador 1 (caso
seja informado, pelo mesmo, algum valor que não esteja entre 0 e 30, será solicitado novamente a entrada de outro
valor).
Resp.:
#include <iostream.h>
int main() {
int senha1; // senha do jogador 1
int senha2; // senha do jogador 2, para efeito de tentativa int tentativa = 1; // contador de tentativas
// verificação da senha
while (senha1 < 0 || senha1 > 30) {
cout << "JOGADOR 1, SENHA INVALIDA! DIGITE NOVAMENTE (ENTRE 1 E 30): "; cin >> senha1; // entrada da senha do jogador 1
}
system("cls"); // apaga ("limpa a tela") todos os caracteres exibidos até então
// execução de 5 tentativas para acerto da senha
cout << "JOGADOR 2: VOCE TEM 5 TENTATIVAS PARA ACERTAR A SENHA DO JOGADOR 1\n"; do {
cout << "\nTentativa " << tentativa << " de 5 -> ENTRE COM SUA SENHA: "; cin >> senha2; // entada da senha do jogador 2
if (senha1 == senha2)
cout << "\nSENHAS CONFEREM! JOGADOR 2 VENCEDOR!\n"; else if (senha2 < senha1)
cout << "JOGADOR 2, SUA SENHA EH MENOR QUE A SENHA DO JOGADOR 1!\n"; else
cout << "JOGADOR 2, SUA SENHA EH MAIOR QUE A SENHA DO JOGADOR 1!\n";
tentativa++; // incremento do contador de tentativas } while (tentativa <= 5 && senha1 != senha2);
if (tentativa>5) { // se número de tentativas for superior a 5... cout << "\nJOGADOR 2, INFELIZMENTE VOCE EH O PERDEDOR!\n";
}