Você está na página 1de 44

Algoritmos

Prof. Leonardo Minelli


Desvio Condicional
• Por vezes necessitamos traçar um caminho ou outro, o que
exemplifica as nossas decisões, enquanto pessoas, optando

• Para um computador não é diferente, este deverá optar por


processamentos mais adequados para valores predispostos

• Estas opções são definidas como “desvio condicional”

Algoritmos (Prof. Leonardo Minelli) 2


Desvio Condicional
• Caminho a ser trilhado
Caminho mais curto

Melhores condições
da rodovia

Sem pedágio

Algoritmos (Prof. Leonardo Minelli) 3


Desvio Condicional
• Os desvios condicionais englobam os princípios da
decisão

• O fluxo de instruções a ser seguido é escolhido em


função do resultado da condição

• Podem existir várias condições a serem avaliadas para


a definição do fluxo a ser seguido

Deve-se ter cautela ao implementar condições


(falsos positivos)

Algoritmos (Prof. Leonardo Minelli) 4


Desvio Condicional
• Filosofia

» Você é prisioneiro de uma tribo indígena que conhece


todos os segredos do Universo e portanto sabem de tudo.
Você está para receber sua sentença de morte. O cacique
o desafia:
- Faça uma afirmação qualquer. Se o que você falar for
mentira você morrerá na fogueira, se falar uma verdade
você será afogado. Se não pudermos definir sua
afirmação como verdade ou mentira, nós te
libertaremos.
O que você diria?

Algoritmos (Prof. Leonardo Minelli) 5


Desvio Condicional
• Filosofia

» Solução: Afirme que você morrerá na fogueira!

» Explicação:
• Se você realmente morrer na fogueira, isto é uma
verdade, portanto deveria morrer afogado
• Mas se você morrer afogado a informação seria uma
mentira e, portanto, deveria morrer na fogueira

» Mesmo prevendo o futuro, haveria um impasse


• Você seria libertado

Algoritmos (Prof. Leonardo Minelli) 6


Desvio Condicional
• Falhas condicionais
– Falhas semânticas (estruturais)

» Solução é desconhecida
» Solução impossível de ser identificada/executada

» Resultado
• Eu, Robô
• Blade Runner
• Wall-E
• ...

Algoritmos (Prof. Leonardo Minelli) 7


Desvio Condicional
• Falhas condicionais
– Eu, Robô
• Spooner retorna ao centro da
cidade, onde ele, Calvin e Sonny
invadem a central da US Robotics,
protegida por milhares de NS-5,
para instalar as nanitas na central
de comando de VIKI, uma
Inteligência Artificial que comanda
as instalações da US Robotics e
corrompeu a programação dos NS-
5 após chegar a uma conclusão de
que ela está mais apta a comandar
a Humanidade, e que o único jeito
de salvar os seres humanos é
oprimindo-os e instalando uma
ditadura comandada por robôs.

Algoritmos (Prof. Leonardo Minelli) 8


Desvio Condicional
• Falhas condicionais
– Blade Runner
• O filme descreve um futuro em que a
humanidade inicia a colonização
espacial, para o que cria seres
geneticamente alterados - replicantes -
utilizados em tarefas pesadas, perigosas
ou degradantes nas novas colônias.
Fabricados pela Tyrell Corporation
como sendo "mais humanos que os
humanos", as clonagens Nexus-6 são
fisicamente idênticas aos humanos,
mas são mais fortes e ágeis. Devido a
problemas de instabilidade emocional e
reduzida empatia, os replicantes são
sujeitos a um desenvolvimento
agressivo, pelo que o seu período de
vida é limitado a quatro anos.

Algoritmos (Prof. Leonardo Minelli) 9


