Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 LINGUAGEM E TÉCNICA DE PROGRAMAÇÃO I Profa. Gisele Busichia Baioco gisele@ft.unicamp.br Resolução de Problemas utilizando o Computador 1 Lógica de Programação 1.1 O que é Lógica? A lógica trata da “correção do pensamento”. Pode-se dizer também que a lógica é a arte de pensar corretamente e, visto que a forma mais completa do pensamento é o raciocínio, a lógica estuda ou tem em vista a “correção do raciocínio”. A lógica ensina a colocar ORDEM NO PENSAMENTO. Exemplo: Todo mamífero é animal. Todo cavalo é mamífero. Portanto, todo cavalo é animal. 1.2 Existe Lógica no dia-a-dia? Sempre que uma pessoa pensa, a lógica ou a ilógica está presente. Também, quando se fala, pois a palavra falada é a representação do pensamento.Visto que a palavra escrita é a representação da palavra falada, também se pensa quando se escreve. Pode-se perceber então, a importância da lógica na vida das pessoas não só na teoria, como também na prática. Exemplo: A gaveta está fechada. A bala está na gaveta. Preciso primeiro abrir a gaveta, para depois pegar a bala. 1.3 Mas e a Lógica de Programação? Significa o uso correto das leis do pensamento, da “ordem da razão” e de processos de raciocínio e simbolização formais na programação de computadores, objetivando racionalidade e o desenvolvimento de técnicas que cooperem para a produção de soluções logicamente válidas e coerentes, que resolvam com qualidade os problemas que se deseja programar. O objetivo principal do estudo da Lógica de Programação é a construção de algoritmos coerentes e válidos. 2 Algoritmos A solução de um problema não deve ser implementada diretamente por meio de um programa de computador, pois a probabilidade de erros se torna maior. Assim, um trabalho de programação deve ser dividido em duas fases como mostra a figura 1: • Fase de resolução do problema: consiste na elaboração de um algoritmo (“receita”) para resolver o problema proposto; 2 • Fase de implementação: consiste na conversão do algoritmo elaborado na fase anterior, para alguma linguagem de programação. Solução em forma de algoritmo Problema Fase da resolução do problema Solução como um programa Fase da implementação Passo difícil Figura 1: Resolução de um problema e programação De maneira mais detalhada, a resolução de um problema utilizando o computador deve ser realizada por meio dos seguintes passos: 1- Ter o enunciado do problema e saber exatamente o que é desejado como resposta. 2- Elaborar um algoritmo para resolver o problema; 3- Converter o algoritmo para uma linguagem de programação específica (codificação do problema); 4- Editar o programa no computador para que ele possa ser executado (pode ser feito simultaneamente com o passo 3); 5- Compilar o programa; 6- Executar o programa; 7- Interpretar os resultados obtidos (testes). 2.1 Conceito de Algoritmo Um algoritmo pode ser definido como uma seqüência ordenada, e sem ambigüidade, de passos que levem à solução de um dado problema. Exemplo de um algoritmo para trocar uma lâmpada: Passo 1 – Escolha uma nova lâmpada de mesma potência da queimada Passo 2 – Peque a escada Passo 3 – Posicione a escada embaixo da lâmpada a ser trocada Passo 4 – Suba na escada até alcançar a lâmpada Passo 5 – Remova a lâmpada queimada Passo 6 – Coloque a lâmpada nova Passo 7 – Desça da escada O algoritmo ainda não está com uma especificação precisa, ou seja, diversos passos dele implicam em operações mais elaboradas que devem ser expressas explicitamente. Especificando mais detalhadamente os passos 1, 4, 5, 6, tem-se (tudo o que estiver escrito entre os símbolos /* e */ são comentários para facilitar o entendimento): 3 Passo 1 – /* Escolha uma nova lâmpada de mesma potência da queimada */ Selecione uma nova lâmpada Se a potência não for a mesma da queimada, repita o processo seguinte até encontrar uma que sirva: Descarte a lâmpada selecionada Selecione uma nova lâmpada Passo 2 – Peque a escada Passo 3 – Posicione a escada embaixo da lâmpada a ser trocada Passo 4 – /* Suba na escada até alcançar a lâmpada */ Repita até que a lâmpada possa ser alcançada: Suba num degrau da escada Passo 5 – /* Remova a lâmpada queimada */ Repita até que a lâmpada fique livre do soquete: Gire a lâmpada no sentido anti-horário Passo 6 – /* Coloque a lâmpada nova */ Posicione a lâmpada nova no soquete Repita até que a lâmpada esteja firme no soquete: Gire a lâmpada no sentido horário Passo 7 – Desça da escada O processo de detalhamento (refinamento) de um algoritmo pode continuar quase que indefinidamente. O nível de detalhamento necessário é determinado pelo “agente” que irá executar o algoritmo, isto é, um algoritmo está suficientemente detalhado quando estiver expresso em termos de tarefas já conhecidas pelo “agente” que irá executá-lo. Em termos computacionais, isso significa que o algoritmo está suficientemente refinado quando puder ser expresso em termos das instruções fornecidas pela linguagem de programação a ser utilizada. 2.2 Método para a Construção de Algoritmos Para a construção de qualquer tipo de algoritmo são necessários os passos descritos a seguir: 1- Ler atentamente o enunciado do problema, destacando os pontos mais importantes; 2- Definir os dados de entrada: quais os dados que serão fornecidos; 3- Definir o processo (ou processamento): quais cálculos serão efetuados e quais as restrições para esses cálculos. O processamento é responsável pela transformação dos dados de entrada em dados de saída; 4- Definir os dados de saída: quais as informações se pretende obter, ou seja, quais dados deverão ser gerados após o processamento; 5- Construir o algoritmo; 6- Testar o algoritmo realizando simulações. 2.3 Tipos de Algoritmos Os três tipos mais utilizados de algoritmos são: descrição narrativa, fluxograma e algoritmo estruturado (ou pseudocódigo). 2.3.1 Descrição Narrativa A descrição narrativa consiste em analisar o enunciado do problema e escrever, utilizando uma linguagem natural (por exemplo, a língua portuguesa), os passos a serem seguidos para a resolução do problema. 4 Vantagem: não é necessário aprender nenhum conceito novo, pois uma língua natural já é bem conhecida. Desvantagem: a língua natural abre espaço para várias interpretações, o que posteriormente dificultará a transcrição desse algoritmo para o programa. 2.3.2 Fluxograma O fluxograma consiste em analisar o enunciado do problema e escrever, utilizando símbolos gráficos predefinidos (figura 2), os passos a serem seguidos para a resolução do problema. Indicam a ordem em que as operações devem ser executadas Processo Decisão Entrada Saída Início e Fim Figura 2: Símbolos básicos de fluxogramas Vantagem: o entendimento de elementos gráficos é mais fácil que o entendimento de textos. Desvantagem: é necessário aprender a simbologia dos fluxogramas e, além disso, o algoritmo resultante não apresenta muitos detalhes, dificultando a sua transcrição para um programa. Para programas extensos, a representação usando fluxograma fica difícil de ser visualizada por completo. 2.3.3 Algoritmo Estruturado ou Pseudocódigo O algoritmo estruturado ou peseudocódigo consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos a serem seguidos para a resolução do problema. Vantagem: a passagem do algoritmo para uma linguagem de programação é quase imediata, bastando conhecer os comandos (instruções) da linguagem de programação que será utilizada. Desvantagem: é necessário aprender as regras do pseudocódigo. 2.4 Exemplo Geral de Algoritmo Problema: Fazer um algoritmo para calcular a média aritmética de duas notas de um aluno e mostrar a situação desse aluno que pode ser: aprovado, se a média for maior ou igual a 5 e reprovado, caso contrário. Entrada: nota1 e nota2 Processo: média aritmética = (nota1 + nota2)/2 Saída: se média aritmética ≥ 5 então aprovado; caso contrário reprovado 5 Algoritmo em descrição narrativa: Passo 1 – Receber duas notas Passo 2 – Calcular a média aritmética Passo 4 – Se a média aritmética for maior ou igual a 5, então a situação do aluno é aprovado; caso contrário, a situação é reprovado Algoritmo em fluxograma: M = (N1 + N2)/2 N1, N2 Início M ≥≥≥≥ 5 Aprovado Fim Sim Não Reprovado Algoritmo estruturado: Algoritmo início declare N1, N2, M: numérico; escreva(“Digite as duas notas”); leia(N1, N2); M ← (N1 + N2)/2; se M ≥ 5 então escreva(“Aprovado”); senão escreva(“Reprovado”); fim 2.5 Conclusões Para que sejam obtidas soluções eficientes para problemas computacionais é necessário que o problema seja bem analisado, solucionado e descrito e/ou representado passo-a-passo. A descrição narrativa e os fluxogramas ajudam, mas em alguns momentos se tornam ineficientes. Por isso, o tipo de algoritmo mais indicado para a representação da solução de problemas computacionais é o Algoritmo Estruturado. 6 3 Linguagem de Programação Estruturada – A Linguagem C A linguagem C foi criada por Dennis M. Ritchie e Ken Thompson no laboratório Bell em 1972, baseada na linguagem B de Thompson que era uma evolução da antiga linguagem BCPL. B foi nomeada com a primeira letra de BCPL e C com a segunda. C é uma linguagem muito utilizada no desenvolvimento de sistemas de software básico (por exemplo, sistemas operacionais, planilhas eletrônicas, processadores de texto, gerenciadores de banco de dados, processadores gráficos, sistemas de transmissão de dados, etc) e aplicações científicas (por exemplo, solução de problemas de engenharia, física, matemática, etc). O sistema operacional UNIX foi desenvolvido em C. A linguagem C tornou-se rapidamente uma das mais importantes e populares, principalmente por ser muito poderosa (combina as características de uma linguagem de alto nível com a funcionalidade das linguagens de baixo nível), portável e flexível. Os programas em C podem ser desenvolvidos de maneira estruturada e modular, o que resulta em programas mais legíveis. Os programas C também são compactos e de execução rápida.