Computação I: Representações de Algoritmos reginaldo.re@utfpr.edu.br * Parte da apresentação foi gentilmente cedida pelo prof. Igor Steinmacher
Agenda Objetivos Relembrando... Algoritmos para desenvolver algoritmos Representação de algoritmos Linguagem natural Fluxogramas Pseudo-código Considerações finais 2
Objetivos da Aula Entender e executar algoritmos com fluxogramas Desenvolver algoritmos simples com fluxogramas Entender e executar algoritmos em pseudo-código Desenvolver algoritmos simples em pseudo-código 3
Relembrando... Sistema Computacional Entrada -> Processamento -> Saída O que é um algoritmo Mundo Real Abstração Mundo Computacional Algoritmo Programa em código fonte Compilador Programa em Código Objeto Atividade Inerentemente Humana!!! Ferramentas Computacionais Linkeditor Programa de Software 4
Relembrando... Diferentes maneiras de representar algoritmos Linguagem natural, fluxogramas, pseudo-código Mundo Real Abstração Mundo Computacional Algoritmo Programa em código fonte Compilador Programa em Código Objeto Atividade Inerentemente Humana!!! Ferramentas Computacionais Linkeditor Programa de Software 5
Relembrando... Notas importantes!!! Um algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo Um algoritmo é um caminho para a solução de um problema e, em geral, os caminhos que levam a uma solução são muitos O aprendizado de algoritmos se consegue apenas com o desenvolvimento de algoritmos Não se aprende a desenvolver algoritmos apenas: Copiando Algoritmos Estudando Algoritmos Só se aprende algoritmos: Construindo Algoritmos Testando Algoritmos 6
Algoritmo para a construção de algoritmos Compreender completamente o problema a ser resolvido destacando os pontos mais importantes Definir os dados de entrada, ou seja, quais dados serão fornecidos para a solução do problema Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições para esses cálculos Definir os dados de saída, ou seja, quais dados serão gerados após o processamento Construir o algoritmo da melhor maneira possível Testar o algoritmo utilizando simulações 7
Linguagem Natural É o que estamos fazendo Descrevemos os passos utilizando nosso modo de escrever no dia-a-dia Ponto positivo: Fácil de utilizar pois já é bem conhecida Pontos negativos: Ambiguidade Dificuldade de interpretação única Dificuldade de transcrever para uma linguagem formal 8
Fluxograma Utiliza um conjunto limitado de símbolos gráficos para descrever a solução Pontos positivos Entendimento mais simples Menor ambiguidade Pontos negativos Necessidade de aprender os símbolos Menor riqueza de detalhes 9
Fluxograma Indica o início e o fim de um algoritmo Indica o sentido do fluxo,dentro do algoritmo Indica processamento; cálculos e atribuição de valores Indica a entrada de dados Indica saída de dados Indica uma tomada de decisão, possível desvio 10
Exemplo de Fluxograma Chupar bala Início Pegar a bala Tirar o papel Chupar a bala Jogar o papel no lixo Fim 11
Vamos pensar... Imagine o seguinte problema: Calcular a média final dos alunos da 3ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4. Em que: Média Final = (P1 + P2 + P3 + P4)/4 Desenvolva o algoritmo em linguagem natural para resolver esse problema 12
Vamos pensar... Início P1, P2, P3, P4 Media = (P1 + P2 + P3 + P4) 4 Media Fim 13
Exemplo Crie um algoritmo em forma de fluxograma que: Solicite o nome de um funcionário, seu salário e a valor das vendas Calcule o valor de sua comissão, sabendo que esta é de 10% do valor de suas vendas Calcule o salário final do funcionário Apresente o nome do funcionário e o valor de seu salário final 14
Exercícios 1) Vou ao Paraguai e quero calcular quanto custa um produto em reais. Para isso preciso que me informem a cotação do dólar e o valor do produto em dólares. Como resultado quero o valor do produto convertido. 15
Fluxograma com decisão Dados dois números, mostrar o maior Início N1, N2 N1 > N2? N1 N2 Fim 16
Exercício Represente o algoritmo em forma de fluxograma: quando informados dois números (N1 e N2), devo realizar a divisão entre eles (N1/N2) e mostrar o resultado da mesma. Porém, antes de realizar o cálculo, é preciso verificar se N2 é diferente de 0. Caso N2 seja igual a zero, devemos mostrar Impossível Dividir ao invés de mostrar o resultado. 17
Exercício Desejo saber quanto de imposto de renda as pessoas devem pagar, baseado em seu salário. Faça um fluxograma mapeando o caso em que o usuário informe seu salário e receba como saída o valor do desconto, de acordo com a tabela abaixo: Salário Desconto até R$ 1. 500,00 Isento de R$ 1.500,01 até R$ 3.000,00 15% acima de R$ 3.000,00 27,5% 18
Pseudo-código Utiliza um conjunto limitado de palavras reservadas descrever a solução Pontos positivos Proximidade com a linguagem de programação Menor ambiguidade Estruturação e precisão Pontos negativos Necessidade de aprender as palavras reservadas 19
Pseudo-código Da linguagem natural para pseudo-código Começamos com uma afirmação genérica da solução do problema e prosseguimos até o algoritmo final, aumentando sistematicamente o nível de detalhamento Refinamentos sucessivos Como trocar a lâmpada no teto? Início remova a lâmpada queimada coloque a nova lâmpada Fim 20
Algoritmo para trocar a lâmpada no teto (1/11) Início remova a lâmpada queimada coloque a nova lâmpada Fim O que é necessário para remover a lâmpada? posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até se soltar - remova a lâmpada queimada 21
Algoritmo para trocar a lâmpada no teto (2/11) Início posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até se soltar remova a lâmpada queimada coloque a nova lâmpada Fim O que é necessário para colocar a lâmpada nova? escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada 22
Algoritmo para trocar a lâmpada no teto (3/11) Início posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até se soltar remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim Estrutura Seqüencial 23
Algoritmo para trocar a lâmpada no teto (4/11) Início posicione a escada debaixo da lâmpada queimada suba na escada até que a lâmpada possa ser alcançada gire a lâmpada queimada no sentido anti-horário até se soltar remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim 24
Algoritmo para trocar a lâmpada no teto (5/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada Estrutura de Repetição fim-enquanto gire a lâmpada queimada no sentido anti-horário até se soltar remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim 25
Algoritmo para trocar a lâmpada no teto (6/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto gire a lâmpada queimada no sentido anti-horário até se soltar remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim 26
Algoritmo para trocar a lâmpada no teto (7/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário Estrutura de Repetição fim-enquanto remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim 27
Algoritmo para trocar a lâmpada no teto (8/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim-enquanto remova a lâmpada queimada escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada Fim 28
Algoritmo para trocar a lâmpada no teto (9/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim-enquanto remova a lâmpada queimada se <tiver lâmpada da mesma potência> então escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão desça a escada fim-se Fim Estrutura Condicional 29
Algoritmo para trocar a lâmpada no teto (10/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim-enquanto remova a lâmpada queimada se <tiver lâmpada da mesma potência> então escolha uma lâmpada da mesma potência da queimada posicione a nova lâmpada no soquete gire a lâmpada no sentido horário até que ela se firme desça a escada senão desça a escada fim-se Fim 30
Algoritmo para trocar a lâmpada no teto (11/11) Início posicione a escada debaixo da lâmpada queimada enquanto <não alcançar a lâmpada> faça suba um degrau da escada fim-enquanto enquanto <a lâmpada não soltar> faça gire a lâmpada no sentido anti-horário fim-enquanto remova a lâmpada queimada se <tiver lâmpada da mesma potência> então selecione a lâmpada posicione a nova lâmpada no soquete enquanto <a lâmpada não prender> faça gire a lâmpada no sentido horário fim-enquanto desça a escada senão desça a escada fim-se Fim 31
Algoritmo para trocar a lâmpada no teto Quando parar o refinamento? Isso depende do agente que irá executar o algoritmo Os computadores têm um conjunto muito limitado de instruções e o algoritmo deve ser expresso nos termos dessas instruções A linguagem de programação a ser utilizada na programação é o que, principalmente, define o critério de parada 32
Exercício Desenvolver um algoritmo para trocar o pneu furado de um carro usando pseudo-código Se possível, use as três estruturas de controle: Repetição, seqüencial e condicional Relacione uma situação problema do seu dia a dia que pode ser resolvida com um algoritmo e desenvolva o algoritmo para essa situação 33
Considerações Finais Os algoritmos que acabamos de resolver não usam exatamente um conjunto muito restrito de instruções Não são exatamente pseudo-código Existem proposições melhores que aproximam ainda mais a linguagem natural da linguagem de programação Diminuindo o tamanho do conjunto de instruções disponíveis 34