Algoritmos e Técnicas de Programação

60
Estruturas Condicionais Algoritmos e Técnicas de Programação Prof. Kleber Rezende

Transcript of Algoritmos e Técnicas de Programação

Page 1: Algoritmos e Técnicas de Programação

Estruturas Condicionais

Algoritmos e Técnicas de

Programação

Prof. Kleber Rezende

Page 2: Algoritmos e Técnicas de Programação

Considerações Iniciais

Nos capítulos anteriores foram apresentados

alguns conceitos básicos sobre as estruturas

e comandos que são utilizados para construir

um algoritmo simples.

Como visto, podemos solicitar valores de

ENTRADA aos usuários do sistema utilizando

o comando LEIA, e podemos ainda enviar

valores de saída do sistema por meio do

comando ESCREVA.

Page 3: Algoritmos e Técnicas de Programação

Considerações Iniciais

Entretanto, as possibilidades de

construção de algoritmos que temos até

o presente momento são bastante

limitadas, pois ainda não estamos aptos

a tomar decisões durante o tempo de

execução do algoritmo, ou até mesmo

de classificar determinados valores de

variáveis.

Page 4: Algoritmos e Técnicas de Programação

Considerações Iniciais

Por exemplo, considere que precisamos desenvolver um algoritmo que classifique uma determinada pessoa entre MAIOR DE IDADE ou MENOR DE IDADE.

Para esse problema sabemos que precisamos avaliar a IDADE da pessoa, e que SE essa idade for maior (ou igual) que 18 anos a pessoa é considerada MAIOR DE IDADE.

Para resolver esse tipo de situação, onde um determi-nado valor é avaliado para, a partir do resultado dessa avaliação, executarmos alguma ação, utilizamos as ESTRUTURAS DE CONDIÇÃO.

Page 5: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

A principal estrutura de condição utiliza-

da é a SE ENTAO;

Ela é utilizada da seguinte forma:

SE <EXPRESSÃO LÓGICA> ENTAO

COMANDO

FIMSE

Page 6: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

Onde,

1) A EXPRESSÃO LÓGICA é uma expressão que deverá retornar um valor VERDADEIRO ou FALSO, e caso o resultado dessa EXPRESSÃO seja VERDADEIRO, será executado o COMANDO que está dentro da ESTRUTURA.

Alguns exemplos de expressões lógicas já foram vistos anteriormente, a seguir temos mais alguns exemplos:

18 > 20, cujo resultado será FALSO

45 = 45, cujo resultado será VERDADEIRO

MEDIA > 7, cujo resultado dependerá do valor da variável MEDIA

Page 7: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

Onde,

2) O COMANDO é uma linha (ou sequência) de

código que será executado somente quando o

resultado da EXPRESSÃO LÓGICA for

VERDADEIRO

3) FIMSE indica que a ESTRUTRA SE ENTAO

chegou ao final.

Page 8: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

Em C, teríamos:

if (<EXPRESSÃO LÓGICA>)

{

COMANDO

}

Page 9: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

Voltando ao nosso problema de classificar uma pessoa como MAIOR ou MENOR de IDADE, podemos utilizar a estrutura de condição SE ENTAO da seguinte maneira:

algoritmo "condicao"

variável

inteiro idade

inicio

escreva("digite a sua idade")

leia(idade)

se idade >= 18 entao

escreva("voce é maior de idade")

fimse

Fimalgoritmo

Page 10: Algoritmos e Técnicas de Programação

Estrutura de condição SE ENTAO

Em C...

main()

{

int idade;

printf(“Digite sua idade: ”);

scanf (“%d”, &idade);

if (idade >= 18)

{

printf(“Você é maior de idade!”);

}

}

Page 11: Algoritmos e Técnicas de Programação

SE ENTAO - Fluxograma

Leia Idade

Início

Idade >= 18?

Fim

Escreva “Você é maior de idade”

Verdadeiro Falso

Page 12: Algoritmos e Técnicas de Programação

Estrutura de condição

SE ENTAO SENAO

O algoritmo anterior resolve o nosso problema quando a pessoa é MAIOR DE IDADE, porém não nos dá nenhum retorno para quando a mesma for MENOR DE IDADE.

