O documento discute algoritmos e tomada de decisões. Explica que para tomar decisões em um programa, como determinar se um aluno está aprovado ou reprovado com base em sua média, é necessário usar recursos de tomada de decisão como desvios condicionais. Apresenta exemplos de como implementar desvios condicionais simples, compostos e encadeados usando diagramas de blocos e português estruturado, bem como operadores relacionais e lógicos.
2. Tomada de Decisões
Imagine a seguinte situação: um programa que
apresenta a média escolar de um aluno. Além de
calcular a média, o programa deve apresentar se
ele está aprovado ou reprovado.
3. Tomada de Decisões
Observe que será necessário verificar a média
do aluno para então tomar uma decisão no
sentido de apresentar a sua real situação:
aprovado ou reprovado. Assim sendo, torna-se
necessário utilizar os recursos de tomada de
decisão.
4. Desvio condicional simples
A tomada de decisão simples utiliza a instrução
se..então..fim_se. Nesta instrução, se a condição
estabelecida for verdadeira, então serão
executadas todas as instruções definidas entre
se..então e fim_se
5. Desvio condicional simples
depois serão executadas todas as instruções
existentes após fim_se. Se a condição
estabelecida for falsa, serão executadas as
instruções que estiverem definidas após a
instrução fim_se.
6. Diagrama de blocos
No diagrama de blocos a existências das letras
“S” e “N”, além das linhas com seta indicando a
direção do processamento, colocadas
juntamente com o símbolo de Decisão.
7. Diagrama de blocos
O “S” representa sim e está posicionado para
indicar que um determinado bloco de operações
será executado quando a condição atribuída for
verdadeira.
8. Diagrama de blocos
O “N” está para não e será executado quando a
condição for falsa. O símbolo do losango, ou de
Decisão deve ser utilizado em situações em que
haja a necessidade de usar uma decisão dentro
do programa.
9. Diagrama de blocos
Uma decisão será tomada sempre com base em
uma pergunta, com RESPOSTA = “sim”, e é essa
pergunta que deve estar indicada dentro do
símbolo de losango.
11. Exemplo de problema com
condição
“Ler dois números numéricos inteiros, efetuar a
adição e apresentar o seu resultado caso o valor
somado seja maior que 10”.
12. Diagrama de blocos do
exemplo com condição
Inicio
Ler
A, B
Calcular
X A + B
1
15. Portugues estruturado do
exemplo de utilização de
condicionalinício
leia A
leia B
X A + B
se (X > 10) então
escreva X
fim_se
fim
16. Operadores relacionais
Ao usar uma instrução de tomada de decisão, é
necessário definir para ela uma condição, que é
o estabelecimento de uma relação lógica entre
dois elementos, podendo ser VARIÁVEL X
VARIÁVEL ou VARIÁVEL x CONSTANTE.
17. Operadores relacionais
Para que uma relação lógica seja definida, passa
a ser necessário usar de uma dos operadores
relacionais existentes, os quais se encontram
definidos na tabela
19. Operadores relacionais
Os operadores relacionais possuem o mesmo
nível de prioridade. Não há necessidade de se
preocupar em alterar seu nível de prioridade em
uma determinada condição.
20. Desvio condicional composto
Para a tomada de decisão composta irá ser
utilizada a estrutura se..então..senão..fim_se. Se
a condição estabelecida for falsa, serão
executadas todas as instruções que estiverem
definidas entre senão e fim_se. Somente após a
execução de uma das possibilidades anteriores é
que o programa executará as instruções
existentes após fim_se.
21. Diagrama de blocos da
condicional composta
Condiçã
o
Instruções executadas
quando a condição for
falsa
Instruções executadas
quando a condição for
verdadeira
22. Português estruturado
de condicional composto
se (<condição>) então
<instruções para condição verdadeira>
senão
<instruções para condição falsa>
fim_se
23. Exemplo de utilização de
desvio condicional composto
“Ler dois valores numéricos inteiros e efetuar a
adição. Caso o valor somado seja maior ou igual
a 10, deve ser apresentado somando a ele 5;
caso o valor somado não seja maior ou igual a
10, deve ser apresentado subtraído dele 7”.
24. Diagrama de blocos do
exemplo com condição
Inicio
Ler
A, B
Calcular
X A + B
28. Portugues estruturado
do exemplo utilizando desvio
condicional compostoinicio
leia A,B
X A + B
se (X >= 10) então
R X + 5
senão
R X -7
fim_se
escreva R
fim
29. Desvios condicionais
encadeados
Existem casos em que é necessário estabelecer
algumas verificações lógicas de condições
definidas sucessivamente. Nestes casos, uma
determinada ação de um programa somente
pode ser executada se um conjunto anterior de
condição for verificado.
30. Desvios condicionais
encadeados
A partir do momento em que uma determinada
ação é executada, ela pode também levar a
outras condições, não havendo limites. A idéia
aqui apresentada sugere a possibilidade de usar
uma condição dentro de outra condição, o que
leva a uma estrutura de decisão encadeada ou
aninhada.
31. Desvios condicionais
encadeados Condição 1
Instruções executadas
quando condição 1
verdadeira
Condição 2
Instruções executadas
quando condição 1 é falsa,
mas a condição 2 é
verdadeira
Instruções executadas
quando condição 1 e
condição 2 são falsas
32. Português estruturado de
desvios condicionais
encadeados
Neste exemplo, está sendo adotado o
encadeado para a <condição1> falsa, mas,
dependendo do problema a ser resolvido,
pode ser colocado no outro lado. Pode
ocorrer de termos a necessidade de utilizar
condições dos dois lados.
33. Português estruturado de
desvios condicionais
encadeados
se (<condição1>) então
<instruções para condição1 verdadeira>
senão
se (<condição2>) então
<instruções para condição2 verdadeira, porém condição1 falsa>
senão
<instruções para condição1 e condição2 falsa>
fim_se
fim_se
34. Português estruturado de
desvios condicionais
encadeados
Para um exemplo da utilização desta estrutura considere
o seguinte problema: “Elaborar um programa que efetue
o cálculo do reajuste de salário de um funcionário”.
Considere que o funcionário deve receer um reajuste de
15% caso seu salário seja menor que 500. Se o salário for
maior ou igual a 500, mas menor ou igual a 1000, seu
reajuste será de 10%; caso seja inda maior que 1000, o
reajuste deverá ser de 5%.
35. Diagrama de blocos de desvios
condicionais encadeados
Inicio
Ler
Salario
Salário
< 500
Novo_Sal Salario * 1.15
1
2
N
S
36. Diagrama de blocos de desvios
condicionais encadeados1 2
Salário
<=
1000
Novo_Sal Salario * 1.10Novo_Sal Salario * 1.05
3
SN
37. Diagrama de blocos de desvios
condicionais encadeados
3
Fim
Imprimir
Novo_Sal
39. Português estruturado de
desvios condicionais
encadeados
inicio
leia SALARIO
se (SALARIO < 500) então
NOVO_SAL SALARIO * 1.15
senão
se (SALARIO <= 1000) então
NOVO_SAL SALARIO * 1.10
senão
NOVO_SAL SALARIO * 1.05
fim_se
fim_se
escreva NOVO_SAL
fim
40. Operadores lógicos
Em algum momento pode haver necessidade de
trabalhar com mais de uma condição dentro de
uma única decisão, e fazer alguns testes lógicos
múltiplos. A menor combinação possível para este
caso é a definição de duas condições para uma
mesma decisão, mas não há limites para este tipo
de evento, podendo ser três, quatro, cinco ou mais
condições.
41. Operadores lógicos
Quando houver necessidade de utilizar mais de
uma condição para uma mesma tomada de
decisão deve ser utilizado um recurso bastante
peculiar, denominado operador lógico, também
conhecido como operador booleano. Os
operadores lógicos mais comuns são: .e.
(operador lógico de conjunção), .ou. (operador
lógico de disjunção) e o .não. (operador lógico de
negação).
42. Operador lógico: .e. (Tabela
Verdade)
Operador lógico de conjunção .e. é utilizado
quando duas ou mais condições de uma
determinada decisão necessitam ser verdadeiras
para obter-se um resultado lógico verdadeiro;
caso contrário, o resultado do valor lógico
retornado será falso. Se a primeira condição
possui valor lógico falso, a segunda condição não
precisa se avaliada. Segue tabela-verdade para
esse tipo de operador:
44. Diagrama de blocos
(representação de utilização
do .e.)
Condição
1 .e.
Condição
2
Instruções executadas se ambas as
condições forem verdadeiras
SN
45. Diagrama de blocos
(representação de utilização
do .e.)
Observe que o resultado é verdadeiro somente quando
todas as condições envolvidas na decisão são
verdadeiras.
O operador .e. faz com que somente seja executada uma
determinada operação se todas as condições
mencionadas forem simultaneamente verdadeiras.
Exemplo:
46. Português estruturado
(representação de utilização
do .e.)
programa TESTA_LOGICA_E
var
NUMERO : inteiro
inicio
leia NUMERO
se (NUMERO >=20) .e. (NUMERO <=90) então
escreva “O número está na faixa de 20 a 90”
senão
escreva “O número está fora da faixa de 20 a 90”
fim_se
fim
47. Operador lógico: .ou. (Tabela
Verdade)
O operador lógico de disjunção .ou. é utlizado
quando pelo menos uma de duas ou mais
condições de uma determinada decisão necessita
verdadeiro para obter-se um resultado lógico
verdadeiro, caso contrário o valor do resultado
lógico retornado será falso. Se a primeira
condição possui valor lógico verdadeiro a
segunda condição não necessita ser avaliada.
Segue tabela-verdade para esse operador:
49. Operador lógico: .ou. (Tabela
Verdade)
Observe que o resultado lógico é verdadeiro
quando pelo menos uma das condições
envolvidas na decisão é verdadeira.
50. Diagrama de blocos
(representação de utilização
do .e.)
Condição
1 .ou.
Condição
2
Instruções executadas se ao menos
uma das condições forem
verdadeiras
SN
51. Português estruturado
(representação de utilização
do .e.)
programa TESTE_LOGICA_OU
var
SEXO: caractere
inicio
leia SEXO
se (SEXO = “masculino”) ou (SEXO = “feminino”) então
escreva “Sexo válido”
senão
escreva “Sexo inválido”
fim_se
fim
52. Operador lógico: .não. (Tabela
Verdade)
O operador .não. faz com que seja executada
uma determinada ação de uma decisão
invertendo o seu resultado lógico. Se a condição
for verdadeira e possuir a sua frente o operador
.não. esta será automaticamente considerada
falsa, o inverso ocorrerá para uma condição falsa
que possua a sua frente o operador .não., que
será automaticamente considerada verdadeira.
Veja o exemplo seguinte:
54. Operador lógico: .não. (Tabela
Verdade)
O operador .não. faz com que seja executada
uma determinada operação, invertendo o
resultado lógico da condição.
55. Diagrama de blocos
(representação de utilização
do .não.)
.não.
Condição
Instruções executadas
caso a condição não seja
verdadeira
SN
56. Operador lógico: .não. (Tabela
Verdade)
O operador .não. faz com que seja executada
uma determinada ação de uma decisão,
invertendo o seu resultado lógico. Se a condição
for verdadeira e possuir a sua frente o operador
.não., será automaticamente considerada falsa. O
inverso ocorre para uma condição falsa que
possua à sua frente o operador .não., que será
automaticamente considerada verdadeira. Veja o
exemplo seguinte:
57. Português estruturado
(representação de utilização
do .não.)
programa TESTE_LOGICA_NAO
var
A, B, C, X: inteiro
inicio
leia A, B, C
se .não. (X > 5) então
C (A + B) * X
senão
C (A – B) * X
fim_se
escreva C
fim
58. Operador lógico: .não. (Tabela
Verdade)
O exemplo mostra, com a utilização do
operador .não., que somente será efetuado
o cálculo de C (A + B) * X, se o valor da
variável X não for maior que 5. Qualquer
valor de 5 para baixo efetua o cálculo C
(A + B) * X.
59. Prioridade de Uso dos
Operadores lógicos
Os operadores lógicos possibilitam o uso de
mais de uma condição para a tomada de
uma única decisão, quando utilizados os
operadores lógicos .e. (conjunção) e .ou.
(disjunção), ou quando há necessidade de
negar o estado lógico de uma decisão por
meio do operador lógico .não. (negação).
60. Prioridade de Uso dos
Operadores lógicos
Para usar adequadamente os operadores lógicos,
é necessário levar em conta a sua ordem de
prioridade. A tabela seguinte apresenta a ordem
de prioridade dos operadores lógicos
apresentados. Operador Operação Prioridade
.não. Negação 1
.e. Conjunção 2
.ou. Disjunção 3
61. Prioridade de Uso dos
Operadores lógicos
Por exemplo, a expressão lógica (A=B) .e.
.não. (A>5) deve ser avaliada a partir de
.não.(A>5) e somente depois de saber seu
resultado é que pode ser realizada avaliação
do restante da expressão lógica.
62. Prioridade de Uso dos
Operadores lógicos
Já na expressão lógica (A=1).ou.(A>=4).e.(A<=9), será
resolvida primeiro a parte da expressão submetida ao
operador lógico .e., para depois ser resolvida a parte da
expressão submetida ao operador .ou., segundo a
prioridade padrão. Mas imagine que haja necessidade
de primeiro executar a avaliação lógica da expressão,
levando em consideração que o operador .ou. seja
avaliado primeiro. Neste caso, a avaliação lógica deve
ser definida entre parênteses como sendo:
((A=1).ou.(A>=4)).e.(A<=9).