escola secundÁria de emÍdio avarroeteit.cuattrin.com.br/disciplinas/201201/201201md/xx - técnicas...

88
E SCOLA S ECUNDÁRIA DE E MÍDIO N AVARRO ANO LECTIVO 2000/2001 T T É É C C N N I I C C A A S S D D E E L L I I N N G G U U A A G G E E N N S S D D E E P P R R O O G G R R A A M M A A Ç Ç Ã Ã O O 10º ANO © 2000 - Prof. Carlos Almeida 1ª Versão

Upload: hoangminh

Post on 19-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

EESSCCOOLLAA SSEECCUUNNDDÁÁRRIIAA DDEE EEMMÍÍDDIIOO NNAAVVAARRRROO

AANNOO LLEECCTTIIVVOO 22000000//22000011

TTÉÉCCNNIICCAASS DDEE LLIINNGGUUAAGGEENNSS

DDEE PPRROOGGRRAAMMAAÇÇÃÃOO 1100ºº AANNOO

© 2000 - Prof. Carlos Almeida

1ª Versão

Page 2: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida ii

NNoottaa IInnttrroodduuttóórriiaa

O objectivo destes apontamentos não é substituir as aulas, como tal, a

exposição de qualquer matéria não é realizada de modo detalhado. Será necessário

consultar entre outra bibliografia a bibliografia geral da disciplina e alguns manuais

de aplicação. O aluno também deve procurar uma actualização permanente, criando

o hábito de consultar publicações técnicas, investigar novos conceitos e discutir

sobre eles.

A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

do Curso Tecnológico de Informática no 10º e 11º anos, com a carga horária de 4

tempos lectivos, distribuídos, por duas aulas de 2 tempos cada.

A disciplina Técnicas de Linguagens de Programação do 10º Ano pretende

desenvolver no aluno um raciocínio lógico, que lhe possibilite a escrita de programas

informáticos estruturados, documentados, modulares e eficientes.

O aluno não deve ficar limitado pelas características ou potencialidades de uma

linguagem de programação. Facto pelo qual se enfatiza, numa primeira fase, a

resolução de problemas baseado na escrita de algoritmos com passos rigorosos e

sistemáticos.

A aprendizagem da linguagem de programação Pascal, vem completar esta

formação, pelo que se deve executar programas de processamento variado, dando

assim a possibilidade a que os alunos, nos anos posteriores, estejam aptos a

resolver situações complexas que exigem maior abstracção e para as quais se

estabelecem exigências de qualidade total.

É fundamental, a aprendizagem correcta da construção de algoritmos e o

domínio da técnica TOP-DOWN, em detrimento dos fluxogramas, como ferramenta

de análise de um enunciado e sua conversão em forma de algoritmos. Pretende-se

que o fluxograma não seja usado como forma de raciocínio, mas como

documentação do programa ou algoritmo, sendo, portanto, uma explicação

complementar da solução encontrada.

Page 3: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida iii

SSiisstteemmaa ddee AAvvaalliiaaççããoo

A avaliação da disciplina é contínua. Para cada Unidade Temática indicam-se

critérios e técnicas de avaliação concretas, e que variam entre a realização de testes

escritos, trabalhos de grupo e provas práticas individuais realizadas no computador.

O professor da disciplina de Técnicas de Linguagens de Programação do 10º

Ano, Carlos Almeida, estabeleceu os seguintes critérios de avaliação para o ano

lectivo de 2000/2001:

COMPONENTE PRÁTICA 30%

• Trabalhos de grupo

• Provas práticas Individuais realizadas no computador

20%

10%

COMPONENTE TEÓRICA 40%

• Testes escritos

• Fichas de trabalho

30%

10%

ATITUDES DO ALUNO 30%

• Destreza com o equipamento

• Capacidade de organização e metodologia de trabalho

• Concentração e qualidade no trabalho

• Relacionamento em grupo

• Assiduidade e pontualidade

5%

5%

5%

10%

5%

Page 4: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida iv

EElleennccoo TTeemmááttiiccoo

Nesta disciplina deve ser dada uma grande ênfase à construção de algoritmos,

usando as metodologias top-down, pseudocódigo e fluxogramas. A linguagem

de programação Pascal é, a indicada para se usar na iniciação à programação. O

Pascal deve manter-se como ponto de partida no estudo de algoritmia.

Pretende-se desenvolver no aluno um raciocínio lógico, que lhe possibilite a

escrita de programas estruturados.

UNIDADE 1 Lógica de Programação 1.1. Análise e desenho de um algoritmo.

1.2. Tipos de dados.

1.3. Operações elementares.

1.4. Prioridade de operadores.

1.5. Variáveis e expressões.

1.6. Traçagem de algoritmos.

1.7. Fluxogramas.

1.8. Pseudocódigo.

UNIDADE 2 Estrutura de decisão 1.1. Estrutura Sequencial.

1.2. Estrutura Condicional.

1.3. Estrutura de Repetição.

1.4. Algoritmos de aplicação.

UNIDADE 3. Estrutura de Dados 1.1. Vectores.

1.2. Matrizes.

1.3. Cadeia de caracteres.

1.4. Ficheiros.

1.5. Algoritmos de aplicação.

UNIDADE 4. Subalgoritmos 1.1. Estruturação de programas.

1.2. Funções.

1.3. Procedimentos.

Page 5: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida v

UNIDADE 5. Programação em Pascal 1.4. Ambiente de trabalho.

1.5. Características da linguagem Pascal.

1.6. Estrutura do programa e comentários.

1.7. Compilação para a memória e disco.

1.8. Estruturas de controlo.

1.9. Estruturas de dados.

1.10. Funções e Procedimentos.

1.11. Debugger.

1.12. Características gráficas.

1.13. Uso de ficheiros em Pascal.

1.14. Programas de aplicação.

1.15. Programas em memória residente.

Page 6: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

______________________________________________________________________ Bibliografia

Prof. Carlos Almeida vi

BBiibblliiooggrraaffiiaa

Apontamentos do professor.

AZUL, Artur Augusto (1998) - Técnicas e Linguagens de Programação –

10º Ano, Porto Editora (Livro adoptado pela disciplina).

LIMA, Jorge Reis (1991) - Programação de Computadores, Porto Editora.

LOPES, Jorge (1989) - Técnicas da Programação, Editorial O Livro

Manual fornecido com o software (PASCAL).

O'BRIEN, Stephen K. - Turbo Pascal 6: The Complete Reference, Borland,

Osborne/McGraw-Hill.

Pascal, Técnicas de Programação, Lidel.

TREMBLAY, Jean-Paul; BUNT, Richard B. (1981) - Ciência dos

computadores uma abordagem algorítmica, McGraw-Hill.

Turbo Pascal 5.0/5.5, Lidel.

Page 7: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

__________________________________________________________________ Agradecimentos

Prof. Carlos Almeida vii

AAppooiiooss ee aaggrraaddeecciimmeennttooss

• Paulo Sérgio de Moraes (2000)

• Osmar de Oliveira Braz Júnior (1998)

• Alexandre Alcobia (1998)

Page 8: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

___________________________________________________________________________Índice

Prof. Carlos Almeida viii

ÍÍnnddiiccee

NOTA INTRODUTÓRIA II

SISTEMA DE AVALIAÇÃO III

ELENCO TEMÁTICO IV

BIBLIOGRAFIA VI

APOIOS E AGRADECIMENTOS VII

ÍNDICE VIII

LÓGICA DE PROGRAMAÇÃO 1

1. LÓGICA 1

2. SEQUÊNCIA LÓGICA 1

3. INSTRUÇÕES 1

4. ALGORITMO 2

REGRAS PARA CONSTRUÇÃO DO ALGORITMO 3

FASES DE UM ALGORITMO 4

TESTE DO ALGORITMO 5

5. PROGRAMAS 5

EXERCÍCIOS 7

6. ABORDAGEM ESTRUTURADA E CONCEPÇÃO TOP-DOWN 8

ABORDAGEM ESTRUTURADA 8

CONCEPÇÃO TOP-DOWN 8

7. PSEUDOCÓDIGO 8

ATRIBUIÇÃO 10

LEITURA E ESCRITA DE DADOS 10

CABEÇALHO 11

DECLARAÇÕES 11

CORPO DO ALGORITMO 11

COMENTÁRIOS 11

8. FLUXOGRAMAS 12

SIMBOLOGIA 12

Page 9: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida ix

9. CONSTANTES, VARIÁVEIS E TIPOS DE DADOS 14

IDENTIFICADORES 15

CONSTANTES 16

VARIÁVEIS 16

TIPOS DE DADOS 17

EXERCÍCIOS 19

10. OPERADORES 21

OPERADORES ARITMÉTICOS 21

HIERARQUIA DAS OPERAÇÕES ARITMÉTICAS 22

OPERADORES DE COMPARAÇÃO OU RELACIONAIS 22

OPERADORES LÓGICOS 23

11. INSTRUÇÕES SIMPLES 24

INSTRUÇÕES DE ESCRITA 24

INSTRUÇÕES DE LEITURA 25

INSTRUÇÕES DE ATRIBUIÇÃO 25

EXERCÍCIOS 26

ESTRUTURAS DE DECISÃO 28

1. ESTRUTURAS FUNDAMENTAIS DE PROGRAMAÇÃO 28

2. ESTRUTURA DE DECISÃO CONDICIONAL - "SE" 28

EXEMPLO PRÁTICO 31

EXERCÍCIOS 32

3. ESTRUTURA DE DECISÃO DE ESCOLHA MÚLTIPLA - "CASO" 33

EXEMPLO PRÁTICO 34

EXERCÍCIOS 36

4. ESTRUTURAS DE REPETIÇÃO OU CICLOS 36

5. ESTRUTURA DE REPETIÇÃO - "PARA... FAZER" 37

6. ESTRUTURA DE REPETIÇÃO - "ENQUANTO... FAZER" 38

EXERCÍCIOS 39

7. ESTRUTURA DE REPETIÇÃO - "REPETIR ... ATÉ" 39

8. EXEMPLO PRÁTICO – NÚMERO PRIMO 41

ANÁLISE DO ALGORITMO 42

Page 10: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_______________________________________________________________ Notas do Professor

Prof. Carlos Almeida x

MELHORIA DO ALGORITMO 45

9. EXERCÍCIOS 48

ESTRUTURA DE DADOS 49

1. ESTRUTURA DE DADOS 49

2. VECTORES 51

EXERCÍCIOS SOBRE VECTORES 52

3. ORDENAÇÃO DE UM VECTOR 53

4. MATRIZES 55

EXERCÍCIOS SOBRE MATRIZES 56

5. REGISTOS 57

EXERCÍCIOS SOBRES REGISTOS 59

6. FICHEIROS 60

FICHEIROS DO TIPO TEXTO 61

FICHEIROS DO TIPO BINÁRIO 61

SUPORTES FÍSICOS DE FICHEIROS 62

OPERAÇÕES COM FICHEIROS 63

7. MANIPULAÇÃO DE FICHEIROS EM PASCAL 63

FICHEIROS FILE 64

TRATAMENTO DE FICHEIROS FILE 65

FICHEIROS TEXT 72

TRATAMENTO DE FICHEIROS TEXT 72

EXERCÍCIOS SOBRE FICHEIROS 77

Page 11: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

Prof. Carlos Almeida 1

1 LLÓÓGGIICCAA DDEE PPRROOGGRRAAMMAAÇÇÃÃOO

1.16. Objectivos Iniciar o aluno nos conceitos da programação

estruturada. Decompor um problema nas suas partes elementares

através da técnica TOP-DOWN. Traduzir expressões matemáticas para computação e

vice-versa. Realizar algoritmos simples. Verificar a eficiência dos algoritmos através da técnica

de traçagem.

11.. LLóóggiiccaa

A lógica de programação é necessária para pessoas que desejam trabalhar com

desenvolvimento de sistemas e programas, ela permite definir a sequência lógica

para o desenvolvimento.

Lógica de programação é a técnica de encadear pensamentos para atingir determinado objectivo.

22.. SSeeqquuêênncciiaa LLóóggiiccaa

Estes pensamentos, podem ser descritos como uma sequência de instruções,

que devem ser seguidas para se cumprir uma determinada tarefa.

Sequência Lógica são passos executados até atingir um objectivo ou solução de um problema.

33.. IInnssttrruuççõõeess

Na linguagem comum, entende-se por instruções “um conjunto de regras ou

normas definidas para a realização ou emprego de algo”.

Em informática, porém, instrução é a informação que indica a um computador

uma acção elementar a executar.

Page 12: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 2

Convém ressaltar que uma ordem isolada não permite realizar o processo

completo, para isso é necessário um conjunto de instruções colocadas em ordem

sequencial lógica.

Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar

em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as

batatas, etc.

É evidente que essas instruções tem que ser executadas em uma ordem

adequada – não se pode descascar as batatas depois de fritá-las.

Dessa maneira, uma instrução tomada em separado não tem muito sentido;

para obtermos o resultado, precisamos colocar em prática o conjunto de todas as

instruções, na ordem correcta.

Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma acção elementar a executar.

44.. AAllggoorriittmmoo

Antes de utilizarmos uma linguagem de computador, é necessário organizar as

acções a serem tomadas pela máquina de forma organizada e lógica, sem nos

atermos as regras rígidas da sintaxe de uma linguagem. Para isto utilizaremos uma

forma de escrever tais acções, conhecida como algoritmo.

Algoritmo consiste em um conjunto lógico e finito de acções (instruções) que resolvem um determinado problema.

Algoritmo é uma sequência lógica de instruções que podem ser executadas.

Um algoritmo é formalmente uma sequência finita de instruções que levam a

execução de uma tarefa. Podemos pensar em algoritmo como uma receita, uma