Desvio Condicional
• Falhas condicionais
– Wall-E
• Na Axiom, os passageiros humanos sofreram
severas perdas de massa óssea e se tornaram
obesos mórbidos com o passar dos séculos
vivendo em microgravidade e dependendo
dos sistemas automáticos da nave. O capitão
da nave faz pouca coisa, deixando o controle
da Axiom para o piloto automático robótico,
Auto. WALL·E segue EVA até a ponte de
comando da Axiom onde o capitão descobre
que ao escanear a amostra de planta de EVA
no holo-detector da nave como um sinal de
que a Terra é habitável novamente,
a Axiom irá fazer um hipersalto até a Terra
para que seus passageiros possam
recolonizá-la. Todavia, Auto ordena que o
GO-4, o robô assistente do capitão, roube a
planta como parte de uma diretriz final para
manter a humanidade longe da Terra já que a
vida foi incorretamente considerada
insustentável.

Algoritmos (Prof. Leonardo Minelli) 10


Desvio Condicional
• Estrutura do Desvio Condicional

se (<condição>) entao
<instruções para a condição verdadeira>
senao
<instruções para a condição falsa>
fimse

Algoritmos (Prof. Leonardo Minelli) 11


Introdução a Programação
• Operadores Relacionais
– A tomada de decisões implica na utilização de
condições para verificar o estado de uma
determinada variável quando verdadeiro ou falso.

– Essas verificações são efetuadas com a utilização


dos chamados operadores relacionais.

Algoritmos (Prof. Leonardo Minelli) 12


Introdução a Programação
• Operadores Relacionais

Operadores Relacionais Português Estruturado


Maior >
Menor <
Maior ou Igual >=
Menor ou Igual <=
Igual =
Diferente <>

Algoritmos (Prof. Leonardo Minelli) 13


Introdução a Programação
• Desvio Condicional Simples
– Supondo um programa que calcule a média de um aluno.
– Mas além de calcular a média, o programa deve informar se o mesmo
foi aprovado ou reprovado, segundo análise de sua média.
– Para solucionar esse problema, será utilizada a instrução:
se (<condição>) entao
<instruções para a condição verdadeira>
fimse

– Esta estrutura é utilizada na tomada de decisões.


– Sendo a condição verdadeira, serão executadas todas as instruções
que se encontram entre a instrução se...entao e a instrução fimse.
– Sendo a condição falsa, serão executadas somente as instruções que
estão após o comando fimse.

Algoritmos (Prof. Leonardo Minelli) 14


Introdução a Programação
• Diagrama de Blocos
– Desvio Condicional Simples
...

sim não
<condição>

<comando
composto 1>

Algoritmos (Prof. Leonardo Minelli) 15


Exemplos
• Exemplo 1
– Criar um programa que efetue a leitura de dois
valores numéricos. Faça a operação de soma entre
os dois valores e apresente o resultado somente se
esse valor for maior que 10.

Algoritmos (Prof. Leonardo Minelli) 16


Exemplos
• Exemplo 1
– Criar um programa que efetue a leitura de dois
valores numéricos. Faça a operação de soma entre
os dois valores e apresente o resultado somente se
esse valor for maior que 10.
• Algoritmo genérico
– Obter dois valores, no caso variáveis A e B
– Efetuar a soma das variáveis A e B, implicando o seu resultado
na variável X
– Verificar se o valor da variável X é maior que 10 e apresentá-lo

Algoritmos (Prof. Leonardo Minelli) 17


Resolução Exemplo 1
• Diagrama de Blocos • Português Estruturado
Início algoritmo "somanumeros"

var
Qual o valor de A?
X, A, B: inteiro
A
inicio
escreva("Qual o valor de A?")
Qual o valor de B? leia (A)
escreva("Qual o valor de B?")
leia (B)
B Fim X <-A+B
se (x>10) entao
XA+B escreva(" X= ", X)
fimse
X
fimalgoritmo
S
Se X>10
N Algoritmos (Prof. Leonardo Minelli) 18
Introdução a Programação
• Desvio Condicional Composto
se (<condição>) entao
<instruções para a condição verdadeira>
senao
<instruções para a condição falsa>
fimse

– Caracterizado pela instrução


se... entao... senao... fimse
onde serão executadas as instruções posicionadas
entre o se... entao (V) e a instrução senao (F)

