INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA 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 06
–
GABARITO
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.
Readapte o programa abaixo de modo que as instruções relacionadas à exibição do menu de opções de operações de
cálculo sejam substituídas pela execução de um procedimento que contenha as instruções em questão.
#include <iostream.h> #include <math.h>
int main() { char resp; int opcao; double n;
do {
cout << "**** MENU DE OPCOES **\n"; cout << "* 1 - RAIZ QUADRADA *\n"; cout << "* 2 - ARREDONDAMENTO *\n"; cout << "**********************\n";
cout << "\nOPCAO: "; cin >> opcao;
if (opcao==1 || opcao==2) { cout << "\nNUMERO: "; cin >> n;
if (opcao==1) {
cout << "RAIZ QUADRADA DE " << n << " = " << sqrt(n); }
else {
cout << "ARREDONDAMENTO DE " << n << " = " << ceil(n); }
} else {
cout << "OPCAO INVALIDA!"; }
cout << "\n\n";
cout << "Deseja continuar (S/N): "; cin >> resp;
cout << "\n";
} while (resp == 's' || resp == 'S'); }
Resp.:
#include <iostream.h> #include <math.h>
void menu() {
cout << "**** MENU DE OPCOES **\n"; cout << "* 1 - RAIZ QUADRADA *\n"; cout << "* 2 - ARREDONDAMENTO *\n"; cout << "**********************\n"; }
int main() { char resp; int opcao; double n;
do {
menu();
cout << "\nOPCAO: "; cin >> opcao;
if (opcao==1 || opcao==2) { cout << "\nNUMERO: "; cin >> n;
if (opcao==1) {
cout << "RAIZ QUADRADA DE " << n << " = " << sqrt(n); }
else {
cout << "ARREDONDAMENTO DE " << n << " = " << ceil(n); }
} else {
cout << "OPCAO INVALIDA!"; }
cout << "\n\n";
cout << "Deseja continuar (S/N): "; cin >> resp;
cout << "\n";
} while (resp == 's' || resp == 'S'); }
2.
Desenvolver uma função que receba como parâmetros valores numéricos inteiros referentes à um horário no formato
hh:mm (horas e minutos) e retorne o valor correspondente em minutos. Considerando o horário 07h20min, por
exemplo, ao término da execução da função, deveria ser retornado o valor 440, já que o horário em questão
corresponde a exatos 440 minutos.
Resp.: além da função solicitada, na função principal usa-se uma estrutura de repetição para que testes sucessivos
sejam realizados com a função desenvolvida, a partir da entrada de horários.
#include <iostream.h>
int minutos(int hr, int mn) {
// conversão de horário no formato hh:mm para minutos return hr * 60 + mn;
}
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int hr, mn; // horário no formato hh:mm
int r; // resultado da conversão do horário para segundos
do {
// entrada do horário
cout << "HORARIO (HH:MM).: "; cin >> hr >> mn;
r = minutos(hr, mn);
cout << "TOTAL DE MINUTOS: " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
3.
Desenvolver um procedimento para conversão de uma determinada quantidade de minutos para o formato
hh:mm
(horas e minutos), seguida da exibição do horário convertido. A quantidade de minutos em questão deverá ser
fornecida ao procedimento na forma de parâmetro. Seria exibido o horário 07h20min, por exemplo, se ocorresse a
execução do procedimento com base na suposição de que é fornecido ao mesmo o valor 440 (minutos).
Resp.: além do procedimento solicitado, na função principal usa-se uma estrutura de repetição para que testes
sucessivos sejam realizados com o procedimento desenvolvido, a partir da entrada de quantidades de minutos.
#include <iostream.h>
// conversão de quantidade de minutos para o formato hh:mm void horario(int minutos) {
int hr = minutos / 60; // quantidade de horas completas int mn = minutos % 60; // quantidade de minutos restantes
if (hr < 10) { // se quantidade de horas for inferior à 10... cout << "0"; // exibição do dígito 0 (zero)
}
cout << hr << ":"; // exibição de horas completas
if (mn < 10) { // se quantidade de minutos for inferior à 10... cout << "0"; // exibição de dígito 0 (zero)
}
cout << mn << "\n"; // exibição de minutos restantes }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int minutos; // quantidade de minutos
do {
cout << "INFORME QUANTIDADE DE MINUTOS: "; cin >> minutos; // entrada de minutos
horario(minutos); // conversão de minutos para o formato hh:mm
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
4.
Desenvolver um programa para entrada dos horários de entrada e saída (formato
hh:mm) de uma determinada
quantidade de funcionários, para apuração e exibição do tempo de permanência dos mesmos de permanência na
empresa durante o expediente, com o uso da função e do procedimento mencionados nas questões 02 e 03,
respectivamente. O tempo de permanência de cada funcionário deverá ser exibido igualmente no formato
hh:mm,
imediatamente após a entrada dos horários de entrada e saída do mesmo. Desconsidere a existência da possibilidade
de que o funcionário registra entradas e saídas em dias diferentes; além disso, não é concedido ao funcionário nenhum
intervalo para alimentação ou descanso durante o expediente.
Observação: considere que, após a exibição do tempo de permanência na empresa de determinado funcionário, seja
permitido ao usuário escolher entre informar os horários de entrada e saída do próximo funcionário ou simplesmente
encerrar o programa.
Resp.: para identificação de tempo de permanência, observa-se aqui que os horários de entrada e saída são convertidos
para totais em minutos, após o qual são subtraídos, com o auxílio da função proposta na questão 02. O resultado da
subtração é, em seguida, convertido para o formato hh:mm com o auxílio do procedimento proposto na questão 03.
#include <iostream.h>
int minutos(int hr, int mn) { return hr * 60 + mn; }
// conversão de quantidade de minutos para o formato hh:mm void horario(int minutos) {
int hr = minutos / 60; // quantidade de horas completas int mn = minutos % 60; // quantidade de minutos restantes
if (hr < 10) { // se quantidade de horas for inferior à 10... cout << "0"; // exibição do dígito 0 (zero)
}
cout << hr << ":"; // exibição de horas completas
if (mn < 10) { // se quantidade de minutos for inferior à 10... cout << "0"; // exibição de dígito 0 (zero)
}
cout << mn << "\n"; // exibição de minutos restantes }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int hr1, mn1, hr2, mn2; // horários de entrada e saída de funcionário
int qtdmin1, qtdmin2; // conversão de horários de entrada/saída para minutos int difmin; // tempo de permanencia em minutos
do {
cout << "INFORME HORARIO DE ENTRADA (HH:MM): ";
cin >> hr1 >> mn1; // entrada de horário de entrada
cout << "INFORME HORARIO DE SAIDA (HH:MM)..: "; cin >> hr2 >> mn2; // entrada de horário de saída
// conversão de horários de entrada e saída informados para total minutos qtdmin1 = minutos(hr1, mn1);
qtdmin2 = minutos(hr2, mn2);
// cálculo de tempo de permanência pela empresa pela diferença em minutos difmin = qtdmin2 - qtdmin1;
horario(difmin); // exibição de tempo de permanência no formato hh:mm
cout << "\nINFORMAR HORARIOS DE ENTRADA/SAIDA DE OUTRO FUNCIONARIO (s/n)? "; cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
5.
Desenvolver uma função que identifique e retorne o peso ideal de uma pessoa, a partir do fornecimento da altura e do
sexo para essa função na forma de parâmetros. Para o fornecimento do sexo, assuma que sejam admitidos os seguintes
valores (caracteres):
Sexo Masculino: “M”;
Sexo Feminino: “F”.
Para cálculo do peso ideal, adote as seguintes fórmulas:
Homens: (72,7 × Altura)
–
58;
Mulheres: (62,1 × Altura)
–
44,7.
Resp.: além da função solicitada, na função principal um teste é realizado com a função desenvolvida, a partir da
entrada dos dados de altura e sexo de uma pessoa.
#include <iostream.h>
// retorno de peso ideal
if (sexo=='m' || sexo=='M') { // se for do sexo masculino...
return 72.7 * altura - 58; // retorno de peso ideal para homens }
else if (sexo=='f' || sexo=='F') { // se for do sexo feminino...
return 62.1 * altura - 44.7; // retorno de peso ideal para mulheres }
else { // caso contrário... return 0; // retorno de 0 (zero) }
}
int main() {
int altura; // altura e sexo de uma pessoa
char sexo; // sexo de uma pessoa (M se homem, F se mulher) float peso; // peso ideal de uma pessoa
cout << "ALTURA....: ";
cin >> altura; // entrada de altura
cout << "SEXO (M/F): ";
cin >> sexo; // entrada de altura
peso = pesoideal(altura, sexo); // cálculo de peso ideal
cout << "PESO IDEAL: " << peso << "\n";
system("pause"); }
6.
Desenvolver um programa que, com o auxílio da função implementada na questão 05, permita que a apuração do peso
ideal de várias pessoas, a partir do fornecimento da altura e do sexo dos mesmos. O peso ideal deverá ser exibido
imediatamente após o fornecimento da altura e do sexo do mesmo (ou seja, não é necessário que se aguarde a entrada
dos dados das demais pessoas).
Observação: considere que, após a exibição do peso ideal de uma pessoa, seja permitido ao usuário escolher entre
informar os dados da próxima pessoa ou simplesmente encerrar o programa.
Resp.: aqui observa-se que, após cálculo do peso ideal de uma pessoa, o usuário, se informar o caractere
“
s
”
,
prosseguirá com a entrada de dados de altura e sexo de outra pessoa, caso contrário, o programa será encerrado.
#include <iostream.h>
// retorno de peso ideal
float pesoideal(float altura, char sexo) {
if (sexo=='m' || sexo=='M') { // se for do sexo masculino...
return 72.7 * altura - 58; // retorno de peso ideal para homens }
else if (sexo=='f' || sexo=='F') { // se for do sexo feminino...
return 62.1 * altura - 44.7; // retorno de peso ideal para mulheres }
else { // caso contrário... return 0; // retorno de 0 (zero) }
}
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int altura; // altura e sexo de uma pessoa
char sexo; // sexo de uma pessoa (M se homem, F se mulher) float peso; // peso ideal de uma pessoa
do {
cout << "ALTURA....: ";
cin >> altura; // entrada de peso
cout << "SEXO (M/F): ";
cin >> sexo; // entrada de altura
cout << "PESO IDEAL: " << peso << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
7.
As instruções abaixo permitem a geração de um número aleatório entre 0 e 20; para tal, são usadas três funções, duas
delas definidas na biblioteca math.h e outra definida na biblioteca time.h. A função time devolve informações sobre a
data/horário corrente do computador no qual o programa é executado. A função srand permite acionar o mecanismo
de aleatoriedade, a partir do recebimento da data/horário corrente. A função
rand devolve o número aleatório
propriamente dito; para restringi-lo a uma faixa de valores, usa-se aqui a operação de módulo. Com base no uso
dessas funções, desenvolva um programa que implemente um jogo de adivinhação, no qual o usuário terá uma
quantidade ilimitada de chances para tentar acertar o número gerado aleatoriamente. O programa só será encerrado
após o fornecimento do número correto.
#include <iostream.h>
#include <stdlib.h> // funções srand/rand #include <time.h> // função time
int MAX = 20;
int main() {
srand(time(NULL)); int n = rand() % 20;
cout << "N = " << n << "\n";
system("pause"); }
Resp.: aqui acrescentou-se um recurso aquém do solicitado na questão, relacionado à contabilização da quantidade de
tentativas realizadas para acerto do número gerado aleatoriamente. Por sinal, o contador de tentativas já é iniciado
com o valor 1 (um), já que o acerto ocorrerá com ao menos uma tentativa.
#include <iostream.h>
#include <stdlib.h> // funções srand e rand #include <time.h> // função time
int MAX = 20; // delimitador de gerador de números aleatórios
int main() {
srand(time(NULL));
int n = rand() % 20; // geração de número aleatório int palpite; // palpite sobre o número aleatório int tentativas = 1; // quantidade de tentativas para acerto
cout << "UM NUMERO ALEATORIO ENTRE 0 e 20 ACABOU DE SER GERADO!\n\n";
cout << "SEU PALPITE: ";
cin >> palpite; // entrada de palpite
while (palpite != n) { // enquanto palpite for errado... cout << "PALPITE ERRADO! TENTE OUTRO: ";
cin >> palpite; // entrada de novo palpite
tentativas++; // contabilização de mais uma tentativa... }
// exibição de quantidade de tentativas para acerto
cout << "\nPARABENS! VOCE ACERTOU APOS " << tentativas << " TENTATIVA(S)\n\n";
8.
Readapte o programa da questão anterior de modo que o mesmo ofereça a possibilidade de geração de um novo
número aleatório ou mesmo a de encerramento do programa, caso o usuário não consiga acertar o último número
gerado aleatoriamente após 5 (cinco) tentativas.
Resp.: aqui observa-se que é oferecido ao usuário a opção de encerrar o programa ou fazer novos palpites com a
geração de um novo número aleatório a cada 5 (cinco) tentativas incorretas.
#include <iostream.h>
#include <stdlib.h> // funções srand e rand #include <time.h> // função time
int MAX = 20; // delimitador de gerador de números aleatórios
int main() {
srand(time(NULL));
int n = rand() % 20; // geração de número aleatório int palpite; // palpite sobre o número aleatório int tentativas = 1; // quantidade de tentativas para acerto
int opcao = 1; // opção de continuação com geração de novo número // aleatório (1) ou encerramento do programa (0)
cout << "UM NUMERO ALEATORIO ENTRE 0 e 20 ACABOU DE SER GERADO!\n\n";
cout << "SEU PALPITE: ";
cin >> palpite; // entrada de palpite
// enquanto palpite for errado e while (palpite != n && opcao == 1) {
if (tentativas == 5) { // se forem alcançadas 5 tentativas... cout << "\nAPOS 5 TENTATIVAS...\n";
cout << "ENCERRAR O PROGRAMA (OPCAO 0) OU...\n";
cout << "DESEJA PROSSEGUIR COM A GERACAO DE OUTRO NUMERO ALEATORIO (OPCAO 1)?"; cout << "\n\nSUA OPCAO (0/1): ";
cin >> opcao; // entrada de opção novamente
// verificação de opcão informada (qualquer valor diferente de 0 e 1 inválido) while (opcao != 0 && opcao != 1) {
cout << "OPCAO INVALIDA! DIGITE NOVAMENTE (0/1): "; cin >> opcao; // entrade de opção novamente }
if (opcao == 1) { // se opção for 1 (um)...
n = rand() % 20; // geração de novo número aleatório cout << "\n\nNOVO NUMERO ALEATORIO GERADO!!!\n\n\n"; tentativas = 0; // zera as tentativas
} }
if (opcao != 0) { // se opção for não encerrar o programa... cout << "PALPITE ERRADO! TENTE OUTRO: ";
cin >> palpite; // entrada de novo palpite
tentativas++; // contabilização de mais uma tentativa... }
}
if (palpite == n) { // se acertar...
// exibição de quantidade de tentativas para acerto
cout << "\nPARABENS! VOCE ACERTOU APOS " << tentativas << " TENTATIVA(S)\n\n";
system("pause"); }
}
Resp.: aqui observa-se que assume-se que inicialmente o número a ser testado é primo (com a atribuição inicial do
valor 1 à variável de controle ehprimo) até que se prove o contrário (ou seja, quando for encontrado algum divisor que
não seja nem 1, nem o próprio número a ser testado).
#include <iostream.h>
int primo(int n) {
int ehprimo = 1; // indicativo de que o número é primo inicialmente
// realização de testes de divisão do número por todos os números entre 2 e // o maior número inferior ao número testado inclusive
for (int i=2; i<n; i++) {
if (n % i == 0) { // se a divisão do número for exata (resto 0)... ehprimo = 0; // indica-se que o número não é mais primo... }
}
return ehprimo; // retorno de resultado do teste (0 - não primo; 1 - primo) }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int n; // número a ser testado (se é primo ou não)
int r; // resultado do teste sobre número (0 - não primo; 1 - primo)
do {
cout << "NUMERO: "; // entrada do número cin >> n;
r = primo(n); // execução de função para realização de teste de primo
cout << "PRIMO = " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
10.
A famosa conjetura de Goldbach diz que todo inteiro par maior que 2 é a soma de dois números primos. Testes
sucessivos foram feitos sem contudo ser encontrado um contra-exemplo. Desenvolva um programa que mostre que a
afirmação é verdadeira para a sequência de números pares entre 700 e 720, de modo que cada número par da
sequência seja exibido, acompanhado de dois números primos cuja soma é equivalente ao número primo em questão.
Certifique-se do uso da função da questão anterior para identificação dos números primos.
Resp.:
#include <iostream.h>
int primo(int n) {
int ehprimo = 1; // indicativo de que o número é primo inicialmente
// realização de testes de divisão do número por todos os números entre 2 e // o maior número inferior ao número testado inclusive
for (int i=2; i<n; i++) {
if (n % i == 0) { // se a divisão do número for exata (resto 0)... ehprimo = 0; // indica-se que o número não é mais primo... }
}
return ehprimo; // retorno de resultado do teste (0 - não primo; 1 - primo) }
int main() {
int n; // enésimo número par entre 700 e 720
int ehsoma; // indicativo de que soma de primos foi encontrada
for (int i=702; i<720; i++) { // todos os números entre 700 e 720 int n = i; // enésimo número da faixa
if (n % 2 == 0) { // se enésimo número for par...
ehsoma = 0; // indica-se que soma de primos não foi encontrada
// para todos os números entre 1 (inclusive) e o enésimo número (se a soma // de primos já não tiver sido encontrada para o enésimo número par)
for (int j=1; j<n && ehsoma==0; j++) {
int n1 = j; // candidato a primeiro número primo
ehprimo = primo(n1); // verificação de teste de primo sobre 1° candidato
if (ehprimo == 1) { // se o número candidato for primo...
// procede-se com a localização de um segundo número primo cuja soma com o // primeiro número identificado como primo dê o enésimo número da faixa
// para todos os números entre o primeiro número primo e o enésimo número for (int k=n1+1; k<n; k++) {
int n2 = k; // candidato a segundo número primo
ehprimo = primo(n2); // verificação de teste de primo sobre o candidato
if (ehprimo == 1) { // se o segundo número candidato for primo... // se a soma dos números primos candidatos for equivalente
// ao enésimo número if (n1 + n2 == n) {
// exibição de enésimo primo e seus números primos cout << n << " - " << n1 << " + " << n2 << "\n";
ehsoma = 1; // indica-se que a soma foi encontrada
// encerramento de laço para procura do segundo número primo break;
} } } } } } }
system("pause"); }
11.
Readapte o programa da questão anterior de modo que o próprio usuário forneça a faixa de números cujos números
pares e seus respectivos números primos correspondentes serão identificados e exibidos.
Resp.: observa-se aqui que armazenam-se nas variáveis x1 e x2 os números que estabelecem a faixa a partir da qual
são extraídos os números pares existentes.
#include <iostream.h>
int primo(int n) {
int ehprimo = 1; // indicativo de que o número é primo inicialmente
// realização de testes de divisão do número por todos os números entre 2 e // o maior número inferior ao número testado inclusive
for (int i=2; i<n; i++) {
if (n % i == 0) { // se a divisão do número for exata (resto 0)... ehprimo = 0; // indica-se que o número não é mais primo... }
}
int main() {
int x1, x2; // intervalo números para identificação de pares int n; // enésimo número par do intervalo
int ehprimo; // indicativo de que o número em teste é primo int ehsoma; // indicativo de que soma de primos foi encontrada
cout << "INFORME INTERVALO DE NUMEROS: ";
cin >> x1 >> x2; // entrada de intervalo de números
for (int i=x1; i<x2; i++) { // todos os números do intervalo int n = i; // enésimo número do intervalo
if (n % 2 == 0) { // se enésimo número for par...
ehsoma = 0; // indica-se que soma de primos não foi encontrada
// para todos os números entre 1 (inclusive) e o enésimo número (se a soma // de primos já não tiver sido encontrada para o enésimo número par)
for (int j=1; j<n && ehsoma==0; j++) {
int n1 = j; // candidato a primeiro número primo
ehprimo = primo(n1); // verificação de teste de primo sobre 1° candidato
if (ehprimo == 1) { // se o número candidato for primo...
// procede-se com a localização de um segundo número primo cuja soma com o // primeiro número identificado como primo dê o enésimo número da faixa
// para todos os números entre o primeiro número primo e o enésimo número for (int k=n1+1; k<n; k++) {
int n2 = k; // candidato a segundo número primo
ehprimo = primo(n2); // verificação de teste de primo sobre o candidato
if (ehprimo == 1) { // se o segundo número candidato for primo... // se a soma dos primos candidatos for equivalente ao enésimo número if (n1 + n2 == n) {
// exibição de enésimo primo e seus números primos cout << n << " - " << n1 << " + " << n2 << "\n";
ehsoma = 1; // indica-se que a soma foi encontrada
break; // encerramento de laço para procura do 2° primo }
} } } } } }
system("pause"); }
12.
A Páscoa é um evento religioso cristão cujo feriado comemorativo cai em uma data, entre 22 de março e 25 de abril, a
depender do ano. Um algoritmo consagrado para identificação do dia/mês segue-se abaixo.
A = ANO mod 19 B = ANO / 100 C = ANO mod 100 D = B / 4
E = B mod 4
F = (B + 8) mod 25 G = (B - F + 1) / 3
H = (19 × A + B - D – G + 15) mod 30
I = C / 4 K = C mod 4
L = (32 + 2 × E + 2 × I – H – K) mod 7
M = (A + 11 × H + 22 × L) / 451
DIA = ((H + L – 7 × M + 114) mod 31) + 1
Observações:
As mesmas regras de precedências entre operadores definidas para a linguagem de programação C/C++ são aqui
adotadas;
O mês, quando apurado, é um valor entre 1 e 12.
Desenvolva um procedimento que, recebendo um ano como parâmetro, identifica e exibe o dia e o mês no qual será
comemorada a Páscoa no referido ano. Para a construção do procedimento, adote o algoritmo proposto acima. Sobre o
mês, ao invés do número, certifique-se de que seja exibido seu nome (janeiro, fevereiro, março, abril, maio, junho,
julho, agosto, setembro, outubro, novembro ou dezembro).
Resp.: além do procedimento solicitado, na função principal usa-se uma estrutura de repetição para que testes
sucessivos sejam realizados com o procedimento desenvolvido, a partir da entrada de anos.
#include <iostream.h>
void pascoa(int ano) {
// vide algoritmo proposto na questão int a = ano % 19;
int b = ano / 100; int c = ano % 100; int d = b / 4; int e = b % 4;
int f = (b + 8) % 25; int g = (b - f + 1) / 3;
int h = (19 * a + b - d - g + 15) % 30; int i = c / 4;
int k = c % 4;
int l = (32 + 2 * e + 2 * i - h - k) % 7; int m = (a + 11 * h + 22 * l) / 451; int mes = (h + l - 7 * m + 114) / 31;
int dia = ((h + l - 7 * m + 114) % 31) + 1;
// exibição de dia/mes de feriado de pascoa
cout << "PASCOA " << ano << " = ";
if (dia < 10) { // se dia inferior à 10
cout << "0"; // exibição de dígito 0 (zero) }
cout << dia << "/"; // exibição de dia
if (mes == 1) { // se mês for 1 (JANEIRO) cout << "JANEIRO\n";
}
else if (mes == 2) { // se mês for 2 (FEVEREIRO) cout << "FEVEREIRO\n";
}
else if (mes == 3) { // se mês for 3 (MARCO) cout << "MARCO\n";
}
else if (mes == 4) { // se mês for 4 (ABRIL) cout << "ABRIL\n";
}
else if (mes == 5) { // se mês for 5 (MAIO) cout << "MAIO\n";
}
else if (mes == 6) { // se mês for 6 (JUNHO) cout << "JUNHO\n";
}
else if (mes == 7) { // se mês for 7 (JULHO) cout << "JULHO\n";
}
else if (mes == 8) { // se mês for 8 (AGOSTO) cout << "AGOSTO\n";
else if (mes == 9) { // se mês for 9 (SETEMBRO) cout << "SETEMBRO\n";
}
else if (mes == 10) { // se mês for 10 (OUTUBRO) cout << "OUTUBRO\n";
}
else if (mes == 11) { // se mês for 11 (NOVEMBRO) cout << "NOVEMBRO\n";
}
else if (mes == 12) { // se mês for 12 (DEZEMBRO) cout << "DEZEMBRO\n";
} }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int ano; // ano
do {
cout << "ANO: ";
cin >> ano; // entrada de ano
pascoa(ano);
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
13.
Desenvolver um programa em que é fornecido um ano, após o qual deverá ser identificado e exibido o mês/ano do
feriado da Páscoa naquele ano e nos 10 anos subsequentes. Certifique-se do uso do procedimento implementado na
questão anterior.
Resp.:
#include <iostream.h>
void pascoa(int ano) {
// vide algoritmo proposto na questão int a = ano % 19;
int b = ano / 100; int c = ano % 100; int d = b / 4; int e = b % 4;
int f = (b + 8) % 25; int g = (b - f + 1) / 3;
int h = (19 * a + b - d - g + 15) % 30; int i = c / 4;
int k = c % 4;
int l = (32 + 2 * e + 2 * i - h - k) % 7; int m = (a + 11 * h + 22 * l) / 451; int mes = (h + l - 7 * m + 114) / 31;
int dia = ((h + l - 7 * m + 114) % 31) + 1;
// exibição de dia/mes de feriado de pascoa
cout << "PASCOA " << ano << " = ";
if (dia < 10) { // se dia inferior à 10
cout << "0"; // exibição de dígito 0 (zero) }
cout << dia << "/"; // exibição de dia
}
else if (mes == 2) { // se mês for 2 (FEVEREIRO) cout << "FEVEREIRO\n";
}
else if (mes == 3) { // se mês for 3 (MARCO) cout << "MARCO\n";
}
else if (mes == 4) { // se mês for 4 (ABRIL) cout << "ABRIL\n";
}
else if (mes == 5) { // se mês for 5 (MAIO) cout << "MAIO\n";
}
else if (mes == 6) { // se mês for 6 (JUNHO) cout << "JUNHO\n";
}
else if (mes == 7) { // se mês for 7 (JULHO) cout << "JULHO\n";
}
else if (mes == 8) { // se mês for 8 (AGOSTO) cout << "AGOSTO\n";
}
else if (mes == 9) { // se mês for 9 (SETEMBRO) cout << "SETEMBRO\n";
}
else if (mes == 10) { // se mês for 10 (OUTUBRO) cout << "OUTUBRO\n";
}
else if (mes == 11) { // se mês for 11 (NOVEMBRO) cout << "NOVEMBRO\n";
}
else if (mes == 12) { // se mês for 12 (DEZEMBRO) cout << "DEZEMBRO\n";
} }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento programa int ano; // ano
int n; // enésimo ano
cout << "ANO: ";
cin >> ano; // entrada de ano
for (int i=ano; i<=ano+10; i++) { // para próximos 10 anos (além do fornecido) n = i; // enésimo ano
pascoa(n); // identificação de feriado de páscoa }