sequência de instruções que dão cabo de uma meta específica. Estas tarefas não

podem ser redundantes nem subjectivas na sua definição, devem ser claras e

precisas.

Como exemplos de algoritmos podemos citar os algoritmos das operações

básicas (adição, multiplicação, divisão e subtracção) de números reais decimais.

Page 13: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 3

Outros exemplos seriam os manuais de aparelhos electrónicos, como um vídeo, que

explicam passo-a-passo como, por exemplo, gravar um filme.

Até mesmo as coisas mais simples, podem ser descritas por sequências lógicas.

Por exemplo: “Chupar um rebuçado”:

1. Pegar no rebuçado

2. Retirar o papel

3. Chupar o rebuçado

4. Deitar o papel no lixo

“Somar dois números”:

1. Escrever o primeiro número

2. Escrever o segundo número

3. Somar o primeiro número com o segundo número

4. Devolver o resultado

Se analisarmos os diversos algoritmos, verificamos que contêm características comuns. São elas:

• descrição sequencial (ordenada), cada passo corresponde a uma acção elementar clara, não devendo ocasionar ambiguidade na sua interpretação;

• tem um número finito de passos.

Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema

teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e

em geral, os caminhos que levam a uma solução são muitas.

Aprender algoritmos não se consegue a não ser através de muitos exercícios.

Algoritmos não se aprende:

• Copiando Algoritmos

• Estudando Algoritmos

Algoritmos só se aprendem:

• Construindo Algoritmos

• Testando Algoritmos

Regras para construção do Algoritmo

Para escrever um algoritmo precisamos descrever a sequência de instruções,

de maneira simples e objectiva. Para isso utilizaremos algumas técnicas:

• usar somente um verbo por frase;

Page 14: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 4

• imaginar que se está a desenvolver um algoritmo para pessoas que não

trabalham com informática;

• usar frases curtas e simples;

• ser objectivo;

• procurar usar palavras que não tenham sentido duvidoso.

Fases de um Algoritmo

É importante ressaltar que qualquer tarefa que siga determinado padrão pode

ser descrita por um algoritmo, como por exemplo “como fazer arroz doce” ou então

“calcular o saldo financeiro de um stock”.

Entretanto ao construir um algoritmo, precisamos primeiro dividir o problema

apresentado em três fases fundamentais:

• ENTRADA: São os dados de entrada do algoritmo.

• PROCESSAMENTO: São os procedimentos utilizados para chegar ao

resultado final.

• SAÍDA: São os dados já processados.

Imagine o seguinte problema: Calcular a média final dos alunos.

Os alunos realizarão 3 provas: P1, P2 e P3. Onde:

3321 PPPMédiaFinal ++

=

Para montar o algoritmo proposto, faremos três perguntas:

a) Quais são os dados de entrada?

R: Os dados de entrada são P1, P2 e P3

b) Qual será o processamento a ser utilizado?

R: O procedimento será somar todos os dados de entrada e dividi-los

por 3: (P1+P2+P3)/3

c) Quais serão os dados de saída?

R: O dado de saída será a média final

ENTRADA PROCESSAMENTO SAÍDA

Page 15: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 5

O algoritmo seria:

Algoritmo Calcular Média do aluno

1. Receber a nota da prova1

2. Receber a nota de prova2

3. Receber a nota de prova3

4. Somar todas as notas e dividir o resultado por 3

5. Mostrar o resultado da divisão

Teste do Algoritmo

Após desenvolver um algoritmo ele deverá sempre ser testado. Deve-se seguir

as instruções do algoritmo de maneira precisa para verificar se o procedimento

utilizado está correcto ou não.

No exemplo do algoritmo anterior, para calcular a média final do aluno, podia-se

utilizar a seguinte tabela para o teste:

P1 P2 P3 MédiaFinal

Explique o que entende por algoritmo.

55.. PPrrooggrraammaass

Programar consiste em elaborar um conjunto finito de instruções, reconhecidas

pela máquina, de forma que o computador execute estas instruções. Estas

instruções possuem regras e uma sintaxe própria, como uma linguagem tipo

português ou inglês, sendo isto chamadas de linguagem de programação.

No mundo computacional existe uma grande variedade de linguagens: Pascal,

C, C++, Visual Basic, Cobol, Fortran, etc. Nós iremos enfocar uma delas, o Pascal.

