Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Parte 02 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav 1 Algoritmos em Pseudocódigo Pseudocódigo Técnica textual de representação de um algoritmo - Também conhecida como Português Estruturado ou Portugol. Nele os verbos (ações) disponíveis para utilização são limitados e empregados no imperativo. Deve-se evitar as expressões excessivamente longas, estas restrições visam eliminar a possibilidade de ambiguidade. Técnica é baseada em uma PDL (Program Design Language), que é uma linguagem genérica na qual é possível representar um algoritmo de forma semelhante à das linguagens de programação. A estrutura de um algoritmo em pseudocódigo pode variar um pouco de acordo com o autor ou com base na linguagem de programação que será utilizada posteriormente, mas essas variações ocorrem apenas na sintaxe, pois a semântica deve ser exatamente a mesma. - Prof. Jorge Cavalcanti - Univasf 2 1
Entrada de dados. Sintaxe leia (<lista de variáveis>) É necessária a declaração prévia das variáveis, na seção var. var n1: inteiro k: caractere Exemplos: leia (n1) - O valor digitado será armazenado na variável n1. leia (k) - Um ou vários caracteres digitados serão armazenados na variável k (Definida como caractere). No caso de utilizar leia (<lista de variáveis>), será respeitada a ordem da lista de variáveis, da esquerda para direita. Exemplo: leia (n1, k, n2) 3 Saída de dados. Sintaxe escreva (<lista-de-variáveis>) escreval (<lista-de-variáveis>) Obs: escreval imprime a variável na tela e o cursor vai para uma nova linha. Exemplos: escreva (n1) - Será mostrado na tela o conteúdo da variável n1. escreva ( O texto digitado foi, k) - Será mostrado o texto entre e depois o conteúdo da variável k. 4 2
Saída de dados. É possível especificar o número de colunas da tela e/ou de casas decimais onde se deseja escrever um determinado valor. Exemplo: considerando uma variável inteira x, o comando escreva (x:5) escreve o valor da variável x em 5 colunas, alinhado-o à direita. Exemplo: considerando y como uma variável real, o comando escreva (y:6:2), escreve seu valor em 6 colunas colocando 2 casas decimais. 5 Saída de dados. Exemplo - Abaixo um pseudocódigo de um algoritmo simples, que recebe um valor inteiro, fornecido pelo usuário, e o retorna no monitor. algoritmo exemplo 1 var x: inteiro leia (x) escreva (x) 6 3
Operador de Atribuição símbolo <- Exemplo: var a: inteiro valor1, valor2: real... a <- 5 valor1 <- 3.14 valor2 <- valor1 escreva(valor2) Apenas valores pertencentes ao tipo da variável podem lhe ser atribuídos. O valor a ser atribuído pode ser o conteúdo de uma variável, de uma constante, o resultado de operações sobre variáveis/constantes ou um valor diretamente. 7 Operador de Atribuição Exemplo: Declarações constante: MÁXIMO = 10 var quantidade, filhos, netos: inteiro aberto: booleano altura: real resposta: caractere Atribuições altura <- 1.80 filhos <- 3 netos <- filhos * 2 3 quantidade <- MÁXIMO 5 aberto <- F aberto <- quantidade < MÁXIMO resposta <- S 8 4
Operadores e Hierarquia na operações: 9 Operadores e Hierarquia nas operações: Exemplos: 3/4+5 = 5.75 3/(4+5) = 0.33333333 3\2*9 = 9 11%3^2 = 2 11%(3^2) = 2 (11%3)^2 = 4 3\2+(65-40)^(1/2) = 6 10 5
Operadores e Hierarquia na operações: Exemplos: 3>7 = FALSO A = a = VERDADEIRO a > B = FALSO (3>=13\4) xou (nao (5%2=0)) = FALSO 11 Blocos de instruções. As instruções em uma linguagem de programação sempre são executadas em sequência. A utilização de blocos de instruções deixa claro onde a sequência de instruções começa e termina. Todo algoritmo tem pelo menos um bloco de instruções, que indica o início e final do próprio algoritmo. Ex.: <declaração de variáveis> início <primeira instrução do bloco> <segunda instrução do bloco>... <última instrução do bloco> fim 12 6
Blocos de instruções. Ex. Sabendo que a relação entre vértices, arestas e faces de um objeto geométrico é dada pela fórmula: vértices + faces = arestas + 2, calcule o número de vértices de um cubo (06 faces e 12 arestas). Ex. 01 - Algoritmo Vértices de um cubo var vertices, faces, arestas: inteiro faces <- 6 arestas <-12 vertices <- arestas + 2 faces fim 13 Estrutura de um algoritmo: algoritmo "soma de dois números {NOME DO ALGORITMO} // Função : // Autor : // Data : 10/8/2010 // Seção de Declarações var a,b,c:inteiro {DECLARAÇÃO DE VARIÁVEIS} // Seção de Comandos "){INÍCIO DO ALGORITMO} escreval("digite dois números leia (a) leia (b) c:= a + b escreva ("A soma he:",c) {FIM DO ALGORITMO} 14 7
15 Passos necessários para a construção de um algoritmo: Ler atentamente o enunciado do problema, compreendendo-o e destacando os pontos mais importantes; Definir os dados de entrada, ou seja, quais dados serão fornecidos; Definir os dados de saída, ou seja, quais dados serão gerados depois do processamento; Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições para esses cálculos. O processamento é responsável pela obtenção dos dados de saída com base nos dados de entrada; Definir as variáveis necessárias para armazenar as entradas e efetuar do processamento; Elaborar o algoritmo; Testar o algoritmo realizando simulações. 16 8
EXERCÍCIO (Adaptado do Ex. 01) Ex. 02 - Sabendo que a relação entre vértices, arestas e faces de um objeto geométrico é dada pela fórmula: vértices + faces = arestas + 2, calcule o número de vértices de um objeto genérico. A entrada será o número de faces e arestas e a saída será o número de vértices. Alg. 02 - Algoritmo Vértices de um objeto genérico var vertices, faces, arestas: inteiro escreva ( Entre com o número de faces do objeto: ) leia (faces) escreva ( Entre com o número de arestas do objeto: ) leia (arestas) vertices <- arestas + 2 faces escreva ( O número de vértices do objeto é:, vertices) fim 17 Ex. 03a - Construa um pseudocódigo para representar um algoritmo que efetue a multiplicação de dois inteiros quaisquer. algoritmo exemplo 3a var n1, n2, res: inteiro escreva ( Digite o multiplicando inteiro: ) leia (n1) escreva ( Digite o multiplicador inteiro: ) leia (n2) res<- n1 * n2 escreva ( Resultado da multiplicação:, res) 18 9
Ex. 03b - Construa um pseudocódigo para representar um algoritmo que efetue a multiplicação de dois inteiros quaisquer. algoritmo exemplo 3b var n1, n2: inteiro escreva ( Digite o multiplicando inteiro: ) leia (n1) escreva ( Digite o multiplicador inteiro: ) leia (n2) escreva ( Resultado da multiplicação:, n1*n2) 19 Ex. 03c - Construa um pseudocódigo para representar um algoritmo que efetue a multiplicação de dois inteiros quaisquer. algoritmo exemplo 3c var n1, n2: inteiro escreva ("Digite o multiplicando e em seguida ") escreva (" o multiplicador (ambos inteiros): ") leia (n1, n2) escreva ("Resultado da multiplicação: ", n1*n2) 20 10
Ex. 4a - Gere um pseudocódigo que aplique um desconto de 30% sobre o valor de um produto, recebido como entrada, e retorne o resultado da manipulação na saída padrão. algoritmo exercício 4a var valor, resultado: real escreva ( Entre com o valor do produto: ) leia (valor) resultado <- valor * 0.7 escreva ( Valor com desconto de 30%: ) escreva (resultado) 21 Ex. 4b - Gere um pseudocódigo que aplique um desconto de 30% sobre o valor de um produto, recebido como entrada, e retorne o resultado da manipulação na saída padrão. algoritmo exercício 4b var valor: real var valor: real escreva ( Entre com o valor do produto: ) leia (valor) valor <- valor * 0.7 escreva ( Valor com desconto de 30%: ) escreva (valor:6:2) 22 11
Ex. 4c - Gere um pseudocódigo que aplique um desconto de 30% sobre o valor de um produto, recebido como entrada, e retorne o resultado da manipulação na saída padrão. algoritmo exercício 4c var valor: real escreva ( Entre com o valor do produto: ) leia (valor) escreva ( Valor com desconto de 30%:, valor * 0.7:6:2) 23 EXERCÍCIOS 1) Escreva um programa que receba dois números e calcule a média deles. 2) Escreva um programa que receba três números e depois peça o valor dos pesos e depois calcule a média ponderada dos números. 3) Faça um programa que leia uma temperatura em graus Celsius e calcule o correspondente em Fahrenheit. Sabendo que: F=(180*(C+32))/100 24 12
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. 25 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 26 13
Exemplo: Instrução Condicional algoritmo "divisão instrução condicional // Seção de Declarações var n1, n2: inteiro resultado: real // 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 27 28 14
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. Para lidar com casos deste tipo foi criado o comando de seleção múltipla. 29 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 30 15
Exemplo: algoritmo "Times - seleção múltipla" // Função : // Autor : // Data : 10/8/2010 // Seção de Declarações var time: caractere // 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 31 32 16
1) 33 2) 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... 3) Peça uma letra e mostre se ela é vogal ou consoante. 4) Peça três números e mostre o maior entre eles. 34 17