









Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Scribd is a way to easily put your documents online.
Tipologia: Notas de estudo
1 / 16
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Este livro destina-se a um curso introdutório de lógica de programação, especialmente para aqueles ministrados em escolas de Engenharia. Um dos principais problemas en- contrados pelo estudante de Engenharia em um primeiro curso de lógica de programa- ção é a carência de textos que abordem de forma direta e clara as etapas necessárias para suportar o processo de resolução de problemas (computacionais ou não), a saber: a análise , com a identificação e solução de subproblemas, e a síntese , união das soluções encontradas para compor a solução do problema original. O resultado dessas etapas é sintetizado em passos que devem ser seguidos em determinada ordem e que constituem os algoritmos.
Pretende-se aqui seguir uma apresentação incremental dos tópicos. Inicialmente são pro- postos problemas simples que envolvem raciocínio lógico e que possuem solução livre, de modo a ambientar e a incentivar o estudante na descrição dos passos elementares necessários à resolução de problemas. Isso é fundamental, pois grande parte dos estu- dantes que tem um primeiro contato com lógica de programação apresenta deficiências na organização de suas soluções e em abstrações. Além disso, neste primeiro contato, um processo genérico de solução de problemas é apresentado de maneira a fornecer um conjunto de dicas ou heurísticas que podem ser aplicadas em todos os problemas a serem resolvidos, fortalecendo assim o processo de abstração, essencial em programação. A seguir são apresentados os conceitos de computação e computadores. Embora um primeiro curso de lógica de programação possa ser ministrado sem referências a como um computador é organizado e como funciona, verifica-se na prática que esse en- foque não é adequado. Como se sabe, o grande problema do estudante nesses cursos
Prefácio xxi
arquitetura de Von Neumann. Um computador hipotético com instruções simplificadas é apresentado de forma a proporcionar ao estudante simulações de como as instruções e os dados são realmente processados. Os conceitos de algoritmo e fluxograma são formalizados no Capítulo 3. São dis- cutidos o conceito e as propriedades de um algoritmo, a representação de algoritmos por fluxogramas, como criar um fluxograma utilizando os símbolos básicos da norma ISO 5807/1985, bem como convenções para os tipos de dados, os nomes de variáveis e operadores. Já no Capítulo 4 formalizam-se as estruturas de programação. São apresentados os nomes e as topologias das estruturas típicas de um programa: as estruturas seqüenciais, de decisão e de repetição. Apresentam-se ainda nesse capítulo duas outras formas de re- presentação de algoritmos: os diagramas de Nassi-Schneidermann e a pseudolinguagem Portugol. É apresentado, no Capítulo 5, o conceito de variáveis indexadas e seu uso. As variá- veis indexadas são aquelas que referenciam de forma ordenada uma seqüência de dados homogêneos. Separam-se aqui, para melhor compreensão, o conceito e a utilização de variável indexada unidimensional (ou vetor) do conceito de variável indexada bidi- mensional e multidimensional. Com essa separação, espera-se que o estudante consiga estender os conceitos e operações relacionados a variáveis indexadas unidimensionais para dimensões maiores. Por fim, no Capítulo 6 são discutidas as técnicas para a solução de problemas, mais especificamente as técnicas para modularizar a solução utilizando sub-rotinas. São apon- tados os dois tipos básicos de sub-rotinas (função e procedimento) e como empregá-los de acordo com a técnica top-down de modularização. A Figura da página xxii exibe a organização dos capítulos deste livro.
Algumas convenções tipográficas foram utilizadas neste livro para tornar mais clara a sua compreensão:
xxii Algoritmos e Lógica de Programação
Capítulo 1 - Introdução
Capítulo 2 - Conceitos de Computação e Computadores
Capítulo 3 - Algoritmos e Fluxogramas
Capítulo 4 - Estruturas de Programação
Capítulo 6 - Técnicas para a Solução de Problemas
Capítulo 5 - Variáveis Indexadas
2 Algoritmos e Lógica de Programação
por si só é um valor qualquer armazenado em um computador enquanto a informação representa a interpretação desse dado, ou seja, qual o seu significado. Parte dos dados processados durante a execução de um software é fornecida pelo ser humano (ou outra máquina) e denominada dados de entrada. Por outro lado, os dados de saída são aqueles fornecidos ao ser humano (ou outra máquina) após o processamento dos dados de entrada. De qualquer forma, é importante notar que o objetivo do software é que motiva sua construção. Este pode ser definido como alguma necessidade humana, por exemplo, um programa para simular o funcionamento de um circuito digital, um programa para comandar um robô em uma linha de montagem, um sistema de gerenciamento de in- formações em uma empresa, somente para citar algumas. A Figura 1.1 descreve uma simplificação do processo de desenvolvimento de um software.
Figura 1.1 Simplificação do processo de construção de um software.
Nessa figura, o cliente especifica exatamente o que o software deve conter. Ele sabe o que o software deve conter e realizar, mas regra geral não sabe como. Ele indica o que o software deve contemplar e executar por meio de especificações chamadas requisitos. Entende-se por cliente a entidade que contrata os serviços para a criação de um software, podendo ser uma empresa, pessoa ou ainda uma empresa que, por iniciativa própria, produza e venda seu software livremente (por exemplo, a Microsoft). No desenvolvimento, os requisitos do cliente são traduzidos em especificações téc- nicas de software pelos analistas de sistema ou engenheiros de software. O desenvol- vimento de um software é tipicamente dividido nas seguintes etapas:
Capítulo 1 – Introdução 3
Por fim, após os testes o software é implantado na empresa. A implantação pode variar desde uma simples instalação via CD-ROM, que dure alguns minutos, até a insta- lação e testes de integração de diversos softwares, que pode levar semanas. De qualquer forma, o fato de o software estar finalizado e testado não significa que esteja totalmente livre de erros, também denominados bugs. Assim, deve-se voltar e tentar identificar a causa dos erros. Pior que erros de programação, é o caso em que pode acontecer de o software funci- onar corretamente, não apresentar erros, mas não realizar o que o cliente esperava. Nesse caso, deve-se retornar à etapa inicial, verificando os requisitos e refazendo todo o ciclo de desenvolvimento novamente. É um fato que grande parte do investimento feito em um software é gasta na correção de erros do que propriamente na sua elaboração. Daí, surge a necessidade de enxergar o software como o produto de um processo bem-definido e controlado, que atue sobre as suas etapas de desenvolvimento, em outras palavras, um processo de engenharia de software.
Como foi brevemente apresentado na Seção 1.1, o software deve ser encarado como um produto de um processo bem-definido e controlado de engenharia. O intuito deste livro não é entrar em detalhes sobre engenharia de software e sim concentrar-se na dissemina- ção de conceitos básicos que viabilizem a especificação correta de softwares, uma etapa imediatamente anterior a sua implementação ou programação. O estudo de algoritmos e de lógica de programação é essencial no contexto do processo de criação de um software. Ele está diretamente relacionado com a etapa de projeto de um software em que, mesmo sem saber qual será a linguagem de programação a ser utilizada, se especifica completamente o software a ponto de na implementação ser possível traduzir diretamente essas especificações em linhas de código em alguma lin- guagem de programação como Pascal, C, Java e outras. Essa tarefa permite verificar, em um nível maior de abstração, se o software está correto ou não. Permite, inclusive, averiguar se o software atenderá às especificações
Capítulo 1 – Introdução 5
Figura 1.3 A tarefa de especificar um algoritmo.
Em primeiro lugar, deve-se saber qual é o problema a ser resolvido pelo software – o seu objetivo. Daí, deve-se extrair todas as informações a respeito desse problema (dados e operações), relacioná-las com o conhecimento atual que se tem do assunto, buscando eventualmente informações de outras fontes. Essa fase representa a modelagem do problema em questão e vai ser detalhada na Seção 1.4.2. A modelagem do problema é resultante de um processo mental de abstração , o qual será discutido na Seção 1.4.
Depois, sabendo como resolver o problema, a tarefa consiste em descrever clara- mente os passos para se chegar à sua solução. Os passos por si só não resolvem o problema; é necessário colocá-los em uma seqüência lógica (veja Seção 1.4.3), que, ao ser seguida, de fato o solucionará. Além disso, é importante que essa descrição possua algum tipo de convenção para que todas as pessoas envolvidas na definição do algoritmo possam entendê-lo (veja a Seção 1.3). Chega-se, então, na especificação do algoritmo.
Considere o problema das Torres de Hanoi. A proposição do problema é a seguinte: inicialmente têm-se três hastes, A, B e C, e na haste A repousam três anéis de diâmetros diferentes, em ordem decrescente por diâmetro (veja a Figura 1.4).
6 Algoritmos e Lógica de Programação
A B C
Situação inicial Situação final
A B C
Figura 1.4 O problema das Torres de Hanoi.
O objetivo é transferir os três anéis da haste A para B, usando C se necessário. As regras de movimento são:
As únicas informações para se resolver esse problema são as configurações inicial e final dos anéis e as regras de movimento. Uma solução poderia ser a seguinte seqüência de operações (veja o Algoritmo 1.1 e a Figura 1.5).
Algoritmo 1.1 Algoritmo para resolver o problema das Torres de Hanoi.
Início
8 Algoritmos e Lógica de Programação
Como se obteve essa solução? Primeiro, é importante entender o enunciado do pro- blema e as regras que foram impostas. Dessa forma, não é possível especificar os mo- vimentos nos quais uma peça que esteja abaixo de outra seja movida e nem mover mais de uma peça por vez. Segundo, é importante verificar a cada passo definido se a solução está se aproximando do objetivo final. O Algoritmo 1.2 define outra seqüência de operações para se solucionar o problema.
Algoritmo 1.2 Outro algoritmo para as Torres de Hanoi.
Início
Deve-se observar que essa solução é válida e também resolve o caso das Torres de Hanoi. No entanto, leva-se mais tempo para chegar se à solução (onze passos contra sete da solução anterior). Esse exemplo demonstra que uma mesma solução pode ser melhor ou pior que outra. Isso é um conceito importante quando se trata de um programa, pois, dependendo do problema, determinar uma solução mais eficiente pode economizar até horas de processamento. Outras soluções válidas também podem ser propostas, mas não terão menos que sete movimentos. Agora, e se for considerado o mesmo problema, porém, com n anéis postados ini- cialmente na haste A? Como isso afetará a solução? É interessante estudar diversos casos particulares antes de elaborar uma solução genérica.