Programação Computacional Aula 5: Algoritmos Profa. Madeleine Medrano [email protected] Roteiro Lógica Algoritmos Conceito de Algoritmo Partes de um algoritmo Características Representação de um algoritmo Fluxograma Pseudocódigo Lógica Observe as seguintes afirmações: O número 4 é menor que o número 7. O número 9 é maior que o número 7. Logo, o número 4 é menor que os números 9 e 7. Um casal com três filhos notou que um vaso estava quebrado, enquanto duas das crianças estavam na escola. Quem é o culpado? Há uma caneta dentro de uma gaveta fechada. Sabemos que, para pegar a caneta, devemos, antes, abrir a gaveta. Lógica Podemos deduzir a partir dessas afirmações, que em nosso cotidiano, sempre que pensamos, já estamos utilizando a lógica. Se consultarmos em um dicionário da língua portuguesa o verbete "lógica", veremos que se trata de uma parte da filosofia que estuda as leis do raciocínio. É uma ciência que estuda as formas do pensamento. Lógica “é uma sequência coerente, regular e necessária de acontecimentos, de coisas". Veja, a seguir, uma sequência de passos para comprar um determinado produto em uma loja. Imagine se seria possível comprar o produto seguindo os passos dessa sequência: sair da loja; pagar pelo produto; entrar na loja; retirar o dinheiro da carteira; dirigir-se ao caixa; escolher o produto na prateleira. Lógica Seria impossível conseguir efetuar a compra, pois apesar de todas as ações estarem corretas, a sequência está errada. Como você poderia pagar pelo produto após sair da loja? Ou escolher o produto após pagar por ele? A sequência correta, nesse caso, seria: entrar na loja; escolher o produto na prateleira; dirigir-se ao caixa; retirar o dinheiro da carteira; pagar pelo produto; sair da loja. Lógica A lógica, dessa forma, é utilizada para conduzir pensamentos ou ações voltados para a solução de problemas. Assim, a lógica está correta em determinada situação, se a solução do problema tiver sido atingida. Na programação de computadores, o treino dessa habilidade é fundamental para aprimorarmos a nossa capacidade de resolver problemas e programar. Devemos, portanto, aprender a pensar de forma estruturada. Significa desenvolver e aperfeiçoar a técnica de pensamento, dentro de um raciocínio lógico e matemático, que é a base de todo o trabalho na programação de computadores Algoritmo Para resolver um problema em um computador, de modo semelhante ao que fazemos para resolver um problema do nosso cotidiano, devemos encontrar uma maneira de descrever esse problema de uma forma clara e precisa, através de uma sequência de passos a serem seguidos até que se atinja a solução procurada. Essa estruturação deve seguir uma determinada lógica. A lógica aplicada à programação de computadores, deve buscar a melhor sequência de ações para se resolver um problema. Essa sequência de ações damos o nome de algoritmo. Algoritmo é um conjunto finito de regras que fornece uma sequência de operações para resolver um problema específico. É algo como uma receita, ou uma rotina. Algoritmo Para o desenvolvimento de um algoritmo eficiente é necessário obedecermos algumas premissas básicas no momento de sua construção: Definir ações simples e sem ambiguidade; Organizar as ações de forma ordenada Estabelecer as ações dentro de uma sequência finita de passos Algoritmo O algoritmo 1 é um exemplo simples de algoritmo (sem condições ou repetições) para troca de um pneu. Os algoritmos são capazes de realizar tarefas como: Ler e escrever dados; Avaliar expressões algébricas, relacionais e lógicas; Tomar decisões com base nos resultados das expressões avaliadas; Repetir um conjunto de ações de acordo com uma condição; Algoritmo Um algoritmo quando programado num computador é constituído pelo menos das 3 partes, sendo elas: 1. Entrada de dados; 2. Processamento de dados; 3. Saída de dados; Algoritmo Na parte de entrada, são fornecidas as informações necessárias para que o algoritmo possa ser executado. Estas informações podem ser fornecidas no momento em que o programa está sendo executado ou podem estar embutidas dentro do mesmo. Na parte do processamento são avaliadas todas as expressões algébricas, relacionais e lógicas, assim como todas as estruturas de controle existentes no algoritmo (condição e/ou repetição). Na parte de saída, todos os resultados do processamento (ou parte deles) são enviados para um ou mais dispositivos de saída, como: monitor, impressora, ou até mesmo a própria memória do computador. Algoritmo 1 Troca de pneu do carro. Passo 1: desligar o carro Passo 2: pegar as ferramentas (chave e macaco) Passo 3: pegar o estepe Passo 4: suspender o carro com o macaco Passo 5: desenroscar os 4 parafusos do pneu furado Passo 6: colocar o estepe Passo 7: enroscar os 4 parafusos Passo 8: baixar o carro com o macaco Passo 9: guardar as ferramentas Algoritmo: Bolo de Chocolate Passo1 – Receber os ingredientes: 2 xícaras de açúcar; 3 ovos; 250g de margarina; 3 xícaras de farinha de trigo; 1 e ½ colher de fermento; 1 xícara de leite. Passo 2: aqueça o forno a 180 graus; Passo 3: bata as claras em neve e reserve; Passo 4: em uma travessa, bata o açúcar, a manteiga e as gemas; Algoritmo: Bolo de Chocolate Passo 5: misture a farinha e o leite; Passo 6: bata bem, até ficar bem homogêneo; Passo 7: com a ajuda de uma colher, acrescente o fermento; Passo 8: por último, adicione as claras em neve e mexa cuidadosamente; Passo 9: coloque em uma forma untada com manteiga e farinha de trigo e leve ao forno médio para assar por aproximadamente 35 minutos ou até que, ao espetar um palito, esse saia seco; Passo 10: após assado, desligue o forno e deixe o bolo esfriar; Passo 11: desenforme e saboreie. Algoritmo: Características Podemos observar cinco características inerentes aos algoritmos: Finitude – Um algoritmo sempre deve terminar após um número finito de passos. Ex. Encerra no momento em que o bolo está pronto. Definição – Cada passo do algoritmo deve ser bem definido e sem ambiguidades Não deve dar margem para uma interpretação dupla. Entradas – Um algoritmo deve ter uma ou mais entradas, que são as informações que devem ser fornecidas antes do algoritmo ser iniciado No caso da receita de bolo, as entradas são os ingredientes Algoritmo: Características Podemos observar cinco características inerentes aos algoritmos Saídas – Um algoritmo deve ter uma ou mais saídas. Observando a nossa receita, vemos que os ingredientes (entradas) são misturados, gerando uma única saída (o bolo). Efetividade – Todo algoritmo deve ser descrito por operações básicas e possíveis de ser realizadas de forma precisa, dentro de um determinado tempo, por qualquer pessoa. Se na receita víssemos uma instrução do tipo "coloque açúcar à vontade", isso impossibilitaria a sua execução de uma forma precisa. Algoritmo – Utilizando números e expressões matemáticas Cálculo da média aritmética de um aluno: Passo 1: informe a primeira nota; Passo 2: informe a segunda nota; Passo 3: some a primeira nota com a segunda nota; Passo 4: divida o resultado da soma por dois; Passo 5: mostre o resultado obtido. Algoritmo – Utilizando números e expressões matemáticas Podemos observar que esse algoritmo têm: Início e fim Passos bem definidos Dados de entrada (primeira nota e segunda nota), Dados de saída (média) Instruções de cada passo são precisas O exemplo reúne as 5 características mencionadas anteriormente. Podemos afirmar que a construção de algoritmos é uma atividade que faz parte do nosso cotidiano Seguem uma sequência lógica de passos e geram suas respectivas saídas (que são os resultados alcançados). Algoritmo – Utilizando números e expressões matemáticas É importante lembrar que podem existir várias maneiras de solucionar um problema. O importante é chegar à solução. Melhor ainda, se essa solução for atingida de forma eficiente e eficaz. A eficiência a capacidade de produzir com maior qualidade e com os mesmos ou menos recursos A eficácia caracteriza-se por fazer o que é necessário para alcançar determinado resultado Atividade Escreva o seu algoritmo usual para ir à Universidade. Escreva um algoritmo para fritar batatas. Escreva o seu algoritmo usual para tomar banho. Escreva um algoritmo que, dado um número, exiba o seu antecessor. Faça o mesmo para exibir o sucessor do número dado. Nota: Antes de fazer a atividade, considere as técnicas para elaboração de um algoritmo: Ler atentamente o enunciado Destacando os pontos mais importantes; Definir os dados de entrada; Definir os dados de saída O que se deseja obter Definir o processamento De que maneira será ordenada a sequência de passos Construir o algoritmo; Formas de Representação dos Algoritmos Descrição narrativa Fluxogramas Pseudocódigo Formas de Representação dos Algoritmos :Descrição narrativa Nessa forma de representação, analisamos o enunciado do problema e descrevemos a sequência de passos em nossa língua nativa (em nosso caso, o português). A vantagem de se utilizar esse procedimento é que não precisamos aprender nenhum conceito novo, pois já temos domínio sobre a nossa língua nativa. A desvantagem é que a língua natural pode ser interpretada de diferentes maneiras. Em comparação com uma linguagem de programação, a linguagem natural é abstrata, imprecisa e pouco confiável. Isso poderia trazer problemas na hora de transcrever o algoritmo para o programa (em uma linguagem de programação). Formas de Representação dos Algoritmos :Descrição narrativa Considere o algoritmo – Receita de Bolo Passo 9: coloque em uma forma untada com manteiga e farinha de trigo e leve ao forno médio para assar por aproximadamente 35 minutos ou até que, ao espetar um palito, esse saia seco; A informação sublinhada é imprecisa e pode ser interpretada de diferentes. "aproximadamente 35 minutos" pode ser um pouco menos que 35 minutos pra uma pessoa e um pouco mais que 35 minutos pra outra pessoa executando a mesma receita. Não fica clara a quantidade de manteiga e farinha de trigo que deve ser aplicada na forma. Formas de Representação dos Algoritmos : Fluxograma Fluxograma Nessa forma de representação, escrevemos o algoritmo utilizando símbolos gráficos predefinidos, enfatizando os passos individuais e suas interconexões. Formas de Representação dos Algoritmos : Fluxograma A principal vantagem é que é mais fácil entender o conteúdo descrito de forma gráfica do que um descrito textualmente. Além disso, os fluxogramas obedecem a um padrão mundial quanto à simbologia. As desvantagens são as seguintes: Os dados podem não ser suficientemente detalhados, dificultando a transcrição do algoritmo para o programa a ser desenvolvido; É necessário aprender a simbologia dos fluxogramas; Para algoritmos mais extensos, a construção do fluxograma pode se tornar mais complicada. Formas de Representação dos Algoritmos : Fluxograma Fluxograma Exemplo para calcular a nota média de uma aluno Formas de Representação dos Algoritmos : Fluxograma Fluxograma Exemplo para calcular a nota média de uma aluno: As entradas para a execução do algoritmo são a primeira e a segunda nota Veja, as notas 1 e 2 estão no símbolo de fluxograma correspondente à entrada de dados. O cálculo da média é efetuado no símbolo seguinte Símbolo referente ao processamento, ou seja, os cálculos. O símbolo de saída de dados do fluxograma exibe o resultado A média do aluno Os símbolos de Início e Fim são os delimitadores de execução Atividade Caracterize com suas próprias palavras uma descrição narrativa. Faça um algoritmo que descreva alguma situação do seu dia a dia (ex. tomar banho) e construa um fluxograma contendo os símbolos já vistos. Formas de Representação dos Algoritmos : Pseudocódigo É uma combinação das melhores características das duas formas de representação anteriores. A principal vantagem da utilização do pseudocódigo é que, mesmo sendo independente de qualquer linguagem de programação, sua estruturação facilita a transcrição do algoritmo criado para o código dessas linguagens A desvantagem é que precisamos aprender as regras dessa forma de representação. Também figura como desvantagem a não padronização de sua estruturação. Isso quer dizer que você encontrará um mesmo termo descrito de formas diferentes em diferentes literaturas. Pseudocódigo Pseudocódigo Formas de Representação dos Algoritmos : Pseudocódigo Vamos chamar as instruções que estão entre as palavras início e fim de bloco de execução do algoritmo. Veja que o bloco de execução não está posicionado no mesmo alinhamento das palavras início e fim. Chamamos esse recuo de identação. A identação torna o código mais legível, pois facilita a visualização da delimitação dos blocos de execução. As palavras em negrito, são as palavras reservadas da linguagem. Palavras reservadas são os comandos fornecidos pelas linguagens de programação que permitem a expressão dos algoritmos. Alguns exemplos de palavras reservadas são comandos de escrita ou leitura de dados e a declaração de variáveis O comentários explicam o algoritmo (em verde) Formas de Representação dos Algoritmos : Pseudocódigo Formas de Representação dos Algoritmos : Pseudocódigo Exemplos: comandos de controle Exemplos de Algoritmos em Pseudocódigo Como exemplo de um algoritmo matemático, vamos a considerar o problema de resolver uma equação do primeiro grau da forma Ax+b=0 A solução desta equação é X=-b/a Se o valor de a for diferente de 0. Caso a seja igual a 1, a equação não possui solução, já que não é possivel dividir por 0. Exemplos de Algoritmos em Fluxograma Exemplos de Algoritmos em Pseudocódigo Exemplos de Algoritmos em Pseudocódigo Comandos de Repetição As linguagens de programação normalmente possuem diversos comandos que permitem que um trecho de algoritmo seja repetido um numero de vezes. Para estes exemplos iniciais iremos apresentar um comando de repetição que é suficientemente geral para substituir todos os outros. Comandos de Repetição O comando ENQUANTO funciona da seguinte maneira: Passo 1: Testar se a condição é verdadeira. Caso seja verdadeira executar o bloco de comandos situados entre o inicio do comando e o final do comando (FIM ENQUANTO). Passo 2: Executar o bloco de comandos até o fim do enquanto. Quando chegar ao fim retornar automaticamente para o inicio do comando e refazer o passo 1. Exemplos de Algoritmos em Pseudocódigo Exemplos de Algoritmos em Pseudocódigo Exemplos de Algoritmos em Pseudocódigo Exemplos de Algoritmos em Pseudocódigo Exemplos de Algoritmos em Pseudocódigo Atividade 1) Identifique os dados de entrada, processamento e saída no algoritmo abaixo Receba código do produto Receba valor do produto Receba Quantidade de produtos Calcule o valor total do produto (Quantidade * Valor do produto) Mostre o código do produto e seu valor total Fim da apresentação Obrigada pela atenção