Bacharelado em Ciência e Tecnologia
BC-0505 Processamento da Informação
Lista de Exercícios EXTRA Nº 02 Algoritmos – Estruturas de Seleção
ATENÇÃO- Para cada um dos exercícios abaixo, antes de escrever o algoritmo, identifique ENTRADA, PROCESSAMENTO e SAÍDA, utilizando a seguinte técnica de interpretação de enunciado:
1. Escreva um programa que informe ao usuário se deve ou não levar uma blusa consigo. Sabe-se que a blusa é indicada se a temperatura em graus celsius estiver abaixo de 20 graus.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem indicando se o usuário deve ou não levar uma blusa consigo ENTRADA: Quais os insumos necessários para se obter a saída?
Um número real (temperatura)
PROCESSAMENTO: Como transformar os insumos na saída?
Verificar, por comparação, se a temperatura informada condiciona levar ou não a blusa PROGRAMA - PORTUGOL programa { funcao inicio() { //DECLARAÇÃO DE VARIÁVEIS real temp //ENTRADA
escreva("Digite a temperatura atual: ") leia(temp)
//PROCESSAMENTO E SAÍDA
se (temp<20){ //Verifica a temperatura e indica a mensagem ao usuário escreva("Você deve levar uma blusa consigo.\n")
}senao{
escreva("Você não precisa levar uma blusa consigo.\n") }
} }
2. Escreva um programa que solicite ao usuário um valor inteiro e exibe uma mensagem informando se o número é par ou ímpar. Exiba:
Caso verdadeiro: ―O número é par‖ Caso falso: ―O número é ímpar‖
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem dizendo se o número informado é par ou ímpar.
ENTRADA: Quais os insumos necessários para se obter a saída? Um número inteiro
PROCESSAMENTO: Como transformar os insumos na saída? Número par: x % 2 = 0 Número ímpar: x % 2 != 0 PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteirox //ENTRADA
escreva ("Favor digitar um número inteiro: ") leia (x)
//PROCESSAMENTO E SAÍDA
se (x % 2 == 0) //Verifica se o número é par ou impar.
escreva ("O número " + x + " é par.") senao
escreva ("O número " + x + " é ímpar.") }
3. Escreva um programa que solicite ao usuário uma letra e verifique se ela é uma vogal ou não exibindo uma mensagem correspondente. Exiba:
Caso verdadeiro: ―É uma vogal‖ Caso falso: ―Não é uma vogal‖
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem indicando se a letra é ou não uma vogal
ENTRADA: Quais os insumos necessários para se obter a saída? Um caractere
PROCESSAMENTO: Como transformar os insumos na saída?
Comparar o caractere informado com todas as vogais minúsculas e maiúsculas do alfabeto PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS caracterletra //ENTRADA
escreva("Digite uma letra: ") leia(letra)
//PROCESSAMENTO E SAÍDA
se(letra == 'a' ou letra == 'e' ouletra == 'i'ouletra == 'o'ouletra == 'u'ou letra == 'A'ouletra == 'E'ouletra == 'I' ouletra == 'O' ouletra == 'U'){
escreva("E uma Vogal.\n") }senao{
escreva("Nao é uma vogal.\n") }
} }
4. Escreva um programa que exiba o maior dentre dois números reais digitados pelo usuário, na forma ―numero tal‖ é maior que ―numero tal‖. Caso eles sejam iguais deve-se exibir a mensagem na forma: numero tal‖ é igual ao ―numero tal‖
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem informando qual o maior número digitado
ENTRADA: Quais os insumos necessários para se obter a saída? Dois números reais
PROCESSAMENTO: Como transformar os insumos na saída? Se x > y: x é o maior
Se x < y: y é o maior Se x == y: eles são iguais PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteirox, y //ENTRADA
escreva ("Favor digitar o primeiro número real: ") leia (x)
escreva ("Favor digitar o segundo número real: ") leia (y)
//PROCESSAMENTO E SAÍDA se (x == y)
escreva ("O número " + x + " é igual ao número " + y) senao se (x > y)
escreva ("O número " + x + " é maior do que o número " + y) senao
escreva ("O número " + y + " é maior do que o número " + x) }
5. Escreva um programa que exiba na tela o triplo de um número inteiro informado pelo usuário. Caso o número informado pelo usuário seja negativo, o mesmo deve ser transformado no seu equivalente positivo antes da exibição do seu triplo.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? O valor do triplo de um número
ENTRADA: Quais os insumos necessários para se obter a saída? Um número inteiro
PROCESSAMENTO: Como transformar os insumos na saída? Obter o módulo do número informado e multiplicá-lo por três PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteironumero, triplo
//ENTRADA
escreva("Digite um numero: ") leia(numero) //PROCESSAMENTO E SAÍDA se (numero < 0){ numero = numero * ( - 1) triplo = 3 * numero }senao{ triplo = 3 * numero }
escreva("O triplo do numero digitado é ", triplo, ".\n") }
6. Escreva um programa que calcule a idade de uma pessoa a partir do seu ano de nascimento. O programa deve mostrar na tela a idade e também as seguintes mensagens, quando for o caso:
Já pode votar (se tiver 16 anos ou mais);
Já pode solicitar a Carteira de Habilitação (se tiver 18 anos ou mais). SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Idade da pessoa Se já pode votar
Se já pode solicitar a Carteira de Habilitação
ENTRADA: Quais os insumos necessários para se obter a saída? Ano de nascimento
PROCESSAMENTO: Como transformar os insumos na saída? Idade = 2015 - anoDeNascimento
Se Idade > 16: já pode votar
Se Idade > 18: já pode solicitar Carteira de Habilitação PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteiroano, idade
//ENTRADA
escreva ("Favor digitar o seu ano de nascimento: ") leia (ano)
//PROCESSAMENTO E SAÍDA idade = 2015 - ano
escreva ("Você tem " + idade + " anos de idade.") se (idade >= 18){
escreva ("\nJá pode votar.")
escreva ("\nJá pode solicitar a Carteira de Habilitação.")} senao se (idade >= 16)
escreva ("\nJá pode votar.") }
7. Escreva um algoritmo que leia três números inteiros e imprima-os em ordem crescente. Efetue pelo menos 3 testes do seu algoritmo com entradas de dados distintas. Analise os resultados do seu algoritmo.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Impressão dos valores na ordem crescente
ENTRADA: Quais os insumos necessários para se obter a saída? Três números inteiros
PROCESSAMENTO: Como transformar os insumos na saída?
Há diversas alternativas para este processamento, um deles bem trabalhoso e não muito enxuto, porém bem direto, é associar cada ordenação possível com uma impressão e comparar com os dados de entrada, uma sugestão para melhorar essa ideia é encadear todas as opções. PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteiroa, b, c //ENTRADA
escreva("Entre com os tres inteiros a serem ordenados: ") leia(a, b, c)
//PROCESSAMENTO E SAÍDA se(a>b eb>c ea>c){
escreva(c, " < ", b, " < ", a, ".\n") }senaose(a>b eb<c ea>c){
escreva(b, " < ", c, " < ", a, ".\n") }senaose(b>a ea>c eb>c){
escreva(c, " < ", a, " < ", b, ".\n") }senao se(b>a ea<c eb>c){
escreva(a, " < ", c, " < ", b, ".\n") }senao se(c>a e a>b ec>b){
escreva(b, " < ", a, " < ", c, ".\n") }senao (c>a ea<b eb<c){
escreva(a, " < ", b, " < ", c, ".\n") }
} }
8. Escreva um algoritmo que peça como entrada os coeficientes a, b e c de uma equação de 2.o grau e forneça como saída as suas raízes. Lembre-se de prever os seguintes casos: I. a = 0 : Equação de 1.o grau, calcule a única raiz diretamente
II. Δ = 0 : Calcule a única raiz pela fórmula de Baskara
III. Δ < 0 : Calcule as 2 raízes complexas pela fórmula de Baskara IV. Δ > 0 : Calcule as 2 raízes reais pela fórmula de Baskara
A formula de Baskara =
Δ = b2 – 4ac
Exemplo: a = 1 , b = -5, c = 6 raiz1 = 2 e raiz2 = 3 ATENÇÃO:
No PORTUGOL STUDIO existe uma função para calculo de RAIZ QUADRADA: a função chama-se raiz. A instrução a seguir calcula a raiz quadrada do valor x e armazena em y. Por exemplo, se x = 5, y será 25. Exemplo: y = raiz(x,2.0)
Uma outra função útil é a que calcula POTÊNCIA: a função chama-se potencia. A instrução a seguir calcula a potência do valor x elevado a y e armazena em z. Por exemplo, se x = 3 e y = 4, z será 81. Exemplo: z = potencia(x,y)
No Portugol Studio essas funções estão dentro da Biblioteca Matemática. Assim para chama-las você deve:
a) Incluir a biblioteca, utilizando a instrução abaixo ANTES da função início( ) inclua biblioteca Matematica -->mat
obs: Usar -->mat equivale a dar um “apelido” mais curto para a biblioteca Matemática
b) As chamadas às funções devem ser feitas utilizando mat ou Matematica Exemplo: y = mat.raiz(x, 2.0)
z = mat.potencia(x,y)
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? As raízes da equação
ENTRADA: Quais os insumos necessários para se obter a saída? Os coeficientes A, B e C da equação
PROCESSAMENTO: Como transformar os insumos na saída? Fórmula de Baskara contida no enunciado
PROGRAMA - PORTUGOL programa
{
inclua biblioteca Matematica --> mat funcaoinicio()
{
//DECLARAÇÃO DE VARIÁVEIS real a, b, c, delta, raiz1, raiz2, parteReal //ENTRADA
escreva ("Favor digitar o valor do coeficiente A: ") leia (a)
escreva ("Favor digitar o valor do coeficiente B: ") leia (b)
escreva ("Favor digitar o valor do coeficiente C: ") leia (c)
//PROCESSAMENTO E SAÍDA delta = mat.potencia (b,2.0) - (4*a*c) se (a == 0){
raiz1 =-c/b
escreva ("A raíz da equação é " + raiz1)} senao se (delta == 0){
raiz1 = -b/(2*a)
escreva ("A raíz da equação é " + raiz1)} senao se (delta < 0){
parteReal = -b/(2*a)
raiz1 = (mat.raiz(-1*delta,2.0))/(2*a)
escreva ("As raízes da equação são: " + parteReal + " + " + raiz1 + "i e " + parteReal + " - " + raiz1 + "i.")}
senao{
raiz1 = (-b + mat.raiz(delta,2.0))/(2*a) raiz2 = (-b - mat.raiz(delta,2.0))/(2*a)
escreva ("As raízes da equação são : " + raiz1 + " e " + raiz2)} }
9. Escreva um algoritmo que peça como entrada o conceito final de um aluno em uma disciplina cursada na UFABC e imprima a mensagem correta, conforme tabela abaixo:
CONCEITO FINAL SITUAÇÃO A Desempenho excepcional B Bom desempenho C Desempenho adequado D Aproveitamento mínimo
F Reprovado
O Reprovado por falta I Incompleto
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem indicando a situação correspondente ao conceito final ENTRADA: Quais os insumos necessários para se obter a saída?
Um caractere maiúsculo indicando o conceito
PROCESSAMENTO: Como transformar os insumos na saída?
Basta associar cada conceito à sua respectiva impressão e comparar a entrada com cada caso deste. PROGRAMA - PORTUGOL programa { funcao inicio() { //DECLARAÇÃO DE VARIÁVEIS caracterconceito //ENTRADA
escreva("Entre com o conceito final: ") leia(conceito)
//PROCESSAMENTO E SAÍDA se(conceito == 'A'){
escreva("Desempenho excepcional.\n") }senao se(conceito == 'B'){
escreva("Bom desempenho.\n") }senao se(conceito == 'C'){
escreva("Desempenho adequado.\n") }senao se(conceito == 'D'){
escreva("Aproveitamento mínimo.\n") }senao se(conceito == 'F'){
escreva("Reprovado.\n") }senao se(conceito == 'O'){
escreva("Reprovado por falta.\n") }senao se (conceito =='I'){
escreva("Incompleto.\n") }
} }
10. Uma livraria está fazendo uma promoção para pagamento à vista em que o comprador pode escolher entre dois critérios de desconto:
Critério A: R$ 0,25 por livro + R$ 7,50 fixo Critério B: R$ 0,50 por livro + R$ 2,50 fixo
Escreva um algoritmo em que o usuário digite a quantidade de livros que deseja comprar e programa diga qual é a melhor opção de desconto.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Qual o critério de promoção mais vantajoso
ENTRADA: Quais os insumos necessários para se obter a saída? Quantidade de livros desejados
PROCESSAMENTO: Como transformar os insumos na saída? Critério A: 0.25*livros + 7.5 Critério B: 0.5*livros + 2.5 PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteiro livros reala, b //ENTRADA
escreva ("Favor digitar a quantidade de livros desejada: ") leia (livros)
//PROCESSAMENTO E SAÍDA a= 0.25*livros + 7.5
b= 0.5*livros + 2.5
escreva ("De acordo com o critério A, o cliente terá um desconto de " + a + " reais.")
escreva ("\nDe acordo com o critério B, o cliente terá um desconto de "+ b + " reais.")
se (a > b)
escreva ("\nNeste caso, é mais vantajoso comprar pelo critério A.") senao se (b > a)
escreva ("\nNeste caso, é mais vantajoso comprar pelo critério B.") senao
escreva ("\nNeste caso, ambos critérios resultam no mesmo preço.") }
11. O imposto de renda MENSAL de uma pessoa física (IR) é calculado com base na sua renda mensal. Escreva um algoritmo para calcular e imprimir o IR MENSAL e o IR ANUAL de uma pessoa considerando a seguinte tabela e supondo que sua renda mensal (salário) é a mesma durante os 12 meses.
Base de cálculo mensal em R$ Alíquota % Parcela a deduzir do imposto em R$
Até 1.499,15 - -De 1.499,16 até 2.246,75 7,5 112,43 De 2.246,76 até 2.995,70 15,0 280,94 De 2.995,71 até 3.743,19 22,5 505,62 Acima de 3.743,19 27,5 Exemplo de Cálculo:
Se uma pessoa ganha 3500,00 por mês, com base na tabela acima, deve-se aplicar a alíquota (taxa) de 22,5% de imposto de renda e deduzir o valor de 505.62.
Assim 3500 x 22.5 /100 = 785,50. Deduzindo-se os 505,62 o valor do imposto mensal será de 281.88.
Para verificar se o seu programa está correto, efetue os dois testes que seguem: TESTE 1:
Entrada: salário mensal = 3500.00
Saída Esperada: IR Mensal = 281.88 IR Anual = 3382.56 TESTE 2:
Entrada: salário mensal = 4000.00
Saída Esperada: IR Mensal = 1100.00 IR Anual = 13200.00 SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Mensagem contendo valor do imposto de renda mensal e anual ENTRADA: Quais os insumos necessários para se obter a saída?
Variável real representando o salário mensal
PROCESSAMENTO: Como transformar os insumos na saída?
PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS realsalario, imposto
//ENTRADA
escreva("Digite o valor do salario: ") leia(salario) //PROCESSAMENTO E SAÍDA se(salario<=1499.15){ imposto=0.00 }senao se(salario <= 2246.75){ imposto = (salario * 0.075 - 112.43) }senao se(salario <= 2995.70){ imposto = (salario * 0.15 - 280.94) }senao se(salario <= 3743.19){ imposto = (salario * 0.225 - 505.62) }senao{ imposto = salario * 0.275 }
escreva("O valor do imposto de renda mensal será de R$ ", imposto, ".\n") escreva("O valor do imposto de renda anual será de R$ ", 12 * imposto, ".\n") }
12. Escreva um programa que exiba uma mensagem indicando se um número inteiro informado pelo usuário é positivo, negativo ou nulo, de acordo com as seguintes condições:
Caso seja maior que zero, exibir: Número ―tal‖ é positivo‖; Caso seja menor que zero, exibir: Número ―tal‖ é negativo‖; Caso seja igual a zero, exibir: Número ―tal‖ é nulo‖.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Mensagem dizendo se o número informado é positivo, negativo ou nulo ENTRADA: Quais os insumos necessários para se obter a saída?
Um número inteiro
PROCESSAMENTO: Como transformar os insumos na saída? Número positivo: x > 0 Número negativo: x < 0 Número nulo: x = 0 PROGRAMA - PORTUGOL programa { funcaoinicio() { //DECLARAÇÃO DE VARIÁVEIS inteirox reala, b //ENTRADA
escreva ("Favor digitar um número inteiro: ") leia (x)
//PROCESSAMENTO E SAÍDA se (x > 0)
escreva ("\nO número " + x + " é positivo.") senao se (x < 0)
escreva ("\nO número " + x + " é negativo.") senao
escreva ("\nO número " + x + " é nulo.") }
13. Escreva um algoritmo que peça como entrada o peso (em kilogramas) e a altura (em metros) da pessoa e calcule e exiba o seu IMC – Índice de Massa Corpórea. Adicionalmente, o programa deve emitir as mensagens correspondentes conforme a tabela a seguir:
Cálculo IMC Situação
Abaixo de 18.5 Você está abaixo do peso ideal
Entre 18.5 e 24.9 Parabéns — você está em seu peso normal! Entre 25.0 e 29.9 Você está acima de seu peso (sobrepeso)
Entre 30.0 e 34.9 Obesidade grau I
Entre 35.0 e 39.9 Obesidade grau II
40.0 e acima Obesidade grau III
O IMC é calculado da seguinte forma: divide-se o peso (quilogramas) pela altura ao quadrado (em metros).
Exemplo1: peso = 65, altura = 1.67 IMC = 65 / (1.67 * 1.67) = 23.30 Exemplo2: peso = 85, altura = 1.60 IMC = 85 / (1.60 * 1.60) = 33.20 OBS. É OBRIGATÓRIO O USO DE SELEÇÃO ENCADEADA.
Para verificar se o seu programa está correto, efetue os dois testes que seguem: TESTE 1:
Entrada: peso=65 altura = 1.67
Saída Esperada: IMC = 23.31 - Parabéns — você está em seu peso normal! TESTE 2:
Entrada: peso=85 altura = 1.60
Saída Esperada: IMC = 33.20 - Obesidade grau I
SAÍDA: Quais os resultados que o algoritmo dever fornecer ? Um mensagem contendo o IMC e a situação correspondente ao valor ENTRADA: Quais os insumos necessários para se obter a saída?
Duas variáveis reais: peso e altura
PROCESSAMENTO: Como transformar os insumos na saída?
Basta utilizar a expressão presente nos exemplos 1 e 2 acima. Depois, é necessário comparar o valor de IMC obtido com cada caso das condições da tabela Cálculo IMC x Situação. Ao fim, é feita a impressão do IMC acompanhado à situação.
PROGRAMA - PORTUGOL programa
{
inclua biblioteca Matematica --> mat funcaoinicio()
{
//DECLARAÇÃO DE VARIÁVEIS real peso, altura, IMC
//ENTRADA
escreva("Entre com o peso em kilogramas: ") leia(peso)
escreva("Entre com a altura em metros: ") leia(altura)
//PROCESSAMENTO E SAÍDA IMC = (peso)/((altura) * (altura)) escreva(mat.arredondar(IMC, 2)) se(IMC<18.5){
escreva(" - Voce esta abaixo do peso ideal.\n") }senao se(IMC < 25.0){
escreva(" - Parabens - voce esta em seu peso normal!\n") }senao se(IMC < 30.0){
escreva(" - Voce esta acima de seu peso (sobrepeso).\n") }senao se(IMC < 35.0){
escreva(" - Obesidade grau I.\n") }senao se(IMC < 40.0){
escreva(" - Obesidade grau II.\n") }senao{
escreva(" - Obesidade grau III.\n") }
} }