Algoritmo I Aula 003 Comandos de Controle de Fluxo Estruturas condicionais Os algoritmos estudados até agora utilizam apenas instruções primitivas de atribuição e de entrada e saída de dados. Isto quer dizer que: qualquer conjunto de dados fornecido a este algoritmo, será submetido ao mesmo conjunto de instruções, executadas sempre na mesma seqüência. Porem, na realidade muitas vezes é necessário executar ações diversas em função dos dados fornecidos ao algoritmo, isto é: Dependendo do conjunto de dados de entrada do algoritmo, devese executar um conjunto diferente de instruções. Pode ser necessário executar um mesmo conjunto de instruções um número repetido de vezes. Então podemos dizer que: É necessário controlar o fluxo de execução das instruções (a seqüência em que as instruções são executadas num algoritmo) em função dos dados fornecidos como entrada ao mesmo. Neste caso devemos utilizar estruturas básicas de controle do fluxo de instruções de um algoritmo. De acordo com o modo como este controle é feito, estas estruturas são classificadas em: Estruturas seqüenciais. Estruturas de decisão. Estruturas de repetição. Estrutura Seqüencial Na estrutura seqüencial os comandos de um algoritmo são executados numa seqüência pré-estabelecida. Cada comando é executado somente após o término do comando anterior. Em termos de fluxogramas, a estrutura seqüencial é caracterizada por um único fluxo de execução (um único caminho orientado) no diagrama. Em pseudocódigos, a estrutura seqüencial caracteriza-se por um conjunto de comandos dispostos ordenadamente. Como exemplos de aplicação desta estrutura de controle tem-se os algoritmos que trabalhamos até o momento, onde não há estruturas de decisão ou de repetição. Início real: PRECO_UNIT, PRECO_TOT inteiro: QUANT PRECO_UNIT 5.0; QUANT 10; PRECO_TOT PRECO_UNIT * QUANT; Mostre(PRECO_TOT); Fim. Estrutura Decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificação, têm-se três tipos de estruturas de decisão: SE SE ... ENTÃO SE ... ENTÃO... SENÃO Escolha (CASO) Estrutura Decisão SE...ENTÃO Essa estrutura é representada por um comando que avalia uma expressão lógica, resultando um valor que pode ser TRUE ou FALSE. Como conseqüência desse resultado, o processamento se fará por um dos dois caminhos: SE o resultado for TRUE serão executados os comandos encontrados no caminho indicado pelo resultado TRUE. SE o resultado for FALSE será efetuado um desvio sem comando algum. Ambos os fluxos convergem para o final da estrutura. false expr_logica true comandos Estrutura Decisão SE...ENTÃO...SENÃO Essa estrutura é representada por um comando que avalia uma expressão lógica, resultando um valor que pode ser TRUE ou FALSE. De acordo com esse resultado, o processamento se fará por um de dois caminhos: SE o resultado for TRUE serão executados os comandos encontrados no caminho indicado pelo resultado TRUE. SE o resultado for FALSE serão executados os comandos encontrados no caminho indicado pelo resultado FALSE. Ambos os fluxos convergem para o final da estrutura. false Comandos para caminho FALSE expr_logica true Comandos para caminho TRUE Estrutura Decisão ESCOLHA Nos dois tipos de estruturas de decisão apresentadas anteriormente, ocorre uma escolha entre dois caminhos possíveis. A estrutura CASO (ESCOLHA) possibilita escolher mais de um caminho, de acordo com um resultado a partir de uma expressão inteira. Aqui não se avalia uma expressão lógica, e, sim, uma expressão inteira, cujo resultado numérico vai determinar o caminho a ser seguido. Não existe uma limitação do número de opções que podem ser definidas – dependendo do problema proposto. Se nenhuma das opções for atendida, podemos definir um caminhopadrão. Este caminho é rotulado com o valor FALSE. O caso-padrão caracteriza-se por ser opcional nessa estrutura. false expr_inteira true valor1 comandos padrão comandos1 valorN valor2 comandos2 ... comandosN Exemplos de Estruturas de Decisão SE...ENTÃO...SENÃO inicio (Equação de Bhaskara) (SE...ENTÃO...SENÃO EXTERNO) A, B, C false A=0 ‘Não é uma equação de 2º grau’ D sqrt(B)-4 * A * C (SE...ENTÃO...SENÃO INTERNO) false R1 (-B + sqrt(D)) / (2 * A) R2 (-B - sqrt(D)) / (2 * A) D<0 true true ‘Não existem raízes reais!’ R1, R2 fim Exemplos de Estruturas de Decisão CASO (Calculadora) inicio ACUM OP false OP <> ‘=‘ true VAL fim ACUM false ‘+’ ACUM ACUM + VAL ‘-’ ACUM ACUM - VAL ‘*’ OP ‘/’ ACUM ACUM * VAL OP ACUM ACUM / VAL Exemplos de Estruturas de Decisão SE aninhada Início real: salario, sal_reaj; caracter: prof; mostre(“Informe o profissional: “); leia(prof); mostre(“informe o salario: “); leia(salario); SE (prof = “Técnico”) sal_reaj 1.5 * salario; SENÃO SE (prof = “Gerente”) sal_reaj 1.3 * salario; SENÃO sal_reaj 1.1 * salario; FIM-SE FIM-SE mostre(“Salario reajustado: “, sal_reaj Fim Exemplos de Estruturas de Decisão CASO Início real: salario, sal_reaj; caracter: prof; mostre(“Informe o profissional: “); leia(prof); mostre(“informe o salario: “); leia(salario); ESCOLHA CASO prof = “Técnico” sal_reaj 1.5 * salario; CASO prof = “Gerente” sal_reaj 1.3 * salario SENÃO sal_reaj 1.1 * salario FIM-ESCOLHA mostre(“Salario reajustado: “, sal_rea Fim Exercícios 1. Os exercícios estão disponíveis no portal, no arquivo: Aula 003 - Algoritmo I - Lista exercícios 003.doc