CEPA ESTRUTURAS DE PROGRAMAÇÃO [1/10] Estrutura Condicional (SE... ENTAO e SE... ENTAO... SENAO) Se o Tabajara vencer entao ele será campeão da libertadores Então, poderia basicamente dizer que em um algoritmo a sintaxe seria a seguinte: se <condição> entao <ações a serem realizadas se a condição for verdadeira> //pode ser uma ou mais Observe que as ações/comandos só serão executados SE a condição for VERDADEIRA. Como ficaria em um algoritmo? Em Visualg, seria da seguinte forma: se (vencedor = Tabajara ) entao escreval ( vencedor, será o campeão da Libertadores! ) Para que o espaço antes na linha do comando? Esse espaço é o que chamamos de indentação (recuo/tabulação) vai servir para que seu código tenha uma melhor aparência, e fique mais fácil para entendê-lo e dar manutenção. Entendi essa parte, mas e se a condição for falsa? Nesse caso, podemos fazer nosso algoritmo de duas maneiras: 1 utilizar dois condicionais SE não aninhados: se dinheiro >= 30 entao ir_ao_cinema <- verdadeiro assistir_tv <- falso se dinheiro < 30 entao ir_ao_cinema <- falso assistir_tv <- verdadeiro
CEPA ESTRUTURAS DE PROGRAMAÇÃO [2/10] 2 A segunda opção, que é bem melhor e de mais agradável leitura. se dinheiro >= 30 entao ir_ao_cinema <- verdadeiro assistir_tv <- falso ir_ao_cinema <- falso assistir_tv <- verdadeiro Observem que agora na linha quatro, apareceu uma palavrinha nova para nós O Para que serve o? O, será executado sempre que o resultado do SE for FALSO. No exemplo acima, o interpretador fez uma pergunta, o dinheiro é maior ou igual a 30? Caso fosse, a iável ir_ao_cinema receberia o valor verdadeiro, e a iável assistir_tv receberia o valor falso. Se o dinheiro não fosse maior que 30, ou seja, caso ele fosse menor, o valor recebido das iáveis ir_ao_cinema e assistir_tv seriam outros. Estrutura Condicional Simples Quando utilizamos apenas o SE... ENTAO, temos uma condicional simples que vai avaliar se a condição é verdadeira, se for, executará o comando, caso contrário finaliza o algoritmo. se (nota >= 7) entao escreval ( Aprovado ) se (nota < 7) entao escreval ( Reprovado ) Estrutura Condicional Aninhada Utizamos SE... ENTAO... SENAO e/ou colocando um SE dentro de outro. se (nota >= 7) entao escreval ( Aprovado ) escreval ( Reprovado ) ou
CEPA ESTRUTURAS DE PROGRAMAÇÃO [3/10] se (nota < 7) entao escreval ( Reprovado ) escreval ( Aprovado ) Ainda utilizando condicional aninhada vamos ver caso precisássemos comparar duas condições. Como nas Escolas ao final do ano, que é necessário saber se está Aprovado, Reprovado ou de Recuperação. Notas finais maiores ou iguais a 20 está aprovado, notas menores do que 10 está reprovado, e notas entre 10 e menor que 20 está em recuperação. se (nota_final >= 20) entao escreval ( Aprovado ) se (nota_final < 10) entao escreval ( Reprovado ) escreval ( Recuperação ) Fácil não?! Agora, um algoritmo com cálculos, para que vocês entendam como funciona a estrutura condicional se. Desafio do dia (Tentem entender o algoritmo acima sem copia-lo no VisualG) Faça um algoritmo que receba um número e mostre uma mensagem caso este número seja maior que 10. Faça um algoritmo que receba um número, e informe se este número está no intervalo de 100 a 200.
CEPA ESTRUTURAS DE PROGRAMAÇÃO [4/10] Algoritmo calcular_media_com_se N1, N2, N3, MEDIA: real Inicio escreval ( Digite a primeira nota: ) leia (N1) escreval ( Digite a segunda nota: ) leia (N2) escreval ( Digite a terceira nota: ) leia (N3) MEDIA <- (N1 + N2 + N3)/3 se (MEDIA > 7.0) entao escreval ( A média é maior que 7.0 ) se (MEDIA = 7.0) entao escreval ( A média é igual a 7.0 ) escreval ( A média é menor que 7.0 ) Algoritmo abrir_cofre n1, n2: inteiro escreval ( Insira o primeiro digito ) leia (n1) escreval ( Insira o segundo digito ) leia (n2) se (n1 = 2) E (n2 = 5) entao escreval ("Cofre abre") escreval ("Cofre não abre") Algoritmo "redigitar_com_se" nome: caractere matricula: inteiro escreval ("Digite o nome") leia (nome) se (nome = "") entao escreval ("Digite novamente o nome") escreval ("Digite o nome") leia (nome) escreval ("Digite o número da matricula") leia (matricula) se (matricula = 0) entao escreval ("Digite novamente o número da matricula") escreval ("Digite o número da matricula") leia (matricula) escreval ("O nome é: ", nome, e a matricula é:, matricula) Algoritmo abrir_cofre2 senha, digitada: inteiro senha <- 25 escreval ( Digite a senha: ) leia (digitada) se (digitada = senha) entao escreval ("Senha correta") escreval ("Senha incorreta")
CEPA ESTRUTURAS DE PROGRAMAÇÃO [5/10] Estrutura de Decisão (ESCOLHA... CASO) Nas aulas anteriores aprendemos sobre estrutura condicional, quando e como utilizar o operador SE-ENTAO-SENAO, porém, dependendo da ocasião, quando se há muitas escolhas diferentes, nosso código pode ficar grande, e de difícil leitura. Nesse caso, entra mais a função ESCOLHA CASO CASO OUTROCASO Ele é tão simples quanto o SE. Abaixo tem um algoritmo, sobre a classificação de atletas pela sua faixa etária, este exemplo, poderia ter sido feito utilizando a estrutura condicional SE... ENTAO, mas aqui utilizarei o ESCOLHA... CASO, para que vocês entendam como funciona o mesmo. algoritmo classifica_atletas nome, categoria: caractere idade: inteiro escreval ( Digite o nome do atleta: ) leia (nome) escreval ( Informe a idade do atleta: ) leia (idade) escolha idade // A função escolha irá interpretar os casos abaixo em cima da iável idade caso 5,6,7,8,9,10 // Caso a iável idade receba de 5 a 10, irá atribuir na iável categoria o valor: infantil categoria <- infantil caso 11,12,13,14,15 // Caso a iável idade receba de 11 a 15, irá atribuir na iável categoria o valor: juvenil categoria <- juvenil caso 16,17,18,19,20 // Caso a iável idade receba de 16 a 20, irá atribuir na iável categoria o valor: junior categoria <- junior caso 21,22,23,24,25 // Caso a iável idade receba de 21 a 25, irá atribuir na iável categoria o valor: profissional categoria <- profissional outrocaso // E se a iável idade não receber nenhum dos valores mencionados, receberá sem categoria categoria <- SEM CATEGORIA fimescolha // O fimescolha finaliza a função que abrimos anteriormente escreva( Categoria:,categoria) // E este último escreva, serve para que possamos mostrar o resultado ao usuário
CEPA ESTRUTURAS DE PROGRAMAÇÃO [6/10] Veja outros algoritmos utilizando a estrutura ESCOLHA... CASO... OUTROCASO: Algoritmo "escolhanota" nota: inteiro msg: caractere escreval ("Digite a nota:") leia (nota) escolha nota caso 0 escreval ("Muito baixa") caso 1, 2, 3 escreval ("Baixa") caso 4, 5, 6 escreval ("Média") caso 7, 8, 9 escreval ("Alta") caso 10 escreval ("Muito alta") fimescolha Observe que os parâmetros das linhas CASO como são do tipo número basta digitálos e separar por vírgula. Neste algoritmo não tem OUTROCASO pois, estamos limitando o usuário a digitar apenas números inteiros entre 0 e 10 caso não digite o algoritmo finaliza. Algoritmo "escolha_conceito" conceito: caractere escreval ("Digite a letra correspondente ao conceito:") escreval ("R Regular; B Bom; MB Muito Bom; O - Ótimo") leia (conceito) escolha conceito caso R escreval ("Regular") caso B escreval ("Bom") caso MB escreval ("Muito Bom") caso O escreval ("Ótimo") outrocaso escreval ("Sem conceito") fimescolha Observe que neste outro exemplo os parâmetros das linhas CASO são do tipo caractere ou literal, por isto os digitamos entre aspas. Veja também que utilizamos uma linha instruindo o usuário como ele deveria inserir os dados. Exemplo: "R Regular; B Bom; MB Muito Bom; O - Ótimo".
CEPA ESTRUTURAS DE PROGRAMAÇÃO [7/10] Estruturas de Repetição 1 (REPITA... ATE) O comando é feito depois é avaliada a condição. Veja a sintaxe: <lista de comandos> ate <expressão lógica ou relacional> Observe que não tem fim. Vamos ver alguns exemplos de uso do laço de repetição. Vejamos dois algoritmos usados para escrever na tela os números de 1 até 10. algoritmo Repeticao1" i: inteiro i <- 1 escreval (i) i <- i + 1 ate i > 10 algoritmo Repeticao2" i: inteiro i <- 1 escreval (i) i <- i + 1 enquanto i > 10 Perceba, o que muda em um algoritmo é o uso do ENQUANTO ao invés de ATE. Apesar da mudança, o resultado será o mesmo. Vejamos agora como calcular a média de 3 alunos. Algoritmo "media3alunos" p1, p2, p3, m, i: real nome: caractere i <- 1 escreval ("Entre com o nome do aluno:") leia ( nome ) escreval ("Entre com as notas das 3 provas") escreval ("Digite a primeira nota: ") leia (p1) escreval ("Digite a segunda nota: ) leia (p2) escreval ("Digite a terceira nota: ") leia (p3) m <- (p1+p2+p3)/3 escreval("a média do aluno: ", nome, " é ",m) i <- i + 1 {controle de incremento} ate i > 3 {condição que limita a quantidade de repetições} Veja que fora do laço de repetição precisamos atribuir 1 para a iável i que vai controlar as repetições. Veja que tem um controle do incremento dentro do laço de repetição, que vai contar cada repetição. E a condição que limita a repetição.
CEPA ESTRUTURAS DE PROGRAMAÇÃO [8/10] Laço de repetição para Decremento algoritmo "DecrementarNumerosPares i: inteiro i <- 10 Será escrito na tela: 10 8 6 4 2 escreval (i) i <- i 2 {observe o sinal de menos} ate i = 0 No exemplo acima é feito decremento pois, utilizamos o sinal de menos no contador do laço. Se utilizássemos o sinal de mais seria incremento, como nos 3 primeiros algoritmos que vimos sobre repetição. Temos que tomar cuidado para não criar uma condição que nunca será verdadeira, ou mesmo de atribuir valor à iável de controle do laço dentro do laço de repetição. Se fizermos uma destas coisas teremos um laço infinito. Veja o exemplo abaixo: algoritmo lacoinfinito contador: inteiro contador <- 1 {contador está dentro do laço} contador <- contador + 1 ate contador = 10 O contador deveria ser incrementado fora do laço de repetição, acima da palavra. Da forma que está toda vez o que laço é repetido, o contador recebe 1, depois é somado este valor com o 1, o resultado é 2, depois, novamente o contador recebe 1 e é somado com 1. Vai ficar nisto o tempo todo, pois, nunca chegará a ser igual a 10, que é a condição para fim da repetição. Vejamos mais um exemplo utilizando o laço REPITA... ATE. O laço é finalizado quando a opção correspondente a Sair é digitada.
CEPA ESTRUTURAS DE PROGRAMAÇÃO [9/10] Algoritmo "Menu" opcao: inteiro escreval ("Cadastro:") escreval ("1-Incluir") escreval ("2-Alterar") escreval ("3-Consultar") escreval ("4-Excluir") escreval ("5-Sair") leia (opcao) escreval ("Opção selecionada ", opcao) ate opcao = 5 Você escolherá opções até opção 5 ser utilizada. Estruturas de Repetição 2 (ENQUANTO... FACA) Diferentemente do REPITA... ATE. No laço de repetição ENQUANTO... FACA, primeiro a condição é verificada depois o comando é feito. Veja a sintaxe: enquanto <expressão lógica ou relacional> faca <lista de comandos> fimenquanto Vejamos um exemplo onde o cálculo é feito enquanto a iável é maior ou igual a zero. Algoritmo Calculo i: real escreval ("Digite um número maior ou igual a zero: ") leia (i) enquanto i >= 0 faca //O valor digitado será elevado a meio escreval (i^0.5) leia (i) fimenquanto Estruturas de Repetição 3 (PARA... FACA... PASSO) A iável inicial é comparada com o valor final, a repetição é executada até o valor ser menor ou igual. Veja a sintaxe: para <iável de controle> de <valor inicial> ate <valor final> [passo<increm./decrem.>] faca <lista de comandos> fimpara
CEPA ESTRUTURAS DE PROGRAMAÇÃO [10/10] Vejamos o exemplo de um algoritmo que lê e escreve os números ímpares de 1 a 100. Algoritmo Ímpares i: inteiro para i de 1 ate 100 passo 2 faca //Incrementa i de 2 em 2 escreval (i, é ímpar ) fimpara Vejamos agora um algoritmo que lê e escreve os números pares de 2 a 100. Algoritmo "Pares" i: inteiro para i de 2 ate 100 passo 2 faca //Incrementa i de 2 em 2 escreval (i, " é par") fimpara Outro exemplo um algoritmo que lê 5 números e escreve todos os que forem positivos. Algoritmo "Positivos i, numero: inteiro para i de 1 ate 5 passo 1 faca escreval ("Digite um numero") leia ( numero ) se (numero > 0) entao escreval (numero) fimpara Referências: MARTINS, Carlos Fernando. Et al. Lógica de Programação I. 6ª Edição. Palhoça: Unisul, 2009. Desenvolvimento. Disponível em: http://algoritmizando.com/desenvolvimento, Acesso em: 01/01/12.