Algoritmos e Estruturas de Dados Estruturas de Controle Prof. Me. Claudio Benossi [email protected] Sumário Estrutura Condicional Estrutura de Repetição Sumário Estrutura Condicional Estrutura de Repetição Estrutura Condicional Execução seqüencial: início Cada comando é executado seqüencialmente, na ordem em que são escritos. separar ingredientes misturar ingredientes colocar massa no forno tirar bolo do forno fim Estrutura Condicional Execução seletiva ou condicional: início olhar o céu Permite a escolha de um grupo de ações (bloco), quando certas condições são (ou não são) satisfeitas. chuva? F V levar guardachuva fim usar roupa leve Estrutura Condicional Simples Composta Múltipla escolha Estrutura Condicional Simples início olhar o céu escuro? V acender luz fim F Estrutura Condicional Simples Utilizada quando precisamos testar uma certa condição antes de executar uma ação. se <condição> então <ação> fim se Estrutura Condicional Simples Exemplo: // declaração de variáveis: real N1, N2, NF, media // início do programa: ler(N1,N2,NF) media ← (N1 + N2 + NF) / 3.0 se (media ≥ 5.0) então escrever(“Aluno aprovado”) fim se fim programa Estrutura Condicional Composta início olhar a vovó nariz grande? F V Chamar caçador fim Entregar cesta de comida Estrutura Condicional Composta Utilizada em situações em que duas alternativas dependem da mesma condição, uma da condição verdadeira (então) e a outra da condição falsa (senão). se <condição> então <ação1> senão <ação2> fim se Estrutura Condicional Composta Exemplo: // declaração de variáveis: real N1, N2, NF, media // início do programa: ler(N1,N2,NF) media ← (N1 + N2 + NF) / 3.0 se (media ≥ 5.0) então escrever("Aluno aprovado") senão escrever("Aluno reprovado") fim se fim programa Estrutura Condicional de Múltipla Escolha início ler signo áries? V Ganhará na loteria F touro? V Não saia de casa hoje! F gêmeos? F fim V Sorte no amor Estrutura Condicional de Múltipla Escolha Utilizada quando um conjunto de valores discretos e ações diferentes são associadas a cada um desses valores. se <cond_01> então <ação1> senão se <cond_02> então <ação2> senão se <cond_03> então <ação3> .... senão <ação default> fim se switch <variável> caso x1: <ação1> caso x2: <ação2> caso x3: <ação3> ... default <ação default> fim switch Estrutura Condicional de Múltipla Escolha O comando switch-case testa apenas igualdade A corrente if-esle-if pode avaliar uma expressão de relação ou lógica Estrutura Condicional de Múltipla Escolha Exemplo: Dado a variável inteira mês, determinar o número de dias ao mês correspondente. switch (mês) caso 1: dias = caso 2: dias = caso 3: dias = caso 4: dias = caso 5: dias = caso 6: dias = .... default: dias = fim switch 31 28 31 30 31 30 0 Sumário Estrutura Condicional Estrutura de Repetição Estruturas de Repetição Permitem que uma seqüência de comandos seja executada repetidamente, até que determinada condição de interrupção seja satisfeita. São também conhecidas como laços ou malhas. Cada repetição do conjunto de comandos é chamada iteração. Estruturas de Repetição A repetição de comandos em um laço pode seguir um dos seguintes critérios: Por Condição (Verificação no início) Por Condição (Verificação no fim) Por Contagem Estrutura de Repetição por Condição :: Verificação no início Permite que comandos sejam repetidos enquanto uma condição não é atendida. enquanto (<condição>) fazer <ações> fim fazer Estrutura de Repetição por Condição :: Verificação no início Exemplo: Dado o valor de N, calcular a soma dos números inteiros de 1 a N. ... soma = 0 i = 1 enquanto (i ≤ N) fazer soma = soma + i i = i + 1 fim fazer ... Estrutura de Repetição por Condição :: Verificação no fim Permite que comandos sejam repetidos até que uma condição seja atendida. fazer <ações> enquanto <condição> fim fazer Estrutura de Repetição por Condição :: Verificação no fim Exemplo: Dado o valor de N, calcular a soma dos números inteiros de 1 a N. ... s = 0 i = 1 fazer s = s + i i = i + 1 enquanto (i ≤ N) fim fazer ... Estrutura de Repetição por Condição :: Verificação no fim × Verificação no início Verificação no início Condição é verificada antes do conjunto de instruções Verificação no fim O conjunto de instruções será executado pelo menos uma vez Condição é verificada depois do conjunto de instruções Estrutura de Repetição por Contagem Permite que comandos sejam repetidos um determinado número de vezes. para (início; fim; incremento) <ações> fim para Estrutura de Repetição por Contagem início: define qual a variável de controle da malha (contador) e seu valor inicial. fim: define o valor final da variável de controle. incremento: define como a variável de controle se altera a cada repetição. Estrutura de Repetição por Contagem Exemplo: Dado o valor de N, calcular a soma dos números inteiros de 1 a N. ... soma = 0 para (i=1; N; incremento=1) soma = soma + i fim para ... Estruturas de Repetição :: Considerações finais Número de repetições pode ser indeterminado, mas não deve ser infinito (loop). As formas de laços de repetição são equivalentes entre si. A escolha entre uma e outra é arbitrária. Estruturas de Repetição :: Considerações finais Repetição por condição s = 0 i = 1 enquanto (i ≤ N) fazer s = s + i i = i + 1 fim fazer atribuição-1 enquanto (condição) fazer instruções atribuição-2 fim fazer Repetição por contagem s = 0 para (i=1; N; incremento=1) s = s + i fim para para (atribuição-1; condição; atribuição-2) instruções fim para Exemplo 1 O IMC (Índice de Massa Corporal) é um critério da Organização Mundial da saúde para dar uma indicação sobre a condição de peso de uma pessoa adulta. A fórmula é IMC peso (altura ) 2 Elabore um algoritmo que leia o peso e a altura de um adulto e mostre sua condição. IMC em adultos Condição abaixo de 18,5 abaixo do peso entre 18,5 e 25 peso normal entre 25 e 30 acima do peso acima de 30 obeso Exemplo 1 – Esboço Variáveis: Entrada: peso, altura Tipo: real (float) Intervalo: maior que zero Saída: IMC Tipo: real Comandos: Ler variáveis de entrada Checar validade das variáveis de entrada Calcular IMC Determinar condição Exemplo 1 – Algoritmo início float peso, altura, imc ler(peso, altura) se ((peso ≤ 0) OU (altura ≤ 0)) então escrever("Valores Inválidos") senão imc = peso / (altura * altura) se (imc ≤ 18,5) então escrever("Abaixo do peso") senão se (imc ≤ 25) então escrever("Peso normal") senão se (imc ≤ 30) então escrever("Acima do peso") senão escrever("Obeso") fim se fim se fim programa verifica validade dos valores inseridos calcula IMC verifica posição na tabela Exemplo 2 Anacleto tem 1,50m e cresce 2cm por ano, enquanto Felisberto tem 1,10m e cresce 3cm por ano. Construa um algoritmo que calcule e imprima quantos anos serão necessários para que Felisberto seja maior que Anacleto. Exemplo 2 – Esboço Crescimento da Anacleto: Altura inicial: alt_a = 1,5 Altura após cada ano: alt_a = alt_a + 0,02 Crescimento de Felisberto: Altura inicial: alt_f = 1,1 Altura após cada ano: alt_f = alt_f + 0,03 Condição de parada: alt_f > alt_a Exemplo 2 – Algoritmo início inteiro ano = 0 float alt_a = 1,5 float alt_f = 1,1 enquanto (alt_a > alt_f) fazer alt_a = alt_a + 0,02 alt_f = alt_f + 0,03 ano = ano + 1 fim fazer escrever(ano) fim programa condições iniciais Exemplo 3 Apresente dois algoritmos para calcular o valor da seguinte soma. Estrutura de repetição por condição. Estrutura de repetição por contagem. 2 3 4 5 6 10 S 1 4 9 16 25 36 100 Exemplo 3 – Termo geral 1 2 3 4 5 6 10 S 1 4 9 16 25 36 100 2 1 22 32 42 Termo geral: (1) i1 i 2 i 52 62 102 Exemplo 3 – Algoritmos início // Contagem float i float soma = 0 para ((i = 1); (i ≤ 10); (incremento = 1)) soma = soma + (-1)^(i+1)*(i)/(i*i) fim para escrever(soma) fim programa início // Condição float soma, i soma = 0 i=1 enquanto (i ≤ 10) fazer soma = soma + (-1)^(i+1)*(i)/(i*i) i=i+1 fim fazer escrever(soma) fim programa termo geral termo geral Exemplo 4 início inteiros: A, B, i, j ler(A) fazer para (i=1; i ≤ A; incremento=1) j = i enquanto (j ≤ A) fazer escrever(j) j = j + 1 fim fazer fim para B = A ler(A) enquanto ((A ≠ B) AND (A > 0)) fim fazer fim O O O O que que que que será será será será mostrado se mostrado se mostrado se mostrado se inserirmos inserirmos inserirmos inserirmos 4 e 0? 3, 2 e 2? 2, 1 e 0? 1 e 0? Exemplo 5 Construa um algoritmo que verifique se um número fornecido pelo usuário é primo ou não. Exemplo 5 – Esboço O que é um número primo? (divisível por ele mesmo) E (divisível por 1) Zero e Um não são primos Se A é divisível por B, então (A % B = 0) Checar divisibilidade entre número em teste e divisores. Repetir teste, incrementando-se o divisor a partir de 2. Se um dos resto for zero, não há necessidade de testar novos divisores número em teste é primo. Não há necessidade de testar divisores maiores que a metade do número em teste. Exemplo 5 – Algoritmo :: Refinamento 1 início inteiro num, div, resto ler(num) div = 2 enquanto ((div < num/2) AND (resto ≠ 0)) fazer resto = num % div div = div + 1 fim fazer se (resto ≠ 0) então escrever("É primo") senão escrever("Não é primo") fim se fim programa testa divisibilidade determina primalidade de acordo com o resto Exemplo 5 – Algoritmo :: Refinamento 2 início inteiro num, div, resto ler(num) se (num < 0) então escrever("Valor Inválido") senão div = 2 enquanto ((div < num/2) AND (resto ≠ 0)) fazer resto = num % div div = div + 1 fim fazer se (resto ≠ 0) então escrever("É primo") senão escrever("Não é primo") fim se fim se fim programa verifica validade dos valores inseridos testa divisibilidade determina primalidade de acordo com o resto Exemplo 5 – Algoritmo :: Refinamento 3 início inteiro num, div, resto ler(num) se (num < 0) então escrever("Valor Inválido") senão se ((num == 1) OU (num == 0)) então escrever("Não é primo") senão div = 2 enquanto ((div < num/2) AND (resto ≠ 0)) fazer resto = num % div div = div + 1 fim fazer se (resto ≠ 0) então escrever("É primo") senão escrever("Não é primo") fim se fim se fim programa verifica validade dos valores inseridos 0 e 1 não são primos testa divisibilidade determina primalidade de acordo com o resto Exemplo 5 – Algoritmo :: Refinamento 4 início inteiro num, div, resto ler(num) verifica validade se (num < 0) então dos valores escrever("Valor Inválido") inseridos senão 0 e 1 não são se ((num == 1) OU (num == 0)) então primos escrever("Não é primo") senão se ((num == 2) OU (num == 3) OU (num == 5)) então 2, 3 e 5 são primos, mas não passariam escrever("É primo") no teste senão testa div = 2 divisibilidade enquanto ((div < num/2) AND (resto ≠ 0)) fazer resto = num % div div = div + 1 fim fazer se (resto ≠ 0) então determina escrever("É primo") primalidade de senão acordo com o resto escrever("Não é primo") fim se fim se fim programa Questões