Para contornar esse tipo de situação, a ESTRUTURA DE CONDIÇÃO SE ENTAO, oferece a possibilidade de executarmos uma determinada ação ou comando, se o resultado da EXPRESSÃO LÓGICA for VERDADEIRO e de executarmos uma ação diferente se o resultado da EXPRESSÃO LÓGICA for FALSO. Para essas situações é utilizado o comando SENAO.

Page 13: Algoritmos e Técnicas de Programação

SE ENTAO SENAO - Fluxograma

Leia Idade

Início

Idade >= 18?

Fim

Escreva “Você é maior de idade”

Verdadeiro Falso

Escreva “Você é menor de idade”

Page 14: Algoritmos e Técnicas de Programação

SE ENTAO SENAO - Algoritmo

algoritmo "condicao"

variável

inteiro idade

inicio

escreva("digite a sua idade")

leia(idade)

se idade >= 18 entao

escreva("você é MAIOR de idade")

senao

escreva("você é MENOR de idade")

fimse

Fimalgoritmo

Page 15: Algoritmos e Técnicas de Programação

SE ENTAO SENAO – C

main()

{

int idade;

printf(“Digite sua idade: ”);

scanf (“%d”, &idade);

if (idade >= 18)

{

printf(“Você é MAIOR de idade!”);

}

else

{

printf(“Você é MENOR de idade!”);

}

}

Page 16: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Utilizando variáveis

Em todos os exemplos vistos até o presente

momento, o resultado que é enviado para a

tela (a saída do sistema) é escrito logo após a

verificação da EXPRESSÃO LÓGICA e dentro

da ESTRUTURA DE CONDIÇÃO;

Mas isso não é uma regra, podemos

simplesmente armazenar informações em

variáveis e escrever o resultado obtido

somente no final.

Page 17: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Utilizando variáveis

Por exemplo, no algoritmo que avalia se

uma determinada pessoa é MAIOR DE

IDADE ou se é MENOR DE IDADE,

poderíamos criar uma variável que

pudesse receber a situação em que a

pessoa se encontra e depois

simplesmente escrever o valor dessa

variável.

Page 18: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Utilizando variáveis

Veja como ficaria: algoritmo "condicao"

variável

inteiro idade

cadeia maioridade

inicio

escreva("digite a sua idade")

leia(idade)

se idade >= 18 entao

maioridade ← "MAIOR"

senao

maioridade ← "MENOR"

fimse

escreva(“você é “, maioridade,” de idade”)

Fimalgoritmo

Page 19: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Utilizando variáveis – C main()

{

int idade;

char maioridade[6];

printf(“Digite sua idade: ”);

scanf (“%d”, &idade);

if (idade >= 18)

{

strcpy (maioridade, “MAIOR”);

//strcpy = string copy – função que copia o conteúdo da

//segunda string (cadeia de caracteres) para a primeira.

//Equivale a uma atribuição maioridade = “MAIOR”

}

else

strcpy (maioridade, “MENOR”);

printf(“Você é %s de idade!”, maioridade);

}

Page 20: Algoritmos e Técnicas de Programação

Utilizando variáveis - Fluxograma

Leia Idade

Início

Idade >= 18?

Fim

maioridade ← “MAIOR”

Verdadeiro Falso

maioridade ← “MENOR”

Escreva “Você é “ + maioridade + “ de idade”

Page 21: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Exemplos de Aplicação

Vamos reconsiderar agora o exercício feito na última aula:

----------------------------------------------------------------------

Elabore um algoritmo que leia dois números inteiros e imprima a seguinte saída:

Dividendo:

Divisor:

Quociente:

Resto:

Para a resolução desse algoritmo utilize os comandos MOD(%) e DIV(/) para o cálculo do resto e do quociente da divisão.

----------------------------------------------------------------------

Page 22: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Análise do Problema

Entrada:

Nosso programa necessitará que o

usuário informe dois valores inteiros

(O Dividendo e o Divisor)

Processamento:

O programa deverá calcular o quociente e

o resto da divisão inteira do dividendo

pelo divisor;

