logica de programação

logica de programação

(Parte 1 de 10)

Apostila de

Lógica de Programação

ÍNDICE

1.Introdução 55

2.Conceitos Gerais 56

Programação Estruturada 56

Desenvolvimento Top-Down 57

Modularização 57

Estruturas de Controle 57

Confiabilidade 57

Manutenibilidade 57

PseudoLinguagem - PORTUGOL 58

3.Raciocínio Matemático 58

Fluxo de Controle em Algoritmos 58

Criando Algoritmos 59

Identificadores 60

Variáveis 61

Tipos Básicos de Dados 62

Comentários 62

Comando de Atribuição 63

Operadores Aritméticos 63

Operadores Relacionais 63

Operadores Lógicos 64

Prioridade na Avaliação de Expressões 64

Comandos de Entrada e Saída 64

Funções 65

Operações com Strings 65

Estrutura de um Algoritmo 66

Estruturas de Controle 66

Vetores 71

Matrizes 73

Registros 78

Arquivos 80

Procedimentos e Funções 84

Lógica de Programação

1.Introdução

Muitos anos se passaram desde os primórdios da história da computação, mas apesar de já termos vivido vários paradigmas de programação, existe uma base de conhecimento que não mudou e não mudará nunca – a Lógica de Programação.

Faço uma associação direta da Lógica de Programação com o Raciocínio Matemático, onde o importante é a interpretação de um problema e a utilização correta de uma fórmula, e não a sintaxe pré-definida da mesma. O saber da Lógica está no “praticar”.

Não existem “fórmulas” em Informática, o que existe é o aperfeiçoamento de nossa forma de pensar e raciocinar sobre um problema, podendo extrair do mesmo uma solução eficiente e eficaz, sob um determinado ângulo de visão. Assim, verificamos que é preciso aprender a pensar sobre os problemas, extraindo deles o máximo de informações.

A solução que criamos para um determinado problema necessita ser exteriorizada e expressa numa linguagem publicamente conhecida. Assim, utilizamos a lógica de programação para desenvolver nossas soluções e os algoritmos para apresentar essas soluções ao mundo.

Venho acompanhando nos últimos anos vários livros de Algoritmos e Estruturas de Dados. Todos ensinam como representamos estruturas de controle e atribuições, ou como declaramos variáveis, mas nenhum deles – que eu tenha lido até o momento –, orientou o aluno na forma de pensar. Precisamos mais do que “fórmulas”, precisamos aprender a pensar.

Os princípios da programação estruturada surgida no final da década de 60 – introduzidos por Dijkstra – levaram a necessidade de se ter uma linguagem que implementasse essas idéias, já que as linguagens de época (FORTRAN, COBOL e BASIC) não permitiam aplicar claramente as técnicas ensinadas. Assim, o professor Niklaus Wirth e seus colegas da Universidade Técnica de Zurique (Suíça) desenvolveram, no início dos anos 70, a linguagem PASCAL – uma derivação da linguagem ALGOL 60, porém de implementação mais simples e com uma estrutura de dados mais poderosa. O nome Pascal foi uma homenagem a Blaise Pascal, famoso matemático, que criou a calculadora baseada em discos de madeira, que foi a predecessora da calculadora de mesa e serviu de inspiração para diversos computadores.

Assim, nossa apostila oferecerá, inicialmente, conceitos gerais sobre Programação. Posteriormente, vocês terão exercícios de Raciocínio Matemático que lhes exercitarão o poder de PENSAR! Em seguida, apresentaremos como desenvolver algoritmos de soluções para Sistemas. E por último, vamos conhecer a Linguagem Pascal, a fim de vermos nossos algoritmos funcionando – ao vivo e à cores !

2.Conceitos Gerais

Programação Estruturada

A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas. Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”.

A Programação Estruturada procurar reduzir o nível de complexidade através de três níveis:

  1. desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);

  2. decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;

  3. uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.

Desenvolvimento Top-Down

Na Programação Estruturada, ao desenvolvermos um algoritmo, temos como objeto um produto final – o programa. Todavia, para termos esta transição, passamos por várias fases, no sentido “cima para baixo”, onde cada fase é documentada e principalmente obtida por “refinamento” da fase anterior, até chegarmos a um nível de detalhamento que permita implementar o algoritmo diretamente na linguagem de programação.

Modularização

A solução final de um problema é obtida através de soluções de subproblemas, o que permite dividir o programa em módulos com subfunções claramente delimitadas, que podem, inclusive, ser implementados separadamente, por diversos programadores de uma equipe.

Estruturas de Controle

São representadas pela seqüência simples, o comando condicional e o comando repetitivo, e fornecem ao programador um aumento da legibilidade e compreensão de cada módulo de programa. Assim, temos como uma das principais normas da Programação Estruturada : não usar comandos de desvio (GOTO).

Confiabilidade

Medimos a confiabilidade de um sistema através de sua resposta ao uso constante, no tocante a:

  • não apresentar erros; e,

  • corresponder às especificações.

