4. Estrutura de Controle Os algoritmos são criados para solucionar problemas propostos utilizando conceitos de bloco lógico, entrada e saída de dados, constantes, variáveis, expressões lógicas, atribuições e comandos. Dentro do algoritmo, haverá necessidade de tomadas de decisões que vão interferir diretamente no andamento do programa. As estruturas básicas de controle do fluxo de execução são: seqüencial, condicional ou de seleção e repetição. Fig.1: Ilustração de Estrutura de Controle Fonte:Internet 4.1 Estrutura de Controle Seqüencial Conjunto de comandos que são executados numa seqüência linear, de cima para baixo, ou seja, na mesma ordem em que aparecem. Cada comando é executado somente após o término do comando anterior. Uma estrutura de Controle sequencial é delimitada pelas palavras reservadas Inicio e Fim e é constituída de comandos de atribuição, comandos de entrada e comandos de saída. Fig.2: Ilustração de Estrutura Seqüencial Fonte: Internet Sintaxe Geral: inicio Comando 1; Comando 2; Comando 3; .... Comando n fim 1 Fig,2: Ilustração de Estrutura de controle Sequencial 4.2 Estrutura de Controle Condicional ou de Seleção Permite a escolha de um grupo de ações (blocos) a serem executadas de acordo com a aceitação ou não de certas condições, representadas por expressões lógicas ou relacionais. São testados parâmetros e, dependendo dos seus valores, toma-se um caminho ou outro. As condições que são testadas num algoritmo são do tipo lógica booleana (Verdadeiro ou Falso). Portanto, a seleção de ações pode ter, no máximo, duas alternativas: uma se a condição for verdadeira e outra se a condição testada for falsa. Fig.3: Ilustração de Estrutura de Controle Condicional ou de Seleção Fonte: Internet 4.2.1 Seleções Simples (Se... Então) Sintaxe Geral: se <condição> então início // início do bloco verdade comando 1; comando 2; ... comando n; fim; // fim do bloco verdade fimse; Quando a <condição> for verdadeira o “bloco verdade” é executado Quando a <condição> for falsa o “bloco verdade” não é executado Exemplo: Média Aritmética com Aprovação início // declaração de variáveis real: N1, N2, N3, N4, // notas bimestrais MA; // média anual // entrada de dados 2 leia (N1, N2, N3, N4); // processamento MA = (N1 + N2 + N3 + N4) / 4; // saída de dados escreva (MA); se (MA >= 7) então escreva (“Aluno Aprovado !”); fimse; fim. 4.2.2 Seleção Composta (Se...então...senão) Nesta estrutura uma única condição (expressão lógica) é avaliada e dependendo do resultado, um comando ou um conjunto de comandos serão executados se a avaliação for verdadeira ou não serão executados se a avaliação for falsa. Sintaxe Geral: se <condição> então início // início do bloco verdade comando 1; comando n; fim; // fim do bloco verdade senão início // início do bloco falsidade comando 1; comando n; fim; // fim do bloco falsidade fimse; Quando a <condição> for verdadeira o “bloco verdade” é executado Quando a <condição> for falsa o “bloco falsidade” é Executado Exemplo: Média Aritmética com aprovação e reprovação início // declaração de variáveis real: N1, N2, N3, N4, // notas bimestrais MA; // média anual leia (N1, N2, N3, N4); MA = (N1 + N2 + N3 + N4) / 4; escreva (MA); se (MA >= 7) então início escreva (“Aluno Aprovado !”); escreva (“Parabéns !”); fim; senão início escreva (“Aluno Reprovado !”); 3 escreva (“Estude mais !”); fim; fimse; fim. 4.2.3 Seleção Encadeada ou Aninhada Esta estrutura ocorre quando um grande conjunto de possibilidades ou combinações de situações forem satisfeitas formando uma seleção encadeada ou aninhada. Exemplo: localização do Ponto Sintaxe Geral: se – então – se se <Cond1> então se <Cond2> então se <Cond3> então se <Cond4> então W; fimse; fimse; fimse; fimse; É equivalente a: se <Cond1> e <Cond2> e <Cond3> e <Cond4> então W; fimse; 4.2.4 Seleção de Múltipla Escolha 4 Esta estrutura é uma generalização da construção SE, onde somente uma condição é avaliada e dois caminhos podem ser seguidos. Nesta estrutura de Seleção de Múltipla Escolha pode haver uma ou mais condições a serem testadas e um comando diferente associado a cada uma dessas. Sintaxe Geral: escolha X caso V1: C1; caso V2: C2; caso V3: C3; caso V4: C4; fimescolha; Exemplo: Origem do Produto início real: Preço; inteiro: Origem; leia (Preço, Origem); escolha Origem caso 1: escreva (Preço, “ – produto do Sul”); caso 2: escreva (Preço, “ – produto do Norte”); caso 3: escreva (Preço, “ – produto do Leste”); caso 4: escreva (Preço, “ – produto do Oeste”); caso 7, 8, 9: escreva (Preço, “ – produto do Sudeste”); caso 10..20: escreva (Preço, “ – produto do Centro-Oeste”); caso 5, 6, 25..50: escreva (Preço, “ – produto do Nordeste”); caso contrário: escreva (Preço, “ – produto importado”); fimescolha; fim. 4.3 Estrutura de Controle de Repetição A estrutura de Controle de Repetição é utilizado quando se deseja que um determinado conjunto de instruções ou comandos sejam executados um número definido ou indefinido de vezes, ou enquanto uma determinada condição prevalecer ou até que seja alcançada. As estruturas de repetição são também chamadas de Laços ou Loops. Quanto ao critério de parada, os laços podem utilizar: Repetição com Teste no Início, repetição com Teste no Final ou repetição com Variável de Controle. 5 Fig.4: Ilustração de Estrutura de Controle de Repetição Fonte: Internet 4.3.1 Repetição com Teste no Início Laço que verifica antes de cada execução, se é “permitido” executar o trecho do algoritmo. Trata-se de um laço que se mantém repetindo enquanto uma dada condição permanecer verdadeira. Sintaxe Geral: enquanto <condição> faça comando 1; comando 2; ... comando n; fimenquanto; A elaboração de algoritmos com estas estruturas necessita de dois tipos de variáveis denominadas variáveis contadoras e acumuladoras. Uma variável contadora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor constante, geralmente 1 (um), conforme o exemplo abaixo: início inteiro: CON; CON = 0; //Contadora => inicialização com valor 0 (zero) enquanto CON < 3 faça CON = CON + 1; //Contadora é incrementada da constante 1 (um) fimenquanto; fim. Exemplo: Média Aritmética para 50 alunos com teste no início com contador início // declaração de variáveis real: N1, N2, N3, N4, // notas bimestrais MA; // média anual inteiro: CON; // contador 6 CON = 0; // inicialização do contador enquanto (CON < 50) faça // teste da condição de parada leia (N1, N2, N3, N4); MA = (N1 + N2 + N3 + N4) / 4; escreva (MA); se (MA >= 7) então escreva (“Aluno Aprovado. Parabéns !”); senão escreva (“Aluno Reprovado. Estude mais !”); fimse; COM = CON + 1; // incremento do contador fimenquanto; fim. Uma variável acumuladora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor variável, geralmente a variável usada na estrutura de controle, conforme o exemplo abaixo: início inteiro: CON, X, ACM; CON = 0; ACM = 0; ACM é o acumulador enquanto CON < 3 faça CON = CON + 1; leia (X); ACM = ACM + X; fimenquanto; fim. Exemplo: Média Aritmética para 50 alunos com teste no início com contador e acumulador início // declaração de variáveis real: MA, // média anual de dado aluno ACM, // Acumulador MAT; // Média Anual da Turma inteiro: CON; // contador COM = 0; // inicialização do contador ACM = 0; // inicialização do acumulador enquanto (CON < 50) faça // teste da condição de parada leia (MA); ACM = ACM + MA; // soma em ACM os valores lidos em MA CON = CON + 1; // incremento do contador fimenquanto; MAT = ACM / 50; // calculo da média anual da turma escreva (“média anual da turma = “, MAT); fim. 7 4.3.2 Repetição com Teste no Final Laço que verifica depois de cada execução, se é “permitido” continuar executando o trecho do algoritmo. Trata-se de um laço que se mantém repetindo até que uma dada condição se torne verdadeira. Sintaxe Geral: repita comando 1; comando 2; ... comando n; até <condição>; Exemplo: Média Aritmética para 50 alunos com teste no final (repita) início // declaração de variáveis real: MA, // média anual de dado aluno ACM, // Acumulador MAT; // Média Anual da Turma inteiro: CON; // contador COM = 0; // inicialização do contador ACM = 0; // inicialização do acumulador repita leia (MA); ACM = ACM + MA; // soma em ACM os valores lidos em MA CON = CON + 1; // incremento do contador até (CON >= 50); // teste da condição de parada MAT = ACM / 50; // calculo da média anual da turma escreva (“média anual da turma = “, MAT); fim. 4.3.3 Repetição com Variável de Controle Laço simplificado para utilização em repetições de quantidade predeterminada. Incorpora internamente o funcionamento de um contador de repetições: Sintaxe Geral: para V de vi até vf passo p faça comando 1; comando 2; ... comando n; fimpara; Exemplo: Média Aritmética para 50 alunos com variável de controle (para) 8 início // declaração de variáveis real: MA, // média anual de dado aluno ACM, // Acumulador MAT; // Média Anual da Turma inteiro: V; // contador ACM = 0; // inicialização do acumulador para V de 1 até 50 passo 1 faça leia (MA); ACM = ACM + MA; // soma em ACM os valores lidos em MA fimpara; MAT = ACM / 50; // calculo da média anual da turma escreva (“média anual da turma = “, MAT); fim. 4.4 Comparação entre Estruturas de Repetição: Aprendemos 3 maneiras de construir laços de repetição, e é importante perceber que existem laços mais adequados ou convenientes para cada situação: 4.5 Exercícios de Fixação: 1) Elabore um algoritmo que dada a idade de um nadador classifique-o em uma das seguintes categorias: Infantil A = 5 a 7 anos Infantil B = 8 a 11 anos Juvenil A = 12 a 13 anos Juvenil A = 14 a 17 anos Adultos = Maiores de 18 anos 2) Elabore um algoritmo que gera e escreve os números ímpares do números lidos entre 100 e 200. 3) Construa um algortimo que leia 500 valores inteiros e positivos e: Encontre o maior valor Encontre o menor valor Calcule a média dos números lidos 9 4) Faça um algoritmo que determine o maior entre N números. A condição de parada é a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o maior até que a entrada seja igual a 0 (ZERO). 5) Faça um algoritmo que conte de 1 a 100 e a cada múltiplo de 10 emita uma mensagem: “Múltiplo de 10”. 6) Observe o algoritmo e responda: X, N : inteiro Inicio leia (N , X) Y=1 Enquanto ( X > 0 ) faça inicio Y=Y*N X=X-1 fim Fim enquanto escreva ( Y ) Fim a) Qual o objetivo do algoritmo acima (i.e.: qual o problema que ele está solucionando)? b) O algoritmo está correto? Como você fez para testá-lo? c) Altere o algoritmo, utilizando a Estrutura Repita ... Até d) Altere o algoritmo, utilizando a Estrutura Para ... Faça e) Qual das três opções de algoritmo é a melhor na sua opinião? Por que? 1