Page 23: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Análise do Problema

Saída:

O programa deverá escrever as informações

conforme especificação feita no enunciado do

problema.

Dividendo: <valor informado pelo usuário>

Divisor: <valor informado pelo usuário>

Quociente: <valor calculado na fase de processamento>

Resto: <valor calculado na fase de processamento>

Page 24: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Para calcular o quociente, pode-se

usar a seguinte expressão:

quociente ← dividendo div divisor

ou, em C...

quociente = dividendo / divisor;

Page 25: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Para calcular o resto, pode-se usar a

seguinte expressão:

resto ← dividendo mod divisor

ou, em C...

resto = dividendo % divisor;

Page 26: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Pergunta 1:

E se o usuário informar (digitar) valor zero

(0) para a variável divisor?

Resposta 1:

Teremos um problema com a matemática

(divisão por zero) e, consequentemente,

com nosso programa (ele será abortado)!

Page 27: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Pergunta 2:

O que fazer diante desta possibilidade?

Resposta 2:

Teremos de acrescentar um comando

condicional antes da realização dos

cálculos.

Page 28: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Leia Dividendo

Início

Fim

Leia Divisor

Calcule Quociente

Calcule Resto

Imprima Resultados

Antes, tínhamos:

Page 29: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Leia Dividendo

Início

Divisor != 0?

Fim

Verdadeiro Falso

Leia Divisor

Calcule Quociente

Calcule Resto

Imprima Resultados

Page 30: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando a fase de processamento

Leia Dividendo

Início

Divisor != 0?

Fim

Verdadeiro Falso

Leia Divisor

Calcule Quociente

Calcule Resto

Imprima Resultados

Imprima

Mensagem de

Erro

Page 31: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Expressões Lógicas Compostas

Como vimos anteriormente, é possível

compor expressões lógicas utilizando

operadores relacionais como (<, >, !=,

==,<=, >=)

É possível também compor expressões

lógicas utilizando os operadores E

(&&), OU (||) e NÃO (!).

Page 32: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Expressões Lógicas Compostas

Nesse sentido, a expressão lógica que

será avaliada na estrutura de condição

SE ENTAO também pode ser formada

por uma expressão lógica composta.

Por exemplo, considere a situação de

um determinado aluno em uma

disciplina.

Page 33: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Expressões Lógicas Compostas

Sabe-se que para ser aprovado, é

necessário que um aluno tenha:

NOTA >= 7.0 E FREQUENCIA >= 75 %.

Page 34: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Expressões Lógicas Compostas

SE (nota >= 7) E (freqüência >= 0.75) ENTAO

ESCREVA(“O aluno está aprovado”)

SENAO

ESCREVA(“O aluno está reprovado”)

FIMSE

Veja que para avaliar essa situação

necessitaremos utilizar o operador

lógico “E” da seguinte forma:

Page 35: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Expressões Lógicas Compostas

algoritmo "aluno"

variavel

real nota, frequencia

início

escreva("digite a nota do aluno")

leia(nota)

escreva("digite a frequencia do aluno")

leia(frequencia)

se (nota >= 7) E (frequencia >= 0.75) entao

escreva("O aluno está aprovado")

senao

escreva("O aluno está reprovado")

fimse

Fimalgoritmo

Page 36: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Dentro de uma estrutura SE ENTAO

SENAO é perfeitamente possível

utilizarmos mais de uma linha de

COMANDO, ou até mesmo outras

estruturas SE ENTAO SENAO.

Existem situações em que os caminhos

para a tomada de uma decisão

acabam formando uma espécie de

árvore com diversas ramificações.

Page 37: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Nesses casos, podemos recorrer à

utilização de várias estruturas SE

ENTAO SENAO embutidas umas

dentro das outras, comumente

chamadas de NINHOS.

Page 38: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Por exemplo, suponha que desejemos

refinar um pouco mais o problema

referente às médias dos alunos de uma

dada disciplina.

Sabemos que um aluno é APROVADO

caso apresente MÉDIA maior ou igual

a 7.0 e FREQUENCIA maior ou igual a

75%.

Page 39: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Se o aluno obtiver a FREQUENCIA

