(Parte 1 de 10)

SEMESTRE 2008/1

1 - FUNDAMENTOS DE PROGRAMAÇÃO1
1.1 O QUE SÃO ALGORITMOS ?1
1.1.1 POR QUE PRECISAMOS DE ALGORITMOS ?2
1.1.2 MÉTODO PARA CONSTRUIR UM ALGORITMO2
1.1.3 EXERCÍCIOS3
1.2 TIPOS DE INFORMAÇÃO3
1.2.1 TIPOS INTEIROS (NUMÉRICOS)3
1.2.2 TIPOS REAIS (NUMÉRICOS)3
1.2.3 TIPOS CARACTERES4
1.2.4 TIPOS LÓGICOS4
1.3 VARIÁVEIS4
1.3.1 ARMAZENAMENTO DE DADOS NA MEMÓRIA4
1.3.2 CONCEITO E UTILIDADE DE VARIÁVEIS4
1.4 INSTRUÇÕES PRIMITIVAS5
1.5 REPRESENTAÇÃO DE ALGORITMOS ATRAVÉS DE FLUXOGRAMAS6
1.5.1 EXERCÍCIOS6
1.6 INTRODUÇÃO A LINGUAGEM PASCAL7
1.6.1 PROGRAMAS FONTE, OBJETO E EXECUTÁVEL8
1.6.2 NOMES DOS ARQUIVOS EM DISCO9
2 - FUNDAMENTOS DA PROGRAMAÇÃO EM PASCAL1
2.1 ESTRUTURA DE UM PROGRAMA EM PASCAL1
2.1.1 IDENTIFICADORES12
2.1.2 TIPOS DEFINIDOS DO PASCAL13
2.1.2.1 TIPO INTEIRO14
2.1.2.2 TIPO BOOLEAN14
2.1.2.3 TIPO CHAR14
2.1.2.4 TIPO REAL14
2.1.2.5 TIPO STRING14
2.1.3 DECLARAÇÃO DE VARIÁVEIS15
2.1.4 DECLARAÇÃO DE CONSTANTES15
2.1.5 COMANDO DE ATRIBUIÇÃO16
2.1.6 COMENTÁRIOS17
2.1.7 EXPRESSÕES ARITMÉTICAS17
2.1.8 FUNÇÕES MATEMÁTICAS PRÉ-DEFINIDAS18
2.1.9 EXPRESSÕES LÓGICAS19
2.2 EXERCÍCIOS20
3 - ENTRADA E SAÍDA DE DADOS23
3.1 COMANDOS DE ENTRADA23
3.2 COMANDOS DE SAÍDA24
3.3 FORMATAÇÃO27
3.4 O COMANDO CLRSCR29
3.4.1 EXERCÍCIOS30
3.5 EXERCÍCIOS AVANÇADOS32
4 - ESTRUTURAS DE DECISÃO3
4.1 COMANDOS COMPOSTOS3
4.2.2 EXERCÍCIOS43
4.2.3 EXERCÍCIOS OPCIONAIS45
4.3 A ESTRUTURA DE DECISÃO CASE46
4.4 EXERCÍCIOS49
5 - ESTRUTURAS DE REPETIÇÃO51
5.1 A ESTRUTURA DE REPETIÇÃO FOR51
5.1.1 EXERCÍCIOS60
5.1.2 EXERCÍCIOS OPCIONAIS61
5.2 A ESTRUTURA DE REPETIÇÃO WHILE62
5.2.1 EXERCÍCIOS64
5.2.2 EXERCÍCIOS OPCIONAIS65
5.3 A ESTRUTURA DE REPETIÇÃO REPEAT-UNTIL6
5.3.1 EXERCÍCIOS72
6 - FUNÇÕES E PROCEDIMENTOS73
6.1 FUNÇÕES73
6.1.1 ESTRUTURA DE UMA FUNÇÃO73
6.1.2 FUNÇÕES DEFINIDAS POR SOMATÓRIOS85
6.2 PROCEDIMENTOS86
6.2.1 DEFINIÇÃO, PROCEDIMENTOS SEM PARÂMETROS86
6.2.2 PROCEDIMENTOS COM PARÂMETROS89
6.2.3 EXERCÍCIOS93
7 - VETORES E MATRIZES97
7.1 DECLARAÇÃO DE TIPOS97
7.2 VETORES97
7.2.1 EXERCÍCIOS9
7.3 MATRIZES100