Os programas de computadores nada mais são do que algoritmos escritos numa linguagem de programação (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que são interpretados e executados por uma máquina, no caso um computador. Notem que dada esta interpretação rigorosa, um programa é por natureza muito específico e rígido em relação aos algoritmos da vida real.

Page 16: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 6

Para fazer um programa devemos ter claro o algoritmo do nosso problema.

Portanto, primeiro há que estudar o problema e elaborar o seu algoritmo.

Uma vez estabelecido o seu algoritmo podemos, então, passar para a sua

implementação numa linguagem de programação e assim testar o programa no

computador.

Concluindo, a construção de um programa comporta duas fases fundamentais:

• fase de resolução do problema - consiste na formulação do algoritmo

eficaz para a resolução do problema posto;

• fase de implementação - consiste na tradução do algoritmo para a

linguagem de programação escolhida.

Como exemplo, é apresentado o algoritmo e sua tradução em linguagem

Pascal, do cálculo do múltiplo de um número. Algoritmo do cálculo dos múltiplos de um número:

1. Anotar o limite dos múltiplos (limite)

2. Anotar o número do qual se quer saber os múltiplos (número)

3. O primeiro múltiplo é o próprio número (múltiplo = número)

4. Enquanto o múltiplo for menor que o limite indicado fazer:

4.1. Anotar o múltiplo

4.2. O novo múltiplo será igual ao múltiplo anterior mais o número

(múltiplo = múltiplo + número)

5. Fim do algoritmo.

program Multiplos (input, output);

{Este programa está escrito na linguagem PASCAL};

uses Crt;

var Limite : integer;

Numero : integer;

Multiplo : integer;

begin

clrscr;

write (‘Qual o valor de que se quer achar os múltiplos? ‘);

readln (Numero);

write (‘Qual é o limite da sequência? ‘);

readln (Limite);

writeln (‘Os múltiplos de ‘,Numero, ’ são: ‘);

Multiplo := Numero;

Page 17: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 7

while Multiplo < Limite do

begin

writeln (Multiplo);

Multiplo := Multiplo + Numero;

end;

end.

EExxeerrccíícciiooss

Construa o algoritmo para calcular a área de um rectângulo. Algoritmo área do rectângulo

1. Entrar pelo teclado o valor do lado1

2. Entrar pelo teclado o valor do lado2

3. Calcular a área A = lado1 x lado2

4. Apresentar no ecrã o valor da área

Faça um algoritmo para somar dois números e multiplicar o resultado pelo primeiro

número.

Crie uma sequência lógica para tomar banho.

Descreva com detalhes a sequência lógica para trocar um pneu de um carro.

Faça um algoritmo detalhado para trocar uma lâmpada.

Algoritmo do calculo da hipotenusa de um triângulo rectângulo.

Temos que saber a fórmula: 22 21 catetocatetohipot +=

Além da fórmula, temos que dar ao computador os valores dos catetos do triângulo.

Construa um algoritmo que transforme os valores da temperatura em graus

Fahrenheit para graus Célsius. Tente resolver este problema, sabendo que a fórmula a aplicar será:

( )3295

−×= fahrcelsius

Page 18: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 8

Identifique os dados de entrada, processamento e saída no algoritmo seguinte: 1. Receber código da peça

2. Receber valor da peça

3. Receber Quantidade de peças

4. Calcular o valor total da peça (Quantidade * Valor da peça)

5. Mostrar o código da peça e seu valor total

Faça um algoritmo para “Calcular o stock médio de uma peça”, sabendo que

STOCK_MÉDIO = (QUANTIDADE_MÍNIMA + QUANTIDADE_MÁXIMA) /2

Teste o algoritmo anterior com dados à sua escolha.

66.. AAbboorrddaaggeemm EEssttrruuttuurraaddaa ee CCoonncceeppççããoo TToopp--DDoowwnn

Abordagem Estruturada

Numa linguagem estruturada como por ex. o Pascal distingue-se a parte onde

são declarados os dados e o corpo com as instruções do programa – parte

declarativa e parte operativa.

Abordagem estruturada é uma abordagem sistemática da construção de software que usa princípios como a separação das definições de dados e de programa, concepção descendente (designado por abordagem top-down) e refinamento progressivo.

Concepção Top-Down

A abordagem top-down procura identificar os pontos essenciais da questão;

parte-se dos pontos mais gerais para os seus componentes mais particulares, em

níveis sucessivos mais concretos, até ao nível de pormenor desejado.

77.. PPsseeuuddooccóóddiiggoo

Por pseudocódigo entende-se um código de escrita em que se utilizam

representações simbólicas para indicar as instruções do algoritmo. Essas

Page 19: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 9

representações simbólicas são, usualmente, um misto de palavras da nossa

linguagem natural com termos e notações típicas de uma linguagem de

programação.

O uso da escrita em pseudocódigo presta-se a uma aproximação sucessiva à

versão do algoritmo na linguagem utilizada, ou seja, pode-se ir progredindo por

fases, revendo o pseudocódigo e substituindo-o progressivamente por terminologia

própria da linguagem de programação.

Não é demais relembrar que, depois de efectuar o algoritmo, deve-se verificar

se está escrito sem falhas do ponto de vista dos objectivos que se pretendiam

alcançar, por imprecisões, deficiente formulação algorítmica, vícios de raciocínio,

etc.

O pseudocódigo pode ser visto como a tentativa de fundir a expressividade da linguagem natural e o rigor lógico de esquemas como o fluxograma.

O pseudocódigo permite a descrição do algoritmo de uma forma linear, fácil de ler e fácil de compreender.

Os algoritmos terão a seguinte estrutura: Algoritmo <Nome do algoritmo>

<Definições/Declarações de Variáveis e Constantes>

Início

<Instruções>

Fim

Por curiosidade, em Pascal ficaria da seguinte forma: PROGRAM <Nome do programa>;

<Definições/Declarações de Variáveis e Constantes>;

BEGIN

<Instruções>;

END.

O algoritmo, em pseudocódigo, deve estar enquadrado entre dois indicadores

que possibilitem determinar onde o algoritmo começa e acaba. Assim, aparecem as

instruções Início e Fim.

Page 20: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 10

Atribuição

Esta operação tem por objectivo atribuir um valor a uma variável. A variável

funciona como um recipiente em que vão ser colocados dados.

Temos de criar tantas variáveis (recipientes) quantas as forem necessárias para

o correcto funcionamento do algoritmo.

A operação de atribuição coloca o dado na variável.

Exemplo: X B/A (na variável X é colocado o valor de B/A)

Leitura e Escrita de Dados

A instrução Escrever é utilizada para apresentar os dados ao utilizador.

Exemplo: Escrever(‘O valor da área é: ’, área)

A instrução Ler é utilizada para introduzir dados no computador através do

operador. Estes dados são afectados a variáveis.

Exemplo: Ler(A, B)

Vejamos um exemplo em pseudocódigo do algoritmo da circunferência e vamos

descrever a sua apresentação: Algoritmo circunferência

[Este algoritmo dá as características de uma circunferência]

Dados

RAIO: Inteiro

ÁREA, PERÍMETRO: Reais

PI 3,14159

Início

Ler (RAIO)

ÁREA PI x RAIO2

PERÍMETRO 2 x PI x RAIO

Escrever (ÁREA, PERÍMETRO)

Fim

Num algoritmo, podemos definir três secções:

• Cabeçalho

• Declarações

• Corpo do algoritmo

Page 21: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 11

Cabeçalho

O cabeçalho é a secção onde é dado o nome ao algoritmo. Começa com a

palavra “Algoritmo”.

Declarações

Nesta, é apresentada a descrição das variáveis e constantes usadas.

Corpo do algoritmo

Esta secção contém a sequência das instruções (acções) do algoritmo. Inicia-se

com a palavra “Início” e termina com a palavra “Fim”.

Comentários

Existe um tipo de objecto de grande importância na clarificação de um algoritmo.

São os comentários que ajudam muito à sua compreensão.

Cada passo do algoritmo pode iniciar com um comentário entre dois parênteses

rectos. Estes comentários dão uma breve descrição da instrução ou de um conjunto

de instruções seguintes.

Os comentários são uma parte importante do algoritmo. Eles servem para tornar a leitura, do algoritmo, mais fácil e clara.

Page 22: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 12

88.. FFlluuxxooggrraammaass

O fluxograma é uma forma padronizada e eficaz para representar as instruções

lógicas de um determinado processamento.

Com o fluxograma podemos definir uma sequência de símbolos, com significado

bem definido, portanto, sua principal função é a de facilitar a visualização dos

passos de um processamento.

Actualmente, a sua utilização restringe-se a um apoio complementar na

documentação do algoritmo, valendo pela vantagem gráfica da apresentação das

interligações.

Simbologia

Existem diversos símbolos num fluxograma. Vamos apresentar os mais

utilizados.

Vejamos de seguida alguns dos símbolos que iremos utilizar:

Processamento em geral (ex. soma de dois números)

Decisão condicional

Leitura/Escrita de dados (ex. escrever a nota da prova escrita)

Escolha múltipla

Início/Fim de processamento (ex. inicio do algoritmo)

Subprograma

Conector de fluxos (ex. Ligação entre partes do fluxograma) Linha de fluxo

Dentro de cada símbolo terá sempre algo escrito, pois caso contrário não nos

dizem nada.

Vejamos o seguinte exemplo, na linguagem pseudocódigo e respectivo

fluxograma, que faz a comparação de dois números:

Page 23: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 13

Inicio

Ler valor1

Ler valor2

Valor1>Valor2 Valor2>Valor2Não

Escrever"Valor1 é maior"

Sim

Escrever"Valor2 é maior"

Sim

Escrever"Valores iguais"

Não

Rotina Adeus

Fim

Algoritmo Comparar

Dados

VALOR1, VALOR2: Inteiros

FRASE: Caracteres

Início

Ler (VALOR1, VALOR2)

Se VALOR1 > VALOR2 então

FRASE ‘Valor1 é maior’

Senão

Se VALOR1 < VALOR2 então

FRASE ‘Valor2 é maior’

Senão

FRASE ‘Valores iguais’

Fim se

Fim se

Escrever (FRASE)

Chamar Rotina Adeus

Fim

Fluxograma

Pseudocódigo

Page 24: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 14

99.. CCoonnssttaanntteess,, VVaarriiáávveeiiss ee TTiippooss ddee DDaaddooss

Considere a fórmula simples de matemática do calculo do volume de uma

esfera: 2

34 RV π= . Nesta formula pode-se encontrar:

1. Valores que podem ser classificados como:

a. valores constantes, invariantes em todas as aplicações da fórmula, no

caso dos valores 4, 3 e π;

b. valores a serem substituídos na fórmula, em cada aplicação; a

representação destes valores, usualmente é feita através de letras,

que recebem o nome de variáveis e tornam a fórmula genérica,

possível de ser aplicada para resolver uma certa classe de problemas

e não apenas um problema específico.

2. Operações a serem feitas sobre determinados operandos (valores), para a

obtenção da solução do problema.

O computador possui uma área de armazenamento conhecida como memória.

Todas as informações existentes no computador estão ou na memória primária

(memória RAM), ou na memória secundária (disco duro, disquete, CD-ROM etc.).

A memória do computador pode ser entendida como uma sequência finita de

caixas ou gavetas de um armário, que num dado momento, guardam algum tipo de

informação, como número, uma letra, uma palavra, uma frase etc..

O computador, para poder trabalhar como alguma destas informações, precisa

saber onde, na memória, a informação está localizada. Fisicamente, cada caixa, ou

cada posição de memória, possui um endereço, ou seja, um número, que indica onde

cada informação está localizada. este número é representado através da notação

hexadecimal, tendo o tamanho de quatro, ou mais bytes.

Variáveis e constantes são os elementos básicos que um programa manipula.

Muitos dos dados com que se opera num algoritmo são variáveis. Uma variável é um

espaço reservado na memória do computador para armazenar um tipo de dado

determinado.

Page 25: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 15

Identificadores

As variáveis e constantes num algoritmo são designadas por meio de

identificadores. Um identificador é um nome normalmente atribuído a um elemento

com que se pretende trabalhar dentro de um algoritmo.

Um identificador é formado por uma letra ou então por uma letra seguida de

letras ou dígitos. Não é permitido o uso de espaços em branco ou de qualquer outro

caracter, que não seja letra ou dígito.

Se utilizar mais do que uma palavra para compor o nome da variável utilize o “_”

underline para separar as palavras.

Por convenção, vamos escrever o nome dos identificadores em letras

maiúsculas, para maior legibilidade do algoritmo.

A formação do identificador deve ser um nome significativo, para que se possa ter ideia do seu conteúdo.

Exemplos, apresentados numa tabela com possíveis entidades e os

correspondentes identificadores das variáveis:

ENTIDADES IDENTIFICADORES Nome do cliente NOME_CLIENTE Morada dos clientes MORADA Data em que foi feita a encomenda DATA

Quando se trata de variáveis, um identificador vai traduzir-se em termos de

compilação, num endereço de memória, o qual corresponde a um determinado

espaço nessa mesma memória, onde se vai armazenar um dado - o valor que a dita

variável assume em cada momento. Isto leva-nos a considerar, em programação,

que um identificador é um endereço simbólico, pois que se preferimos, um candidato

a endereço de memória.

Um identificador é um nome normalmente atribuído pelo algoritmo ou utilizador a um elemento com que se pretende trabalhar dentro de um algoritmo. Em programação, um identificador é um endereço simbólico, um candidato a endereço de memória.

Page 26: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 16

Constantes

Constante é um determinado valor fixo que não se modifica ao longo do tempo,

durante a execução de um programa.

Conforme o seu tipo, a constante é classificada como sendo numérica, lógica e

alfanuméricas.

Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa.

Exemplo de declarações de constantes, em pseudocódigo: Constantes

PI 3,14

MAXIMO 30

POR_DEFEITO ‘Sem nome’

Variáveis

Variável é a representação simbólica dos elementos de um certo conjunto. Cada

variável corresponde a uma posição de memória, cujo conteúdo pode se alterado ao

longo do tempo durante a execução de um programa.

As variáveis podem assumir:

• um carácter global, quando são declaradas para uso em todo o algoritmo;

• um carácter local, quando são declaradas apenas para uso dentro do

subalgoritmo.

Embora uma variável possa assumir diferentes valores, ela só pode armazenar

um valor a cada instante. As variáveis só podem armazenar valores de um mesmo

tipo, de maneira que também são classificadas como sendo numéricas, lógicas e

alfanuméricas.

Uma variável é uma posição de memória, representada por um Identificador, a qual contém, num dado instante, uma informação.

Exemplos de declarações de variáveis em pseudocódigo:

Page 27: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 17

Variáveis

MAXIMO, NUM: Inteiro

NOME: Caracteres

SAIR: Lógico

Outros exemplos:

TOTAL PRODUTO * QUANTIDADE

NOME ‘Carlos Almeida’

TOTAL 30

Tipos de Dados

As variáveis e as constantes podem ser basicamente de três tipos: Numéricas

(Inteiro ou real), alfanuméricas (caracter ou cadeia de caracteres) ou lógicas.

Numéricas: Específicas para armazenamento de números, que posteriormente poderão ser

utilizados para cálculos. Podem ser ainda classificadas como Inteiras ou Reais.

As variáveis do tipo inteiro são para armazenamento de números inteiros e as

Reais são para o armazenamento de números que podem ter partes decimais.

Alfanuméricas: Existem actualmente vários códigos susceptíveis de ser utilizados pelos

computadores digitais. Alguns desses códigos permitem representar, não apenas

grandezas numéricas, mas também caracteres literais e sinais de pontuação. É

exemplo o código ASCII ("American Standard Code for Information Interchange" -

leia-se "ásqui"), usado na transferência de informação entre um computador e os

seus dispositivos periféricos. Trata-se de um código que utiliza combinações de oito

bits (28 = 256) para representar os dez algarismos decimais (0, 1, 2, ..., 9), os

caracteres do alfabeto (a, b, ..., z, A, B, ..., Z), sinais de pontuação, parêntesis, sinais

das operações aritméticas e de igualdade, e mais uma série de caracteres de

controlo, entre outros símbolos, num total de 256 símbolos.

Variáveis

Variável Conteúdo da Variável

Page 28: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 18

Os códigos que se destinam a traduzir, não só informação numérica, mas

também caracteres do alfabeto e sinais convencionais são denominados códigos

alfanuméricos. O código ASCII, referido acima, representa o código alfanumérico

universalmente aceite.

Os dados do tipo caracter (Char em Pascal) correspondem a caracteres

individuais. Os caracteres disponíveis são geralmente os caracteres da Tabela

ASCII. Este tipo de dado pode assumir qualquer caracter da referida Tabela ASCII,

mas apenas um de cada vez. Por curiosidade, existe rotinas para converter um dado

número inteiro para o correspondente caracter na Tabela ASCII. Por exemplo, a

função CHR, em Pascal. Por sua vez, existe rotinas que dá o ordinal de um dado

caracter, por exemplo a função ORD em Pascal.

Para facilitar a manipulação de palavras ou mensagens, dentro de um

programa, existe outro tipo de dados: Cadeia de caracteres (também deignado por:

Cadeia Alfanumérica, texto, ou simplesmente caracteres). Estes tipos de dados são

mais adequados ao manuseamento de texto, nas instruções de leitura, escrita e

atribuição. Em Pascal este tipo de dados é representado pelo tipo de variável: String.

Numa atribuição de um valor a uma variável do tipo CHAR (Caracter) ou

STRING (Cadeia de caracteres), temos que ter o cuidado de colocar o valor (dado)

entre aspas (‘), pois esta é a forma de informar que a informação é caracter ou

cadeia de caracteres.

Lógicas: Os dados do tipo lógico, são dados que podem assumir apenas dois valores

possíveis: verdadeiro e falso. A sua utilidade reside, fundamentalmente, ao nível do

seu emprego em estruturas de controlo.

As variáveis do tipo inteiro são para armazenamento de números inteiros e as Reais são para o armazenamento de números que podem ter partes decimais.

Os dados do tipo caracter correspondem a caracteres individuais. Os caracteres disponíveis são geralmente os caracteres da Tabela ASCII.

Existe tipos de dados mais adequados ao manuseamento de texto, nas instruções de leitura, escrita e atribuição. Este tipo de dados é representado pelo tipo de variável: Caracteres.

Os dados do tipo lógico, são dados que podem assumir apenas dois valores possíveis: verdadeiro e falso.

Page 29: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 19

O que é uma constante? Dê dois exemplos.

O que é uma variável? Dê dois exemplos.

O Pascal exige que no momento da declaração das variáveis, se define o tipo

de informação que uma variável pode conter, isto é, se uma dada posição de

memória armazenará um número ou uma letra etc. Para isto, a linguagem Pascal

possui definido alguns tipos de dados para a declaração de variáveis. Alguns destes

tipos de dados 0são representados na seguinte tabela:

Pseudocódigo Pascal Descrição

Inteiro Integer Representa números entre -32768 até +32767. ocupa 2 bytes na memória.

Real Real Representa os números entre 2.9 x 10-39 até 1.7 x 1038. Ocupa 6 bytes na memória.

Caracter Char Representa um dos caracteres, da tabela ASCII. Ocupa 1 byte na memória.

Caracteres String Conjunto de caracteres (Char). Ocupa de 1 a 255 bytes na memória.

Lógico Bolean Valor lógico. Assuma somente dois valores: TRUE (Verdade) ou FALSE (Falso). ocupa 1 byte na memória.

Word Números de 0 até 65535. Ocupa 2 bytes na memória. Byte Números de 0 até 255. Ocupa 1 byte na memória.

Shor Int Representa os números entre -128 até 128. Ocupa 1 bytes na memória.

LongInt Representa os números entre -2147483648 até 2147483648. Ocupa 4 bytes na memória.

Single Representa os números entre 1.5 x 10-45 até 3.4 x 1038. Ocupa 4 bytes na memória.

Double Representa os números entre 5 x 10-324 até 1.7 x 10308. Ocupa 8 bytes na memória.

EExxeerrccíícciiooss

1. Explicite a diferença entre uma constante e uma variável, no contexto de um

programa.

Descreva resumidamente o que se passa ao nível dos identificadores de variáveis,

quando um programa entra em execução e esses identificadores são tratados

internamente pelo computador.

Page 30: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 20

Identifica o tipo de cada uma das constantes

a) 613

b) ‘R’

c) 1

d) 613,0

e) -613

f) ‘613’

g) -3,012 * 1015

h) Falso

i) 17 * 1012

j) -28,3 * 10-23

k) ‘Fim de Questão’

Elabore um Algoritmo para atribuir a variáveis as seguintes informações:

l) 12345

m) ‘123456’

n) -1122

o) 10,45

p) VERDADE

q) ‘c’

r) ‘Amor’

Qual a diferença existente nas seguintes atribuições?

s) Letra ‘A’

Nome ‘João’

t) Letra A

Nome João

É correcto definir uma variável como sendo Carácter e atribuirmos a ela o valor:

“PEDRO”? E se a variável fosse definida como Caracteres (cadeia de caracteres), a

mesma poderia receber um valor do tipo Caracter?

Page 31: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 21

No seguinte Algoritmo existe algum erro? Onde? Algoritmo Teste

Variáveis

MARIA: Caracteres

IDADE: Inteiro

LETRA: Caracter

MARIA: Real

Inicio

IDADE 23

IDADE 678

IDADE LETRA

LETRA 300

LETRA ‘abc’

LETRA ‘A’

LETRA 22

IDADE IDADE_ALUNO

Fim

1100.. OOppeerraaddoorreess

Os operadores são meios pelo qual incrementamos, decrementamos,

comparamos e avaliamos dados dentro do computador. Temos três tipos de

operadores:

• Operadores Aritméticos

• Operadores Relacionais

• Operadores Lógicos

Operadores Aritméticos

Os operadores aritméticos são os utilizados para obter resultados numéricos.

Além da adição, subtracção, multiplicação e divisão, podem utilizar também o

operador para exponenciação.

Os operadores aritméticos utilizam-se normalmente com dois operandos. No

entanto, os operadores + e - também podem ser usados com um só operando, caso

em que significam: o sinal positivo ou o sinal negativo atribuído ao operando.

Page 32: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 22

Os símbolos para os operadores aritméticos são:

OPERADORES ARITMÉTICOS DESIGNAÇÃO OPERADOR

Adição + Subtracção - Multiplicação * Divisão / Resto da divisão (Resto) MOD Divisão inteira (Quociente) DIV potenciação ^

Hierarquia das Operações Aritméticas

A hierarquia das operações aritméticas são:

1. ( ) – parênteses

2. ^ – exponenciação

3. * ou / – multiplicação ou divisão (o que aparecer primeiro)

4. + ou – soma ou subtracção (o que aparecer primeiro)

Exemplo: 1 + 7 * 2 ^ 2 –1 = 28

3 * (1 – 2) + 4 * 2 = 5

Operadores de Comparação ou Relacionais

