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) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br 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:. <expressão-lógica> Verdadeiro <seqüência-de-comandos>...... Falso <expressão-lógica> Verdadeiro <seqüência-de-comandos1>... 6 Falso <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 O resultado da divisão é,res Fim Digite o dividendo inteiro: res <- n1 / n2 falso n1 n2=0 verdadeiro Impossível Dividir Digite o divisor inteiro: n2
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
9 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
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 salario<=1200 falso salario <- 0.85 * salario verdadeiro salario <- 0.95 * salario verdadeiro salario <- 0.9 * salario O salário líquido do funcionário é: Salario:6:2 11 Fim
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
16 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 Linha Vertices Faces Arestas 1??? 2? [6]? 3? 6? 4? 6 [12] 5 8 6 12 6 {8} 6 12
Introdução a Algoritmos 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 1 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 : // Autor : // Data : 10/8/2010 // Seção de Declarações var time: caractere inicio // Seção de Comandos escreval ("Digite um nome de time de futebol:") leia (time) escolha (time) caso "Sport", "Santa Cruz", "Nautico", "Petrolina" escreval ("É um time Pernambucano") caso "Vitória", "Bahia", "Camaçari", "Juazeiro" escreval ("É um time Baiano") outrocaso escreval ("É de outro Estado") fimescolha 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 ("Hoje é Quarta") caso 5 escreval ("Hoje é Quinta") caso 6 escreval ("Hoje é Sexta") caso 7 escreval ("Hoje pe Sábado") outrocaso escreval ("Número inválido") fimescolha 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 var linha do algoritmo let: caracter caso "b", "c", "d", "f", "g", "h", "j", inicio // Seção de Comandos escreval ("Digite uma letra do alfabeto:") leia (let) escolha (let) caso "a", "e", "i", "o", "u" escreval ("É uma vogal") "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "x", "w", "y", "z" escreval ("É uma consoante") outrocaso escreval ("É outro caractere") fimescolha 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