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 04
–
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.
Desenvolver um programa para leitura das notas de 10 alunos, obtidas em determinada disciplina. Exige-se que essas
notas sejam armazenadas em um vetor de 10 posições. Após a conclusão da entrada de dados, deverá ser calculada a
média das notas, seguido da exibição da quantidade de alunos com nota superior à média.
Resp.:
#include <iostream.h>
int main() {
float notas[10], soma = 0, qtd = 0, media;
for (int i=0; i<10; i++) { // entrada das notas de 10 alunos cout << "Nota Aluno " << i+1 << ": ";
cin >> notas[i];
soma = soma + notas[i]; }
media = soma / 10; // cáculo da média
// identificação da quantidade de alunos com notas superior à média for (int i=0; i<10; i++) {
if (notas[i] > media) // se enésima nota for superior à média...
qtd++; // adiciona-se mais 1 (um) à quantidade de notas }
cout << "Qtd. Alunos Nota Superior Média: " << qtd << "\n";
system("pause"); }
2.
Desenvolver um programa para leitura de 10 números inteiros, a serem armazenados em um vetor de 10 posições.
Após a entrada dos dados, devem ser calculadas e exibidas as seguintes informações:
O maior elemento do vetor e a posição em que se encontra esse elemento;
O menor elemento do vetor e a posição em que se encontra esse elemento.
Resp.:
#include <iostream.h>
int main() { int numeros[10];
int maior, pmaior; // maior número e sua posição no vetor int menor, pmenor; // menor número e sua posição no vetor
for (int i=0; i<10; i++) { // entrada de 10 números cout << "Numero " << i+1 << ": ";
cin >> numeros[i]; }
// assume-se inicialmente que o maior e o menor número é o primeiro número // informado pelo usuário
maior = numeros[0]; pmaior = 0; menor = numeros[0]; pmenor = 0;
// identificação de algum número, entre os 9 (nove) últimos números // informados, que seja maior e/ou menor que o primeiro número informado for (int i=1; i<10; i++) {
maior = numeros[i]; // assume-se esse número como maior
pmaior = i; // atualização da posição do maior número }
if (numeros[i] > maior) { // se o enésimo número for identificado como menor... menor = numeros[i]; // assume-se esse número como menor
pmenor = i; // atualização da posição do menor número }
}
cout << "Maior Numero: " << maior << ", na posicao " << pmaior << "\n"; cout << "Menor Numero: " << menor << ", na posicao " << pmenor << "\n";
system("pause"); }
3.
Desenvolver um programa para entrada dos preços de custo e venda de 15 mercadorias distintas, comercializadas por
determinado estabelecimento. Exige-se que os preços informados sejam armazenados em dois vetores. Após a
conclusão da entrada dos dados mencionados, caberá ao programa identificar e exibir as seguintes informações:
Quantidade de mercadorias que proporcionam lucro inferior à 10%;
Quantidade de mercadorias que proporcionam lucro entre 10% e 20%, inclusive;
Quantidade de mercadorias que proporcionam lucro superior a 20%.
Resp.:
#include <iostream.h>
int main() {
float custo[15], venda[15]; // preços de custo e venda de 15 mercadorias int ml1 = 0; // itens com margem de lucro inferior à 10%
int ml2 = 0; // itens com margem de lucro entre 10% e 20%, inclusive int ml3 = 0; // itens com margem de lucro superior à 20%
float margem; // margem de lucro de cada item
for (int i=0; i<15; i++) { // entrada de preços de custo e venda cout << "Preco Custo Item " << i+1 << ": ";
cin >> custo[i];
cout << "Preco Venda Item " << i+1 << ": "; cin >> venda[i];
margem = venda[i] / custo[i] * 100 - 100;
// se margem de lucro for inferior à 10%.. if (margem>0 && margem<10) {
ml1++; // adiciona-se 1 (um) ao total de itens com margem inferior à 10% }
// se margem de lucro estiver entre 10% e 20%... else if (margem>=10 && margem<=20) {
ml2++; // adiciona-se 1 (um) ao total de itens com margem entre 10% e 20% }
// se margem de lucro for inferior à 10%... else if (margem>20) {
ml3++; // adiciona-se 1 (um) ao total de itens com margem inferior à 10% }
}
cout << "Qtd. Itens Lucro Inferior 10%: " << ml1 << "\n"; cout << "Qtd. Itens Lucro 10 a 20%....: " << ml2 << "\n"; cout << "Qtd. Itens Lucro Superior 20%: " << ml3 << "\n";
system("pause"); }
4.
Desenvolver um programa para entrada de dois conjuntos de números inteiros, a serem armazenados em dois vetores
de 10 e 20 posições respectivamente, após o qual deverão ser exibidos apenas aqueles números inteiros que não são
comuns aos dois conjuntos.
#include <iostream.h>
int main() {
int a[10], b[20]; // conjuntos de 10 e 20 números inteiros int i, j; // contadores
int num; // número cuja existência será verificada em outro conjunto int existe; // indicativo da existência do número em outro conjunto
cout << "CONJUNTO 1\n"; // entrada de números inteiros do primeiro conjunto for (i=0; i<10; i++) {
cout << "Numero " << i+1 << ": "; cin >> a[i];
}
cout << "\nCONUNTO 2\n"; // entrada de números inteiros do segundo conjunto for (i=0; i<20; i++) {
cout << "Numero " << i+1 << ": "; cin >> b[i];
}
cout << "\n\nNUMEROS NAO COMUNS: ";
// identificação de números do conjunto 1 que não existem no segundo conjunto for (i=0; i<10; i++) {
num = a[i]; // enésimo número a ser verificado
existe = 0; // assume-se inicialmente que esse número NÃO EXISTE for (j=0; j<20; j++) { // verificação da existência do enésimo número
if (num == b[j]) { // se for igual à algum número do segundo conjunto... existe = 1; // indica-se que esse número EXISTE
} }
// após o término da verificação, se for constatado que o enésimo número // permanece NÃO existindo, procede-se com sua exibição
if (existe == 0) { cout << num << "\t"; }
}
// identificação de números do conjunto 2 que não existem no primeiro conjunto for (i=0; i<20; i++) {
num = b[i]; // enésimo número a ser verificado
existe = 0; // assume-se inicialmente que esse número NÃO EXISTE for (j=0; j<10; j++) { // verificação da existência do enésimo número
if (num == a[j]) { // se for igual à algum número do primeiro conjunto... existe = 1; // indica-se que esse número EXISTE
} }
// após o término da verificação, se for constatado que o enésimo número // permanece NÃO existindo, procede-se com sua exibição
if (existe == 0) { cout << num << "\t"; }
}
cout << "\n";
system("pause"); }
5.
Os números de Fibonacci são os números que compõe uma sequência de números inteiros, da forma que os dois
primeiros termos da série são respectivamente 0 (zero) e 1 (um), ao passo que os demais termos são obtidos a partir da
soma dos dois termos imediatamente anteriores. Dito isto, os 10 primeiros termos da sequência são respectivamente:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34
Desenvolva um programa que exiba a sequência dos 30 primeiros números da série, em ordem inversa à ordem
natural de disposição desses termos. Certifique-se do uso da menor quantidade possível de variáveis para
armazenamento dos valores dos termos.
Resp.: aqui observa-se o uso de índices da forma
i
–
1
para acesso aos elementos do vetor especificado para
armazenamento dos números da sequência, já que os contadores usados não inicializados a partir de 1 e 30 (este
último para exibição dos números da sequência, em ordem inversa).
#include <iostream.h>
int main() {
int sequencia[30]; // primeiros 30 números da sequência Fibonnaci
for (int i=1; i<=30; i++) { // cálculo dos números da sequência if (i == 1) { // se for o primeiro termo...
sequencia[i-1] = 0; // ele o será 0 (zero) }
else if (i == 2) { // se for o segundo termo... sequencia[i-1] = 1; // ele o será 1 (um)
}
else { // caso contrário...
// o enésimo termo será obtido da soma dos dois termos anteriores sequencia[i-1] = sequencia[i-2] + sequencia[i-3];
} }
// exibição dos termos da série, em ordem inversa cout << "SEQUENCIA FIBONACCI: ";
for (int i=30; i>0; i--) {
cout << sequencia[i-1] << "\t"; }
cout << "\n";
system("pause"); }
6.
Readapte o programa da questão anterior de modo que seja ao usuário permitida a entrada da quantidade de termos da
sequência a serem exibidos.
Resp.: aqui observa-se que o vetor é declarado com tamanho variável (o tamanho é especificado em função do valor
de uma outra variável,
qtd
, valor este fornecido previamente pelo usuário), ao invés de tamanho fixo. Naturalmente,
os blocos de repetição são readaptados para repetição variável, a depender, igualmente, do valor da variável
qtd
.
#include <iostream.h>
int main() {
int qtd; // quantidade de números da sequência
// entrada da quantidade de números da sequência a serem calculados cout << "Informe a quantidade de numeros da Sequencia Fibonacci: "; cin >> qtd;
// vetor para armazenamento da quantidade especificada de números da sequência int sequencia[qtd];
for (int i=1; i<=qtd; i++) { // cálculo dos números da sequência if (i == 1) { // se for o primeiro termo...
sequencia[i-1] = 0; // ele o será 0 (zero) }
else if (i == 2) { // se for o segundo termo... sequencia[i-1] = 1; // ele o será 1 (um)
}
else { // caso contrário...
// o enésimo termo será obtido da soma dos dois termos anteriores sequencia[i-1] = sequencia[i-2] + sequencia[i-3];
} }
// exibição dos termos da série, em ordem inversa cout << "SEQUENCIA FIBONACCI: ";
for (int i=qtd; i>0; i--) {
}
cout << "\n";
system("pause"); }
7.
Desenvolver um programa para gerência de um sistema de reservas de mesas em uma casa de espetáculos. Assuma
que a casa disponha de 10 mesas de 5 lugares cada. Ao usuário será permitida a entrada do código de uma mesa (um
código entre 1 e 10) seguido da entrada da quantidade de lugares desejados; após a entrada desses dados, se for
verificado que a quantidade desejada está disponível na referida mesa, o programa deverá informar uma mensagem de
êxito referente à realização da reserva, bem como atualizar a disponibilidade de lugares após a efetivação de tal
reserva. Se não for possível, o programa deverá exibir uma mensagem adequada. Sobre o encerramento do programa,
o mesmo ocorrerá quando o usuário fornecer o código 0 (quando da solicitação do código da próxima mesa a ser
reservada) ou quando todos os lugares estiverem ocupados.
Resp.: aqui observa-se a declaração de uma variável de controle de nome
existe
para identificar a existência de lugares
disponíveis, após a realização de uma reserva. Inicialmente, em cada verificação, assume-se que não existem lugares
disponíveis, com a atribuição do valor 0 (zero) à referida variável; se, ao examinar o vetor em que estão armazenadas
as quantidades de lugares disponíveis, for encontrado alguma posição em que o valor armazenado é superior a 0
(zero), atribui-se à referida variável de controle o valor 1 (um). Após o término da verificação, é atribuído o valor 0
(zero) à variável de código de mesa se for constatado a inexistência de lugares disponíveis (ou seja, se permanecer o
valor 0 na variável
existe
) para garantir o encerramento do programa, ao invés da entrada do código da mesa da
próxima reserva. Outo fato que merece atenção é a declaração do vetor com a quantidade de lugares disponíveis em
cada mesa acompanhada da inicialização de valores do próprio vetor, já que todas as mesas possuirão, inicialmente, 5
(cinco) lugares disponíveis.
#include <iostream.h>
int main() {
// vetor para armazenamento de lugares disponíveis em cada mesa int mesas[10] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
int codigo; // codigo da mesa a ser reservada
int qtd; // quantidade de lugares a serem reservados
int existe; // indicativo da existência de lugares disponíveis ainda
cout << "Codigo Mesa (entre 1 e 10): "; // entrada de código da mesa cin >> codigo;
while (codigo != 0) { // enquanto codigo informado for diferente de zero... if (codigo<1 || codigo>10) { // se codigo informado for inválido... cout << "CODIGO DE MESA INVALIDO\n";
} else {
cout << "Qtd Lugares...: ";
cin >> qtd; // entrada de quantidade de reservas
if (qtd <= 0) { // se quantidade informada for inválida... cout << "QUANTIDADE DE LUGARES INFORMADA INVALIDA!\n";
}
else if (mesas[codigo-1] < qtd) { // se quantidade informada indisponível... cout << "QUANTIDADE DE LUGARES INFORMADA INDISPONIVEL!\n";
}
else { // caso contrário, quantidade disponível mesas[codigo-1] -= qtd; // atualização de disponibilidade
cout << "RESERVA REALIZADO COM SUCESSO\n"; }
}
existe = 0; // assume-se inicialmente que não existem mais lugares disponíveis for (int i=0; i<10; i++) { // verificação de lugares em cada mesa
if (mesas[i] > 0) { // se na enésima mesa existirem lugares... existe = 1; // indica-se que existem lugares disponíveis }
// em caso de permanência da NÃO existência de lugares disponíveis, // após verificação da mesas, força-se o encerramento do programa, // com a atribuição do valor 0 (zero) à variável código
if (existe == 0) { codigo = 0; }
else { // caso contrário...
cout << "\nCodigo Mesa (entre 1 e 10): "; cin >> codigo;
} }
system("pause"); }
8.
Readapte o programa da questão anterior de modo que, após a entrada dos dados de cada reserva (código de mesa e
quantidade desejada), seguida da
tentativa
de efetivação da mesma, seja exibido um menu com as seguintes opções de
operações (ao invés da entrada dos dados da próxima reserva):
1.
Realizar reserva;
2.
Consultar disponibilidade;
3.
Encerrar.
Após a exibição do menu, caberá ao usuário informar o código da operação desejada. Se o código fornecido for 1
(um), prossegue-se com a entrada dos dados da próxima reserva e a
tentativa
de efetivação da mesma, da forma como
proposto na questão anterior; se o código fornecido for 2 (dois), deverá ser exibida a quantidade de lugares
disponíveis (ainda não reservados) em cada mesa (lembre-se de que a casa de espetáculos dispõe de 10 mesas); por
fim, se o código fornecido for 3 (três), o programa deverá ser encerrado (o encerramento não ocorrerá mais quando
for informado o código 0 ou todos os lugares estiverem ocupados.
Resp.: aqui observa-se o uso de uma variável para armazenamento da opção de operação desejada, de nome
opção
.
Procede-se com a execução da rotina de reserva apenas quando da opção 1 (um). Note também que dispensa-se aqui a
execução de uma rotina para verificar a existência de lugares disponíveis após uma reserva, já que o programa dispõe,
em seu menu de opções, de uma opção para encerramento do programa.
#include <iostream.h>
int main() {
// vetor para armazenamento de lugares disponíveis em cada mesa int mesas[10] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
int codigo; // codigo da mesa a ser reservada
int qtd; // quantidade de lugares a serem reservados
int existe; // indicativo da existência de lugares disponíveis ainda int opcao; // opção de menu selecionada
do {
// exibição de menu
cout << "************* MENU **************\n"; cout << "* 1 - REALIZAR RESERVA *\n"; cout << "* 2 - CONSULTAR DISPONIBILIDADE *\n"; cout << "* 3 - ENCERRAR *\n"; cout << "*********************************\n";
cout << "\n\nInforme a opcao desejada: ";
cin >> opcao; // entrada de opção desejada
if (opcao == 1) { // se opção for 1 (reserva de mesa)... cout << "\nCodigo Mesa (entre 1 e 10): ";
cin >> codigo; // procede-se com a entrada do codigo da mesa
if (codigo<1 || codigo>10) { // se codigo informado for inválido... cout << "CODIGO DE MESA INVALIDO\n";
} else {
cout << "Qtd Lugares...: ";
if (qtd <= 0) { // se quantidade informada for inválida... cout << "QUANTIDADE DE LUGARES INFORMADA INVALIDA!\n";
}
// se quantidade informada indisponível... else if (mesas[codigo-1] < qtd) {
cout << "QUANTIDADE DE LUGARES INFORMADA INDISPONIVEL!\n"; }
else { // caso contrário, quantidade disponível mesas[codigo-1] -= qtd; // atualização de disponibilidade cout << "RESERVA REALIZADO COM SUCESSO\n";
} } }
else if (opcao == 2) { // se opção for 2 (consultar disponibilidade)... cout << "\n\nDISPONIBILIDADE DE LUGARES\n";
for (int i=0; i<10; i++) { // para cada mesa...
cout << "MESA " << i+1 << ": " << mesas[i] << " lugar(es)\n"; }
}
else if (opcao != 3) { // se opção for diferente de 3 (encerrar)... cout << "\n\nOPCAO INVALIDA!\n";
}
cout << "\n\n";