mínima exigida e uma MÉDIA entre 4 e

7, o mesmo ainda teria direito a uma

última avaliação de RECUPERAÇÃO.

Como faríamos para resolver o

problema em questão utilizando

apenas estruturas de condição SE

ENTAO SENAO ?

Page 40: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Poderíamos começar avaliando a

FREQUENCIA do aluno, e se a mesma

for menor que 75% o aluno já estaria

REPROVADO;

Porém, caso a FREQUENCIA respeite

o mínimo exigido, teremos que avaliar

a MÉDIA para saber se o mesmo está

APROVADO, em RECUPERAÇÃO ou

REPROVADO.

Page 41: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Leia Média

Início

Frequência < 0.75?

Fim

Verdadeiro Falso

Leia Frequência

Avalie a Média Escreva “Você

está reprovado

por faltas!”

Page 42: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

No momento em que é verificado que a

FREQUENCIA é menor que 0.75 (75%)

o aluno já está imediatamente

REPROVADO;

Caso a FREQUENCIA seja maior ou

igual a esse valor, devemos continuar

com o algoritmo para avaliar em que

situação que o aluno se encontra;

Page 43: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

Enfim, agora é necessário avaliar a

MEDIA do mesmo, verificando se está

acima de 7.0 (APROVADO), entre 4 e

7.0 (RECUPERACAO), ou abaixo de

4.0 (REPROVADO).

Page 44: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando o passo “Avalie a Média”

Média >= 7.0?

Fim

Verdadeiro Falso

Escreva “Você

está aprovado!” Média >= 4.0?

Verdadeiro

Escreva “Você

está em

Recuperação!”

Escreva “Você

está reprovado

por Média!”

Falso

Page 45: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Refinando o passo “Avalie a Média”

Média >=

7.0?

Escreva “Você

está aprovado!” Média >=

4.0?

Escreva “Você

está em

Recuperação!” Escreva “Você

está reprovado

por Média!”

Leia Média

Início

Frequência < 0.75?

Fim

Verdadeiro

Falso

Leia Frequência

Escreva “Você

está reprovado

por faltas!”

Verdadeiro Falso

Verdadeiro

Falso

Page 46: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Se Entao Senao ANINHADAS

algoritmo "aluno" variavel real media, frequencia início escreva("digite a media e a frequencia") leia(media, frequencia) se frequencia < 0.75 entao escreva("voce esta reprovado por FALTAS") senao se media >= 7 entao escreva("voce esta APROVADO") senao se media >= 4 entao escreva("voce esta em RECUPERACAO") senao escreva("voce esta REPROVADO POR MEDIA") fimse fimse fimse Fimalgoritmo

Page 47: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

Na aula de hoje, vamos considerar seguinte problema:

----------------------------------------------------------------------

Elabore um algoritmo que leia um número inteiro entre 1 e 12 e imprima o nome do mês correspondente. Caso seja digitado um valor fora desse intervalo, deverá ser exibida uma mensagem informando que não existe mês com esse número.

----------------------------------------------------------------------

A seguir, podemos visualizar algumas possíveis soluções para o problema:

Page 48: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch) algoritmo “MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) se (mes < 1) OU (mes > 12) entao escreva(“Mês INEXISTENTE") senão se mes = 1 entao escreva(“Mês de Janeiro!") fimse

se mes = 2 entao