Algoritmos (Prof. Leonardo Minelli) 19


Introdução a Programação
• Diagrama de Blocos
– Desvio Condicional Composto
...

sim não
<condição>

<comando <comando
composto 1> composto 2>

Algoritmos (Prof. Leonardo Minelli) 20


Exemplos
• Exemplo 2
– Criar um programa que efetue a leitura de dois
valores numéricos. Faça a operação de soma entre
os dois valores caso o resultado seja maior ou
igual a 10 deverá ser somado mais 5. Caso
contrário deverá ser subtraído 7.

Algoritmos (Prof. Leonardo Minelli) 21


Exemplos
• Exemplo 2
– Criar um programa que efetue a leitura de dois
valores numéricos. Faça a operação de soma entre
os dois valores caso o resultado seja maior ou
igual a 10 deverá ser somado mais 5. Caso
contrário deverá ser subtraído 7.
• Algoritmo genérico
– Obter dois valores, no caso variáveis A e B
– Efetuar a soma das variáveis A e B, implicando o seu resultado na variável X
– Verificar se o valor da variável X é maior ou igual a 10 se sim somar mais 5 se não subtrair
7
– Apresentar o novo valor

Algoritmos (Prof. Leonardo Minelli) 22


Resolução Exemplo 2
• Diagrama de Blocos • Português Estruturado
...
algoritmo "somanumeros2“

XA+B var
X, A, B: inteiro

inicio

Se X>=10 escreva("Qual o valor de A?")


N S leia (A)
escreva("Qual o valor de B?")
leia (B)
X=X-7 X=X+5 X <-A+B

se (x>=10) entao
X<-X+5
senao
X<-X-7
fimse
X
escreva(" X= ", X)

Fim fimalgoritmo
Algoritmos (Prof. Leonardo Minelli) 23
Introdução a Programação
• Desvios Condicionais Encadeados
– Existem casos em que é preciso se estabelecer verificações sucessivas
para condições determinadas. Ou seja, uma ação executada devido à
satisfação de uma condição poderá estabelecer novas condições.
– Esse tipo de estrutura pode possuir diversos níveis de condições,
sendo chamadas de aninhamento ou encadeamento.
se (<condição>) entao
<instruções para a condição verdadeira>
senao
se (<condição>) entao
<instruções para a condição verdadeira>
senao
<instruções para a condição falsa>
fimse
fimse

Algoritmos (Prof. Leonardo Minelli) 24


Introdução a Programação
• Diagrama de Bloco
– Desvio Condicional Encadeado

Cond. 1
N S

C.C. a
Cond. 2
N S

C.C. b C.C. c

Algoritmos (Prof. Leonardo Minelli) 25


Exemplos
• Exemplo 3
– Elaborar um programa que efetue o cálculo do
reajuste de salário de um funcionário. Considere
que o funcionário deverá receber um reajuste de
15% caso seu salário seja menor que R$ 500,00, se
o seu salário for de R$ 500,00 mas menor ou igual
a R$ 1.000,00, seu reajuste será de 10% e caso
seja maior que R$ 1.000,00, o reajuste deverá ser
de 5%.

Algoritmos (Prof. Leonardo Minelli) 26


Resolução Exemplo 3
• Diagrama de Blocos • Português Estruturado
...
algoritmo “reajustesalario“