1 1 − FUNDAMENTOS DE PROGRAMAÇÃO

1.1 O QUE SÃO ALGORITMOS ?

O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a solução dos mais variados problemas.

Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos.

Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes às linguagens de programação e outras utilizando formas gráficas. O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.

Algoritmos não se aprende:

À especificação da seqüência ordenada de passos que deve ser seguida para a realização de uma tarefa, garantindo a sua repetibilidade, dá-se o nome de algoritmo. Embora esta definição de algoritmo seja correta, podemos definir algoritmo, de maneira informal e completa como:

Algoritmos é um conjunto de regras, bem definidas, para a solução de um problema em um tempo finito e com um número finto de passos.

Algoritmo pode ser definido também como um conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. Um algoritmo deve sempre possuir pelo menos um resultado, normalmente chamado de saída, e satisfazer a propriedade da efetividade, isto é, todas as operações especificadas no algoritmo devem ser suficientemente básicas para que possam ser executadas de maneira exata e num tempo finito.

Na prática não é importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. O mais importante de um algoritmo é a sua correção, isto é, se ele resolve realmente o problema proposto e o faz exatamente.

Para se ter um algoritmo, é necessário:

i. Que se tenha um número finito de passos; i. Que cada passo esteja precisamente definido, sem possíveis ambigüidades; i. Que existam zero ou mais entradas tomadas de conjuntos bem definidos; iv. Que existam uma ou mais saídas; v. Que exista uma condição de fim sempre atingida para quaisquer entradas e num tempo finito.

Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais é que um algoritmo escrito numa forma compreensível pelo computador.

1.1.1 POR QUE PRECISAMOS DE ALGORITMOS ?

Vejamos o que algumas pessoas importantes, para a Ciência da Computação, disseram a respeito de algoritmo: A noção de algoritmo é básica para toda a programação de computadores . [KNUTH - Professor da Universidade de Stanford, autor da coleção The art of computer programming ]

O conceito central da programação e da ciência da computação é o conceito de algoritmo .

[WIRTH - Professor da Universidade de Zurique, autor de diversos livros na área e responsável pela criação de linguagens de programação como ALGOL, PASCAL e MODULA-2].

A importância do algoritmo está no fato de termos que especificar uma seqüência de passos lógicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si só não tem vontade própria, faz apenas o que mandamos. Com uma ferramenta algorítmica, podemos conceber uma solução para um dado problema, independendo de uma linguagem específica e até mesmo do próprio computador.

1.1.2 MÉTODO PARA CONSTRUIR UM ALGORITMO

Utilizando os conceitos já desenvolvidos, esquematizaremos um método para construir um algoritmo logicamente correto:

i. Ler atentamente o enunciado: Deve-se reler o enunciado de um exercício quantas vezes for necessário, até compreendê-lo completamente. A maior parte da resolução de um exercício consiste na compreensão completa do enunciado.

i. Retirar a relação das entradas de dados do enunciado Através do enunciado, descobrimos quais são os dados que devem ser fornecidos ao programa, via teclado, a partir dos quais são desenvolvidos os cálculos. Obs. Pode haver algum algoritmo que não necessite da entrada de dados (pouco comum).

i. Retirar do enunciado as informações de saída Através do enunciado podemos descobrir quais são as informações que devem ser mostradas para compor o resultado final, objetivo do algoritmo. 4. Determinar o que deve ser feito para transformar as entradas em saídas Nessa fase é que teremos a construção do Algoritmo propriamente dito. Devemos determinar qual sequência de passos ou ações é capaz de transformar um conjunto de dados nas informações de resultado. Para isso, utilizamos os fatores descritos anteriormente, tais como legibilidade, portabilidade, método cartesiano e planejamento reverso, e finalmente podemos construir o algoritmo.

