Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista 5 - gabarito 1 Autora: ANITA LOPES Lista 5 - imprima, atribuição,\leia, se ... então .. senão se, escolha, para, enquanto e faca...enquanto . Orientações: 1- Todas as soluções em fluxograma e na linguagem UAL. 2- O comanda de entrada está presente em todos os exercícios. 3- Quando existir algum cálculo declare a variável e armazene o resultado da operação. 4- A estrutura do enquanto, ou do faca...eqnuanto, está presente em todos os exercícios. 5 - Todos os exercícios terão comando de saída. 6- Codificar em C++ todas as soluções já testadas no ambiente UAL. Solução do exercício 7 Fluxograma Linguagem UAL Linguagem C++ 1) Construa um algoritmo que possa entrar com vários números positivos e para cada número imprimir a raiz quadrada. prog Lista5Ex1 real num; imprima "\nDigite numero positivo. Para sair, digite 0 ou negativo: "; leia num; enquanto( num > 0.0 ) { imprima "\nRaiz quadrada: ", raiz(num); imprima "\n Digite numero positivo. Para sair, digite 0 ou negativo: "; leia num; } fimprog Lista 5 - gabarito 2 Autora: ANITA LOPES 2) Construa um algoritmo que possa entrar com várias idades e imprima quantas pessoas são eleitoras obrigatórias. prog Lista5Ex2 int idade, conta; imprima "\nDigite idade. Para sair, digite 0 ou negativo: "; leia idade; conta<-0; enquanto( idade > 0 ) { se(idade >=18 && idade <=70 ) { conta++; } imprima "\nDigite idade. Para sair, digite 0 ou negativo: "; leia idade; } imprima "\nTotal de eleitores obrigatorio(s): ", conta, "\n"; fimprog 3) Construa um algoritmo que possa entrar com números positivos e para cada número imprimir seus divisores. prog Lista5Ex3 int num, x; imprima "\nDigite numero positivo inteiro. Para sair, digite 0 ou negativo: "; leia num; enquanto( num > 0 ) { para(x<-1; x<= num div 2; x++) { se(num % x == 0 ) { imprima x, "\t"; } } imprima num, "\n"; imprima "\nDigite numero positivo inteiro. Para sair, digite 0 ou negativo: "; leia num; } fimprog 4) Construa um algoritmo que possa entrar com vários números positivos e imprima quantos números são perfeitos (Um número é perfeito se a soma de seus divisores exceto ele é igual a ele). prog Lista5Ex4 int num, x, conta, soma; imprima "\nDigite numero positivo inteiro. Para sair, digite 0 ou negativo: "; leia num; conta<-0; enquanto( num > 0 ) { soma<-0; para(x<-1; x<= num div 2; x++) { se(num % x == 0 ) Lista 5 - gabarito 3 Autora: ANITA LOPES { soma <- soma + x; } } se( soma == num ) { conta++; } imprima num, "\n"; imprima "\nDigite numero positivo inteiro. Para sair, digite 0 ou negativo: "; leia num; } imprima "\nTotal de Numeros Perfeitos: ", conta, "\n"; fimprog 5) Construa um algoritmo que possa entrar com o sexo de várias pessoas(M ou F ou m ou f) e imprima qual o sexo tem maior número de pessoas. prog Lista5Ex5 int num, contaM, contaF; string sexo; imprima "\nDigite sexo(M ou F). Para sair, @: "; leia sexo; contaM<-0; contaF<-0; enquanto( sexo <> "@" ) { se(sexo == "m" || sexo == "M" ) { contaM++; } senao { se(sexo == "f" || sexo == "F" ) { contaF++; } } imprima "\nDigite sexo(M ou F). Para sair, @: "; leia sexo; } se( contaM > contaF) { imprima "\nTem mais pessoas do sexo masculino\n"; } senao { se( contaF > contaM ) { imprima "\nTem mais pessoas do sexo feminino\n"; } senao { imprima "\nNumero de pessoas do sexo masculino é igual ao numero de pessoas do sexo feminino\n"; } Lista 5 - gabarito 4 Autora: ANITA LOPES } fimprog 6) Construa um algoritmo que possa entrar com várias notas e imprima a média das notas digitadas. prog Lista5Ex6 real nota, soma, media; int conta; conta<-0; soma<- 0.0; imprima "\nDigite nota 0 - 10. Para sair, digite -1.0: "; leia nota; enquanto( nota <> -1.0 ) { se( nota >=0.0 && nota <=10.0 ) { soma<- soma + nota; conta++; } senao { imprima "\nNota invailda\n"; } imprima "\nDigite nota 0 - 10. Para sair, digite -1: "; leia nota; } media<- soma/conta; imprima "\nMedia dos numeros digitaods: ", media, "\n"; fimprog 7) Construa um algoritmo que entre com um número e exiba a quantidade de algarismos do número. prog Lista5Ex7 int num, tamanho; tamanho<-0; imprima "\nDigite numero positivo: "; leia num; enquanto( num >0 ) { tamanho++; num <- num div 10; } imprima "\nTotal de algarismos: ", tamanho, "\n"; fimprog 8) Construa um algoritmo que entre com vários números positivos e imprima quantos são pares. prog Lista5Ex8 int num, conta; conta<-0; imprima "\nDigite numero positivo. Para sair, 0 ou negativo: "; leia num; enquanto( num > 0 ) { Lista 5 - gabarito 5 Autora: ANITA LOPES se( num % 2 == 0) { conta++; } imprima "\nDigite numero positivo. Para sair, 0 ou negativo: "; leia num; } imprima "\nTotal de numeros pares: ", conta, "\n"; fimprog 9) Construa um algoritmo que entre com vários números e imprima quantos são pares e a soma dos ímpares. prog Lista5Ex9 int num, contaPar, somaImpar; contaPar<-0; somaImpar<-0; imprima "\nDigite numero positivo. Para sair, 0 ou negativo: "; leia num; enquanto( num > 0 ) { se( num % 2 == 0) { contaPar++; } senao { somaImpar<-somaImpar + num; } imprima "\nDigite numero positivo. Para sair, 0 ou negativo: "; leia num; } imprima "\nTotal de numeros pares: ", contaPar, "\n"; imprima "\nSoma dos numeros pares: ", somaImpar, "\n"; fimprog 10) Construa um algoritmo que permita a entrada do número da conta e o saldo de vários clientes. A cada entrada, deverão ser impressos o número da conta, o saldo e uma das mensagens: positivo ou negativo. Ao final, deverá ser impresso o percentual de contas com saldo negativo. prog Lista5Ex10 int numConta, contaNegativo, contaTotal; real saldo; contaNegativo <- 0; contaTotal <- 0; imprima "\nDigite numero da conta. Para sair, 0 ou negativo: "; leia numConta; enquanto( numConta > 0 ) { imprima "\nDigite saldo: "; leia saldo; contaTotal++; se( saldo >= 0.0 ) { imprima "\n-------------------------------\n"; Lista 5 - gabarito 6 Autora: ANITA LOPES imprima "\n Conta numero: ",numConta, "\n Saldo R$ ", saldo, "0\n Situacao: Positivo ou zerado"; imprima "\n--------------------------------\n"; } senao { contaNegativo++; imprima "\n-------------------------------\n"; imprima "\n Conta numero: ",numConta, "\n Saldo R$ ", saldo, "0\n Situacao: Negativo"; imprima "\n--------------------------------\n"; } imprima "\nDigite numero da conta. Para sair, 0 ou negativo: "; leia numConta; } imprima "\nPercentualde contas negativas: ", contaNegativo*100.0/contaTotal, "\n"; fimprog 11) Uma empresa classifica seus funcionários de acordo com um índice de produtividade: (1) Excelente, (2) Bom e (3) Regular. Cada nível acrescenta um abono ao salário base do funcionário de acordo com a seguinte tabela: Excelente 40 % do salário base Bom 20 % do salário base Regular 5 % do salário base Construa um algoritmo que permita a entrada da matrícula, do salário base e a classificação de vários funcionários. Para cada funcionário deverão ser impressos a matrícula e seu novo salário. O programa deverá calcular a produtividade. A entrada de dados termina quando se digita uma matricula não positiva. #include <iostream> using namespace std; int main() { int matricula, classificacao; float salario, novoSalario, abono; cout<<"\nDigite matricula do funcionario. Digite 0 ou numero negativo para sair: "; cin>> matricula; while( matricula > 0) { cout<<"\nSalario: "; cin>>salario; cout<<"\nDigite (1) Excelente, (2) Bom e (3) Regular: "; cin>>classificacao; switch(classificacao) { case 1: abono= salario*0.4; novoSalario= salario + abono; // poderia ter sido somente a linha // novoSalario= salario *1.4; break; Lista 5 - gabarito 7 Autora: ANITA LOPES case 2: abono= salario*0.2; novoSalario= salario + abono; // poderia ter sido somente a linha // novoSalario= salario *1.2; break; case 3: abono= salario*0.05; novoSalario= salario + abono; // poderia ter sido somente a // linha: novoSalario= salario *1.05; break; default: abono=0; novoSalario= salario + abono; // poderia ter sido somente a // linha: novoSalario= salario; cout<<"\nClassificacao invalida. Salario Inalterado"; } cout<<"\n\nMatricula: "<<matricula<<"\tSalario novo R$ "<<novoSalario; cout<<"\nDigite matricula do funcionario. Digite 0 ou numero negativo para sair: "; cin>> matricula; } cout<<"\n\n"; //Coloco essa linha para afastar a mensagem do system("pause"); do texto system("pause"); } 12) Entrar com a idade de várias pessoas e imprimir: - total de pessoas com menos de 21 anos - total de pessoas com mais de 50 anos. #include <iostream> using namespace std; int main() { int idade, conta21=0, conta50=0; cout<<"\nDigite idade. Para sair, 0 ou numero negativo: "; cin>>idade; while(idade > 0 ) { if( idade < 21 ) conta21++; // nao coloquei entre chaves porque so tem um comando else if(idade > 50 ) conta50++; // nao coloquei entre chaves porque so tem um comando cout<<"\nDigite idade. Para sair, 0 ou numero negativo: "; cin>>idade; } cout<<"\n\n\nTotal de pessoas com menos de 21 anos: "<<conta21; Lista 5 - gabarito 8 Autora: ANITA LOPES cout<<"\n\n\nTotal de pessoas com mais de 50 anos: "<<conta50; cout<<"\n\n"; system("pause"); } 13) Construa um algoritmo que possa entrar com vários números inteiros positivos até entrar -1. Imprimir todos os números e, ao final, total de números múltiplos de 8 digitados e a média de todos os números lidos. #include <iostream> using namespace std; int main() { int num, conta=0, soma=0, mult8=0; cout<<"\nNumero positivo. Para sair digite -1: "; cin>>num; while(num > 0)//qualquer numero menor ou igual a zero sai { cout<<"\n\n-- Numero digitado: "<<num<<" --\n"; conta++; soma+=num; // poderia ser: soma = soma + num; if(num % 8 == 0) mult8++; cout<<"\nNumero positivo. Para sair digite -1: "; cin>>num; } cout<<"\nTotal de multiplos de 8: "<<mult8; cout<<"\nMedia inteira: "<<soma/conta; cout<<"\nMedia real: "<<(float)soma/conta; cout<<"\n\n"; system("pause"); } 14) Construa um algoritmo que receba a idade, a altura e o peso de várias pessoas. Calcule e imprima: * a quantidade de pessoas com idade superior a 50 anos; * a média das alturas das pessoas com idade entre 10 e 20 anos; * a porcentagem de pessoas com peso inferior a 40 quilos entre todas as pessoas analisadas. #include <iostream> using namespace std; int main() { int idade, conta10_20=0, conta50=0, contaTotal=0, conta40=0; float peso, altura, somaAlturas10_20=0; cout<<"\nDigite idade. Para sair, 0 ou numero negativo: "; cin>>idade; while(idade > 0) Lista 5 - gabarito 9 Autora: ANITA LOPES { cout<<"\nDigite altura: "; cin>>altura; cout<<"\nDigite peso: "; cin>>peso; contaTotal++; if(peso <40) conta40++; if(idade > 50 ) conta50++; else if(idade>10 && idade < 20)//Entre significa que os extremos estao fora { conta10_20++; somaAlturas10_20 += altura; } cout<<"\nDigite idade. Para sair, 0 ou numero negativo: "; cin>>idade; } cout<<"\nQuantidade de pessoas com idade superior a 50 anos: "<<conta50; if(conta10_20 > 0 ) cout<<"\nMedia das alturas das pessoas com idade entre 10 e 20 anos: "<<somaAlturas10_20/conta10_20; else cout<<"\nNinguem na faix entre 10 - 20 anos. Media nao calculada."; cout<<"\nPorcentagem de pessoas com peso inferior a 40 quilos: "<<conta40*100.0/contaTotal<<"%"; cout<<"\n\n"; system("pause"); } 15) Sabendo-se que uma empresa que patrocina uma equipe de vôlei paga aos seus jogadores, além do salário, um valor adicional ao salário mensal fruto do esforço de cada um. Essa produtividade é paga de acordo com a tabela a seguir: classe nível Valor adicional Lista 5 - gabarito 10 Autora: ANITA LOPES 1 excelente +100% 2 bom +80% 3 médio +50% 4 regular +30% 5 precisa treinar mais +10% 6 limite +5% 7 tsktsk nada Construa um algoritmo que entre com o salário e o código da classe de todos os jogadores, calcule e exiba o seu salário final e o nome da sua classe (nível). O programa acaba quando se digita um número fora do intervalo da faixa de 1-7. #include <iostream> using namespace std; int main() { int codigoClasse; float salario, novoSalario; cout<<"\nDigite codigo da classe(1 a 7) e para sair, qualquer outro numero: "; cin>> codigoClasse; while( codigoClasse >=1 && codigoClasse<=7) { cout<<"\nSalario: "; cin>>salario; switch(codigoClasse) { case 1: novoSalario= salario * 2; cout<<"\n\nClase: excelente\tSalario novo R$ "<<novoSalario<<"\n"; break; case 2: novoSalario= salario * 1.8; cout<<"\n\nClase: bom\tSalario novo R$ "<<novoSalario<<"\n"; break; case 3: novoSalario= salario * 1.5; cout<<"\n\nClase: medio\tSalario novo R$ "<<novoSalario<<"\n";break; case 4:novoSalario= salario * 1.3; cout<<"\n\nClase: regular\tSalario novo R$ "<<novoSalario<<"\n"; break; case 5:novoSalario= salario *1.1; cout<<"\n\nClase: precisa treinar mais\tSalario novo R$ "<<novoSalario<<"\n"; break; case 6:novoSalario= salario *1.05; Lista 5 - gabarito 11 Autora: ANITA LOPES cout<<"\n\nClase: limite\tSalario novo R$ "<<novoSalario<<"\n"; break; case 7: novoSalario= salario ; cout<<"\n\nClase: tsktsk\tSalario novo R$ "<<novoSalario<<"\n"; //Como nao existe outra possibilidade, não precisa de deafult } cout<<"\nDigite codigo da classe(1 a 7) e para sair, qualquer outro numero: "; cin>> codigoClasse; } cout<<"\n\n"; //Coloco essa linha para afastar a mensagem do system("pause"); do texto system("pause"); } 16) Construa algoritmos que funcionem segundo menus abaixo. MENU 1: OPÇÕES 1 Exibe a hipotenusa 2 Exibe a média ponderada 3 Exibe o menor entre 3 números 4 Termina o programa OPCAO: Considerações: 1 - Ao se escolher a opção 1, deverá ser pedido os valores dos catetos e exibida a hipotenusa. 2 - Ao se escolher a opção 2, deverá ser pedido 4 notas e exibida a média ponderada. Para calcular a média ponderada, use os seguintes pesos para as notas: 2, 3, 2 e 3 respectivamente. 3 - Ao se escolher a opção 3, deverá ser pedido 3 números e exibido o menor. #include <iostream> #include <cmath> using namespace std; int main() { int opcao; float cateto1, cateto2, hipotenusa, nota1, nota2, nota3, nota4, mediaPonderada, num1, num2, num3; do { system("cls"); cout<<"\nMENU 1\n"; cout<<"\n1 Exibe a hipotenusa"; Lista 5 - gabarito 12 Autora: ANITA LOPES cout<<"\n2 Exibe a media ponderada"; cout<<"\n3 Exibe o menor entre 3 numeros"; cout<<"\n4 Termina o programa"; cout<<"\nOPCAO:"; cin>>opcao; system("cls"); // para limpar a tela antes de entrar em um dos casos switch(opcao) { case 1: cout<<"\nDigite o valor do 1o cateto: "; cin>> cateto1; cout<<"\nDigite o valor do 2o cateto: "; cin>> cateto2; if( cateto1> 0 && cateto2 > 0) { hipotenusa= sqrt(pow(cateto1,2) + pow(cateto2,2)); cout<<"\nA hipotenusa eh: "<<hipotenusa; } else cout<<"\nNao tem como calcular a hipotenusa\n"; break; case 2: cout<<"\nDigite a 1a nota: "; cin>> nota1; cout<<"\nDigite a 2a nota: "; cin>> nota2; cout<<"\nDigite a 3a nota: "; cin>> nota3; cout<<"\nDigite a 4a nota: "; cin>> nota4; mediaPonderada=(nota1*2 + nota2*3 + nota3*2 + nota4*3)/10; /*Esse eh um comentario de varias linhas por que 10? Porque 2+3+2+3 eh igual a 10 Lista 5 - gabarito 13 Autora: ANITA LOPES poderia tambem fazer (nora1+nota3)*2 + (not2+nota4)*3 ganha o que com isso: Menos duas operacoes */ cout<<"\nMedia ponderada: "<<mediaPonderada; break; case 3: cout<<"\nDigite o 1o numero: "; cin>> num1; cout<<"\nDigite o 2o numero: "; cin>> num2; cout<<"\nDigite o 3o numero: "; cin>> num3; if(num1 < num2 && num1<num3) cout<<"\nMenor: "<<num1; else if(num2 < num3) cout<<"\nMenor: "<<num2; else cout<<"\nMenor: "<<num3; break; case 4: cout<<"\nGabarito- Qualquer erro fale comigo: anita@anitalopes.com"; break; default: cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); }while(opcao != 4); } MENU 2: MENU 1 –Entra com três números e exibe-os em ordem decrescente Lista 5 - gabarito 14 Autora: ANITA LOPES 2 – Entra com um número e informa se ele é, ou não, capicua 3 - Calcula e imprime a raiz à quarta de um número 4 – Finaliza OPCAO: Observação: Um número é capicua se lido da esquerda para direita for igual se lido da direita para esquerda. Exemplo: 3443 #include <iostream> #include <cmath> using namespace std; int main() { int opcao, num, numInvertido, copiaNum; float num1, num2, num3; do { system("cls"); cout<<"\nMENU 2\n"; cout<<"\n1 - Entra com tres numeros e exibe-os em ordem decrescente"; cout<<"\n2 - Entra com um numero e informa se ele eh, ou nao, capicua"; cout<<"\n3 - Calcula e imprime a raiz a quarta de um numero"; cout<<"\n4 - Finaliza"; cout<<"\nOPCAO: "; cin>>opcao; system("cls"); // para limpar a tela antes de entrar em um dos casos switch(opcao) { case 1: //Fiz uma solucao diferente da ordenacao por combinacao. // Acho essa maior. Voce decide cout<<"\nDigite 1o numero: "; cin>>num1; cout<<"\nDigite 2o numero: "; cin>>num2; cout<<"\nDigite 3o numero: "; cin>>num3; Lista 5 - gabarito 15 Autora: ANITA LOPES if( num1 > num2 ) { if(num3 > num1 ) cout<<"\n"<<num3<<"\t"<<num1<<"\t"<<num2; else if(num3 > num2 ) cout<<"\n"<<num1<<"\t"<<num3<<"\t"<<num2; else cout<<"\n"<<num1<<"\t"<<num2<<"\t"<<num3; } else { if(num3 > num2 ) cout<<"\n"<<num3<<"\t"<<num2<<"\t"<<num1; else if(num3 > num1 ) cout<<"\n"<<num2<<"\t"<<num3<<"\t"<<num1; else cout<<"\n"<<num2<<"\t"<<num1<<"\t"<<num3; } break; case 2:cout<<"\nNumero: "; cin>>num; copiaNum = num; // para nao "perder" o valor de num numInvertido=0; while(copiaNum > 0 ) { numInvertido= numInvertido*10 + copiaNum %10; copiaNum = copiaNum / 10 ; //poderia ser copiaNum/=10; } if(num == numInvertido) cout<<"\nEh capicua"; else cout<<"\nNao eh capicua"; break; case 3: Lista 5 - gabarito 16 Autora: ANITA LOPES cout<<"\nDigite numero: "; cin>> num1; if(num1 >= 0) cout<<"\nRaiz a quarta: "<<pow( num1, (float)1 / 4); /* pow é uma função que exige, com muito rigor, os tipos dos argumentos. Para extrair raiz, pela matemática, elevamos o radicando a uma fração cujo denominador é o índice do radical e como ambos são inteiros, TEMOS QUE FORÇAR para QUE A OPERACAO SEJA FEITA COMO REAL Por essa razão, usamos um cast - tipo que desejamos entre parênteses */ else cout<<"\nNao posso fazer raiz de numero negativo"; break; case 4: cout<<"\nGabarito - Qualquer erro fale comigo: anita@anitalopes.com"; break; default: cout<<"\nOpcao Invalida\n"; } cout<<"\n\n"; system("pause"); }while(opcao != 4); } MENU 3: MENU A – Entra com 3 matriculas e respectivos CRs. Exibe a matrícula do maior CR B – Exibe a quantidade de algarismos de um número C – Exibe a tangente de um ângulo em graus D - Termina OPCAO: #include <iostream> #include <cmath> Lista 5 - gabarito 17 Autora: ANITA LOPES using namespace std; int main() { char opcao; int mat1, mat2, mat3, num, copiaNum, tamanho; float cr1, cr2, cr3, angulo, radAngulo; do { system("cls"); cout<<"\nMENU 3\n"; cout<<"\nA - Entra com 3 matriculas e respectivos CRs. Exibe a matrícula do maior CR."; cout<<"\nB - Exibe a quantidade de algarismos de um numero"; cout<<"\nC - Exibe a tangente de um ângulo em graus"; cout<<"\nD - Termina"; cout<<"\nOPCAO: "; cin>>opcao; system("cls"); // para limpar a tela antes de entrar em um dos casos switch(opcao) { case 'A': //ainda não aprendi a funcao toupper() que converte para maiusucula case 'a': cout<<"\nDigite mtricula e CR 1o aluno: "; cin>> mat1>>cr1; cout<<"\nDigite mtricula e CR 2o aluno: "; cin>> mat2>>cr2; cout<<"\nDigite mtricula e CR 3o aluno: "; cin>> mat3>>cr3; if( cr1> cr2 && cr1 > cr3) cout<<"\nA matricula do aluno com maior CR: "<<mat1; else if( cr2 > cr3 ) cout<<"\nA matricula do aluno com maior CR: "<<mat2; else cout<<"\nA matricula do aluno com maior CR: "<<mat3; Lista 5 - gabarito 18 Autora: ANITA LOPES break; case 'B': case 'b': cout<<"\nDigite numero: "; cin>> num; copiaNum=num; tamanho=0; // nao pode declarar e inicializar porque esse item pode ser escolhido varias vezes while(copiaNum > 0 ) { tamanho++; copiaNum/=10; } cout<<"\nO numero "<<num<<" tem "<< tamanho<<" algarismos"; break; case 'C': case 'c': cout<<"\nDigite angulo em graus: "; cin>> angulo; radAngulo= angulo *3.14159265/180; if(angulo != 90 && angulo != 270) cout<<"\nTangente : "<<tan(radAngulo); else cout<<"\nNao posso calcular a tangente desse angulo"; break; case 'D': case 'd': cout<<"\nGabarito- Qualquer erro fale comigo: anita@anitalopes.com"; break; default: cout<<"\nOpcao Invalida\n"; } Lista 5 - gabarito 19 Autora: ANITA LOPES cout<<"\n\n"; system("pause"); }while(opcao != 'd' && opcao != 'D'); }
Compartilhar