escreva(“Mês de Fevereiro!")

fimse ......

se mes = 12 entao

escreva(“Mês de Dezembro!")

fimse

fimse Fimalgoritmo

Page 49: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch) algoritmo “MesDoAno" ...... leia(mes) se (mes < 1) OU (mes > 12) entao escreva(“Mês INEXISTENTE") senão se mes = 1 entao escreva(“Mês de Janeiro!") senão

se mes = 2 entao

escreva(“Mês de Fevereiro!")

senão ......

se mes = 12 entao

escreva(“Mês de Dezembro!")

fimse fimse fimse

fimse Fimalgoritmo

Page 50: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

A segunda solução é mais eficiente que a

primeira, pois realiza um número médio de

comparações menor;

Porém, o código fica mais extenso e, às

vezes, confuso;

Será possível criarmos um código enxuto e

eficiente ao mesmo tempo?

Page 51: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

A resposta é sim.

Com a estrutura Escolha ... Caso

(Switch ... Case, em C);

Nessa estrutura, o valor de uma

determinada variável é avaliado e

CASO esse valor coincida com um

valor pré-estabelecido, um COMANDO

(ou grupo de comandos) é executado.

Page 52: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

A estrutura de condição ESCOLHA

CASO é utilizada da seguinte forma:

Escolha <nome da variável>

Caso <valor1>

COMANDO

Caso <valor2>

COMANDO

FimEscolha

Page 53: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Exemplo No exemplo a seguir, a variável n do tipo inteiro é testada, e

CASO a mesma tenha valor 1 é escrito na tela “um”, CASO a

mesma tenha valor 2 é escrito na tela “dois”

algoritmo "teste"

variavel

inteiro n

inicio

escreva("digite n")

leia(n)

escolha n

caso 1

escreva("um")

caso 2

escreva("dois")

fimescolha

Fimalgoritmo

Page 54: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Exemplo – Em C

main()

{

int n;

printf("digite n: ");

scanf (“%d”, &n);

switch (n)

{

case 1:

printf("um");

break;

case 2:

printf("dois");

break;

}

}

Page 55: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

Da mesma maneira que a estrutura de

condição SE ENTAO SENAO

possibilita que executemos algum

comando quando a expressão avaliada

não é VERDADEIRA, a estrutura de

condição ESCOLHA CASO também

nos oferece essa opção

Page 56: Algoritmos e Técnicas de Programação

ESTRUTURAS DE CONDIÇÃO

Comando Escolha (Switch)

A sintaxe para utilizarmos essa opção

é mostrada a seguir: Escolha <nome da variável>

Caso <valor1>

COMANDO

Caso <valor2>

COMANDO

Outrocaso

COMANDO

FimEscolha

Page 57: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Exemplo Trabalhando com o nosso exemplo anterior, agora a variável n do tipo

inteiro é testada, e CASO a mesma tenha valor 1 é escrito na tela “um”, CASO a mesma tenha valor 2 é escrito na tela “dois”, e CASO não tenha nenhum desses valores será escrito na tela “outro valor”:

algoritmo "teste"

variavel

inteiro n

inicio

escreva("digite n")

leia(n)

escolha n

caso 1

escreva("um")

caso 2

escreva("dois")

outrocaso

escreva(“outro valor")

fimescolha

Fimalgoritmo

Page 58: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Exemplo – Em C main()

{

int n;

printf("digite n: ");

scanf (“%d”, &n);

switch (n)

{

case 1:

printf("um");

break;

case 2:

printf("dois");

break;

default:

printf("outro valor");

break;

}

}

Page 59: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Voltando ao Problema Inicial algoritmo “MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) escolha mês caso 1: escreva(“Mês de Janeiro!") caso 2: escreva(“Mês de Fevereiro!") caso 3: escreva(“Mês de Março!") caso 4: escreva(“Mês de Abril!") caso 5: escreva(“Mês de Maio!") caso 6: escreva(“Mês de Junho!") caso 7: escreva(“Mês de Julho!") caso 8: escreva(“Mês de Agosto!") caso 9: escreva(“Mês de Setembro!") caso 10: escreva(“Mês de Outubro!") caso 11: escreva(“Mês de Novembro!") caso 12: escreva(“Mês de Dezembro!") outrocaso: escreva(“Mês INEXISTENTE") fimEscolha Fimalgoritmo

Page 60: Algoritmos e Técnicas de Programação

Comando Escolha (Switch)

Exercício

Criar um algoritmo que leia dois números inteiros, e que solicite ao usuário qual a operação que o mesmo deseja realizar entre esses números.

Caso o usuário digitar o caractere ‘*’ será realizada uma multiplicação;

Caso seja digitado o caractere ‘/’ será realizada uma divisão;

Caso seja digitado o caractere ‘+’ será realizado uma adição entre os números;

Caso seja digitado o caractere ‘-’ será realizada uma subtração.