Os operandos empregues com os operadores de comparação devem ser de

tipos compatíveis entre si. Os resultados que devolvem são sempre do tipo valor

lógico, ou seja, verdadeiro ou falso. Estes operadores podem ser usados com

quaisquer tipos de ordinais, com reais e alfanuméricos.

Para estabelecer prioridades no que diz respeito a qual operação executar

primeiro, utiliza-se os parênteses.

Os operadores relacionais são:

Operadores de Comparação Designação Operador

igual a = diferente de ≠ ou <> maior que > menor que < maior ou igual a ≥ ou >= menor ou igual a ≤ ou <=

Page 33: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 23

Exemplo: Tendo duas variáveis A = 5 e B = 3

Os resultados das expressões seriam:

Expressão Resultado

A = B Falso

A <> B Verdadeiro

A > B Verdadeiro

A < B Falso

A >= B Verdadeiro

A <= B Falso

Operadores Lógicos

Os operadores de valores lógicos operam normalmente com operandos do tipo

valor lógico e devolvem resultados desse mesmo tipo, ou seja, o resultado final é

verdadeiro ou falso. Também são utilizados com muita frequência, tal como os

operadores relacionais, em estruturas de decisão e no controlo de ciclos de

repetição.

Os operadores lógicos servem para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso.

Os operadores lógicos são:

Operadores de Valore Lógico Designação Operador

Negação NÃO Conjunção E Disjunção OU Disjunção Inversa XOR

Uma expressão E (AND) é verdadeira se todas as condições forem verdadeiras. O resultado da expressão E é falsa se pelo menos uma condição for falsa.

Uma expressão OU (OR) é verdadeira se pelo menos uma condição for verdadeira. O resultado da expressão OU é falsa se todas as condições forem falsas.

Um expressão NÃO (NOT) inverte o valor da expressão ou condição, se verdadeira inverte para falsa e vice-versa.

A tabela abaixo mostra todos os valores possíveis criados pelos quatro

operadores lógicos:

Page 34: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 24

Operador AND Operador OR TRUE AND TRUE TRUE TRUE AND FALSE FALSE FALSE AND TRUE FALSE FALSE AND FALSE FALSE

TRUE OR TRUE TRUE TRUE OR FALSE TRUE FALSE OR TRUE TRUE FALSE OR FALSE TRUE

Operador NOT Operador XOR NOT TRUE FALSE NOT FALSE TRUE

TRUE XOR TRUE FALSE TRUE XOR FALSE TRUE FALSE XOR TRUE TRUE FALSE XOR FALSE FALSE

Exemplos: Suponha que temos três variáveis A=5, B=8 e C=1.

Os resultados das expressões seriam: Expressões Resultado

A=B AND B>C FALSO

A<>B OR B<C VERDADEIRO

NOT A>B VERDADEIRO

A<B AND B>C VERDADEIRO

A>=B OR B=C FALSO

NOT A<=B FALSO

1111.. IInnssttrruuççõõeess SSiimmpplleess

Instruções de Escrita

As instruções de escrita são aquelas que servem para enviar dados

(mensagens, valores de variáveis, etc.) para um dispositivo de saída ou periférico de

"output".

Como se sabe, o dispositivo de saída mais comum no trabalho com um

computador é o monitor de vídeo ou ecrã; no entanto, o envio de dados para a

impressora ou para um ficheiro em disco ou disquete também são tarefas normais e,

por vezes, mesmo imprescindíveis.

Exemplos das instruções de escrita, mais usuais, em pseudocódigo: [Imprimir a mensagem]

Escrever(‘Não existe quarto vago do tipo escolhido.')

Page 35: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 25

[Imprimir a percentagem]

Escrever(‘A percentagem de alunos com nota superior à media é ‘,

PERC, ‘%’)

Instruções de Leitura

Tal como a saída de dados do computador para um periférico é essencial,

também a entrada de dados o é.

Os principais dispositivos que permitem a leitura, entrada ou "input" de dados

num sistema informático são, como se sabe, em primeiro lugar, o teclado, em

segundo, os dispositivos de armazenamento secundário, ou seja os discos e

disquetes, e ainda mais alguns outros, como o rato, etc.

Exemplo de uma instrução de escrita em pseudocódigo: [Ler a remuneração mensal]

Ler(REMUNERAÇÃO)

[Ler as variáveis X e Y ]

Ler(X, Y)

Instruções de Atribuição

Muitos dos dados com que se opera num algoritmo são variáveis. As variáveis e

constantes num algoritmo são designadas, como foi dito anteriormente, por meio de

identificadores. Quando declaramos uma variável é natural atribuirmos a ela um

valor ou uma informação.

Uma das formas de atribuir ou alterar um valor a uma variável, é através da

instrução de leitura como acabámos de ver no ponto anterior. Uma outra forma é

através de uma instrução de atribuição. Para isto utilizaremos o símbolo “:=” em

Pascal, e “ ” em pseudocódigo, que significa “recebe o valor”, ou seja, a posição,

de memória que uma variável representa, receberá um valor, a qual será atribuído à

variável.

Numa instrução de atribuição, o valor que se atribui à variável em causa pode

ser:

Page 36: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 26

• um valor directo; por exemplo: NUM 10

• um valor contido noutra variável; por exemplo: NUM TOTAL

• um valor resultante de uma expressão; por exemplo: NUM (A + B) / 2

Exemplos de instruções de atribuição, em pseudocódigo: [Inicializar variáveis]

SOMA 0

[Calcular a Média e incrementar Valor]

MÉDIA SOMA / 15

VALOR VALOR + 1

EExxeerrccíícciiooss

1. Indique qual o resultado será obtido das seguintes expressões:

a) 1/2

b) 1 DIV 2

c) 1 MOD 2

d) (200 DIV 10) MOD 4

e) 6 +19-23

f) 3,0* 5,0 +1

g) 1/4+2

h) 29,0/7+4

i) ‘Carlos ‘ + ‘Almeida’

Indique o resultado das seguintes expressões:

j) 2 > 3

k) (6 < 8) OR (3 > 7)

l) (((10 DIV 2) MOD 6) > 5) XOR (3 < (2 MOD 2))

m) NOT (2 < 3)

Construa o algoritmo que calcule a seguinte expressão:

2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 }

Page 37: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

____________________________________________________________Lógica de Programação

Prof. Carlos Almeida 27

Escreva os comandos de atribuição para a seguintes fórmulas matemáticas:

n) XA B

C

D EF

=+

o) X B A FA

=− +

−2 4 23 2

3

Construa uma algoritmo e respectivo fluxograma que lê o raio de uma circunferência

e calcula sua área.

Page 38: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

Prof. Carlos Almeida 28

2 EESSTTRRUUTTUURRAASS DDEE DDEECCIISSÃÃOO

1.17. Objectivos Prosseguir com o estudo de algoritmos, introduzindo

agora as estruturas clássicas de decisão, o que vem completar a unidade anterior.

11.. EEssttrruuttuurraass FFuunnddaammeennttaaiiss ddee PPrrooggrraammaaççããoo

Nas estruturas de um algoritmo é, frequentemente, necessário:

• jogar com determinadas condições, para decidir se se deve executar uma

ou outra instrução;

• repetir uma série de instruções, um determinado número de vezes ou

enquanto se verificar uma certa condição;

• noutros casos ainda, temos um conjunto de instruções que se repete em

diversos pontos do programa, tornando-se então útil passar a tratá-lo

como um subalgoritmo.

22.. EEssttrruuttuurraa ddee DDeecciissããoo CCoonnddiicciioonnaall -- ""SSee""

Até agora temos estado a lidar com algoritmos puramente sequenciais, isto é, as

instruções são cumpridas uma após outra até chegar ao fim do algoritmo. No

entanto existem estruturas que permitem a tomada de decisões em função de

condições estabelecidas e assim, o algoritmo apresenta instruções alternativas.

Estas condições podem ser verdadeiras ou falsas; conforme esse valor o algoritmo

segue uma instrução ou segue outra em alternativa.

Estas estruturas não são mais que instruções complexas, geralmente,

compostas por várias palavras, mas formando um todo.

A estrutura de decisão condicional mais difundida e utilizada é a que se baseia

na instrução “Se”.

As estruturas “Se” podem ser “encaixadas” umas dentro das outras (Estruturas

“Se” encadeadas).

Page 39: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 29

A sintaxe desta estrutura, em pseudocódigo, é a seguinte: Se <Condição> Então

<Instrução se condição verdadeira>

[Senão

<Instrução se condição falsa>]

Fim Se

• <Condição> - a condição de controlo é normalmente uma expressão do

tipo lógico, isto é, que pode assumir apenas um entre dois valores

possíveis: verdadeiro ou falso;

• <Instrução...> - obviamente, será uma determinada instrução que se

pretende efectuar. Esta instrução tanto pode ser uma instrução simples,

como uma instrução composta, ou seja, um conjunto de instruções;

• o significado dos parêntesis rectos [...] indica que se trata de uma parte

opcional. Assim, o comando “Senão” e a sua respectiva instrução é

opcional, ou seja, só é utilizável quando se desejar ou for necessário.

Se tivermos um conjunto de instruções (instruções compostas) para considerar

dentro da estrutura podemos inseri-la entre delimitadores “Início ... Fim”.

Resumindo a sintaxe:

<Condição> NÃO

<Instrução seFALSO>

<Instrução seVERDADEIRO>

SIM

Se <Condição> Então

<Instrução se VERDADEIRO>

Senão

<Instrução se FALSO>

Fim Se

Page 40: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 30

<Condição> SIM

<Instrução seVERDADEIRO>

Se <Condição> Então

<Acção se VERDADEIRO>

Fim Se

Num fluxograma, toda decisão terá sempre como resposta o resultado VERDADEIRO ou FALSO.

Essas decisões interferem directamente no andamento do algoritmo.

Como no exemplo do algoritmo “Chupar um Rebuçado”. Imaginemos que

algumas pessoas não gostem de chupar rebuçados de morango, neste caso

teremos que modificar o algoritmo para:

Algoritmo “Chupar um rebuçado”

Pegar no rebuçado

O rebuçado é de morango?

Se sim, não chupar o rebuçado

Se não, continuar com o algoritmo

Retirar o papel

Chupar o rebuçado

Deitar o papel no lixo

Inicio

Pegar no rebuçado

É de morango?

Não chupar orebuçado

Retirar o papel

Chupar o rebuça

Deitar o papel nolixo

Fim

SIMNÃO

Page 41: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 31

Exemplos de estruturas de decisão condicional, em pseudocódigo:

[Exemplo 1]

Se X = 1 E K > VALOR Então

Se K < MENOR Então

M VALOR

Fim Se

Fim Se

[Exemplo 2a]

Se ANDAR = 0 Então

QUARTO_VAGO 0

K 0

Senão

Escrever(‘Nenhum quarto vago.’)

Fim Se

[Exemplo 2b]

Se ANDAR = 0 Então

Início

QUARTO_VAGO 0

K 0

Fim

Senão

Escrever(‘Nenhum quarto vago.’)

Fim Se

Exemplo Prático

Vejamos o seguinte exemplo:

Dado dois valores A e B quaisquer, faça um algoritmo que

imprima se A > B, ou A < B , ou A = B

Algoritmo Maior

Variáveis

A, B: Inteiro

Inicio

Escrever(‘Digite os valores A e B’)

Ler(A, B)

Page 42: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 32

Se A > B Então

Escrever(‘A é maior que B’)

Senão

Se A < B Então

Escrever(‘A é menor que B’)

Senão

Escrever(‘A é igual a B’)

Fim Se

Fim Se

Fim

Com curiosidade, na linguagem pascal seria: PROGRAM Maior;

VAR

A, B: BYTE;

BEGIN

WRITE(‘Digite os valores A e B’);

IF A > B THEN

WRITE(‘A é maior que B’)

ELSE

IF A < B THEN

WRITE(‘A é menor que B’)

ELSE

WRITE(‘A é igual a B’);

END.

Exercícios

1. Elabore um fluxograma que leia um número. Se positivo armazene-o em A, se for

negativo, em B. No final mostrar o resultado.

2. Faça um algoritmo que leia os valores A, B, C e diga se a soma de A + B é

menor que C.

3. Faça um algoritmo que leia dois valores inteiros A e B. Se os valores forem iguais

soma A com B, caso contrário multiplique A por B. No final do calculo atribuir o

valor para uma variável C.

Page 43: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 33

4. Construa um algoritmo em pseudocódigo para ler um número e verificar se ele é

par ou ímpar. Quando for par armazenar esse valor em P e quando for ímpar

armazená-lo em I. Exibir P e I no final do algoritmo.

5. Construa um fluxograma para ler uma variável numérica N e imprimi-la somente

se a mesma for maior que 100, caso contrário imprimi-la com o valor zero.

6. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um

algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:

• Para homens: (72.7*h) - 58

• Para mulheres: (62.1*h) - 44.7 (h = altura)

7. Construa uma algoritmo e respectivo fluxograma que lê o nome e as 4 notas

bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a média

obtida pelo aluno escrevendo também se o aluno foi aprovado ou reprovado.

33.. EEssttrruuttuurraa ddee DDeecciissããoo ddee EEssccoollhhaa MMúúllttiippllaa -- ""CCaassoo""

Há casos em que se tem de optar entre várias opções que uma variável pode

dispor, pelo que se terá de recorrer a várias estruturas “Se” encadeadas. O

encadeamento das estruturas de decisão condicional “Se” traz dificuldade na

interpretação do algoritmo. Neste caso, temos uma estrutura de decisão composta

ou decisão de escolha múltipla que vai tornar a leitura do algoritmo mais fácil.

Essa estrutura é conhecida pela estrutura “Caso”. Numa estrutura "Caso" há

