Testes Lógicos (If, Else, Elseif e Switch Case)
Teoria
Uma introdução básica...
Opa, iae está tudo bem?
Hoje vamos bater um papo sobre os testes lógicos, mas o que são os testes lógicos né?
Bem, vamos imaginar que você precisa ir ao mercado comprar algumas frutas e pra isso, sem perceber, você sempre irá aproximadamente executar um conjunto de atividades até completar a tarefa que é comprar as frutas.
Essas tarefas estão representadas nesse algoritmo abaixo:
Se analisar o algoritmo bem, você percebe que existem dois blocos cujas respostas são sim ou não.
O processamento desses blocos são perguntas, eles recebem uma informação vinda de um bloco anterior, e com essa informação realizam uma pergunta em relação à informação e tomam uma decisão direcionando a informação para o bloco seguinte.
Essa pergunta recebe o nome de teste lógico, nesse exemplo, se a fruta tiver um cheiro ruim seu cérebro processa a informação de pegar outra fruta, mas se a fruta tiver um cheiro agradável, o seu cérebro diz que ela está boa e coloca a fruta no carrinho.
Em síntese, um teste lógico redireciona o fluxo de informação do código para um determinado lugar a depender se sua resposta for SIM ou NÃO.
Mas... como coloco isso no Matlab né?
Calma, calma que iremos ver isso tudinho aqui nos mínimos detalhes!
Funções If e Else
Então basicamente temos três grandes funções que faz esse trabalho de perguntar algo, duas delas estão conjugadas que são as funções if e else outra bastante comum é a switch case.
Vamos primeiramente conversar sobre a if e else, traduzindo para o português a função if é o mesmo que se e a função else é o equivalente ao advérbio mas.
Então sempre que você for fazer um teste lógico deve pensar assim:
Se “a pergunta for sim”
Faça alguma ação
Mas “se a pergunta for Não”
Faça alguma ação
Fim
Logo levando para o algoritmo de comprar uma fruta no supermercado nós executamos o seguinte teste lógico:
Teste lógico: A fruta tem um cheiro ruim?
Se a resposta for “sim”
Coloque a fruta no lugar e selecione outra.
Mas se a resposta for “não”
Coloque a fruta no carrinho.
Fim
Levando para linguagem de programação a sintaxe ficaria:
If “SIM”
Selecionar outra fruta
Else
Colocar no Carrinho
end
Vamos realizar um exemplo no Matlab:
Vamos escrever um código que dá um número e informa se ele é par ou ímpar.
Para isso, vamos utilizar a função mod do Matlab, pois ela calcula o resto da divisão entre dois números, então para ser par a divisão por 2 precisa resultar um 0, então a função do teste lógico fica:
Então montando o algoritmo do problema se torna:
Então escrevendo na aba new script o seu código deve ficar algo mais ou menos assim:
E ao executar o código, inserindo o valor 10 para a variável A temos:
Aqui nós tivemos duas condições: ele é par ou ímpar, mas e se nós tivéssemos mais de duas condições?
Por exemplo, numa solução de equação de segundo grau que podemos ter até três tipos de solução, como revelado no algoritmo abaixo:
Para isso, podemos usar duas funções: o elseif ou a switch case, então vamos lá.
Função Elseif
A função elseif se traduz do inglês como “mas se”, aplicando para o exemplo da equação de segundo grau e utilizando a seguinte expressão para o , podemos escrever um código no Matlab que mostra o tipo de resultado que a equação do grau possui:
Quando comparamos com o exemplo anterior vimos que entrou um termo a mais que é o . Então se eu tenho vinte testes lógicos eu começo com o e após isso faço dezoito casos de e finalizo com o , pra que somando tudo totalize os 20 testes, belezinha?
Logo, executando o código anterior, temos:
Função Switch Case
A função é utilizada para testes lógicos que possuem mais de uma condição, ou seja, utilizamos ela no mesmo caso que o .
Porém ela é pouco utilizada quando comparada com sua irmã, pois o teste lógico precisa trazer um valor ou um conjunto de valores bem definidos.
Para entender melhor vamos ao exemplo abaixo:
O é onde fica armazenada a variável onde associamos cada valor que leva a uma solução diferente, que chamamos de .
Nesse exemplo o operador vai escrever um número qualquer, o switch vai analisar qual é o valor, ver em qual caso ele se encaixa e após isso realizar alguma tarefa que está dentro desse caso.
Portanto, se eu digito o switch associa o para o case onde imprime o mês de janeiro e se caso digitar , ou ele vai associar isso ao case , ou que imprime o mês de abril a junho, sacas?
Devido a essa rigidez comumente se utiliza a estrutura por ser mais prática.
Bem pessoal, ficaremos por aqui, mas não esquece de ir olhar os exercícios. Selecionamos alguns beeem legais em relação a esse conteúdo.
Então até maisssss.
Funções If e Else
Função Elseif
Função Switch Case
Exercícios Resolvidos
Exercício Resolvido #1
“Elaboração Própria”
- Escreva um programa Matlab capaz de:
- Ler um raio R de um círculo centrado na origem;
- Ler um par de coordenadas (X, Y) de um determinado ponto;
- Verificar se o ponto está dentro do círculo.
- Imprimir uma mensagem se o ponto se posicionar dentro do círculo. Caso contrário, imprima, também, uma mensagem.
Passo 1
Fala galerinha!
Essa questão já dá pra gente o algoritmo pronto, com passos bem definidos. Nós precisamos receber dados do usuário e então dizer se um ponto de coordenadas está dentro de um círculo de raio R centrado na origem. Por fim, precisamos imprimir uma mensagem informando a resposta ao usuário.
Em diagrama de blocos, esse algoritmo fica assim:
Nessa questão, nossas possíveis respostas são duas: o ponto está dentro do círculo ou não está, ou seja, verdadeiro ou falso. Então, como temos apenas duas condições, iremos utilizar a função if, else.
A função if é uma condição. Se temos uma condição como “se Z
E o else são os casos restantes. Então tudo que não entrar no if, entra no else.
Passo 2
Agora vamos programar!
O primeiro passo é a entrada de dados. Vamos usar a função input para pedir ao usuário os valores das variáveis. Dentro do parênteses à direita do input, escrevemos uma mensagem que o usuário vai receber. O que for digitado pelo usuário, a cada linha, é o valor que será atribuído à variável.
Agora vamos calcular uma variável que corresponde à distância do ponto à origem.
E então vamos comparar o valor de Z com o raio R e usar o if/else para imprimir a mensagem correta para o usuário. Se , então o ponto está dentro do círculo.
Caso contrário, o ponto não está dentro do círculo:
Passo 3
Uma vez inserido o programa no Matlab seu programa deve ficar algo mais ou menos assim:
Executando o programa para testar, deveremos ter algo do tipo:
Resposta
Uma vez inserido o programa no Matlab seu programa deve ficar algo mais ou menos assim:
Exercício Resolvido #2
“Elaboração Própria”
Escreva codificações Matlab para determinar se uma pessoa é maior ou menor de idade, o programa deve informar se a pessoa é menor de idade ou maior a partir de um número fornecido do teclado, e além disso informar se a idade é válida ou não.
Passo 1
Basicamente a questão pede para criar um programa que a partir de uma entrada de dados de idade gerencie se o cidadão é maior ou menor de idade.
E se caso a idade for inválida no caso de um número negativo, ela informa que a idade não é válida.
Aqui é uma questão básica do processamento de fluxo de sinais com 3 condições, podemos utilizar as funções elseif ou switch, por questão de comodidade iremos utilizar o elseif pois os testes lógicos podem ser inseridos dentro da própria função.
O algoritmo em diagrama de blocos para questão é dado por:
Passo 2
Implementando o algoritmo acima em linguagem de programação temos:
Passo 3
Digitando tudo certinho no Matlab o seu código deve ficar algo mais ou menos assim:
Passo 4
Testando o programa criado temos:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #3
“Elaboração Própria”
Uma empresa decide dar um reajuste a seus funcionários de acordo com os critérios seguintes:
- 50 % para aqueles que ganham menos de 3000;
- 20 % para aqueles que ganham entre 3000 e 10000 (inclusive)
- 15 % para os demais
- Ler o salário do funcionário
- Calcular o valor do reajuste
- Calcular o salário final
- Imprimir o resultado
Escreva o algoritmo e codificações Matlab capaz de:
Passo 1
A questão em si pede a elaboração de um algoritmo e uma rotina que ajuste os salários dos funcionários de uma determinada fábrica a partir de uma entrada de dados.
Para a realização precisamos de uma estrutura de fluxo de dados pois para cada valor de salário teremos um ajuste diferente, para a questão temos 3 condições então para resolver precisaremos utilizar elseif ou switch.
Como o teste lógico será aplicado em intervalos de valores é mais prático utilizar a função elseif para respondê-la.
Passo 2
Primeiro passo como a questão pede é a elaboração do algoritmo, então o algoritmo para solução desse problema em diagrama de blocos é:
Passo 3
Uma vez que o algoritmo foi criado basta transformá-lo em uma linguagem de programação, observando que cada caso tem uma saída de dados diferente.
Então o programa vai virar algo do tipo:
Passo 4
O programa em Matlab deve ficar algo do tipo:
Ao testar o programa podemos obter informações do tipo:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #4
“Elaboração Própria”
Elabore um algoritmo e escreva um programa Matlab para calcular Y para valores de X que estejam no intervalo , a expressão que avalia Y é dada por:
Passo 1
Essa questão ela quer calcular os valores de Y, porém para X maiores que zero utilizaremos a função e para X menores do que zero se utiliza a função .
Porém, os valores de X válidos apenas estão no intervalo de e , então temos o seguinte, temos um teste lógico para verificar se X está no intervalo fechado de se caso o teste dê verdadeiro que que iremos calcular o teste lógico da função.
Se o primeiro teste que corresponde a pertencer intervalo se caso for falso, o programa deve pedir um novo valor de X.
Passo 2
Primeiro passo como a questão pede é a elaboração do algoritmo, então o algoritmo para solução desse problema em diagrama de blocos é:
Então temos o primeiro teste lógico no qual forma um loop toda vez que inserir um valor de X fora do intervalo do primeiro bloco, uma vez que digita um valor de X válido ele vai para os demais testes para ver qual função que irá ser utilizada.
Passo 3
Transformando o diagrama de blocos em linguagem de programação temos:
Passo 4
Implementado no Matlab seu código deve ficar algo mais ou menos assim:
Testando com valores irá mostrar na sua janela command Windows algo do tipo:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #5
“Elaboração Própria”
Dada que uma equação de segundo grau pode ser representada da seguinte forma:
Utilizando as equações de Bhaskara, crie um algoritmo e escreva um programa que calcule as raízes REAIS da equação de segundo grau, e se caso a raiz for complexa cancelar o cálculo informando que a raiz é complexa.
Passo 1
A questão pede que a gente crie um algoritmo e um programa que calcule as raízes reais da função de segundo grau.
Se as raízes forem complexas, deve-se parar o cálculo revelando que a raiz é complexa.
Lembrando que para achar as soluções da equação de segundo grau, precisamos de duas equações, uma delas é o discriminante e outra que é a equação de Bhaskara.
Como temos uma raiz do discriminante, é ele que vai dizer o tipo de solução que nossa equação de segundo grau tem:
- Se , então nossas raízes não serão reais.
E tudo será definido em função dos coeficientes , e da equação!
Ah essa questão tem diversas formas de programar, cada um faz do jeito que achar melhor meu jeito não é o absoluto. Porém ao testar com os mesmo coeficientes que os meus, você tem que achar o mesmo valor.
Passo 2
Primeiramente, para responder à questão precisamos elaborar o algoritmo!
Para que a equação tenha raízes REAIS, o discriminante precisa ser maior do que 0. Pois se for menor do que 0 a raiz será complexa e o cálculo é parado.
Então começamos calculando esse discriminante e, dependendo do seu valor, calculamos ou não o X1 e o X2.
Sendo assim o algoritmo é algo do tipo:
Passo 3
Uma vez que o algoritmo está pronto, precisamos agora implementar o algoritmo no Matlab.
A entrada de dados fica bem assim:
Agora calculamos o discriminante:
Então se o discriminante é negativo, já avisamos pro usuário que não há raízes reais:
Caso contrário, ou seja, se o discriminante não é negativo, ele pode ser nulo ou positivo.
Se o discriminante é nulo, nós chamamos a raíz de Y, só pra diferenciar do caso que vai vir depois.
Se o discriminante é positivo, calculamos as duas raízes X1 e X2 e dizemos seus valores ao usuário.
Precisamos ainda dar o comando end, para fechar os dois if/else que a gente abriu.
Se digitou tudo certinho deve aparecer algo mais ou menos assim para você:
Passo 4
Utilizando A=1,B=2 e C=2 para testar o programa deverá mostrar os valores:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #6
Adaptada da Questão 3 - Matlab com aplicações em Engenharia – Amos Gilat – página 216
Considere e. Verifique as seguintes expressões sem a ajuda do Matlab. Em seguida, use o Matlab e compare com seus resultados.
Passo 1
Opa pessoal, o exercício aqui é um exercício onde iremos verificar cada sentença lógica e obter uma resposta.
Após isso vamos colocar as sentenças no Matlab e verificar se nossas respostas estão corretas, beleza?
A proposta do exercício é você brincar com esses testes lógicos e ir pegando a pratica deles.
Passo 2
Substituindo os valores das variáveis a e b temos que a expressão da alternativa a se tornar:
Como nós sabemos o número 10 é um número que vem depois do número 6, logo o 10 é maior que o 6 o que é verdadeiro.
Ou seja, em linguagem de programação a resposta verdadeira vale 1.
Inserindo no Matlab, temos:
Passo 3
A segunda expressão se torna:
Realizando a operação temos:
Ou seja, a expressão nos fala que 4 é um número menor do que o 5, o que configura como verdadeiro novamente.
Logo a resposta é igual a 1.
Realizando o teste no Matlab temos:
Passo 4
E a última expressão se torna:
Realizando as operações temos:
Aqui temos um parêntese em torno do teste lógico, logo somos obrigados a responder ele primeiro.
Sendo assim, o teste lógico nos fala que o número 6 é menor do que o número 3 o que não é verdade, gerando uma resposta falsa que em linguagem de programação vale 0.
Realizando o resto da operação temos:
Logo a resposta final é 10.
Testando no Matlab temos:
Resposta
- Verdadeiro
- Verdadeiro
- 10
Exercício Resolvido #7
Adaptada da Questão 7 - Matlab com aplicações em Engenharia – Amos Gilat – página 217
Use o MATLAB para gerar uma rotina que a partir de um valor de digitado pelo teclado ele identifique qual intervalo e calcule o valor da função dada abaixo.
Se o valor de Não cair no intervalo o programa deve informar qual o erro e pedir para informar o intervalo correto.
Passo 1
Opa galerinha, aqui temos um problema onde temos uma função que assume valores diferentes conforme o varia.
Esse tipo de função é muito comum na modelagem de sistemas de engenharia, a ideia aqui é utilizar uma estrutura lógica como as para poder a partir de um valor qualquer imprimir o valor final da função na tela e indicar a qual intervalo esse valor pertence.
Sendo assim o algoritmo geral desse problema se torna:
1-Entrada de dados – o valor do x
2-teste lógico para ver em qual intervalo se encaixa
2.1-Cálculo do valor da função
2.2-Impressão de tanto da função quanto do intervalo que se encaixou através de uma saída de dados.
Passo 2
Primeiramente vamos precisar implementar a entrada de dados utilizando a função input, cuja a sintaxe corresponde a:
Agora que inserimos o valor de x precisamos elaborar o código para a realização do teste lógico.
Se o valor de x cair entre o intervalo de então vamos calcular a função com a equação .
E traduzindo esse intervalo temos que o valor de precisa ser um número maior do que para estar dentro desse intervalo e ao mesmo tempo precisa ser menor que -2.
Sendo assim, podemos escrever o intervalo fala na seguinte forma:
E para escrevermos no Matlab basta trocar a letra por .
Logo o primeiro teste lógico se torna:
Colocamos uma saída que o para sabermos identificar em qual intervalo o valor de digitado está.
Seguindo a mesma ideia para os demais intervalos temos que:
Como temos mais de 2 condições utilizamos o para realização dos demais testes lógicos e se caso não se enquadrar em nenhum teste temos o para informar que o valor de não se enquadra em nenhum intervalo.
Digitando tudo certinho o seu código deve ficar algo mais ou menos assim:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #8
Adaptada do problema 7 - Matlab com aplicações em Engenharia – Amos Gilat – página 217
O tanque de uma caixa d’água possui a geometria onde a base é um cilindro de diâmetro 25 m e com uma altura de 19 metros e tem uma parte superior de geometria complexa cujo volume e seu raio é dado pelas equações abaixo.
Dentro do tanque há uma boia que indica o nível da água. Sendo assim, escreva uma rotina que determine o volume da água armazenada no tanque, na posição indicada pela boia (altura h).
A rotina deve receber a variável h e retornar o volume em água.
Dados:
Passo 1
Opa galerinha, aqui temos um problema onde temos uma função que assume valores diferentes conforme o varia.
Esse tipo de função é muito comum na modelagem de sistemas de engenharia, a ideia aqui é utilizar uma estrutura lógica como as para poder a partir de um valor qualquer imprimir o valor final da função na tela e indicar a qual intervalo esse valor pertence.
O primeiro intervalo é o cilindro e seu volume é dado por:
Quando o valor de h ultrapassa a altura do cilindro que é o valor de 19, começamos a entrar na geometria complexa então o volume total é dado por
Sendo assim o algoritmo geral desse problema se torna:
1-Entrada de dados – o valor do h
2-teste lógico para ver em qual intervalo se encaixa
2.1-Cálculo do valor da função
2.2-Impressão de tanto da função quanto do intervalo que se encaixou através de uma saída de dados.
Passo 2
Primeiramente vamos precisar implementar a entrada de dados utilizando a função input, cuja a sintaxe corresponde a:
Agora que inserimos o valor de x precisamos elaborar o código para a realização do teste lógico.
O primeiro teste lógico equivale em verificar que o valor de h está apenas na altura do cilindro ou seja se
Se caso o a altura não se encaixar nesse primeiro teste lógico só resta ela estar acima do cilindro gerando o segundo teste lógico que é apenas o
Que foi gerado através das equações disponibilizadas no problema.
Se você programou tudo certinho no Matlab, temos que seu código deve ter ficado parecido com:
Resposta
Ei, a resposta está no passo a passo :)