Programação de Computadores Algoritmos - Parte 2 Prof. Dr. Erivelton Geraldo Nepomuceno Depto. Engenharia Elétrica Sala 4.23 EL – Prédio do DEPEL http://www.ufsj.edu.br/nepomuceno [email protected] 1/32 Estrutura seqüencial ● Em um algoritmo: ○ Há uma ordem para execução de comandos ○ Do primeiro ao último ○ De cima para baixo ● Paradigma da programação estruturada ● Há outros: ○ Programação orientada a objetos ○ Programação orientada a variáveis ○ Etc. Algoritmo d1 d2 d3 . . . dm c1 c2 c3 . . . cn fim algoritmo 2/32 Fixando 1 ● Crie um algoritmo que leia dois valores numéricos A e B, calcule (A + B) x B e escreva o resultado na tela 3/32 Solução 1 Algoritmo declare A, B, C numérico leia A, B C ← (A + B) × B escreva A, B, C fim algoritmo 4/32 Fixando 2 ● Crie um algoritmo que leia os coeficientes a, b e c de uma equação de segundo grau com raízes reais, calcule as raízes e escreva o resultado na tela 5/32 Solução 2 Algoritmo declare A, B, C, DELTA, X1, X2 numérico leia A, B, C DELTA ← B2 – 4 × A × C X1 ← (- B + √DELTA) / (2 × A) X2 ← (- B - √DELTA ) / (2 × A) escreva X1, X2 fim algoritmo 6/32 Fixando 3 ● Crie um algoritmo que leia os coeficientes a, b e c de uma equação de segundo grau qualquer, identifique se tem raízes reais e: ○ caso tenha raízes reais, calcule as raízes e escreva o resultado na tela ○ caso não tenha, avise o usuário 7/32 Solução 3? Algoritmo declare A, B, C, DELTA, X1, X2 numérico leia A, B, C DELTA ← B2 – 4 × A × C X1 = (- B + √DELTA) / (2 × A) X2 = (- B - √DELTA ) / (2 × A) escreva X1, X2 escreva “Não tem raízes reais” fim algoritmo Como resolver essa questão? Como escolher o comando a ser executado de acordo com o sinal de DELTA? É possível fazer desvios nesse “percurso”? É possível controlar o fluxo de execução do algoritmo? Estruturas de controle de fluxo! 8/32 Estrutura condicional ● Estrutura condicional simples ● Sintaxe PORTUGOL: se condição então seqüência de comandos fim se ● Testa-se uma condição ○ Execução de comandos da estrutura: apenas se a condição for verdadeira ● Exemplo: Algoritmo declare A, B, C numérico leia A, B, C se A + B < C então escreva “MENSAGEM” fim se fim algoritmo 9/32 Estrutura condicional ● Estrutura condicional composta ● Sintaxe PORTUGOL: se condição então seqüência A de comandos senão seqüência B de comandos fim se ● Testa-se uma condição ○ Executa-se seqüência A caso a condição seja verdadeira ○ Executa-se seqüência B caso a condição seja falsa 10/32 Exemplo Algoritmo declare A, B, X, Y numérico leia A, B se A = B então X ← 1,5 Y ← 2,5 senão X ← -1,5 Y ← 2,5 fim se escreva X, Y fim algoritmo 11/32 Exemplo: cálculo do módulo Algoritmo declare X, Y numérico leia X se X >= 0 então Y ← X senão Y ← -X fim se escreva Y fim algoritmo Algoritmo declare X numérico leia X se X < 0 então X ← -X fim se escreva X fim algoritmo 12/32 Solução 3! Algoritmo declare A, B, C, DELTA, X1, X2 numérico leia A, B, C DELTA ← B2 – 4 × A × C se DELTA >= 0 então X1 ← (- B + √DELTA) / (2 × A) X2 ← (- B - √DELTA ) / (2 × A) escreva X1, X2 senão escreva “Não existem raízes reais” fim se fim algoritmo 13/32 Exercícios ● Leia três valores inteiros, determine e imprima o menor deles ● Dados três valores, verifique se podem ser os comprimentos dos lados de um triângulo e, se forem, determinem e qual é o seu tipo do triângulo (escaleno, isósceles ou eqüilátero) 14/32 Estrutura de repetição ● Seqüência de comandos é executada até que uma condição seja verdadeira ● Condição é uma expressão lógica ● Laço repita / interrompa ○ Interrupção em diversos pontos 15/32 Interrupção no início SINTAXE PORTUGOL repita se condição então interrompa fim se seqüência B de comandos fim repita EXERCÍCIO Reescreva o algoritmo de maneira que o usuário informe os valores inicial e final do somatório. Teste se o valor inicial informado é de fato par e, se não for, corrija-o EXEMPLO Soma números pares de 100 a 200 Algoritmo declare PAR, SOMA numérico SOMA ← 0 PAR ←100 repita se PAR > 200 então interrompa fim se SOMA ← SOMA + PAR PAR ← PAR + 2 fim repita escreva SOMA fim algoritmo 16/32 Exercício MODIFICAÇÃO Reescreva o algoritmo de maneira que o usuário informe os valores inicial e final do somatório. Teste se o valor inicial informado é de fato par. RESPOSTA Algoritmo declare PAR, SOMA, FIM numérico SOMA ← 0 leia PAR, FIM se RESTO(PAR,2) ≠ 0 então PAR ← PAR - RESTO(PAR,2) fim se repita se PAR > FIM então interrompa fim se SOMA ← SOMA + PAR PAR ← PAR + 2 fim repita escreva SOMA fim algoritmo 17/32 Interrupção no interior EXEMPLO Soma números pares de 100 a 200 SINTAXE PORTUGOL repita seqüência A de comandos se condição então interrompa fim se seqüência B de comandos fim repita Algoritmo declare PAR, SOMA numérico SOMA ← 0 PAR ←98 repita PAR ← PAR + 2 se PAR > 200 então interrompa fim se SOMA ← SOMA + PAR fim repita escreva SOMA fim algoritmo 18/32 Interrupção no fim EXEMPLO Soma números pares de 100 a 200 SINTAXE PORTUGOL repita seqüência A de comandos se condição então interrompa fim se fim repita Algoritmo declare PAR, SOMA numérico SOMA ← 0 PAR ←100 repita SOMA ← SOMA + PAR PAR ← PAR + 2 se PAR > 200 então interrompa fim se fim repita escreva SOMA fim algoritmo 19/32 Laço repita-até ● Seqüência de comandos é executada até que uma condição seja verdadeira ● Equivalente ao repita com interrupção no fim ● Estrutura condicional pode ser omitida 20/32 Laço repita-até EXEMPLO Soma números pares de 100 a 200 SINTAXE PORTUGOL repita seqüência de comandos até condição Algoritmo declare PAR, SOMA numérico SOMA ← 0 PAR ←100 repita SOMA ← SOMA + PAR PAR ← PAR + 2 até PAR > 200 escreva SOMA fim algoritmo 21/32 Laço enquanto-faça ● Seqüência de comandos é executada enquanto uma condição é / permanece verdadeira ● Semelhante ao repita com interrupção no início ● Estrutura condicional pode ser omitida 22/32 Laço enquanto-faça EXEMPLO Soma números pares de 100 a 200 SINTAXE PORTUGOL enquanto condição faça seqüência de comandos fim enquanto Algoritmo declare PAR, SOMA numérico SOMA ← 0 PAR ←100 enquanto PAR <= 200 faça SOMA ← SOMA + PAR PAR ← PAR + 2 fim enquanto escreva SOMA fim algoritmo 23/32 Variantes laço enquanto-faça CONTROLADO POR CONTADOR Quando se sabe o número de vezes que o laço será repetido CONTROLADO POR SENTINELA Informação especial que identifica o fim do laço •Declarado e iniciado fora do laço •Incrementado dentro do laço •Identificador de fim deve ser exclusivo 24/32 Laço para-faça ● Laço é executado um número fixo de vezes ● A quantidade é controlada por uma variável contadora ● Semelhante ao laço enquanto-faça variante controlado por contador ● Inicialização e incremento do contador são omitidos 25/32 Laço para-faça EXEMPLO Calcula o fatorial de N SINTAXE PORTUGOL Algoritmo declare FATORIAL, N, I numérico FATORIAL ← 1 leia N para contador = valor1 até valor2 faça seqüência de comandos fim para para I = 1 até N faça FATORIAL ← FATORIAL × I fim para escreva FATORIAL fim algoritmo 26/32 Exercícios ● Calcule o fatorial de N usando o laço enquanto-faça ● Num frigorífico existem 90 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Faça um algortimo que escreva o número e o peso do boi mais gordo e do boi mais magro. 27/32 Resumo PORTUGOL 28/32 29/32 30/32 31/32 32/32