uma variável, cujos valores que possa assumir vão ser utilizados no controlo das

alternativas ou instruções a escolher - a esta variável é costume chamar-se selector.

A Sintaxe desta estrutura, em pseudocódigo, é a seguinte: Caso <Variável>

<Valor 1> : <Instrução 1>

<Valor 2> : <Instrução 2>

(...)

<Valor n> : <Instrução n>

[Senão : <Instrução>]

Fim Caso.

Page 44: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 34

• Quando se indica <Valor 1>, <Valor 2>, etc., estamos a referir aos valores

possíveis que a variável de controlo poderá assumir. Pode ser apenas um

valor ou um conjunto de valores.

• Quando de indica <Instrução 1>, <Instrução 2>, etc., pode tratar-se de

uma só instrução ou de uma instrução composta, portanto um conjunto de

instruções a realizar.

• Em algumas implementações existe também uma cláusula "Senão" que se

destina a complementar o leque de alternativas, no caso de haver ainda

mais hipóteses não explicitadas, e em que pode haver ainda uma outra

instrução ou conjunto de instruções a indicar.

O fluxograma seria da forma:

Variável

Instrução 1 Instrução 2 (...) Instrução n-1 Instrução n

Valor 1

Valor 2

(...)

Valor n-1

Valor n

Exemplo Prático

Construa um algoritmo que caracteriza algumas letras do alfabeto usando a

estrutura condicional “Se” e a estrutura “Caso”, com a seguinte caracterização:

• Primeiras letras: ‘a’, ‘b’

• Alfabeto inglês: ‘k’, ‘w’, ‘y’

• Última letra: ‘z’

• Outras letras do alfabeto: restantes letras

Page 45: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 35

Algoritmo Selecção

[Este algoritmo caracteriza algumas letras do alfabeto]

Variáveis

LETRA: Caracter

FRASE: Caracteres

Início

Ler(LETRA)

Caso LETRA

‘a’, ‘b’: FRASE ‘Primeiras letras’

‘k’, ‘w’, ‘y’: FRASE ‘Alfabeto inglês’

‘z’: FRASE ‘Última letra’

Senão: FRASE ‘Outras letras do alfabeto’

Fim Caso

Escrever(FRASE)

Fim

LETRA

FRASE <-- 'Primeiras letras' FRASE <-- 'Alfabeto inglês' FRASE <-- 'Última letra' FRASE <-- 'Outras letras do alfabeto'

'a', 'b'

'k', 'w', 'y' 'z'

outros valores

Início

Escrever FRASE

Ler LETRA

Fim

Page 46: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 36

Exercícios

1. Construa um algoritmo da discussão da equação do segundo grau. A equação do

segundo grau apresenta-se na forma 02 =++ cbxax . A resolução desta equação

é baseada na utilização do binómio discriminante acb 42 − . Assim, temos três

situações:

• binómio discriminante > 0: tem solução dada por a

acbb2

42 −±−

• binómio discriminante < 0: não tem solução nos reais

• binómio discriminante = 0: tem solução dada por a

b2

2. Construa um algoritmo que disponha do cálculo do valor da área de três figuras

geométricas. O utilizador escolherá uma das três figuras disponíveis a tratar e o

algoritmo produzirá o valor da área.

Sugestão: A partir de um menu em que são apresentadas as figuras geométricas

disponíveis, o utilizador escolherá a pretendida. De seguida, ser-lhe-ão pedidos

os dados referentes à figura e produzir-se-á o cálculo do valor da área que será

apresentado no ecrã.

44.. EEssttrruuttuurraass ddee RReeppeettiiççããoo oouu CCiiccllooss

Frequentemente é necessários repetir, um determinado número de vezes, uma

certa instrução ou conjunto de instruções.

Frequentemente é necessários manter, um número indeterminado de vezes, um

ciclo ("Loop") de repetições, enquanto se verificar certa condição.

Essa repetição, na maior parte das vezes, não tem que ser uma repetição

exacta das mesmas operações, pois pode haver pelo meio certos dados (variáveis)

ou parâmetros que se vão alterando à medida que o ciclo vai decorrendo.

Exemplo de estruturas de repetição:

• Para... fazer

• Enquanto... fazer

• Repetir ... até

Page 47: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 37

Enquanto numa estrutura do tipo "Para... fazer" o número de vezes que vai

ocorrer a repetição do ciclo é determinada à partida por uma variável de controlo que

é incrementada ou decrementada à medida que o ciclo decorre. Na estrutura

"Enquanto.. fazer" e "Repetir...até" o ciclo decorrerá um número indeterminado de

vezes, dependendo da verificação ou não da condição de controlo - o que depende

dos acontecimentos no decurso do próprio ciclo.

55.. EEssttrruuttuurraa ddee RReeppeettiiççããoo -- ""PPaarraa...... FFaazzeerr""

Esta estrutura de repetição é controlada por uma variável - Variável de controlo -

que parte de um determinado valor e incrementa ou decrementa até um outro

determinado valor.

A Sintaxe, em pseudocódigo, é a seguinte: Para <variável> de <valor inicial> até <valor final> fazer

<Instrução>

Fim Para

As expressões <valor inicial> e <valor final> podem ser valores numéricos

directos, valores de outras variáveis ou expressões, desde que esses valores sejam

números inteiros.

À variável que controla o ciclo, também é costume chamar "contador" ou

variável de iteração, na medida em que vai assumindo valores sucessivos.

Os valores da variável de controlo podem variar num sentido crescente ou

decrescente.

O fluxograma seria da forma:

VariávelValor_Inicial até Valor_Final

Instrução

Page 48: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 38

A variável toma um valor inicial que vai incrementando (ou decrementando) até um valor final. À partida já sei quantas vezes vou repetir a instrução ou conjunto de instruções.

Exemplo: Faça um algoritmo para ler e escrever o nome de 20 pessoas. Algoritmo Ler_escrever

Variáveis

NOME: Caracteres

CONTADOR: Inteiro

Início

Para CONTADOR de 1 até 20 fazer

Ler(NOME)

Escrever(NOME)

Fim para

Fim

66.. EEssttrruuttuurraa ddee RReeppeettiiççããoo -- ""EEnnqquuaannttoo...... FFaazzeerr""

O ciclo ou estrutura de repetição começa com a verificação de uma expressão

ou condição, digamos, a "condição de controlo".

Se a condição for verdadeira, a instrução ou conjunto de instruções, será

executado um número vezes indeterminado à partida, dependendo de a condição de

controlo se manter verdadeira ou passar a falsa.

A Sintaxe, em pseudocódigo, é a seguinte: Enquanto <Condição> fazer

<Instrução>

Fim enquanto

O fluxograma seria da forma:

Condição

Instrução

Sim

Não

Page 49: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 39

• Neste caso, a Instrução repete-se enquanto a condição for verdadeira.

• A condição é testada antes de se iniciar a Instrução.

• Se a condição for verdadeira executa-se a instrução, se for falsa já não se executa a instrução.

Exemplo: Faça um algoritmo para ler e escrever o Nome de 20 pessoas. Algoritmo Ler_escrever

Variáveis

NOME: Caracteres

TOTAL: Inteiro

Início

TOTAL ← 0

Enquanto TOTAL < 20 fazer

Ler(NOME)

Escrever(‘Nome = ‘, NOME)

TOTAL ← TOTAL + 1

Fim enquanto

Fim

Exercícios

O algoritmo seguinte produz um ciclo infinito. Corrija-o. CONTAGEM 1

Enquanto CONTAGEM <= 10 fazer

Escrever(‘Não acabou’)

Fim enquanto

77.. EEssttrruuttuurraa ddee RReeppeettiiççããoo -- ""RReeppeettiirr ...... aattéé""

Como a condição de controlo de repetição só é avaliada no final do ciclo, a

instrução ou instruções será(ão) executada(s) sempre pelo menos uma vez.

O ciclo será interrompido quando a condição de controlo for verdadeira.

A instrução será executada sempre pelo menos uma vez.

Page 50: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 40

A Sintaxe em pseudocódigo: Repetir

<Instrução>

até <Condição>

Na forma de fluxograma:

Condição

Sim

Não Instrução

• A instrução será repetida até que a condição seja verdadeira.

• A condição será testada depois de realizada a instrução.

• Portanto, a acção realizar-se-á pelo menos uma vez.

• Se a condição for falsa executa-se a instrução, se for verdadeira já não se executa a instrução.

Exemplo: Faça um algoritmo para ler e escrever o Nome de 20 pessoas. Algoritmo Ler_escrever

Variáveis

NOME: Caracteres

TOTAL: Inteiro

Início

TOTAL ← 0

Repetir

Ler(NOME)

Escrever(‘Nome = ‘, NOME)

TOTAL ← TOTAL + 1

até TOTAL >= 20

Fim

Page 51: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 41

A estrutura “Repetir... até” pode ser realizada utilizando a estrutura “Enquanto...

fazer”.

Basta mudar de “Repetir... até <condição>”, para “Enquanto Não <Condição>...

fazer”.

A estrutura “Repetir... até” pode ser realizada utilizando a estrutura “Enquanto... fazer”.

Apresentamos um exemplo. Trata-se de um algoritmo para o cálculo dos múltiplos

de um número até um determinado valor definido por LIMITE.

Assim, temos: Algoritmo múltiplos

NUMERO, LIMITE, MULTIPLO: Inteiro

Início

Ler(NUMERO, LIMITE)

MULTIPLO NUMERO

Repetir

Escrever (MULTIPLO)

MULTIPLO MULTIPLO + NUMERO

até (MÚLTIPLO >= LIMITE)

Fim

Algoritmo múltiplos

NUMERO, LIMITE, MULTIPLO: Inteiro

Início

Ler(NUMERO, LIMITE)

MULTIPLO NUMERO

Enquanto (MÚLTIPLO < LIMITE)

Escrever (MULTIPLO)

MULTIPLO MULTIPLO + NUMERO

Fim enquanto

Fim

Nota: Não (MÚLTIPLO >= LIMITE) = (MÚLTIPLO < LIMITE)

88.. EExxeemmpplloo PPrrááttiiccoo –– NNúúmmeerroo PPrriimmoo

vamos ver um algoritmo para verificar se um número é ou não primo.

Algoritmo Números_Primos

[Vamos verificar se é primo]

NUMERO, CONTAGEM: Inteiro

FRASE: Caracteres

PRIMO: Lógico

Início

Ler(NUMERO)

PRIMO ← verdadeiro

Page 52: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 42

Para contagem de 2 até NUMERO-1 fazer

[Se for divisível não é primo]

Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← falso

Fim se

Fim para

Se PRIMO então

FRASE ← ‘É número primo’

senão

FRASE ← ‘Não é primo’

Fim se

Escrever(FRASE)

Fim

Análise do Algoritmo

Um número primo é aquele que é divisível, só e somente, pela unidade e por ele

próprio. Se for divisível por qualquer outro, não é número primo.

Como todos os números são divisíveis por um e por si próprios não

necessitamos de verificar a divisibilidade. Assim, temos de verificar todos os outros

números desde 2 até ao número anterior ao que queremos verificar (NUMERO - 1).

Por isso aparece a estrutura: Para CONTAGEM de 2 até NUMERO-1 fazer

Instrução

Fim para

A instrução é a verificação da divisibilidade.

Se um número ‘a’ for divisível por outro ‘b’ então o resto da divisão será zero.

Temos uma operação que nos dá o resto da divisão de inteiros. É o mod.

Neste caso temos que se (NUMERO mod CONTAGEM = 0) então o número

não será primo. Daí que surge: Para contagem de 2 até NUMERO-1 fazer

Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← falso

Fim se

Fim para

Page 53: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 43

Na realidade estamos a verificar se o número não é primo. Para indicar se o

número é ou não primo usamos uma variável lógica que toma um de dois valores: ou

verdadeiro ou falso. A variável está identificada com o nome PRIMO.

Por isso usamos: Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← falso

Fim se

Para mandar a indicação para o ecrã, usamos o valor da variável lógica para

fazer a diferenciação. Se for primo (primo terá o valor verdadeiro) é apresentado no

ecrã “É número primo”; se não for será apresentada a frase “Não é primo”. Se PRIMO então

FRASE ← ‘É número primo’

senão

FRASE ← ‘Não é primo’

Fim se

Escrever(FRASE)

Pode-se considerar uma variante da estrutura “Enquanto... fazer” Vejamos: Algoritmo Números_Primos

[Vamos verificar se é primo]

NUMERO, CONTAGEM: Inteiro

FRASE: Caracteres

PRIMO: Lógico

Início

Ler(NUMERO)

PRIMO ← verdadeiro

[Para não ser primo deve ser divisível por qualquer número entre

1 e ele próprio, isto é, de 2 até número-1]

CONTAGEM 2 [Para iniciar a contagem]

Enquanto (CONTAGEM <= NUMERO-1) fazer

[Se for divisível não é primo]

Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← falso

Fim se

CONTAGEM CONTAGEM + 1 [Incremento de uma unidade]

Fim enquanto

Page 54: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 44

Se PRIMO então

FRASE ← ‘É número primo’

senão

FRASE ← ‘Não é primo’

Fim se

Escrever(FRASE)

Fim

Neste caso é necessária a inicialização da variável contador (CONTAGEM)

antes da estrutura “Enquanto... fazer”.

Dentro do ciclo, é necessário proceder ao incremento da variável contador

(CONTAGEM) para que alcance o valor final pretendido.

Vejamos o fluxograma do algoritmo número primo usando a estrutura

“Enquanto... fazer”:

Page 55: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 45

CONTAGEM <=NUMERO-1

Sim

Início

LerNUMERO

PRIMO <-- verdadeiro

CONTAGEM <-- 2

NUMERO modCONTAGEM = 0

