Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos – Parte 03 (baseado no material do prof. Marcelo Linder) Linder) Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav 1 Introdução a Algoritmos Estruturas de Controle de Fluxo Os algoritmos desenvolvidos até o momento constituem uma seqüência de ações que sempre são executadas em sua totalidade indiferente do valor da entrada de dados. Para a resolução de determinados problemas ou para a execução de determinadas tarefas é necessária a realização de um conjunto distinto de ações e este conjunto é definido com base na análise da entrada de dados. Um exemplo simples de uma destas situações é um algoritmo capaz de efetuar o cálculo do imposto de renda devido por um determinado contribuinte. Neste caso dependendo da quantidade de dependentes, do valor de sua renda e outras fatores o cálculo será feito de formas distintas. 2 Introdução a Algoritmos Instrução Condicional Estas instruções permitem que o programador especifique a seqüência de instruções que será executada. Considere um problema que exija uma decisão. Tomemos como exemplo uma divisão, onde haja a necessidade de que o algoritmo verifique se o divisor é igual ou diferente de zero. Se for igual não é possível dividir. Se for diferente é possível dividir. Sintaxe: se (<expressão-lógica>) então <sequência de comandos> senão <seqüência de comandos> fimse 3 Introdução a Algoritmos Exemplo 5: Instrução Condicional algoritmo "divisão – instrução condicional“ // Seção de Declarações var n1, n2: inteiro resultado: real inicio // Seção de Comandos escreva ("Digite o dividendo:") leia (n1) escreva ("Digite o divisor:") leia (n2) se (n2=0) entao escreva ("Impossível dividir por zero") senao resultado <- n1/n2 escreva ("O resultado eh:", resultado) fimse fimalgoritmo 4 Introdução a Algoritmos 5 Introdução a Algoritmos Fluxograma Vimos o símbolo quando falamos sobre fluxograma. Este símbolo nos permite implementar a .. instrução “se entao” e “se entao senao”. Exemplo: . Verdadeiro <expressão-lógica> <seqüência-de-comandos> ... Falso ... Verdadeiro <expressão-lógica> 6 Falso <seqüência-de-comandos1> <seqüência-de-comandos2> ... 6 Introdução a Algoritmos Fluxograma/Exercício – Com base no que foi exposto construa um fluxograma para obter o resultado da divisão de dois números inteiros quaisquer. Inicio n1, n2: inteiro res: real “Digite o dividendo inteiro:” “O resultado da divisão é ”,res Fim res <- n1 / n2 falso verdadeiro n1 n2=0 “Digite o divisor inteiro:” n2 “Impossível Dividir” Estruturas de Controle de Fluxo Exercício 9 – Construa um algoritmo, representando-o com um pseudocódigo e com um fluxograma, que calcule o salário líquido de um funcionário. O algoritmo recebe através do teclado o salário bruto de um determinado funcionário, caso este seja inferior a R$ 300,00 é descontado 5% em impostos, se o salário variar de R$ 300,00 até 1.200,00 é descontado 10% em impostos, se esse for superior a R$ 1.200,00 é descontado 15% em impostos. Ao final o algoritmo deve exibir o salário líquido do funcionário. 8 algoritmo “exercício 9a” var salario: real inicio escreva (“Entre com o salário bruto do funcionário: ”) leia (salario) se (salario<300.0) entao salario <- salario*0.95 fimse se ((salario>=300) e (salario<=1200)) entao salario <- salario*0.90 fimse se (salario>1200) entao salario <- salario*0.85 fimse escreva (“O salário líquido do funcionário é: ”) escreva (salario:6:2) fimalgoritmo 9 10 algoritmo “exercício 9b” var salario: real inicio escreva (“Entre com o salário bruto do funcionário: ”) leia (salario) se (salario<300.0) entao salario <- salario*0.95 senao se ((salario>=300) e (salario<=1200)) entao salario <- salario*0.90 senao salario <- salario*0.85 fimse fimse escreva (“O salário líquido do funcionário é: ”) escreva (salario:6:2) fimalgoritmo Inicio “Entre com o salário bruto do funcionário:” salario: real salario salario<300 falso verdadeiro salario<=1200 falso salario <- 0.85 * salario verdadeiro salario <- 0.9 * salario “O salário líquido do funcionário é: ” salario <- 0.95 * salario Salario:6:2 Fim 11 Estruturas de Controle de Fluxo Exercício 10 – Faça um algoritmo, representando-o com um pseudocódigo e com um fluxograma, para ler três valores reais e informar se estes podem ou não formar os lados de um triângulo, e qual tipo de triângulo seria: Eqüilátero, Isósceles ou Escaleno. 12 Estruturas de Controle de Fluxo Exercício 11 – Elabore um algoritmo, representando-o com um pseudocódigo e com um fluxograma, que com base no nome, em três notas e no número de faltas de um aluno qualquer determine qual a sua situação final: Aprovado, Reprovado por Falta ou Reprovado por Média. As notas mencionadas devem compor a média que para propiciar aprovação deve ter valor mínimo 7,0 e o limite de faltas é igual a 15. A reprovação por falta sobrepõe a reprovação por Média. 13 Teste de Mesa Ao nos recordarmos dos passos necessários para a construção de um algoritmo veremos que após a elaboração de um algoritmo devemos testá-lo realizando simulações com o propósito de verificarmos se este está ou não correto. Existem alguns softwares disponíveis que efetuam a interpretação de algoritmos representados em pseudocódigos ou em fluxogramas. Porém, existe uma técnica denominada “teste de mesa” que permite a simulação do processo de interpretação de um algoritmo utilizando apenas um papel e uma caneta. 14 Teste de Mesa Para acompanhar o desenvolvimento de um algoritmo é importante verificar o estado dos dados a cada instrução, verificando o conteúdo de todas as variáveis contidas no algoritmo. Sendo assim deve-se enumerar as linhas do algoritmo e em seguida criar uma tabela onde, a cada linha, são mostrados os conteúdos das variáveis do algoritmo e o número da linha executada. Para uma melhor visualização do processo adotaremos a seguinte convenção: nas linhas em que uma variável é lida (entrada), o valor da variável ficará entre colchetes [] e quando o conteúdo de uma variável for escrito (saída), ficará entre chaves {}. 15 Algoritmo “vértices” Var vertices, faces, arestas: inteiro Inicio 1. Escreva (“Entre com o número de faces da figura geométrica: ”) 2. Leia (faces) 3. Escreva (“Entre com um número da arestas da figura geométrica:”) 4. Leia (arestas) 5. Vertices <- arestas + 2 – faces 6. Escreva (“O número de vértices do objeto especificado é: ”, vertices) Fimalgoritmo 16 Linha Vertices Faces Arestas 1 ? ? ? 2 ? [6] ? 3 ? 6 ? 4 ? 6 [12] 5 8 6 12 6 {8} 6 12 Introdução a Algoritmos Trecho 1 Comando de Seleção Múltipla Em algumas situações ao chegarmos a uma determinada instrução de um algoritmo devemos selecionar um dentre alguns trechos a seguir, tendo como base para esta escolha um conjunto de valores. Trecho 2 Trecho 3 Para lidar com casos deste tipo foi criado o comando de seleção múltipla. 17 Introdução a Algoritmos Sintaxe: Comando de seleção múltipla escolha (<variável>) caso <valor11>, <valor12>, ..., <valor1n> <seqüência-de-comandos-1> caso <valor21>, <valor22>, ..., <valor2m> <seqüência-de-comandos-2> ... outrocaso <seqüência-de-comandos-extra> fimescolha 18 Introdução a Algoritmos Exemplo 6: algoritmo "Times - seleção múltipla" // Função : escolha (time) // Autor : caso "Sport", "Santa Cruz", "Nautico", // Data : 10/8/2010 "Petrolina" // Seção de Declarações escreval ("É um time Pernambucano") var caso "Vitória", "Bahia", "Camaçari", time: caractere "Juazeiro" inicio escreval ("É um time Baiano") outrocaso // Seção de Comandos escreval ("É de outro Estado") escreval ("Digite um nome de time de futebol:") fimescolha leia (time) fimalgoritmo 19 Introdução a Algoritmos 20 Introdução a Algoritmos 1) Receba do usuário um número entre 1 e 7, inclusive 1 e 7. Se ele digitar o número 1 mostre “Hoje é Domingo”, se ele digitar o número 2 mostre “Hoje é Segunda”....... 2) Peça uma letra e mostre se ela é vogal ou consoante. 3) Peça três números e mostre o maior entre eles. 21 Algoritmos e Programação 1 - Receba do usuário um número entre 1 e 7, inclusive 1 e 7. Se ele digitar o número 1 mostre “Hoje é Domingo”, se ele digitar o número 2 mostre “Hoje é Segunda”....... algoritmo "Dias da Semana seleção múltipla“ var num: inteiro inicio // Seção de Comandos escreval ("Digite um número de 1 a 7:") leia (num) escolha (num) caso 1 escreval ("Hoje é Domingo") caso 2 escreval ("Hoje é Segunda") caso 3 escreval ("Hoje é Terça") caso 4 escreval caso 5 escreval caso 6 escreval caso 7 escreval outrocaso escreval fimescolha ("Hoje é Quarta") ("Hoje é Quinta") ("Hoje é Sexta") ("Hoje pe Sábado") ("Número inválido") fimalgoritmo 22 Algoritmos e Programação 2 - Peça uma letra e mostre se ela é vogal ou consoante. algoritmo "Letras do Alfabeto seleção multipla“ Tudo na mesma linha do algoritmo var let: caracter caso "b", "c", "d", "f", "g", "h", "j", inicio "k", "l", "m", "n", "p", "q", "r", // Seção de Comandos "s", "t", "v", "x", "w", "y", "z" escreval ("Digite uma letra do alfabeto:") escreval ("É uma consoante") leia (let) outrocaso escolha (let) escreval ("É outro caractere") caso "a", "e", "i", "o", "u" fimescolha escreval ("É uma vogal") fimalgoritmo 23 Algoritmos e Programação 3 - Peça três números e mostre o maior entre eles. algoritmo "MAIOR“ var n1,n2,n3, maior: inteiro inicio // Seção de Comandos escreval ("Digite três números") leia (n1,n2,n3) se (n1>n2) e (n1>n3) entao maior:= n1 senao se (n2>n3) entao maior:= n2 senao maior:= n3 fimse fimse escreva (maior) fimalgoritmo 24