Atualmente, a sociedade está totalmente dependente dos sistemas de computação. Assim, aumenta exponencialmente a importância do nosso trabalho.

Nos fins dos anos 60, constatou-se que as sistemáticas usadas pelos programadores eram os grandes responsáveis pela baixa confiabilidade dos programas. Como solução destes problemas, surgiu a Programação Estruturada (PE).

Manutenibilidade

As revisões sofridas por um programa (releases) tanto para correção de erros quanto para mudanças de especificação, são consideradas como manutenção de software.

Os programas devem passar por testes exaustivos de confiabilidade antes de serem colocados em produção. Falhas nesta fase levam a altos níveis de manutenção, que conseqüentemente, levam a altos custos.

PseudoLinguagem - PORTUGOL

Sabemos que ao desenvolver programas necessitamos de nossa criatividade, para que tenhamos soluções eficazes e eficientes. Todavia, não podemos representar nossas soluções em algoritmos totalmente escritos em português. Em programação, todas as vezes que executarmos um algoritmo a partir de um estado inicial x, devemos sempre obter o mesmo estado final y. Desta forma, é fácil perceber que a linguagem natural, não formalizada, geraria ambigüidades.

Assim, temos o PORTUGOL, que é uma pseudolinguagem de programação (simbiose do Português com o ALGOL e PASCAL), que permite pensarmos no problema e não na máquina que vai executar o algoritmo. Além disso, não perdemos a flexibilidade e continuamos a ter a proximidade com a linguagem humana, facilitando, portanto, a interpretação.

3.Raciocínio Matemático

As crianças aprendem facilmente como adicionar e subtrair valores. Suas dificuldades começam no momento em que elas se deparam com problemas e necessitam identificar quais operações trarão soluções para os mesmos.

Podemos pensar também num algoritmo como um “mecanismo” de transformação de entradas em saídas. Assim, um algoritmo ao ser “executado”, receberá algumas entradas, que serão processadas e nos devolverá algumas saídas.

Fluxo de Controle em Algoritmos

Um algoritmo é um texto estático, onde temos vários passos que são lidos e interpretados de cima para baixo. Para que venhamos a obter o(s) resultado(s) deste algoritmo, necessitamos “executá-lo”, o que resulta em um processo dinâmico.

No fluxo de controle identificamos em cada passo da execução qual é o próximo comando a ser executado.

A compreensão da lógica de programação de um algoritmo está diretamente ligada a compreensão de seu fluxo de controle. A partir de uma compreensão correta, podemos traçar as diversas execuções possíveis de um algoritmo. Se testarmos todas essas possibilidades, e obtivermos resultados corretos, podemos ter certeza de estar entregando um produto final confiável.

Os iniciantes no mundo da programação encontram alguma dificuldade em diminuir a distância conceitual que separa a representação estática de um algoritmo do(s) processo(s) dinâmico(s) de sua execução. É importante frisar que quando nos propomos a entender um algoritmo, lidamos fisicamente com um texto, mas mentalmente temos processos.

Criando Algoritmos

Toda linguagem é composta de sintaxe e semântica, onde a sintaxe corresponde à forma e a semântica corresponde ao conteúdo.

Vocês devem aprender a sintaxe dos comandos, mas a principal preocupação deve ser de “como usar esses comandos”.

Regras para criação de bons algoritmos

  1. Use comentários com freqüência. Isto torna o algoritmo mais legível e facilita o entendimento da lógica empregada. Seus algoritmos deverão ser lidos e entendidos por outras pessoas (e por você mesmo) de tal forma que possam ser corrigidos e receber manutenção.

Obs: Não se esqueça de atualizar os comentários, em caso de manutenção. Pior do que um programa sem comentários, é um programa com comentários errados.

  1. Use comentários, também, no cabeçalho do algoritmo, incluindo, principalmente:

  • descrição do que faz o algoritmo

  • autor

  • data de criação

  1. Escolha nomes de variáveis significativos, todavia evite nomes muito longos.

Ex: Prefira SalBruto ou SalarioBruto ao invés de SB ou VAR1

Prefira TotAlunosAprovDireta ao invés de

TotalAlunosAprovacaoDireta

  1. Destaque as palavras-chave das estruturas de controle e comandos com sublinhado.

Ex: se media >= 7 então

...

senão

...

fim-se

  1. Utilize espaços e linhas em branco para melhorar a legibilidade.

  2. Coloque apenas um comando por linha. Vários comandos em uma linha causa ilegibilidade e dificulta a depuração.

  3. Utilize parênteses para aumentar a legibilidade e prevenir-se de erros.

  4. Use identação nos comandos de acordo com o nível que estejam, ou seja, alinhe comandos de mesmo nível e desloque comandos de nível inferior.

Ex.:

início

comando 1;

se condicao1 então

comando2;

comando3;

senão

(Parte 1 de 10)

Comentários