PRIMO <-- falso

Sim

Não

CONTAGEM <-- CONTAGEM + 1

Não

PRIMO

FRASE <-- 'Não é primo'

FRASE <-- 'É número primo'

EscreverFRASE

Fim

Melhoria do Algoritmo

O algoritmo pode ser melhorado em dois aspectos:

1. Não tem interesse a verificação de números negativos, nem o zero nem o

número um.

Solução: impedir ao utilizador a introdução dos referidos valores.

Page 56: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 46

2. Quando se encontra um valor em que o número é divisível não há

vantagem em continuar a verificação, pois o número não é primo.

Solução: quando se encontra o valor que divide o número termina-se a

estrutura ”Enquanto”.

Vamos começar pelo primeiro aspecto: (...)

NUMERO 0

Enquanto NUMERO < 2 fazer

Ler(NUMERO)

Fim enquanto

(...)

Acrescentamos a estrutura “Enquanto... fazer” para verificar o valor que o

utilizador introduz na variável NUMERO, obrigando o utilizador a repetir novo valor

caso tenha introduzido um valor não apropriado.

Existe a inicialização da variável NUMERO (NUMERO 0) para obrigar ao

pedido da introdução do número a verificar. Caso não se faça a inicialização

referida, não sabemos o que poderá acontecer uma vez que não sabemos que valor

a variável número contém no momento do teste da condição da estrutura

“Enquanto... fazer”.

Para o segundo aspecto referido, temos: PRIMO ← Verdadeiro

CONTAGEM 2 [Para iniciar a contagem]

Enquanto (CONTAGEM <= NUMERO-1) E (PRIMO) fazer

[Se for divisível não é primo]

Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← Falso

Fim se

CONTAGEM CONTAGEM + 1 [Incremento de uma unidade]

Fim enquanto

Vimos nos operadores lógicos que na conjunção (E) basta uma proposição ser

falsa para que a condição seja falsa. Quando a condição é falsa termina a estrutura

de repetição “Enquanto... fazer”.

Page 57: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 47

Assim, basta encontrar um valor que divida o número (quando PRIMO passa a

ter o valor Falso) para acabar a estrutura “Enquanto... fazer”. Esta, também acaba

se a contagem chegar ao fim.

Vejamos a tabela de teste para as condições postas. CONTAGEM <= NUMERO-1 PRIMO (CONTAGEM <= NUMERO-1) E (PRIMO)

V V V (continua o ciclo) V F F (termina o ciclo) F V F (termina o ciclo) F F F (termina o ciclo)

O algoritmo final seria: PRIMO: Lógico

Início

NUMERO 0

Enquanto NUMERO < 2 fazer

Ler(NUMERO)

Fim enquanto

PRIMO ← verdadeiro

[Para não ser primo deve ser divisível por qualquer número entre

1 e ele próprio, isto é, de 2 até número-1]

CONTAGEM 2 [Para iniciar a contagem]

Enquanto (CONTAGEM <= NUMERO-1) E (PRIMO) fazer

[Se for divisível não é primo]

Se (NUMERO mod CONTAGEM = 0) então

PRIMO ← falso

Fim se

CONTAGEM CONTAGEM + 1 [Incremento de uma unidade]

Fim enquanto

Se PRIMO então

FRASE ← ‘É número primo’

senão

FRASE ← ‘Não é primo’

Fim se

Escrever(FRASE)

Fim

Para melhor compreensão do algoritmo faz a tabela de teste com valores a tua

escolha.

Page 58: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 48

99.. EExxeerrccíícciiooss

1. Faça um algoritmo para calcular:

a. ∑=

50

12

NN

b. ∑=

30

1

1N N

2. Faça um algoritmo para ler base e altura de 50 triângulos e imprimir a sua

área.

3. Faça um algoritmo para calcular o factorial de um número N!.

4. Faça um algoritmo que conte de 1 a 100 e a cada múltiplo de 10 emita uma

mensagem: “Múltiplo de 10”.

5. Faça um algoritmo que determine o maior entre N números. A condição de

termo é a entrada de um valor 0, ou seja, o algoritmo deve continuar a

calcular o maior número até que a entrada seja igual a 0 (ZERO).

Page 59: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

Prof. Carlos Almeida 49

3 EESSTTRRUUTTUURRAA DDEE DDAADDOOSS

1.18. Objectivos O objectivo fundamental é conseguir que os alunos

percebam em profundidade o conceito de vector e matriz, como estrutura de dados em memória. O conceito de ficheiro deverá ser mais explorado na unidade relativa à Programação em Pascal.

Distinguir estruturas de dados em memória volátil e memória magnética

Realizar algoritmos com a utilização de vectores e matrizes

Aplicar no mesmo algoritmo várias estruturas de decisão.

11.. EEssttrruuttuurraa ddee DDaaddooss

Na programação de alto nível, sempre que se declaram variáveis, estas têm de

ser associadas a um determinado tipo de dados, para que o compilador saiba com

que tipo de valores vai operar e que espaço deve ser reservado em memória para

cada variável. Para além das estruturas de dados que mantenha em memória

primária, existem estruturas de dados que conserve em memória secundária, que é

o caso dos ficheiros.

Para além de uma categoria de dados a que podemos chamar de simples

(Inteiro, Lógico, Real, caracteres,...), temos ainda os dados que são estruturadas,

isto é, que são compostos por outros dados.

⎪⎩

⎪⎨

asEstruturadou Complexas

Simples Dados de Estrutura

Imaginemos por exemplo, um algoritmo para ler o nome de N pessoas e que

imprimisse esses mesmos nomes ordenados alfabeticamente. Não seria uma tarefa

simples, visto não ser possível determinar quantos nomes seriam lidos. Mesmo que

soubesse-mos o número de pessoas, digamos 1000 pessoas, teríamos que definir

1000 variáveis do tipo Caracteres como é indicado abaixo:

Page 60: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 50

Algoritmo Loucura

Variáveis

NOME1,

NOME2,

NOME3,

(...)

NOME999,

NOME1000: Caracteres

Início

<Instruções>

Fim

Vamos considerar o tamanho do algoritmo, e o trabalho de escrita necessário

para o construir. Imaginemos agora o algoritmo com 1000000 pessoas. Na prática, a

construção deste algoritmo começaria a ficar inviável. Para resolver problemas como

este, e outros, foi criado um novo conceito de estrutura de dados e uma nova forma

de definir as variáveis, as quais foi denominada de variáveis do tipo Array.

Um array revela-se uma estrutura de dados muito mais económica em termos de escrita, mas, sobretudo, encerra muito mais potencialidades de manipulação em termos de programação.

Uma variável do tipo Array corresponde a uma sequência de posições de

memória, identificada com um único nome. Cada uma destas posições pode ser

acedida através de um índice. O índice corresponde a um valor numérico Inteiro.

Cada uma das posições de memória de uma variável Array pode receber valores no

decorrer do algoritmo como se fosse uma variável comum. A única diferença reside

na sintaxe de utilização desta variável.

Uma variável do tipo Array corresponde a uma sequência de posições de memória, identificada com um único nome.

Um índice corresponde a um valor numérico Inteiro e representa cada uma das posições de um array.

Page 61: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 51

22.. VVeeccttoorreess

Um vector (Array unidimensional) é um tipo estruturado que pode agrupar numa

mesma variável um conjunto finito de valores todos do mesmo tipo. Um vector é um

conjunto de elementos representados por um identificador e um único índice. Cada

elemento tem uma única dimensão. O índice varia entre um limite inferior e um limite

superior, em correspondência com o número de elementos do conjunto. Os vectores

são colocados na memória em posições ordenadas e adjacentes.

Um vector agrupa numa mesma variável um conjunto finito de valores todos do mesmo tipo.

Suponhamos que pretendemos representar, num programa, os gastos de um

determinado departamento em cada um dos 12 meses do ano. Evidentemente,

poderíamos definir 12 variáveis, designadas por 12 identificadores diferentes; por

exemplo: JAN; FEV; MAR; etc. Todavia, o uso de uma variável estruturada, neste

caso, um vector, com um único identificador agrupando os 12 elementos em causa,

revela-se uma técnica muito mais económica em termos de escrita, mas, sobretudo,

encerra muito mais potencialidades de manipulação em termos de programação.

Neste caso, poderíamos definir um vector mediante um único identificador, por

exemplo: GASTOS_MÊS. Mas, para que esse identificador possa representar os 12

elementos correspondentes aos 12 meses do ano, temos de utilizar índices.

Em pseudocódigo, poderíamos escrever assim: Variaveis

GASTOS_MES: Vector[1..12] de Real

em que:

• GASTOS_MES é o identificador ou nome atribuído à variável;

• VECTOR indica que a variável é do tipo Vector;

• [1..12] define o número de elementos da variável (12-1+1=12 elementos)

e ao mesmo tempo o intervalo dos seus índices, neste caso entre 1 e 12.

• DE REAL indica qual o tipo de dados dos elementos do vector.

Page 62: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 52

e, em Pascal: Var

GASTOS_MES: Array[1..12] of Real

De um modo geral, cada elemento desta variável de tipo Vector designa-se por:

GASTOS_MES[K] em que [K] representa a posição do elemento no conjunto que

compõem o vector, ou seja, neste caso, o número do mês que se pretende designar.

Por exemplo o gasto do mês de Fevereiro seria designados por: GASTOS_MES[2]

Segue-se alguns exemplos de operações com vectores: [Definir um vector A de 40 elementos do tipo inteiro]

A: Vector[1..40] de Inteiro

[Instrução de leitura com acesso sequencial]

Para K de 1 até 40 Fazer

Ler(A[K])

[Instrução de atribuição:

armazenar na 4ª posição do vector A o valor 13]

A[4] 13

[Instrução de escrita do 4ª elemento do vector A]

Escrever(A[4])

De um modo geral a estrutura “Para...” é muito útil no trabalho de vectores.

Exercícios Sobre Vectores

1. Construa um algoritmo que permita verificar qual o maior valor inteiro

introduzido pelo utilizador num vector de 20 elementos.

2. Dado um vector com 12 elementos, imprimir a soma de todos os elementos

par.

Page 63: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 53

33.. OOrrddeennaaççããoo ddee uumm VVeeccttoorr

Quando se preenche um vector com dados, estes ficam arrumados em função

da ordem de entrada que o utilizador usou. Assim, os dados ficam sem uma ordem

convencional. Por questão de lógica de procura ou de leitura, pode haver interesse

em que os dados estejam ordenados.

Por esta razão, vamos estudar um algoritmo simples que permitirá proceder à

ordenação dos dados de um vector.

Seja o vector definido por: IDADES: Vector[1..5] de Inteiro

que contém as idades de cinco pessoas: 45 27 33 40 35

Os dados do vector Idades não se encontra ordenado. Seria legítimo

pretender-se que as IDADES estivessem ordenadas por ordem crescente. Para tal,

teremos de percorrer o vector comparando os valores sucessivos e, caso

necessário, fazer a troca conveniente. Vejamos, a posição IDADES[1] é 45 e a

posição IDADES[2] é 27, logo terão de ser trocados os valores de modo que a

posição IDADES[1] fosse 27 e IDADES[2] fosse 45. Depois verificamos IDADES[2] e

IDADES[3] e têm de ser trocados. Todo este procedimento corre o vector até ao fim.

Esquematizando, temos: Para COLUNA de 1 até 4 fazer

Se IDADES[COLUNA] > IDADES [COLUNA+1] então

Troca (IDADES[COLUNA],IDADES[COLUNA+1])

Fim se

Fim Para

Este algoritmo tem uma operação especial a que chamámos “Troca” que vai

realizar a troca pretendida.

Uma análise mais atenta, mostra-nos que este algoritmo não chega. Vejamos,

no quadro seguinte, o que se passa a cada incremento da variável COLUNA na

estrutura “Para...”.

Page 64: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 54

45 27 33 40 35 Vector Original 1 27 45 33 40 35 2 27 33 45 40 35 3 27 33 40 45 35

Para

CO

LUN

A

de 1

até

4

4 27 33 40 35 40

O vector mostra-nos que a ordenação não ficou completa. É necessário fazer

correr, mais uma vez, a estrutura “Para...”. Portanto, o algoritmo só deve acabar

quando a estrutura “Para...” percorrer o vector e não efectuar nenhuma troca de

valores: Repetir

TROCAS FALSO

Para COLUNA de 1 até 4 fazer

Se IDADES[COLUNA] > IDADES [COLUNA+1] então

Troca (IDADES[COLUNA],IDADES[COLUNA+1])

TROCAS VERDADEIRO

Fim se

Fim Para

Até NÃO TROCAS [Até não haver trocas]

Falta criar o algoritmo da operação “Troca”: TEMPORARIO IDADES[COLUNA]

IDADES[COLUNA] IDADE[COLUNA+1]

IDADES[COLUNA+1] TEMPORARIO

Agora podemos construir o algoritmo completo: Algoritmo Ordena_Vector

[Este algoritmo ordena por ordem crescente]

COLUNA, TEMPORARIO: Inteiro

IDADES: Vector[1..5] de Inteiro

TROCAS: Lógico

Início

Repetir

TROCAS FALSO

Para COLUNA de 1 até 4 fazer

Se IDADES[COLUNA] > IDADES [COLUNA+1] então

TEMPORARIO IDADES[COLUNA]

IDADES[COLUNA] IDADE[COLUNA+1]

IDADES[COLUNA+1] TEMPORARIO

Page 65: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 55

TROCAS VERDADEIRO

Fim se

Fim Para

Até NÃO TROCAS [Até não haver trocas]

Fim

44.. MMaattrriizzeess

Uma matriz (Array multidimensional) é um tipo estruturado que pode agrupar