1.1.3 EXERCÍCIOS

1a Questão) Elabore um algoritmo que mova 3 discos de uma torre de Hanói, que consiste em

3 hastes (a-b-c), uma das quais serve de suporte para os três discos de tamanhos diferentes (1-2-3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, sendo que nunca deve ser colocado um disco maior sobre um menor. O objetivo é transferir os três discos da haste A para haste C.

Figura 1.1: Torres de Hanoi

Mova <disco n> da haste <n1> para haste <n2> -

1.2 TIPOS DE INFORMAÇÃO

Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos:

• As instruções, que comandam o funcionamento da máquina e determinam a maneira como devem ser tratados os dados.

• Os dados propriamente ditos, que correspondem à porção das informações a serem processadas pelo computador.

A classificação apresentada a seguir não se aplica a nenhuma linguagem de programação específica; pelo contrário, ela sintetiza os padrões utilizados na maioria das linguagens.

1.2.1 TIPOS INTEIROS (NUMÉRICOS)

São caracterizados como tipos inteiros, os dados numéricos positivos ou negativos. Excluindo-se destes qualquer número fracionário. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024 entre outros.

1.2.2 TIPOS REAIS (NUMÉRICOS)

São caracterizados como tipos reais, os dados numéricos positivos e negativos e números fracionários. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987 entre outros.

1.2.3 TIPOS CARACTERES

São caracterizados como tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas ( ). Este tipo de dado também é conhecido como string, alfanumérico, string, literal ou cadeia. Como exemplo deste tipo de dado, tem-se os valores: Programação , Rua Alfa, 52 Apto 1 , Fone 574-98 , 04387-030 , , 7 entre outros.

1.2.4 TIPOS LÓGICOS

São caracterizados como tipos lógicos os dados com valor verdadeiro e falso, sendo que este tipo de dado poderá representar apenas um dos dois valores. Ele é chamado por alguns de tipo booleano, devido à contribuição do filósofo e matemático inglês George Boole na área da lógica matemática.

1.3 VARIÁVEIS

Na programação, uma variável é um objeto (uma posição, freqüentemente localizada na memória) capaz de reter e representar um valor ou expressão. Enquanto as variáveis só existem em tempo de execução, elas são associadas a nomes , chamados identificadores, durante o tempo de desenvolvimento.

1.3.1 ARMAZENAMENTO DE DADOS NA MEMÓRIA

Para armazenar os dados na memória, imagine que a memória de um computador é um grande arquivo com várias gavetas, onde cada gaveta pode armazenar apenas um único valor (seja ele numérico, caractere ou lógico). Se é um grande arquivo com várias gavetas, é necessário identificar com um nome a gaveta que se pretende utilizar. Desta forma o valor armazenado pode ser utilizado a qualquer momento.

1.3.2 CONCEITO E UTILIDADE DE VARIÁVEIS

Têm-se como definição de variável tudo aquilo que é sujeito a variações, que é incerto, instável ou inconstante. E quando se fala de computadores, temos que ter em mente que o volume de informações a serem tratadas é grande e diversificado. Desta forma, os dados a serem processados serão bastante variáveis. Como visto anteriormente, informações correspondentes a diversos tipos de dados são armazenadas nas memórias dos computadores. Para acessar individualmente cada uma destas informações, em princípio, seria necessário saber o tipo de dado desta informação (ou seja, o número de bytes de memória por ela ocupados) e a posição inicial deste conjunto de bytes na memória.

Percebe-se que esta sistemática de acesso a informações na memória é bastante ilegível e difícil de se trabalhar. Para contornar esta situação criou-se o conceito de variável, que é uma entidade destinada a guardar uma informação.

Basicamente, uma variável possui três atributos: um nome, um tipo de dado associado à mesma e a informação por ela guardada. Toda variável possui um nome que tem a função de diferenciá-la das demais.

(Parte 1 de 10)

Comentários