Se SALARIO<500 var
N NOVO_SALARIO, SALARIO: real
S
inicio
NOVO_SALARIO <- escreva(“Qual o valor do salário atual?")
SALARIO * 1.15 leia (SALARIO)
SE SALARIO<=1000 se (SALARIO < 500) entao
N S NOVO_SALARIO <- SALARIO * 1.15
senao
NOVO_SALARIO <- NOVO_SALARIO <- se (SALARIO <= 1000) entao
SALARIO * 1.10 NOVO_SALARIO <- SALARIO * 1.10
SALARIO * 1.05
senao
NOVO_SALARIO <- SALARIO * 1.05
fimse
fimse
escreva(“O valor do novo salário é: R$ ", NOVO_SALARIO)

fimalgoritmo
NOVO_SALARIO

Algoritmos (Prof. Leonardo Minelli) 27


Fim
Exemplos
• Exemplo 3 (anexo)
– Adicionar mais uma cláusula bônus por filho (R$
50,00 limitado a 2)

Algoritmos (Prof. Leonardo Minelli) 28


Resolução Exemplo 3 (anexo)
• Português Estruturado
algoritmo "reajustesalario"

var
NOVO_SALARIO, SALARIO: real
filhos: inteiro

inicio

... PRIMEIRA PARTE DA SOLUÇÃO


escreval("Quantos filhos?")
leia (filhos)
se (filhos <> 0) entao
se (filhos = 1) entao
NOVO_SALARIO <- NOVO_SALARIO+50
senao
NOVO_SALARIO <- NOVO_SALARIO+100
fimse
fimse
escreva("O valor do novo salário é: R$ ", NOVO_SALARIO)

fimalgoritmo

Algoritmos (Prof. Leonardo Minelli) 29


Introdução a Programação
• Operadores Lógicos
– Utilizados quando é necessário trabalhar com o
relacionamento de duas ou mais condições ao mesmo
tempo, na mesma instrução TIPO SE.
– Por vezes, o uso destes operadores evita a utilização
de muitas instruções TIPO SE encadeadas.
– Existem três operadores Lógicos Relacionais, são eles:
• e
• ou
• nao

Algoritmos (Prof. Leonardo Minelli) 30


Introdução a Programação
• Operador Lógico E
– Utilizado quando dois ou mais relacionamentos
lógicos de uma condição precisam ser Verdadeiro.
...

<condição1> não
Cond. 1 Cond. 2 Resposta sim E
F F Falsa <condição2>

V F Falsa
F V Falsa <comando
composto 1>
V V Verdadeira

Algoritmos (Prof. Leonardo Minelli) 31


Introdução a Programação
• Conceituando
– Você deve ser maior de idade E possuir altura
igual ou maior que 1,60m para andar nesta
montanha russa

E =

Algoritmos (Prof. Leonardo Minelli) 32


Exemplos
• Exemplo 4
– Escreva um programa em Português Estruturado que, a
partir da digitação de um determinado número, estabeleça
se o mesmo esta dentro da faixa de 20 a 90.
algoritmo "Testa_Logica"
var
numero: inteiro

inicio
escreva ("Digite um valor para o número: ")
leia (numero)
se ((numero >= 20) e (numero<=90)) entao
escreva ("Número está na Faixa de 20 a 90")
senao
escreva ("Número está fora da Faixa de 20 a 90")
fimse
fimalgoritmo

Algoritmos (Prof. Leonardo Minelli) 33


Introdução a Programação
• Operador Lógico OU
– Utilizado quando pelo menos um dos
relacionamentos lógicos de uma condição
precisam ser Verdadeiro.
<condição1> não
sim OU
Cond. 1 Cond. 2 Resposta
<condição2>
F F Falsa
V F Verdadeiras
<comando
F V Verdadeiras composto 1>

V V Verdadeira

Algoritmos (Prof. Leonardo Minelli) 34


Introdução a Programação
• Conceituando
– Se eu usar casaco OU usar blusão, me manterei
aquecido

OU =

Algoritmos (Prof. Leonardo Minelli) 35


Exemplos
• Exemplo 5
– Escreva um programa em Português Estruturado que a
partir da digitação de um determinado sexo estabeleça se
o mesmo é Válido ou Não.
algoritmo "Testa_Logica_ou"

var
sexo:caracter

inicio
escreva ("Digite o sexo da pessoa: ")
leia (sexo)
se (sexo = "masculino") ou (sexo = "feminino") entao
escreva ("Sexo Válido")
senao
escreva ("Sexo Inválido")
fimse
fimalgoritmo
Algoritmos (Prof. Leonardo Minelli) 36
Introdução a Programação
• Operador Lógico nao
– O operador do tipo nao é utilizado quando é
necessário estabelecer que uma determinada
condição seja não verdadeira.
sim não
Condição Resposta NAO <condição1>

Verdadeira Falsa
Falsa Verdadeira <comando
composto 1>

Algoritmos (Prof. Leonardo Minelli) 37


Introdução a Programação
• Conceituando
– Alguém lhe pergunta se você NÃO teria R$ 10,00
trocados. Você não possuindo esse valor, o que
deveria responder?

NAO =

Algoritmos (Prof. Leonardo Minelli) 38


Exemplos
• Exemplo 6
– Escreva um programa em Português Estruturado que,
inicialmente, leia 3 variáveis (a,b e x), e somente efetue o
cálculo de C <- (A+B) se o valor da variável x NÃO for maior
que 5. Para qualquer valor de X menor que 5 o programa
deverá calcular C <- (A-B). algoritmo "Testa_Logica_nao"
var
a,b,c,x: inteiro
inicio
leia (a,b,x)
se (nao(x > 5)) entao
c <- (a+b) * x
senao
c <- (a-b) * x
fimse
escreva (c)
fimalgoritmo
Algoritmos (Prof. Leonardo Minelli) 39
Resumo
• Resumo dos operadores Lógicos no Visualg

Operadores Português
Significado
Lógicos Estruturado
Resulta VERDADEIRO se ambas as partes forem
Multiplicação Lógica E
verdadeiras
Resulta VERDADEIRO se uma das partes é
Adição Lógica OU
verdadeira
Nega uma afirmação, invertendo o seu valor
Negação NAO lógico: se for VERDADEIRO torna-se FALSO, se for
FALSO torna-se VERDADEIRO

Algoritmos (Prof. Leonardo Minelli) 40


Exercício 1
• Leia 3 (três) valores para os lados de um triângulo,
considerando lados como: A, B e C. Verificar se os lados
fornecidos formam realmente um triângulo. Se for esta
condição verdadeira, deverá ser indicado qual tipo de
triângulo foi formado: isósceles, escaleno ou
equilátero.

– Dica
– Para resolver esse problema é necessário saber o que
realmente é um triângulo. Se você não souber o que é um
triângulo, consequentemente não conseguirá resolver o
problema.

Algoritmos (Prof. Leonardo Minelli) 41


Exercício 1 (Triângulo)
• Triângulo é uma forma geométrica (polígono) composta por três
lados, onde cada lado é menor que a soma dos outros dois lados.
Perceba que isso é uma regra (uma condição) e deverá ser
considerada. É um triângulo quando A < B + C, quando B < A+C e
quando C < A+B.
• Tendo certeza de que os valores informados para os três lados
formam um triângulo, serão então analisados os valores para se
estabelecer qual tipo de triângulo será formado: Isósceles, Escaleno
ou Equilátero.
– Isósceles: possui dois lados iguais e um diferente
• A=B ou A=C ou B=C
– Escaleno: possui todos os lados diferentes
• A<>B, B<>C e C<>A
– Equilátero: possui todos os lados iguais
• A=B e B=C

Algoritmos (Prof. Leonardo Minelli) 42


Exercício 2
• Efetuar a leitura de três valores A, B, C e
apresentá-los em ordem crescente.

– Dica
– Para solucionar este problema, será necessário
utilizar os conceitos de propriedade distributiva
(para combinar as variáveis) e o processo de troca
de valores entre duas variáveis.

Algoritmos (Prof. Leonardo Minelli) 43


Exercício 3
• Efetuar a leitura de três números inteiros
positivos quaisquer. Caso não seja digitado um
número inteiro positivo o programa deve avisar o
usuário dessa ocorrência e solicitar um novo
número para substituir o número inválido. Ao
final da execução do programa deverá ser
apresentado o maior e o menor valor digitado.

– Sem Dicas

Algoritmos (Prof. Leonardo Minelli) 44