numa mesma variável um conjunto finito de valores todos do mesmo tipo.

No caso dos vectores, temos apenas um agrupamento de elementos, cujos

índices estão compreendidos entre dois limites; nas matrizes temos dois (ou mais)

elementos, cada qual com o seu par de limites próprio.

Uma matriz é um conjunto de elementos representados por um identificador e

dois índices. Da mesma forma do que os vectores, os dois índices variam entre um

limite inferior e um limite superior, em correspondência com o número de elementos

do conjunto.

Uma matriz bidimensional é um conjunto de elementos representados por um identificador e dois índices.

Segue-se alguns exemplos de operações com matrizes: [Definir uma matriz M, de 10 linhas e 5 colunas, com elementos do tipo

inteiro]

M: Matriz[1..10, 1..5] de Inteiro

[Instrução de leitura com acesso sequencial]

Para K de 1 até 10 Fazer

Para L de 1 até 5 Fazer

Ler(M[K, L])

[Instrução de atribuição]

M[4, 3] 20

Page 66: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 56

Seja o exemplo seguinte: QUADBID: matriz[1..5, 1..10] de Inteiro

LINHA, COLUNA: Inteiro

...

Para LINHA de 1 até 5 fazer

Para COLUNA de 1 até 10 fazer

Ler(QUADBID[LINHA, COLUNA])

Fim Para

Fim Para

Como vemos no exemplo acima apresentado, existe a matriz QUADBID de 5

linhas por 10 colunas que é referenciado com a ajuda de duas estruturas “Para...”.

A primeira estrutura corre as linhas da matriz e a segunda corre, em cada linha,

as colunas. Cada vez que realiza a instrução Ler, o utilizador introduz um inteiro na

matriz na posição referenciada no momento pelos contadores linha e coluna (os dois

índices da matriz).

Se usarmos uma matriz bidimensional usam-se duas estruturas “Para...” para correr a matriz porque passam a existir dois indicadores de posição para cada célula da matriz.

Exercícios Sobre Matrizes

1. Um stand de venda de automóveis, concessionário de uma marca, vende

sete modelos dessa marca. Crie um algoritmo que introduza num array

bidimensional os modelos e respectivo preço para posterior consulta. Modelos Preço (contos)

ModA 2500 ModB 3000 ModC 2500 ModD 3500 ModE 2500 ModF 3000 ModG 4000

A matriz terá de ser do tipo caracteres, pois terá que conter a designação do modelo. Será

de sete linhas e duas colunas como se pode ver na tabela acima apresentada.

Page 67: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 57

2. Faça um algoritmo para mostrar os dados contidos na matriz preenchida no

exercício anterior. Partindo do algoritmo do exercício anterior será fácil construir este.

3. Construa um algoritmo para ordenação dos dados da matriz do exercício 1,

por ordem crescente do preço. Neste caso, o quadro é bidimensional havendo necessidade de ordenar as duas colunas. De

qualquer modo, a primeira coluna só será ordenada em função da ordenação da segunda,

isto é, quando houver uma alteração da ordem de preços ter-se-á de fazer a alteração na

ordem dos modelos respectivos.

55.. RReeggiissttooss

Os registos (Record’s) são um outro tipo de dados estruturados que permitem

agrupar elementos de vários tipos diferentes, sob a forma de campos.

CAMPO é um espaço reservado em memória para receber informações (dados).

Exemplo: Campo Nome, Campo Endereço.

A principal diferença que costuma apontar-se entre um array (vector ou matriz) é

que, quando um array agrupa um conjunto de dados do mesmo tipo, um registo

pode conjugar diferentes tipos de dados na mesma estrutura. Todavia, existem

outras diferenças importantes, sobretudo no modo de acesso aos elementos de um

e de outro tipo de estrutura.

REGISTRO é um conjunto de campos.

Exemplo: Registro de Clientes.

Ao contrário de um array um registo pode conjugar diferentes tipos de dados na mesma estrutura.

De facto, o que interessa sobretudo é a maneira como se vai aceder a essa

informação estruturada.

Page 68: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 58

• se o problema exige que o acesso seja por “indexação”, isto é, do género, “toma lá

um índice, dá cá um valor”, então o que faz falta é um array;

• se, por qualquer motivo, o que queremos é um acesso por “nomeação” – “passa para cá a informação com este nome” – então o melhor é ir pelos registos.

Um exemplo típico de dados organizáveis sob a forma de registos é o que se

relaciona com informação sobre pessoas. Os seguintes dados poderiam ser os

campos de um registo: nome; morada; idade; telefone; etc.

Em pseudocódigo seria: [Registo que inclui os campos: Nome, Morada, Idade e Telefone]

[Tipo de dado DADOS_PESSOA definido pelo programador]

Tipo de Dados

DADOS_PESSOA de Registo

NOME: Caracteres

MORADA: Caracteres

IDADE: Inteiro

TELEFONE: Caracteres

Fim

Variáveis

[Definir as variável CLIENTE_A e CLIENTE_B do tipo DADOS_PESSOA]

CLIENTE_A, CLIENTE_B: DADOS_PESSOA

Em Pascal: [O mesmo registo em Pascal, definido pelo programador]

Type

DADOS_PESSOA = Record

NOME: String[30];

MORADA: String[50];

IDADE: Integer;

TELEFONE: String[12];

End;

Var

CLIENTE_A, CLIENTE_B: DADOS_PESSOA;

Na Linguagem Pascal, uma variável RECORD pode ter campos de qualquer tipo

válido do Pascal, sendo permitido inclusive que um RECORD seja definido dentro do

outro, ou como parte de um ARRAY.

Page 69: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 59

Continuando o exemplo, caso desejarmos atribuir um valor à variável CLIENTE,

devemos fazê-lo da seguinte forma:

Em pseudocódigo: [Atribuir 45 ao campo IDADE da variável CLIENTE_A]

CLIENTE_A.IDADE 45

[Os valores existentes de todos os campos da variável CLIENTA_A

para a variável CLIENTA_B]

CLIENTA_B CLIENTA_A

Em Pascal: CLIENTE_A.IDADE := 45;

CLIENTA_B := CLIENTA_A;

O uso do “.” indica que esta variável possui campos, e que IDADE é um deles. É

importante lembrar que as operações realizadas sobre uma variável RECORD, são

as mesmas de uma variável “comum”, a única diferença que é devemos indicar o

nome da variável, seguido de um ponto (.) e seguido do nome do campo

(CLIENTE_A.IDADE := 45;).

É possível atribuir o conteúdo de uma variável RECORD para outra variável, de

mesmo tipo, da mesma forma que é feito como as outras variáveis do Pascal

(CLIENTA_B := CLIENTA_A;).

Exercícios Sobres Registos

1. Define um registo tendo os seguintes campos: Nome, Semestre, Sala,

Curso, Notas (total de 6 notas).

2. Faça um programa para ler as informações, descritas no exercício 1.

3. Ampliar a definição anterior, acrescentando a definição de um outro campo

(Endereço) que será também um Registo, o qual terá os seguintes campos:

Rua, Bairro, Código Postal, Cidade,.

Page 70: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 60

4. Faça um programa para ler as informações de um aluno, junto com o

endereço descrito no exercício 3.

5. Defina um vector de alunos, os campos serão os mesmos descritos no

exercício 3.

6. Faça um programa para ler as informações de n alunos.

7. Ordene crescentemente pelo Nome, os alunos.

66.. FFiicchheeiirrooss

Os ficheiros têm como função, armazenar a informação em suportes de

memória secundária ou externas (discos ou disquetes, etc.), onde essa informação

possa ser guardada para além do tempo em que o programa está a correr no

computador, e, eventualmente, reutilizada, nesse ou em outro programa.

As restantes estruturas de dados, são dados voláteis, porque são armazenados

apenas temporariamente na RAM (memória primária) do computador, quando estes

estão a funcionar com o programa. Quando se sai do programa em que os dados

foram introduzidos ou obtidos, toda a informação desaparece.

Um ficheiro é uma unidade de informação, armazenada fisicamente num suporte de memória secundária.

Ao contrário das estruturas de dados estudadas anteriormente, armazenadas em suporte de memória primária, os ficheiros têm como função, armazenar a informação em suportes de memória secundária ou externas.

Assim, a unidade básica de armazenamento de informação em sistemas

informáticos é o ficheiro (file). Um ficheiro é uma unidade de informação,

armazenada fisicamente num suporte de memória secundária.

⎩⎨⎧

r)programado pelo (definidos binário tipo do ficheiros texto tipo do ficheiros

ficheiro de Tipo

Page 71: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 61

Ficheiros do Tipo Texto

Os ficheiros do tipo texto, são ficheiros em que a informação é totalmente

armazenada em formato de caracteres (ASCII), podendo ser criados ou modificados

por um editor de texto, fora do programa que os utiliza.

O acesso aos dados neste tipo de ficheiros é do tipo sequencial, querendo isto

dizer, que a leitura dos dados tem de partir sempre do início e percorrer todos os

elementos até ao ponto pretendido.

Ficheiros do Tipo Binário

Os ficheiros definidos pelo programador são ficheiros que agrupam dados

simples (como por exemplo, um inteiro) ou estruturados (como por exemplo, um

registo), em formato binário, assumindo formas muito variáveis. Podemos, por

exemplo, ter ficheiros de números inteiros ou reais, de vectores ou de registos,

etc. - o que permite uma grande flexibilidade de trabalho com sequências de dados

armazenadas em suportes de memória secundária.

Em particular, os ficheiros de registos permitem manipular dados num formato

bem estruturado para trabalho com informação externa (em disco ou disquete). Com

este tipo de ficheiros (ficheiros de registos) pode trabalhar-se com informação um

pouco à maneira de bases de dados.

O acesso aos dados destes ficheiros pode ser feito de forma aleatória, ou seja,

por escolha da posição pretendida, e não forçosamente de forma sequencial, como

nos ficheiros de texto.

Em qualquer dos casos, um ficheiro de dados (Ficheiro de texto ou binário), para

além de permitir o armazenamento da informação num suporte de armazenamento

externo à memória primária, também permite reunir uma colecção de dados sem

tamanho fixo à partida. Qualquer um dos outros tipos de dados estruturados

(vectores, matrizes ou registos) tem um tamanho – em termos de número de

elementos – que é determinado à partida, na respectiva declaração do tipo ou da

variável. Em princípio, um ficheiro não tem essa limitação, pois pode conter um

número maior ou menor de dados, sem que esse número tenha que ser determinado

à partida. Um ficheiro pode ser acrescentado com mais dados, desde que estes

sejam compatíveis com o tipo-base dos dados que o constituem, ou pode ser

totalmente reescrito com um número completamente diferente de elementos.

Page 72: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 62

• O acesso de um ficheiro do tipo texto é feito de forma sequencial.

• O acesso de um ficheiro do tipo binário é feito de forma aleatória.

• Um ficheiro que agrupa dados do tipo registo pode ser considerado uma base de dados.

Suportes Físicos de Ficheiros

As memórias auxiliares, embora sendo exteriores ao computador, operam como

extensões da sua memória central. São meios de memorização capazes de

armazenar quantidades de informação muito superiores às que a memória central

pode guardar, e funcionam como armazéns de informação que a memória central

requisita sempre que necessário. Existem grande variedade de memórias auxiliares,

como suporte físico de ficheiros, sendo mais frequentes as unidades de discos

magnéticos e as unidades de fita magnética.

Suportes físicos mais utilizados para armazenar informação:

• banda magnética;

• disquetes;

• disco magnético duro;

• discos ópticos;

• tapes;

• etc.

A escolha dos suportes relaciona-se com três características:

1. capacidade – sendo as bandas magnéticas, discos duro e óptico e as

tapes, de maior capacidade;

2. tipo de tratamento a dar ao ficheiro;

3. velocidade de tratamento – em que os discos duros e ópticos são os mais

rápidos.

O acesso aos ficheiros nestes suportes é também de grande importância pois

condiciona algumas das características atrás referidas. Assim o acesso pode ser de

dois tipos:

• acesso sequencial;

• acesso directo – nunca se poderia utilizar a banda magnética.

Page 73: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 63

Operações com Ficheiros

Os ficheiros são estruturas de dados que implicam a sua manipulação a dois

níveis:

1. ao nível interno do programa, com variáveis que identificam os ficheiros e

os dados a ler ou escrever nessas unidade de informação;

2. ao nível externo ou de interacção entre o programa e os dispositivos

físicos onde são armazenados os ditos ficheiros.

As principais operações a ter em conta no trabalho com ficheiros são:

• declaração de tipos e variáveis de ficheiros;

• associação de uma variável de ficheiro com um nome externo de ficheiro;

• criação de novos ficheiros ou reescrita total de um ficheiro já existente;

• escrita de informação num ficheiro;

• abertura de um ficheiro para leitura;

• procura de dados num ficheiro;

• fecho de um ficheiro aberto;

• fusão de ficheiros;

• etc.

Exemplos de operações no trabalho com ficheiros de registo:

• consultar registo por registo;

• listar todos os registos de um ficheiro;

• acrescentar mais registos;

• alterar os dados de um determinado registo;

• consulta de uma registo dada a sua posição no ficheiro

77.. MMaanniippuullaaççããoo ddee FFiicchheeiirrooss eemm PPaassccaall

Um ficheiro é de grande importância nos programas em computador, desde o

tempo em que o primeiro computador surgiu, pois, para que um programa faça

algum tipo de operação, o mesmo precisa ser alimentado com informações: estas,

ou são fornecidas pelo teclado, ou são fornecidos através de um ficheiro.

Page 74: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 64

O PASCAL, possui dois tipos de ficheiros, os quais são:

1. Ficheiros FILE

2. Ficheiros TEXT

Ficheiros FILE

Um ficheiro do tipo FILE, também conhecido por ficheiro aleatório, ou de acesso

aleatório, é o ficheiro mais importante do Pascal, sendo desta forma também o mais

utilizado. Um ficheiro aleatório é caracterizado pelo fato de ser possível buscar uma

determinada informação em qualquer posição que a mesma se encontre, sem haver

a necessidade de se percorrer todo o ficheiro até se alcançar a informação

desejada. O acesso a informação é directo.

Sintaxe: <Nome da variável>: FILE OF <tipo>

Um ficheiro FILE deve ser apenas um tipo de dado, ou seja: INTEGER, REAL, RECORD, STRING, BYTE, etc.

O programa seguinte define uma variável como sendo um ficheiro FILE de

STRING’s: Program Exemplo;

Var

MINHA_VARIAVEL: File of String;

Begin

End.

Quando um Ficheiro FILE é criado, o mesmo possui a seguinte estrutura interna: Posição Física Informação

0 1 2 … N

A posição física corresponde a um número gerado automaticamente no instante

em que uma dada informação é inserida no ficheiro. Este número, corresponde ao

“Endereço” da informação no ficheiro.

Page 75: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 65

É através deste endereço que é possível recuperar qualquer informação, sem

ter que percorrer todo o ficheiro em busca da mesma, bastando para isto, fornecer o

número da sua posição física.

Vamos passar a chamar as informações armazenadas num ficheiro por “Registros”.

Tratamento de Ficheiros FILE

Existem uma grande quantidade de subrotinas construídas especialmente para

manipular ficheiros FILE. Vamos conhecer as principais:

Rotina: ASSIGN()

Função: Serve para associar um determinado nome de ficheiro, no disco ou disquete com o ficheiro definido pelo programador.

Sintaxe: ASSIGN(Meu_Ficheiro, STRING_Com_Nome_Ficheiro_DOS);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

End.

Rotina: REWRITE()

Função: Cria e abre para Entrada\Saída um Ficheiro. Caso o ficheiro não exista, o mesmo será criado. Caso o ficheiro já exista, todos os dados existentes nele serão apagados.

Sintaxe: REWRITE(Meu_Ficheiro);

Page 76: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 66

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Rewrite(FICHEIRO);

End.

Rotina: RESET()

Função: Abre para E/S um ficheiro que já exista. Caso o ficheiro não exista ocorrerá um erro de execução e o programa será abortado.

Sintaxe: RESET(Meu_Ficheiro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

End.

Rotina: CLOSE()

Função: Fecha um ficheiro que tenha sido aberto com RESET ou REWRITE.

Sintaxe: CLOSE(Meu_Ficheiro);

Page 77: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 67

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Rewrite(FICHEIRO);

Close(FICHEIRO);

End.

Rotina: WRITE()

Função: A rotina WRITE tem a mesma função de saída de informações até agora estudado, invés da informação ser apresentada no ecrã, a mesma será armazenada num ficheiro.

Sintaxe: WRITE(Meu_Ficheiro, Registro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String; IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

REG: REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Rewrite(FICHEIRO);

Write(‘Digite o Nome: ’);

Readln(REG.NOME);

Write(‘Digite a Idade: ’);

Readln(REG.IDADE);

Write(FICHEIRO, REG);

Close(FICHEIRO);

End.

Page 78: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 68

Rotina: READ()

Função: A rotina READ tem a mesma função de entrada de informações até agora estudado, invés da leitura ser feita pelo teclado, a mesma será feita de um ficheiro.

Sintaxe: READ(Meu_Ficheiro, Registro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

REG: REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

Read(FICHEIRO, REG);

Writeln(‘Nome: ’, REG.NOME);

Writeln(‘Idade: ’, REG.IDADE);

Close(FICHEIRO);

End.

Após cada operação READ/WRITE no Ficheiro, o endereço do registro corrente no ficheiro é incrementado em uma unidade. Assim por exemplo, se o endereço do registro corrente é igual a 10, após uma operação de READ/WRITE, o registro corrente passará a ser o número 11.

Rotina: ILEPOS()

Função: etorna um número inteiro indicando qual o registro corrente do ficheiro.

Sintaxe: Registro_Corrente := FILEPOS(Meu_Ficheiro);

Page 79: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 69

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

CORRENTE: Integer;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

CORRENTE := Filepos(FICHEIRO);

Writeln(‘Registo actual n.º ’, CORRENTE);

Close(FICHEIRO);

End.

Rotina: FILESIZE()

Função: Retorna quantos registro existem armazenados no ficheiro.

Sintaxe: Tamanho_Ficheiro : = FILESIZE(Meu_Ficheiro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

TOTAL: Integer;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

TOTAL := FileSize(FICHEIRO);

Writeln(‘Total de registos no ficheiro: ’, TOTAL);

Close(FICHEIRO);

End.

Page 80: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 70

Rotina: SEEK()

Função: Posiciona o ponteiro do ficheiro num registro determinado, para que o mesmo possa ser processado.

Sintaxe: SEEK(Meu_Ficheiro, Endereço_Registro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

REG: REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

Seek(FICHEIRO, 10);

Read(FICHEIRO, REG);

Writeln(‘Nome: ’, REG.NOME);

Writeln(‘Idade: ’, REG.IDADE);

Close(FICHEIRO);

End.

Rotina: EOF()

Função: Retorna TRUE caso se alcance o final do ficheiro, FALSE caso contrário.

Sintaxe: Chegou_Final := EOF(Meu_Ficheiro);

Page 81: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 71

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String;

IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

REG: REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Reset(FICHEIRO);

While not eof(FICHEIRO) do

Begin

Read(FICHEIRO, REG);

Writeln(‘Nome: ’, REG.NOME);

Writeln(‘Idade: ’, REG.IDADE);

End;

Close(FICHEIRO);

End.

Rotina: ERASE()

Função: Elimina o ficheiro do disco. É importante notar que o ficheiro a ser eliminado não pode estar aberto.

Sintaxe: ERASE(Meu_Ficheiro);

Exemplo: Program Teste;

Type

REGISTRO = Record

NOME: String; IDADE: Byte;

End;

Var

FICHEIRO: File of REGISTRO;

Begin

Assign(FICHEIRO, ‘Dados.Dat’);

Erase(FICHEIRO);

End.

Page 82: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 72

Ficheiros TEXT

Um ficheiro do tipo TEXT, também conhecido por arquivo sequencial, é um tipo

especial de ficheiro que, ao contrário do ficheiro FILE, pode ser editado normalmente

através de um editor de textos qualquer. Ele é dito sequencial porque a leitura tem

que ser feita sequencialmente do início ao fim do ficheiro, não podendo desta forma,

como é feito no arquivo FILE através do comando SEEK, posicionar de forma

directa, o ponteiro de ficheiro em um registro em particular.

Sintaxe: <Nome da variável>: TEXT

O programa seguinte define uma variável como sendo um ficheiro do tipo TEXT: Program Exemplo;

Var

MINHA_VARIAVEL: Text;

Begin

End.

Nos ficheiros do tipo TEXT (STRING), as informações nele armazenadas são

todas texto, mesmo assim, é possível escrever no arquivo informações de qualquer

tipo de dado simples (INTEGER, REAL, BYTE, etc.) as quais, ao serem fisicamente

armazenadas no ficheiro, serão automaticamente convertidas do seu tipo original

para o tipo STRING. A leitura se processa de forma inversa, ou seja, quando é lida

uma informação num ficheiro TEXT, a mesma será automaticamente convertida

para o tipo da variável que irá armazenar a informação, isto é, do tipo STRING para

o tipo da variável receptora da informação lida.

Tratamento de Ficheiros TEXT

Existem uma grande quantidade de subrotinas construídas especialmente para

manipular ficheiros TEXT, algumas das quais já foram vistas. Vamos mostrar as

principais.

Page 83: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 73

Rotina: ASSIGN()

Função: Serve para associar um determinado nome de ficheiro, no disco ou disquete com o ficheiro definido pelo programador.

Sintaxe: ASSIGN(Meu_Ficheiro, STRING_Com_Nome_Ficheiro_DOS);

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

End.

Rotina: REWRITE()

Função: Crie e abre um ficheiro no formato Write-Only (somente para escrita). Caso o ficheiro não exista, este será criado. Caso já exista, todos os dados existentes nele serão apagados.

Sintaxe: REWRITE(Meu_Ficheiro);

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Rewrite(FICHEIRO);

End.

Rotina: RESET()

Função: Abre um ficheiro que já existe, mas no formato Read-Only (somente para leitura). Caso o ficheiro não exista ocorrerá um erro de execução e o programa será abortado.

Sintaxe: RESET(Meu_Ficheiro);

Page 84: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 74

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Reset(FICHEIRO);

End.

Rotina: APPEND()

Função: Abre um ficheiro para inclusão de novas informações do tipo Write-Only (somente para escrita). Caso o ficheiro não exista ocorrerá um erro de execução e o programa será abortado. É importante notar que as inclusões se processam sempre no final do ficheiro.

Sintaxe: APPEND(Meu_Ficheiro);

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Append(FICHEIRO);

End.

Rotina: CLOSE()

Função: Fecha um ficheiro que tenha sido aberto com Reset, Rewrite ou Append.

Sintaxe: CLOSE(Meu_Ficheiro);

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Rewrite(FICHEIRO);

Close(FICHEIRO);

End.

Page 85: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 75

Rotina: WRITE() ou WRITELN()

Função: A rotina WRITE ou WRITELN têm a mesma função de saída de informações até agora estudado, invés da informação ser apresentada no ecrã, a mesma será armazenada no ficheiro. Ao ser usado o comando WRITE, todas as informações serão escritas no ficheiro na mesma linha, como acontece quando se usa este comando para escrever no ecrã. Por outro lado, ao ser usado o comando WRITELN, todas as informações serão colocadas uma em cada linha, como acontece quando se usa este comando para escrever informações no ecrã.

Sintaxe: WRITE(Meu_Ficheiro, Registro); ou WRITELN(Meu_Ficheiro, Registro);

Exemplo: Program Teste;

Var

FICHEIRO: File of REGISTRO;

NOME: String[30];

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Rewrite(FICHEIRO);

Write(‘Digite o Nome: ’);

Readln(NOME);

Writeln(FICHEIRO, ‘Nome do aluno:’);

Writeln(FICHEIRO, NOME);

Close(FICHEIRO);

End.

Rotina: READ() ou READLN()

Função: A rotina READ ou EADLN têm a mesma função de entrada de informações até agora estudado, invés da leitura ser feita pelo teclado, a mesma será feita de um ficheiro. Ao ser usado o comando READ, a leitura será feita sempre na mesma linha, como acontece quando se usa este comando para ler informações pelo teclado. Por outro lado, ao ser usado o comando READLN, as leituras serão feitas linha a linha, como acontece quando se usa este comando para leitura pelo teclado.

Sintaxe: READ(Meu_Ficheiro, Registro); ou READLN(Meu_Ficheiro, Registro);

Page 86: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 76

Exemplo: Program Teste;

Var

FICHEIRO: Text;

IDADE: Byte;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Reset(FICHEIRO);

Readln(FICHEIRO, IDADE);

Writeln(‘Idade: ’, IDADE);

Close(FICHEIRO);

End.

Rotina: EOF()

Função: Retorna TRUE caso se alcance o final do ficheiro, FALSE caso contrário.

Sintaxe: Chegou_Final := EOF(Meu_Ficheiro);

Exemplo: Program Teste;

Var

FICHEIRO: Text;

CH: Char;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Reset(FICHEIRO);

While not eof(FICHEIRO) do

Begin

Read(FICHEIRO, CH);

Write(CH);

End;

Close(FICHEIRO);

End.

Rotina: ERASE()

Função: Elimina o ficheiro do disco. É importante notar que o ficheiro a ser eliminado não pode estar aberto.

Sintaxe: ERASE(Meu_Ficheiro);

Page 87: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 77

Exemplo: Program Teste;

Var

FICHEIRO: Text;

Begin

Assign(FICHEIRO, ‘Dados.txt’);

Erase(FICHEIRO);

End.

Exercícios Sobre Ficheiros

1. Crie um ficheiro FILE formado por números inteiro de 1 a 10000. Faça a

leitura do ficheiro e escreva no ecrã somente os números ímpares.

2. Crie um ficheiro com Nome e salário de n funcionários e armazene estas

informações num ficheiro FILE.

3. Faça a leitura do ficheiro anterior e escreva no ecrã o nome e o salário dos

funcionários que ganham mais de 100 000$00.

4. Abra o ficheiro anterior e aumente em 15% o salário de todos os funcionários

que ganham menos de 100 000$00.

5. Ordene crescentemente pelo nome do funcionário o ficheiro anterior.

6. Abra o ficheiro anterior e escreva o seu conteúdo de trás para frente, ou seja,

do último registro até o primeiro. Utilize os comandos SEEK, FILEPOS e

FILESIZE.

7. Crie um ficheiro com nome e salário de n funcionários e armazene estas

informações num ficheiro TEXT. Faça a leitura do ficheiro e escreva no ecrã

o nome e salário dos funcionários que ganham mais que 100 000$00.

Page 88: ESCOLA SECUNDÁRIA DE EMÍDIO AVARROeteit.cuattrin.com.br/disciplinas/201201/201201MD/XX - Técnicas de... · A disciplina Técnicas de Linguagens de Programação insere-se no curriculum

_____________________________________________________________ Estruturas de Decisão

Prof. Carlos Almeida 78

8. Envie os dados do ficheiro anterior para a impressora. Para isso, use USES

PRINTER e o comando WRITE(LST, TEXTO) ou WRITELN(LST, TEXTO),

onde TEXTO é o texto a enviar para a impressora.