Вы находитесь на странице: 1из 88

ESCOLA SECUNDRIA DE EMDIO NAVARRO

TCNICAS DE LINGUAGENS
DE PROGRAMAO
10 ANO

2000 - Prof. Carlos Almeida 1 Verso

ANO LECTIVO 2000/2001

_______________________________________________________________ Notas do Professor

Nota Introdutria
O objectivo destes apontamentos no substituir as aulas, como tal, a exposio de qualquer matria no realizada de modo detalhado. Ser necessrio consultar entre outra bibliografia a bibliografia geral da disciplina e alguns manuais de aplicao. O aluno tambm deve procurar uma actualizao permanente, criando o hbito de consultar publicaes tcnicas, investigar novos conceitos e discutir sobre eles.

A disciplina Tcnicas de Linguagens de Programao insere-se no curriculum do Curso Tecnolgico de Informtica no 10 e 11 anos, com a carga horria de 4 tempos lectivos, distribudos, por duas aulas de 2 tempos cada. A disciplina Tcnicas de Linguagens de Programao do 10 Ano pretende desenvolver no aluno um raciocnio lgico, que lhe possibilite a escrita de programas informticos estruturados, documentados, modulares e eficientes. O aluno no deve ficar limitado pelas caractersticas ou potencialidades de uma linguagem de programao. Facto pelo qual se enfatiza, numa primeira fase, a resoluo de problemas baseado na escrita de algoritmos com passos rigorosos e sistemticos. A aprendizagem da linguagem de programao Pascal, vem completar esta formao, pelo que se deve executar programas de processamento variado, dando assim a possibilidade a que os alunos, nos anos posteriores, estejam aptos a resolver situaes complexas que exigem maior abstraco e para as quais se estabelecem exigncias de qualidade total. fundamental, a aprendizagem correcta da construo de algoritmos e o domnio da tcnica TOP-DOWN, em detrimento dos fluxogramas, como ferramenta de anlise de um enunciado e sua converso em forma de algoritmos. Pretende-se que o fluxograma no seja usado como forma de raciocnio, mas como documentao do programa ou algoritmo, sendo, portanto, uma explicao complementar da soluo encontrada.

Prof. Carlos Almeida

ii

_______________________________________________________________ Notas do Professor

Sistema de Avaliao
A avaliao da disciplina contnua. Para cada Unidade Temtica indicam-se critrios e tcnicas de avaliao concretas, e que variam entre a realizao de testes escritos, trabalhos de grupo e provas prticas individuais realizadas no computador.

O professor da disciplina de Tcnicas de Linguagens de Programao do 10 Ano, Carlos Almeida, estabeleceu os seguintes critrios de avaliao para o ano lectivo de 2000/2001:
COMPONENTE PRTICA 30% Trabalhos de grupo Provas prticas Individuais realizadas no computador COMPONENTE TERICA 40% Testes escritos Fichas de trabalho ATITUDES DO ALUNO 30% Destreza com o equipamento Capacidade de organizao e metodologia de trabalho Concentrao e qualidade no trabalho Relacionamento em grupo Assiduidade e pontualidade 5% 5% 5% 10% 5% 30% 10% 20% 10%

Prof. Carlos Almeida

iii

_______________________________________________________________ Notas do Professor

Elenco Temtico
Nesta disciplina deve ser dada uma grande nfase construo de algoritmos, usando as metodologias top-down, pseudocdigo e fluxogramas. A linguagem de programao Pascal , a indicada para se usar na iniciao programao. O Pascal deve manter-se como ponto de partida no estudo de algoritmia. Pretende-se desenvolver no aluno um raciocnio lgico, que lhe possibilite a escrita de programas estruturados.
UNIDADE 1 Lgica de Programao 1.1. Anlise e desenho de um algoritmo. 1.2. Tipos de dados. 1.3. Operaes elementares. 1.4. Prioridade de operadores. 1.5. Variveis e expresses. 1.6. Traagem de algoritmos. 1.7. Fluxogramas. 1.8. Pseudocdigo. UNIDADE 2 Estrutura de deciso 1.1. Estrutura Sequencial. 1.2. Estrutura Condicional. 1.3. Estrutura de Repetio. 1.4. Algoritmos de aplicao. UNIDADE 3. Estrutura de Dados 1.1. Vectores. 1.2. Matrizes. 1.3. Cadeia de caracteres. 1.4. Ficheiros. 1.5. Algoritmos de aplicao. UNIDADE 4. Subalgoritmos 1.1. Estruturao de programas. 1.2. Funes. 1.3. Procedimentos.

Prof. Carlos Almeida

iv

_______________________________________________________________ Notas do Professor

UNIDADE 5.

Programao em Pascal 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. Ambiente de trabalho. Caractersticas da linguagem Pascal. Estrutura do programa e comentrios. Compilao para a memria e disco. Estruturas de controlo. Estruturas de dados.

1.10. Funes e Procedimentos. 1.11. Debugger. 1.12. Caractersticas grficas. 1.13. Uso de ficheiros em Pascal. 1.14. Programas de aplicao. 1.15. Programas em memria residente.

Prof. Carlos Almeida

______________________________________________________________________ Bibliografia

Bibliografia
Apontamentos do professor. AZUL, Artur Augusto (1998) - Tcnicas e Linguagens de Programao 10 Ano, Porto Editora (Livro adoptado pela disciplina). LIMA, Jorge Reis (1991) - Programao de Computadores, Porto Editora. LOPES, Jorge (1989) - Tcnicas da Programao, Editorial O Livro Manual fornecido com o software (PASCAL). O'BRIEN, Stephen K. - Turbo Pascal 6: The Complete Reference, Borland, Osborne/McGraw-Hill. Pascal, Tcnicas de Programao, Lidel. TREMBLAY, Jean-Paul; BUNT, Richard B. (1981) - Cincia dos computadores uma abordagem algortmica, McGraw-Hill. Turbo Pascal 5.0/5.5, Lidel.

Prof. Carlos Almeida

vi

__________________________________________________________________ Agradecimentos

Apoios e agradecimentos
Paulo Srgio de Moraes (2000) Osmar de Oliveira Braz Jnior (1998) Alexandre Alcobia (1998)

Prof. Carlos Almeida

vii

___________________________________________________________________________ndice

ndice
NOTA INTRODUTRIA SISTEMA DE AVALIAO ELENCO TEMTICO BIBLIOGRAFIA APOIOS E AGRADECIMENTOS NDICE LGICA DE PROGRAMAO 1. LGICA 2. SEQUNCIA LGICA 3. INSTRUES 4. ALGORITMO REGRAS PARA CONSTRUO DO ALGORITMO FASES DE UM ALGORITMO TESTE DO ALGORITMO 5. PROGRAMAS EXERCCIOS 6. ABORDAGEM ESTRUTURADA E CONCEPO TOP-DOWN ABORDAGEM ESTRUTURADA CONCEPO TOP-DOWN 7. PSEUDOCDIGO ATRIBUIO LEITURA E ESCRITA DE DADOS CABEALHO DECLARAES CORPO DO ALGORITMO COMENTRIOS 8. FLUXOGRAMAS SIMBOLOGIA
II III IV VI VII VIII

1 1 1 1 2 3 4 5 5 7 8 8 8 8 10 10 11 11 11 11 12 12

Prof. Carlos Almeida

viii

_______________________________________________________________ Notas do Professor

9. CONSTANTES, VARIVEIS E TIPOS DE DADOS IDENTIFICADORES CONSTANTES VARIVEIS TIPOS DE DADOS EXERCCIOS 10. OPERADORES OPERADORES ARITMTICOS HIERARQUIA DAS OPERAES ARITMTICAS OPERADORES DE COMPARAO OU RELACIONAIS OPERADORES LGICOS 11. INSTRUES SIMPLES INSTRUES DE ESCRITA INSTRUES DE LEITURA INSTRUES DE ATRIBUIO EXERCCIOS ESTRUTURAS DE DECISO 1. ESTRUTURAS FUNDAMENTAIS DE PROGRAMAO 2. ESTRUTURA DE DECISO CONDICIONAL - "SE" EXEMPLO PRTICO EXERCCIOS 3. ESTRUTURA DE DECISO DE ESCOLHA MLTIPLA - "CASO" EXEMPLO PRTICO EXERCCIOS 4. ESTRUTURAS DE REPETIO OU CICLOS 5. ESTRUTURA DE REPETIO - "PARA... FAZER" 6. ESTRUTURA DE REPETIO - "ENQUANTO... FAZER" EXERCCIOS 7. ESTRUTURA DE REPETIO - "REPETIR ... AT" 8. EXEMPLO PRTICO NMERO PRIMO ANLISE DO ALGORITMO

14 15 16 16 17 19 21 21 22 22 23 24 24 25 25 26 28 28 28 31 32 33 34 36 36 37 38 39 39 41 42

Prof. Carlos Almeida

ix

_______________________________________________________________ Notas do Professor

MELHORIA DO ALGORITMO 9. EXERCCIOS ESTRUTURA DE DADOS 1. ESTRUTURA DE DADOS 2. VECTORES EXERCCIOS SOBRE VECTORES 3. ORDENAO DE UM VECTOR 4. MATRIZES EXERCCIOS SOBRE MATRIZES 5. REGISTOS EXERCCIOS SOBRES REGISTOS 6. FICHEIROS FICHEIROS DO TIPO TEXTO FICHEIROS DO TIPO BINRIO SUPORTES FSICOS DE FICHEIROS OPERAES COM FICHEIROS 7. MANIPULAO DE FICHEIROS EM PASCAL FICHEIROS FILE TRATAMENTO DE FICHEIROS FILE FICHEIROS TEXT TRATAMENTO DE FICHEIROS TEXT EXERCCIOS SOBRE FICHEIROS

45 48 49 49 51 52 53 55 56 57 59 60 61 61 62 63 63 64 65 72 72 77

Prof. Carlos Almeida

1
LGICA DE PROGRAMAO

1.16. Objectivos Iniciar o aluno nos conceitos da programao estruturada. Decompor um problema nas suas partes elementares atravs da tcnica TOP-DOWN. Traduzir expresses matemticas para computao e vice-versa. Realizar algoritmos simples. Verificar a eficincia dos algoritmos atravs da tcnica de traagem.

1.

Lgica

A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a sequncia lgica para o desenvolvimento.

Lgica de programao a tcnica de encadear pensamentos para atingir determinado objectivo.

2.

Sequncia Lgica

Estes pensamentos, podem ser descritos como uma sequncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa.

Sequncia Lgica so passos executados at atingir um objectivo ou soluo de um problema.

3.

Instrues

Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma aco elementar a executar.

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem sequencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc. evidente que essas instrues tem que ser executadas em uma ordem adequada no se pode descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correcta.

Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma aco elementar a executar.

4.

Algoritmo

Antes de utilizarmos uma linguagem de computador, necessrio organizar as aces a serem tomadas pela mquina de forma organizada e lgica, sem nos atermos as regras rgidas da sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais aces, conhecida como algoritmo.

Algoritmo consiste em um conjunto lgico e finito de aces (instrues) que resolvem um determinado problema. Algoritmo uma sequncia lgica de instrues que podem ser executadas.

Um algoritmo formalmente uma sequncia finita de instrues que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequncia de instrues que do cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjectivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtraco) de nmeros reais decimais.

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

Outros exemplos seriam os manuais de aparelhos electrnicos, como um vdeo, que explicam passo-a-passo como, por exemplo, gravar um filme. At mesmo as coisas mais simples, podem ser descritas por sequncias lgicas. Por exemplo:
Chupar um rebuado: 1. Pegar no rebuado 2. Retirar o papel 3. Chupar o rebuado 4. Deitar o papel no lixo

Somar dois nmeros: 1. Escrever o primeiro nmero 2. Escrever o segundo nmero 3. Somar o primeiro nmero com o segundo nmero 4. Devolver o resultado

Se analisarmos os diversos algoritmos, verificamos que contm caractersticas comuns. So elas: descrio sequencial (ordenada), cada passo corresponde a uma aco elementar clara, no devendo ocasionar ambiguidade na sua interpretao; tem um nmero finito de passos.

Algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitas.

Aprender algoritmos no se consegue a no ser atravs de muitos exerccios. Algoritmos no se aprende: Copiando Algoritmos Estudando Algoritmos Algoritmos s se aprendem: Construindo Algoritmos Testando Algoritmos

Regras para construo do Algoritmo Para escrever um algoritmo precisamos descrever a sequncia de instrues, de maneira simples e objectiva. Para isso utilizaremos algumas tcnicas: usar somente um verbo por frase;

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

imaginar que se est a desenvolver um algoritmo para pessoas que no trabalham com informtica; usar frases curtas e simples; ser objectivo; procurar usar palavras que no tenham sentido duvidoso.

Fases de um Algoritmo importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo como fazer arroz doce ou ento calcular o saldo financeiro de um stock. Entretanto ao construir um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais: ENTRADA: So os dados de entrada do algoritmo. PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final. SADA: So os dados j processados.

ENTRADA

PROCESSAMENTO

SADA

Imagine o seguinte problema: Calcular a mdia final dos alunos. Os alunos realizaro 3 provas: P1, P2 e P3. Onde:

MdiaFinal =

P1 + P 2 + P3 3

Para montar o algoritmo proposto, faremos trs perguntas: a) Quais so os dados de entrada? R: Os dados de entrada so 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 sero os dados de sada? R: O dado de sada ser a mdia final

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

O algoritmo seria: Algoritmo Calcular Mdia 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 diviso

Teste do Algoritmo Aps desenvolver um algoritmo ele dever sempre ser testado. Deve-se seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correcto ou no. No exemplo do algoritmo anterior, para calcular a mdia final do aluno, podia-se utilizar a seguinte tabela para o teste: P1 P2 P3 MdiaFinal

Explique o que entende por algoritmo.

5.

Programas

Programar consiste em elaborar um conjunto finito de instrues, reconhecidas pela mquina, de forma que o computador execute estas instrues. Estas instrues possuem regras e uma sintaxe prpria, como uma linguagem tipo portugus ou ingls, sendo isto chamadas de linguagem de programao. No mundo computacional existe uma grande variedade de linguagens: Pascal, C, C++, Visual Basic, Cobol, Fortran, etc. Ns iremos enfocar uma delas, o Pascal.

Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de programao (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfico e rgido em relao aos algoritmos da vida real.

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

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, ento, passar para a sua implementao numa linguagem de programao e assim testar o programa no computador. Concluindo, a construo de um programa comporta duas fases fundamentais:

fase de resoluo do problema - consiste na formulao do algoritmo eficaz para a resoluo do problema posto; fase de implementao - consiste na traduo do algoritmo para a linguagem de programao escolhida.

Como exemplo, apresentado o algoritmo e sua traduo em linguagem Pascal, do clculo do mltiplo de um nmero.
Algoritmo do clculo dos mltiplos de um nmero: 1. Anotar o limite dos mltiplos (limite) 2. Anotar o nmero do qual se quer saber os mltiplos (nmero) 3. O primeiro mltiplo o prprio nmero (mltiplo = nmero) 4. Enquanto o mltiplo for menor que o limite indicado fazer: 4.1. Anotar o mltiplo 4.2. O novo mltiplo ser igual ao mltiplo anterior mais o nmero (mltiplo = mltiplo + nmero) 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 mltiplos? ); readln (Numero); write (Qual o limite da sequncia? ); readln (Limite); writeln (Os mltiplos de ,Numero, so: ); Multiplo := Numero;

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

while Multiplo < Limite do begin writeln (Multiplo); Multiplo := Multiplo + Numero; end; end.

Exerccios
Construa o algoritmo para calcular a rea de um rectngulo.
Algoritmo rea do rectngulo 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

Faa um algoritmo para somar dois nmeros e multiplicar o resultado pelo primeiro nmero.

Crie uma sequncia lgica para tomar banho.

Descreva com detalhes a sequncia lgica para trocar um pneu de um carro.

Faa um algoritmo detalhado para trocar uma lmpada.

Algoritmo do calculo da hipotenusa de um tringulo rectngulo.


Temos que saber a frmula: hipot

= cateto12 + cateto2 2

Alm da frmula, temos que dar ao computador os valores dos catetos do tringulo.

Construa um algoritmo que transforme os valores da temperatura em graus Fahrenheit para graus Clsius.
Tente resolver este problema, sabendo que a frmula a aplicar ser:

celsius =

5 ( fahr 32) 9

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

Identifique os dados de entrada, processamento e sada no algoritmo seguinte:


1. Receber cdigo da pea 2. Receber valor da pea 3. Receber Quantidade de peas 4. Calcular o valor total da pea (Quantidade * Valor da pea) 5. Mostrar o cdigo da pea e seu valor total

Faa um algoritmo para Calcular o stock mdio de uma pea, sabendo que STOCK_MDIO = (QUANTIDADE_MNIMA + QUANTIDADE_MXIMA) /2

Teste o algoritmo anterior com dados sua escolha.

6.

Abordagem Estruturada e Concepo Top-Down

Abordagem Estruturada Numa linguagem estruturada como por ex. o Pascal distingue-se a parte onde so declarados os dados e o corpo com as instrues do programa parte declarativa e parte operativa.

Abordagem estruturada uma abordagem sistemtica da construo de software que usa princpios como a separao das definies de dados e de programa, concepo descendente (designado por abordagem top-down) e refinamento progressivo.

Concepo Top-Down A abordagem top-down procura identificar os pontos essenciais da questo; parte-se dos pontos mais gerais para os seus componentes mais particulares, em nveis sucessivos mais concretos, at ao nvel de pormenor desejado.

7.

Pseudocdigo

Por pseudocdigo entende-se um cdigo de escrita em que se utilizam representaes simblicas para indicar as instrues do algoritmo. Essas

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

representaes simblicas so, usualmente, um misto de palavras da nossa linguagem natural com termos e notaes tpicas de uma linguagem de programao. O uso da escrita em pseudocdigo presta-se a uma aproximao sucessiva verso do algoritmo na linguagem utilizada, ou seja, pode-se ir progredindo por fases, revendo o pseudocdigo e substituindo-o progressivamente por terminologia prpria da linguagem de programao. No 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 alcanar, por imprecises, deficiente formulao algortmica, vcios de raciocnio, etc.

O pseudocdigo pode ser visto como a tentativa de fundir a expressividade da linguagem natural e o rigor lgico de esquemas como o fluxograma. O pseudocdigo permite a descrio do algoritmo de uma forma linear, fcil de ler e fcil de compreender.

Os algoritmos tero a seguinte estrutura:


Algoritmo <Nome do algoritmo> <Definies/Declaraes de Variveis e Constantes> Incio <Instrues> Fim

Por curiosidade, em Pascal ficaria da seguinte forma:


PROGRAM <Nome do programa>; <Definies/Declaraes de Variveis e Constantes>; BEGIN <Instrues>; END.

O algoritmo, em pseudocdigo, deve estar enquadrado entre dois indicadores que possibilitem determinar onde o algoritmo comea e acaba. Assim, aparecem as instrues Incio e Fim.

Prof. Carlos Almeida

____________________________________________________________Lgica de Programao

Atribuio Esta operao tem por objectivo atribuir um valor a uma varivel. A varivel funciona como um recipiente em que vo ser colocados dados. Temos de criar tantas variveis (recipientes) quantas as forem necessrias para o correcto funcionamento do algoritmo. A operao de atribuio coloca o dado na varivel. Exemplo: X B/A (na varivel X colocado o valor de B/A)

Leitura e Escrita de Dados A instruo Escrever utilizada para apresentar os dados ao utilizador. Exemplo: Escrever(O valor da rea : , rea)

A instruo Ler utilizada para introduzir dados no computador atravs do operador. Estes dados so afectados a variveis. Exemplo: Ler(A, B)

Vejamos um exemplo em pseudocdigo do algoritmo da circunferncia e vamos descrever a sua apresentao:


Algoritmo circunferncia [Este algoritmo d as caractersticas de uma circunferncia] Dados RAIO: Inteiro REA, PERMETRO: Reais PI Incio Ler (RAIO) REA PI x RAIO2 2 x PI x RAIO 3,14159

PERMETRO

Escrever (REA, PERMETRO) Fim

Num algoritmo, podemos definir trs seces:

Cabealho Declaraes Corpo do algoritmo

Prof. Carlos Almeida

10

____________________________________________________________Lgica de Programao

Cabealho O cabealho a seco onde dado o nome ao algoritmo. Comea com a palavra Algoritmo.

Declaraes Nesta, apresentada a descrio das variveis e constantes usadas.

Corpo do algoritmo Esta seco contm a sequncia das instrues (aces) do algoritmo. Inicia-se com a palavra Incio e termina com a palavra Fim.

Comentrios Existe um tipo de objecto de grande importncia na clarificao de um algoritmo. So os comentrios que ajudam muito sua compreenso. Cada passo do algoritmo pode iniciar com um comentrio entre dois parnteses rectos. Estes comentrios do uma breve descrio da instruo ou de um conjunto de instrues seguintes.

Os comentrios so uma parte importante do algoritmo. Eles servem para tornar a leitura, do algoritmo, mais fcil e clara.

Prof. Carlos Almeida

11

____________________________________________________________Lgica de Programao

8.

Fluxogramas

O fluxograma uma forma padronizada e eficaz para representar as instrues lgicas de um determinado processamento. Com o fluxograma podemos definir uma sequncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento. Actualmente, a sua utilizao restringe-se a um apoio complementar na documentao do algoritmo, valendo pela vantagem grfica da apresentao das interligaes.

Simbologia Existem diversos smbolos num fluxograma. Vamos apresentar os mais utilizados.

Vejamos de seguida alguns dos smbolos que iremos utilizar:

Processamento em geral (ex. soma de dois nmeros) Leitura/Escrita de dados (ex. escrever a nota da prova escrita) Incio/Fim de processamento (ex. inicio do algoritmo) Conector de fluxos (ex. Ligao entre partes do fluxograma)

Deciso condicional

Escolha mltipla

Subprograma

Linha de fluxo

Dentro de cada smbolo ter sempre algo escrito, pois caso contrrio no nos dizem nada. Vejamos o seguinte exemplo, na linguagem pseudocdigo e respectivo fluxograma, que faz a comparao de dois nmeros:

Prof. Carlos Almeida

12

____________________________________________________________Lgica de Programao

Pseudocdigo
Algoritmo Comparar Dados VALOR1, VALOR2: Inteiros FRASE: Caracteres Incio Ler (VALOR1, VALOR2) Se VALOR1 > VALOR2 ento FRASE Seno Se VALOR1 < VALOR2 ento FRASE Seno FRASE Valores iguais Valor2 maior Valor1 maior

Fluxograma

Fim se Fim se Escrever (FRASE) Chamar Rotina Adeus

Inicio

Fim

Ler valor1

Ler valor2

Valor1>Valor2

No

Valor2>Valor2

No

Sim Escrever "Valor1 maior"

Sim Escrever "Valor2 maior" Escrever "Valores iguais"

Rotina Adeus

Fim

Prof. Carlos Almeida

13

____________________________________________________________Lgica de Programao

9.

Constantes, Variveis e Tipos de Dados

Considere a frmula simples de matemtica do calculo do volume de uma

4 esfera: V = R 2 . Nesta formula pode-se encontrar: 3


1. Valores que podem ser classificados como: a. valores constantes, invariantes em todas as aplicaes da frmula, no caso dos valores 4, 3 e ; b. valores a serem substitudos na frmula, em cada aplicao; a representao destes valores, usualmente feita atravs de letras, que recebem o nome de variveis e tornam a frmula genrica, possvel de ser aplicada para resolver uma certa classe de problemas e no apenas um problema especfico. 2. Operaes a serem feitas sobre determinados operandos (valores), para a obteno da soluo do problema.

O computador possui uma rea de armazenamento conhecida como memria. Todas as informaes existentes no computador esto ou na memria primria (memria RAM), ou na memria secundria (disco duro, disquete, CD-ROM etc.). A memria do computador pode ser entendida como uma sequncia finita de caixas ou gavetas de um armrio, que num dado momento, guardam algum tipo de informao, como nmero, uma letra, uma palavra, uma frase etc.. O computador, para poder trabalhar como alguma destas informaes, precisa saber onde, na memria, a informao est localizada. Fisicamente, cada caixa, ou cada posio de memria, possui um endereo, ou seja, um nmero, que indica onde cada informao est localizada. este nmero representado atravs da notao hexadecimal, tendo o tamanho de quatro, ou mais bytes.

Variveis e constantes so os elementos bsicos que um programa manipula. Muitos dos dados com que se opera num algoritmo so variveis. Uma varivel um espao reservado na memria do computador para armazenar um tipo de dado determinado.

Prof. Carlos Almeida

14

____________________________________________________________Lgica de Programao

Identificadores As variveis e constantes num algoritmo so designadas por meio de identificadores. Um identificador um nome normalmente atribudo a um elemento com que se pretende trabalhar dentro de um algoritmo. Um identificador formado por uma letra ou ento por uma letra seguida de letras ou dgitos. No permitido o uso de espaos em branco ou de qualquer outro caracter, que no seja letra ou dgito. Se utilizar mais do que uma palavra para compor o nome da varivel utilize o _ underline para separar as palavras. Por conveno, vamos escrever o nome dos identificadores em letras maisculas, para maior legibilidade do algoritmo.

A formao do identificador deve ser um nome significativo, para que se possa ter ideia do seu contedo.

Exemplos, apresentados numa tabela com possveis entidades e os correspondentes identificadores das variveis:
ENTIDADES Nome do cliente Morada dos clientes Data em que foi feita a encomenda IDENTIFICADORES NOME_CLIENTE MORADA DATA

Quando se trata de variveis, um identificador vai traduzir-se em termos de compilao, num endereo de memria, o qual corresponde a um determinado espao nessa mesma memria, onde se vai armazenar um dado - o valor que a dita varivel assume em cada momento. Isto leva-nos a considerar, em programao, que um identificador um endereo simblico, pois que se preferimos, um candidato a endereo de memria.

Um identificador um nome normalmente atribudo pelo algoritmo ou utilizador a um elemento com que se pretende trabalhar dentro de um algoritmo. Em programao, um identificador um endereo simblico, um candidato a endereo de memria.

Prof. Carlos Almeida

15

____________________________________________________________Lgica de Programao

Constantes Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e alfanumricas.

Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa.

Exemplo de declaraes de constantes, em pseudocdigo:


Constantes PI 3,14 30 Sem nome

MAXIMO

POR_DEFEITO

Variveis Varivel a representao simblica dos elementos de um certo conjunto. Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a execuo de um programa. As variveis podem assumir:

um carcter global, quando so declaradas para uso em todo o algoritmo; um carcter local, quando so declaradas apenas para uso dentro do subalgoritmo.

Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante. As variveis s podem armazenar valores de um mesmo tipo, de maneira que tambm so classificadas como sendo numricas, lgicas e alfanumricas.

Uma varivel uma posio de memria, representada por um Identificador, a qual contm, num dado instante, uma informao.

Exemplos de declaraes de variveis em pseudocdigo:

Prof. Carlos Almeida

16

____________________________________________________________Lgica de Programao

Variveis MAXIMO, NUM: Inteiro NOME: Caracteres SAIR: Lgico

Outros exemplos:

Variveis

TOTAL

PRODUTO * QUANTIDADE Varivel Contedo da Varivel

NOME TOTAL

Carlos Almeida 30

Tipos de Dados As variveis e as constantes podem ser basicamente de trs tipos: Numricas (Inteiro ou real), alfanumricas (caracter ou cadeia de caracteres) ou lgicas.

Numricas: Especficas para armazenamento de nmeros, que posteriormente podero ser utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que podem ter partes decimais.

Alfanumricas: Existem actualmente vrios cdigos susceptveis de ser utilizados pelos computadores digitais. Alguns desses cdigos permitem representar, no apenas grandezas numricas, mas tambm caracteres literais e sinais de pontuao. exemplo o cdigo ASCII ("American Standard Code for Information Interchange" leia-se "squi"), usado na transferncia de informao entre um computador e os seus dispositivos perifricos. Trata-se de um cdigo que utiliza combinaes 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 pontuao, parntesis, sinais das operaes aritmticas e de igualdade, e mais uma srie de caracteres de controlo, entre outros smbolos, num total de 256 smbolos.

Prof. Carlos Almeida

17

____________________________________________________________Lgica de Programao

Os cdigos que se destinam a traduzir, no s informao numrica, mas tambm caracteres do alfabeto e sinais convencionais so denominados cdigos alfanumricos. O cdigo ASCII, referido acima, representa o cdigo alfanumrico universalmente aceite. Os dados do tipo caracter (Char em Pascal) correspondem a caracteres individuais. Os caracteres disponveis so 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 nmero inteiro para o correspondente caracter na Tabela ASCII. Por exemplo, a funo CHR, em Pascal. Por sua vez, existe rotinas que d o ordinal de um dado caracter, por exemplo a funo ORD em Pascal. Para facilitar a manipulao de palavras ou mensagens, dentro de um programa, existe outro tipo de dados: Cadeia de caracteres (tambm deignado por: Cadeia Alfanumrica, texto, ou simplesmente caracteres). Estes tipos de dados so mais adequados ao manuseamento de texto, nas instrues de leitura, escrita e atribuio. Em Pascal este tipo de dados representado pelo tipo de varivel: String. Numa atribuio de um valor a uma varivel 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 informao caracter ou cadeia de caracteres.

Lgicas: Os dados do tipo lgico, so dados que podem assumir apenas dois valores possveis: verdadeiro e falso. A sua utilidade reside, fundamentalmente, ao nvel do seu emprego em estruturas de controlo.

As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que podem ter partes decimais. Os dados do tipo caracter correspondem a caracteres individuais. Os caracteres disponveis so geralmente os caracteres da Tabela ASCII. Existe tipos de dados mais adequados ao manuseamento de texto, nas instrues de leitura, escrita e atribuio. Este tipo de dados representado pelo tipo de varivel: Caracteres. Os dados do tipo lgico, so dados que podem assumir apenas dois valores possveis: verdadeiro e falso.

Prof. Carlos Almeida

18

____________________________________________________________Lgica de Programao

O que uma constante? D dois exemplos. O que uma varivel? D dois exemplos.

O Pascal exige que no momento da declarao das variveis, se define o tipo de informao que uma varivel pode conter, isto , se uma dada posio de memria armazenar um nmero ou uma letra etc. Para isto, a linguagem Pascal possui definido alguns tipos de dados para a declarao de variveis. Alguns destes tipos de dados 0so representados na seguinte tabela:

Pseudocdigo Inteiro Real Caracter Caracteres Lgico

Pascal Integer Real Char String Bolean Word Byte Shor Int LongInt Single Double

Descrio Representa nmeros entre -32768 at +32767. ocupa 2 bytes na memria. Representa os nmeros entre 2.9 x 10-39 at 1.7 x 1038. Ocupa 6 bytes na memria. Representa um dos caracteres, da tabela ASCII. Ocupa 1 byte na memria. Conjunto de caracteres (Char). Ocupa de 1 a 255 bytes na memria. Valor lgico. Assuma somente dois valores: TRUE (Verdade) ou FALSE (Falso). ocupa 1 byte na memria. Nmeros de 0 at 65535. Ocupa 2 bytes na memria. Nmeros de 0 at 255. Ocupa 1 byte na memria. Representa os nmeros entre -128 at 128. Ocupa 1 bytes na memria. Representa os nmeros entre -2147483648 at 2147483648. Ocupa 4 bytes na memria. Representa os nmeros entre 1.5 x 10-45 at 3.4 x 1038. Ocupa 4 bytes na memria. Representa os nmeros entre 5 x 10-324 at 1.7 x 10308. Ocupa 8 bytes na memria.

Exerccios
1. Explicite a diferena entre uma constante e uma varivel, no contexto de um programa.

Descreva resumidamente o que se passa ao nvel dos identificadores de variveis, quando um programa entra em execuo e esses identificadores so tratados internamente pelo computador.

Prof. Carlos Almeida

19

____________________________________________________________Lgica de Programao

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 Questo

Elabore um Algoritmo para atribuir a variveis as seguintes informaes: l) 12345 m) 123456 n) -1122 o) 10,45 p) VERDADE q) c r) Amor

Qual a diferena existente nas seguintes atribuies? s) Letra Nome t) Letra Nome A Joo A Joo

correcto definir uma varivel como sendo Carcter e atribuirmos a ela o valor: PEDRO? E se a varivel fosse definida como Caracteres (cadeia de caracteres), a mesma poderia receber um valor do tipo Caracter?

Prof. Carlos Almeida

20

____________________________________________________________Lgica de Programao

No seguinte Algoritmo existe algum erro? Onde?


Algoritmo Teste Variveis MARIA: Caracteres IDADE: Inteiro LETRA: Caracter MARIA: Real

Inicio IDADE IDADE IDADE LETRA LETRA LETRA LETRA IDADE Fim 23 678 LETRA 300 abc A 22 IDADE_ALUNO

10. Operadores
Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos trs tipos de operadores:

Operadores Aritmticos Operadores Relacionais Operadores Lgicos

Operadores Aritmticos Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtraco, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os operadores aritmticos utilizam-se normalmente com dois operandos. No entanto, os operadores + e - tambm podem ser usados com um s operando, caso em que significam: o sinal positivo ou o sinal negativo atribudo ao operando.

Prof. Carlos Almeida

21

____________________________________________________________Lgica de Programao

Os smbolos para os operadores aritmticos so:


OPERADORES ARITMTICOS DESIGNAO OPERADOR + Adio Subtraco * Multiplicao / Diviso MOD Resto da diviso (Resto) DIV Diviso inteira (Quociente) ^ potenciao

Hierarquia das Operaes Aritmticas A hierarquia das operaes aritmticas so: 1. ( ) parnteses 2. ^ exponenciao 3. * ou / multiplicao ou diviso (o que aparecer primeiro) 4. + ou soma ou subtraco (o que aparecer primeiro)

Exemplo:
1 + 7 * 2 ^ 2 1 = 28 3 * (1 2) + 4 * 2 = 5

Operadores de Comparao ou Relacionais Os operandos empregues com os operadores de comparao devem ser de tipos compatveis entre si. Os resultados que devolvem so sempre do tipo valor lgico, ou seja, verdadeiro ou falso. Estes operadores podem ser usados com quaisquer tipos de ordinais, com reais e alfanumricos. Para estabelecer prioridades no que diz respeito a qual operao executar primeiro, utiliza-se os parnteses.

Os operadores relacionais so:


Operadores de Comparao Designao Operador = igual a diferente de ou <> > maior que < menor que maior ou igual a ou >= menor ou igual a ou <=

Prof. Carlos Almeida

22

____________________________________________________________Lgica de Programao

Exemplo:
Tendo duas variveis A = 5 e B = 3 Os resultados das expresses seriam: Expresso A = B A <> B A > B A < B A >= B A <= B Resultado Falso Verdadeiro Verdadeiro Falso Verdadeiro Falso

Operadores Lgicos Os operadores de valores lgicos operam normalmente com operandos do tipo valor lgico e devolvem resultados desse mesmo tipo, ou seja, o resultado final verdadeiro ou falso. Tambm so utilizados com muita frequncia, tal como os operadores relacionais, em estruturas de deciso e no controlo de ciclos de repetio.

Os operadores lgicos servem para combinar resultados de expresses, retornando se o resultado final verdadeiro ou falso.

Os operadores lgicos so:


Operadores de Valore Lgico Designao Operador NO Negao E Conjuno OU Disjuno XOR Disjuno Inversa

Uma expresso E (AND) verdadeira se todas as condies forem verdadeiras. O resultado da expresso E falsa se pelo menos uma condio for falsa. Uma expresso OU (OR) verdadeira se pelo menos uma condio for verdadeira. O resultado da expresso OU falsa se todas as condies forem falsas. Um expresso NO (NOT) inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa.

A tabela abaixo mostra todos os valores possveis criados pelos quatro operadores lgicos:

Prof. Carlos Almeida

23

____________________________________________________________Lgica de Programao

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

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

Operador NOT NOT TRUE NOT FALSE FALSE TRUE TRUE TRUE FALSE FALSE

Operador XOR XOR TRUE XOR FALSE XOR TRUE XOR FALSE FALSE TRUE TRUE FALSE

Exemplos: Suponha que temos trs variveis A=5, B=8 e C=1. Os resultados das expresses seriam:
Expresses A=B AND B>C A<>B OR B<C NOT A>B A<B AND B>C A>=B OR B=C NOT A<=B Resultado FALSO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO

11. Instrues Simples


Instrues de Escrita As instrues de escrita so aquelas que servem para enviar dados (mensagens, valores de variveis, etc.) para um dispositivo de sada ou perifrico de "output". Como se sabe, o dispositivo de sada mais comum no trabalho com um computador o monitor de vdeo ou ecr; no entanto, o envio de dados para a impressora ou para um ficheiro em disco ou disquete tambm so tarefas normais e, por vezes, mesmo imprescindveis. Exemplos das instrues de escrita, mais usuais, em pseudocdigo:
[Imprimir a mensagem] Escrever(No existe quarto vago do tipo escolhido.')

Prof. Carlos Almeida

24

____________________________________________________________Lgica de Programao

[Imprimir a percentagem] Escrever(A percentagem de alunos com nota superior media , PERC, %)

Instrues de Leitura Tal como a sada de dados do computador para um perifrico essencial, tambm a entrada de dados o . Os principais dispositivos que permitem a leitura, entrada ou "input" de dados num sistema informtico so, como se sabe, em primeiro lugar, o teclado, em segundo, os dispositivos de armazenamento secundrio, ou seja os discos e disquetes, e ainda mais alguns outros, como o rato, etc.

Exemplo de uma instruo de escrita em pseudocdigo:


[Ler a remunerao mensal] Ler(REMUNERAO)

[Ler as variveis X e Y ] Ler(X, Y)

Instrues de Atribuio Muitos dos dados com que se opera num algoritmo so variveis. As variveis e constantes num algoritmo so designadas, como foi dito anteriormente, por meio de identificadores. Quando declaramos uma varivel natural atribuirmos a ela um valor ou uma informao. Uma das formas de atribuir ou alterar um valor a uma varivel, atravs da instruo de leitura como acabmos de ver no ponto anterior. Uma outra forma atravs de uma instruo de atribuio. Para isto utilizaremos o smbolo := em Pascal, e em pseudocdigo, que significa recebe o valor, ou seja, a posio, de memria que uma varivel representa, receber um valor, a qual ser atribudo varivel.

Numa instruo de atribuio, o valor que se atribui varivel em causa pode ser:

Prof. Carlos Almeida

25

____________________________________________________________Lgica de Programao

um valor directo; por exemplo: NUM

10 TOTAL (A + B) / 2

um valor contido noutra varivel; por exemplo: NUM

um valor resultante de uma expresso; por exemplo: NUM

Exemplos de instrues de atribuio, em pseudocdigo:


[Inicializar variveis] SOMA 0

[Calcular a Mdia e incrementar Valor] MDIA VALOR SOMA / 15 VALOR + 1

Exerccios
1. Indique qual o resultado ser obtido das seguintes expresses: 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 expresses: 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 expresso: 2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 }

Prof. Carlos Almeida

26

____________________________________________________________Lgica de Programao

Escreva os comandos de atribuio para a seguintes frmulas matemticas:


B C n) X = E D F A+

o) X =

2 B 4 A + 2 F 3 3 2A

Construa uma algoritmo e respectivo fluxograma que l o raio de uma circunferncia e calcula sua rea.

Prof. Carlos Almeida

27

2
ESTRUTURAS DE DECISO

1.17. Objectivos Prosseguir com o estudo de algoritmos, introduzindo agora as estruturas clssicas de deciso, o que vem completar a unidade anterior.

1.

Estruturas Fundamentais de Programao

Nas estruturas de um algoritmo , frequentemente, necessrio: jogar com determinadas condies, para decidir se se deve executar uma ou outra instruo; repetir uma srie de instrues, um determinado nmero de vezes ou enquanto se verificar uma certa condio; noutros casos ainda, temos um conjunto de instrues que se repete em diversos pontos do programa, tornando-se ento til passar a trat-lo como um subalgoritmo.

2.

Estrutura de Deciso Condicional - "Se"

At agora temos estado a lidar com algoritmos puramente sequenciais, isto , as instrues so cumpridas uma aps outra at chegar ao fim do algoritmo. No entanto existem estruturas que permitem a tomada de decises em funo de condies estabelecidas e assim, o algoritmo apresenta instrues alternativas. Estas condies podem ser verdadeiras ou falsas; conforme esse valor o algoritmo segue uma instruo ou segue outra em alternativa. Estas estruturas no so mais que instrues complexas, geralmente, compostas por vrias palavras, mas formando um todo. A estrutura de deciso condicional mais difundida e utilizada a que se baseia na instruo Se. As estruturas Se podem ser encaixadas umas dentro das outras (Estruturas Se encadeadas).

Prof. Carlos Almeida

28

_____________________________________________________________ Estruturas de Deciso

A sintaxe desta estrutura, em pseudocdigo, a seguinte:


Se <Condio> Ento <Instruo se condio verdadeira> [Seno <Instruo se condio falsa>] Fim Se

<Condio> - a condio de controlo normalmente uma expresso do tipo lgico, isto , que pode assumir apenas um entre dois valores possveis: verdadeiro ou falso;

<Instruo...> - obviamente, ser uma determinada instruo que se pretende efectuar. Esta instruo tanto pode ser uma instruo simples, como uma instruo composta, ou seja, um conjunto de instrues;

o significado dos parntesis rectos [...] indica que se trata de uma parte opcional. Assim, o comando Seno e a sua respectiva instruo opcional, ou seja, s utilizvel quando se desejar ou for necessrio.

Se tivermos um conjunto de instrues (instrues compostas) para considerar dentro da estrutura podemos inseri-la entre delimitadores Incio ... Fim.

Resumindo a sintaxe:
Se <Condio> Ento <Instruo se VERDADEIRO> Seno <Instruo se FALSO>
<Condio> NO

Fim Se

SIM

<Instruo se VERDADEIRO>

<Instruo se FALSO>

Prof. Carlos Almeida

29

_____________________________________________________________ Estruturas de Deciso

Se <Condio> Ento <Aco se VERDADEIRO> Fim Se


<Condio> SIM

<Instruo se VERDADEIRO>

Num fluxograma, toda deciso ter sempre como resposta o resultado VERDADEIRO ou FALSO. Essas decises interferem directamente no andamento do algoritmo.

Como no exemplo do algoritmo Chupar um Rebuado. Imaginemos que algumas pessoas no gostem de chupar rebuados de morango, neste caso teremos que modificar o algoritmo para:
Algoritmo Chupar um rebuado Pegar no rebuado O rebuado de morango? Se sim, no chupar o rebuado Se no, continuar com o algoritmo Retirar o papel Chupar o rebuado Deitar o papel no lixo
SIM Retirar o papel de morango? NO Pegar no rebuado

Inicio

No chupar o rebuado

Chupar o rebua

Deitar o papel no lixo

Fim

Prof. Carlos Almeida

30

_____________________________________________________________ Estruturas de Deciso

Exemplos de estruturas de deciso condicional, em pseudocdigo:

[Exemplo 1] Se X = 1 E K > VALOR Ento Se K < MENOR Ento M Fim Se Fim Se VALOR

[Exemplo 2a] Se ANDAR = 0 Ento QUARTO_VAGO K Seno Escrever(Nenhum quarto vago.) Fim Se 0 0

[Exemplo 2b] Se ANDAR = 0 Ento Incio QUARTO_VAGO K Fim Seno Escrever(Nenhum quarto vago.) Fim Se 0 0

Exemplo Prtico Vejamos o seguinte exemplo: Dado dois valores A e B quaisquer, faa um algoritmo que imprima se A > B, ou A < B , ou A = B
Algoritmo Maior Variveis A, B: Inteiro Inicio Escrever(Digite os valores A e B) Ler(A, B)

Prof. Carlos Almeida

31

_____________________________________________________________ Estruturas de Deciso

Se A > B Ento Escrever(A maior que B) Seno Se A < B Ento Escrever(A menor que B) Seno 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.

Exerccios 1. Elabore um fluxograma que leia um nmero. Se positivo armazene-o em A, se for negativo, em B. No final mostrar o resultado.

2. Faa um algoritmo que leia os valores A, B, C e diga se a soma de A + B menor que C.

3. Faa um algoritmo que leia dois valores inteiros A e B. Se os valores forem iguais soma A com B, caso contrrio multiplique A por B. No final do calculo atribuir o valor para uma varivel C.

Prof. Carlos Almeida

32

_____________________________________________________________ Estruturas de Deciso

4. Construa um algoritmo em pseudocdigo para ler um nmero 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 varivel numrica N e imprimi-la somente se a mesma for maior que 100, caso contrrio 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 frmulas:

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 mdia obtida pelo aluno escrevendo tambm se o aluno foi aprovado ou reprovado.

3.

Estrutura de Deciso de Escolha Mltipla - "Caso"

H casos em que se tem de optar entre vrias opes que uma varivel pode dispor, pelo que se ter de recorrer a vrias estruturas Se encadeadas. O encadeamento das estruturas de deciso condicional Se traz dificuldade na interpretao do algoritmo. Neste caso, temos uma estrutura de deciso composta ou deciso de escolha mltipla que vai tornar a leitura do algoritmo mais fcil. Essa estrutura conhecida pela estrutura Caso. Numa estrutura "Caso" h uma varivel, cujos valores que possa assumir vo ser utilizados no controlo das alternativas ou instrues a escolher - a esta varivel costume chamar-se selector. A Sintaxe desta estrutura, em pseudocdigo, a seguinte:
Caso <Varivel> <Valor 1> : <Instruo 1> <Valor 2> : <Instruo 2> (...) <Valor n> : <Instruo n> [Seno : <Instruo>] Fim Caso.

Prof. Carlos Almeida

33

_____________________________________________________________ Estruturas de Deciso

Quando se indica <Valor 1>, <Valor 2>, etc., estamos a referir aos valores possveis que a varivel de controlo poder assumir. Pode ser apenas um valor ou um conjunto de valores.

Quando de indica <Instruo 1>, <Instruo 2>, etc., pode tratar-se de uma s instruo ou de uma instruo composta, portanto um conjunto de instrues a realizar.

Em algumas implementaes existe tambm uma clusula "Seno" que se destina a complementar o leque de alternativas, no caso de haver ainda mais hipteses no explicitadas, e em que pode haver ainda uma outra instruo ou conjunto de instrues a indicar.

O fluxograma seria da forma:

Valor 1

Varivel

Valor n

Valor 2 (...)

Valor n-1

Instruo 1

Instruo 2

(...)

Instruo n-1

Instruo n

Exemplo Prtico Construa um algoritmo que caracteriza algumas letras do alfabeto usando a estrutura condicional Se e a estrutura Caso, com a seguinte caracterizao:

Primeiras letras: a, b Alfabeto ingls: k, w, y ltima letra: z Outras letras do alfabeto: restantes letras

Prof. Carlos Almeida

34

_____________________________________________________________ Estruturas de Deciso

Algoritmo Seleco [Este algoritmo caracteriza algumas letras do alfabeto] Variveis LETRA: Caracter FRASE: Caracteres Incio Ler(LETRA) Caso LETRA a, b: FRASE Primeiras letras Alfabeto ingls

k, w, y: FRASE z: FRASE Seno: FRASE Fim Caso Escrever(FRASE) Fim

ltima letra Outras letras do alfabeto

Incio

Ler LETRA

'a', 'b'

LETRA

outros valores

'k', 'w', 'y'

'z'

FRASE <-- 'Primeiras letras'

FRASE <-- 'Alfabeto ingls'

FRASE <-- 'ltima letra'

FRASE <-- 'Outras letras do alfabeto'

Escrever FRASE

Fim

Prof. Carlos Almeida

35

_____________________________________________________________ Estruturas de Deciso

Exerccios 1. Construa um algoritmo da discusso da equao do segundo grau. A equao do segundo grau apresenta-se na forma ax 2 + bx + c = 0 . A resoluo desta equao baseada na utilizao do binmio discriminante b 2 4ac . Assim, temos trs situaes:

b b 2 4ac binmio discriminante > 0: tem soluo dada por 2a

binmio discriminante < 0: no tem soluo nos reais binmio discriminante = 0: tem soluo dada por

b 2a

2. Construa um algoritmo que disponha do clculo do valor da rea de trs figuras geomtricas. O utilizador escolher uma das trs figuras disponveis a tratar e o algoritmo produzir o valor da rea. Sugesto: A partir de um menu em que so apresentadas as figuras geomtricas disponveis, o utilizador escolher a pretendida. De seguida, ser-lhe-o pedidos os dados referentes figura e produzir-se- o clculo do valor da rea que ser apresentado no ecr.

4.

Estruturas de Repetio ou Ciclos

Frequentemente necessrios repetir, um determinado nmero de vezes, uma certa instruo ou conjunto de instrues. Frequentemente necessrios manter, um nmero indeterminado de vezes, um ciclo ("Loop") de repeties, enquanto se verificar certa condio. Essa repetio, na maior parte das vezes, no tem que ser uma repetio exacta das mesmas operaes, pois pode haver pelo meio certos dados (variveis) ou parmetros que se vo alterando medida que o ciclo vai decorrendo. Exemplo de estruturas de repetio:

Para... fazer Enquanto... fazer Repetir ... at

Prof. Carlos Almeida

36

_____________________________________________________________ Estruturas de Deciso

Enquanto numa estrutura do tipo "Para... fazer" o nmero de vezes que vai ocorrer a repetio do ciclo determinada partida por uma varivel de controlo que incrementada ou decrementada medida que o ciclo decorre. Na estrutura "Enquanto.. fazer" e "Repetir...at" o ciclo decorrer um nmero indeterminado de vezes, dependendo da verificao ou no da condio de controlo - o que depende dos acontecimentos no decurso do prprio ciclo.

5.

Estrutura de Repetio - "Para... Fazer"

Esta estrutura de repetio controlada por uma varivel - Varivel de controlo que parte de um determinado valor e incrementa ou decrementa at um outro determinado valor. A Sintaxe, em pseudocdigo, a seguinte:
Para <varivel> de <valor inicial> at <valor final> fazer <Instruo> Fim Para

As expresses <valor inicial> e <valor final> podem ser valores numricos directos, valores de outras variveis ou expresses, desde que esses valores sejam nmeros inteiros. varivel que controla o ciclo, tambm costume chamar "contador" ou varivel de iterao, na medida em que vai assumindo valores sucessivos. Os valores da varivel de controlo podem variar num sentido crescente ou decrescente. O fluxograma seria da forma:

Varivel Valor_Inicial at Valor_Final

Instruo

Prof. Carlos Almeida

37

_____________________________________________________________ Estruturas de Deciso

A varivel toma um valor inicial que vai incrementando (ou decrementando) at um valor final. partida j sei quantas vezes vou repetir a instruo ou conjunto de instrues.

Exemplo: Faa um algoritmo para ler e escrever o nome de 20 pessoas.


Algoritmo Ler_escrever Variveis NOME: Caracteres CONTADOR: Inteiro Incio Para CONTADOR de 1 at 20 fazer Ler(NOME) Escrever(NOME) Fim para Fim

6.

Estrutura de Repetio - "Enquanto... Fazer"

O ciclo ou estrutura de repetio comea com a verificao de uma expresso ou condio, digamos, a "condio de controlo". Se a condio for verdadeira, a instruo ou conjunto de instrues, ser executado um nmero vezes indeterminado partida, dependendo de a condio de controlo se manter verdadeira ou passar a falsa.

A Sintaxe, em pseudocdigo, a seguinte:


Enquanto <Condio> fazer <Instruo> Fim enquanto

O fluxograma seria da forma:

Condio No Instruo

Sim

Prof. Carlos Almeida

38

_____________________________________________________________ Estruturas de Deciso

Neste caso, a Instruo repete-se enquanto a condio for verdadeira. A condio testada antes de se iniciar a Instruo. Se a condio for verdadeira executa-se a instruo, se for falsa j no se executa a instruo.

Exemplo: Faa um algoritmo para ler e escrever o Nome de 20 pessoas.


Algoritmo Ler_escrever Variveis NOME: Caracteres TOTAL: Inteiro Incio TOTAL 0 Enquanto TOTAL < 20 fazer Ler(NOME) Escrever(Nome = , NOME) TOTAL TOTAL + 1 Fim enquanto Fim

Exerccios O algoritmo seguinte produz um ciclo infinito. Corrija-o.


CONTAGEM 1 Enquanto CONTAGEM <= 10 fazer Escrever(No acabou) Fim enquanto

7.

Estrutura de Repetio - "Repetir ... at"

Como a condio de controlo de repetio s avaliada no final do ciclo, a instruo ou instrues ser(o) executada(s) sempre pelo menos uma vez. O ciclo ser interrompido quando a condio de controlo for verdadeira.

A instruo ser executada sempre pelo menos uma vez.

Prof. Carlos Almeida

39

_____________________________________________________________ Estruturas de Deciso

A Sintaxe em pseudocdigo:
Repetir <Instruo> at <Condio>

Na forma de fluxograma:

No

Instruo

Condio

Sim

A instruo ser repetida at que a condio seja verdadeira. A condio ser testada depois de realizada a instruo. Portanto, a aco realizar-se- pelo menos uma vez. Se a condio for falsa executa-se a instruo, se for verdadeira j no se executa a instruo.

Exemplo: Faa um algoritmo para ler e escrever o Nome de 20 pessoas.


Algoritmo Ler_escrever Variveis NOME: Caracteres TOTAL: Inteiro Incio TOTAL 0 Repetir Ler(NOME) Escrever(Nome = , NOME) TOTAL TOTAL + 1 at TOTAL >= 20 Fim

Prof. Carlos Almeida

40

_____________________________________________________________ Estruturas de Deciso

A estrutura Repetir... at pode ser realizada utilizando a estrutura Enquanto... fazer. Basta mudar de Repetir... at <condio>, para Enquanto No <Condio>... fazer.

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

Apresentamos um exemplo. Trata-se de um algoritmo para o clculo dos mltiplos de um nmero at um determinado valor definido por LIMITE. Assim, temos:
Algoritmo mltiplos NUMERO, LIMITE, MULTIPLO: Inteiro Incio Ler(NUMERO, LIMITE) MULTIPLO Repetir Escrever (MULTIPLO) MULTIPLO MULTIPLO + NUMERO NUMERO Algoritmo mltiplos NUMERO, LIMITE, MULTIPLO: Inteiro Incio Ler(NUMERO, LIMITE) MULTIPLO NUMERO

Enquanto (MLTIPLO < LIMITE) Escrever (MULTIPLO) MULTIPLO Fim enquanto Fim MULTIPLO + NUMERO

at (MLTIPLO >= LIMITE) Fim

Nota: No (MLTIPLO >= LIMITE) = (MLTIPLO < LIMITE)

8.

Exemplo Prtico Nmero Primo

vamos ver um algoritmo para verificar se um nmero ou no primo.


Algoritmo Nmeros_Primos [Vamos verificar se primo] NUMERO, CONTAGEM: Inteiro FRASE: Caracteres PRIMO: Lgico Incio Ler(NUMERO) PRIMO verdadeiro

Prof. Carlos Almeida

41

_____________________________________________________________ Estruturas de Deciso

Para contagem de 2 at NUMERO-1 fazer [Se for divisvel no primo] Se (NUMERO mod CONTAGEM = 0) ento PRIMO falso Fim se Fim para Se PRIMO ento FRASE nmero primo seno FRASE No primo Fim se Escrever(FRASE) Fim

Anlise do Algoritmo Um nmero primo aquele que divisvel, s e somente, pela unidade e por ele prprio. Se for divisvel por qualquer outro, no nmero primo. Como todos os nmeros so divisveis por um e por si prprios no necessitamos de verificar a divisibilidade. Assim, temos de verificar todos os outros nmeros desde 2 at ao nmero anterior ao que queremos verificar (NUMERO - 1). Por isso aparece a estrutura:
Para CONTAGEM de 2 at NUMERO-1 fazer Instruo Fim para

A instruo a verificao da divisibilidade. Se um nmero a for divisvel por outro b ento o resto da diviso ser zero. Temos uma operao que nos d o resto da diviso de inteiros. o mod. Neste caso temos que se (NUMERO mod CONTAGEM = 0) ento o nmero no ser primo. Da que surge:
Para contagem de 2 at NUMERO-1 fazer Se (NUMERO mod CONTAGEM = 0) ento PRIMO falso Fim se Fim para

Prof. Carlos Almeida

42

_____________________________________________________________ Estruturas de Deciso

Na realidade estamos a verificar se o nmero no primo. Para indicar se o nmero ou no primo usamos uma varivel lgica que toma um de dois valores: ou verdadeiro ou falso. A varivel est identificada com o nome PRIMO. Por isso usamos:
Se (NUMERO mod CONTAGEM = 0) ento PRIMO falso Fim se

Para mandar a indicao para o ecr, usamos o valor da varivel lgica para fazer a diferenciao. Se for primo (primo ter o valor verdadeiro) apresentado no ecr nmero primo; se no for ser apresentada a frase No primo.
Se PRIMO ento FRASE nmero primo seno FRASE No primo Fim se Escrever(FRASE)

Pode-se considerar uma variante da estrutura Enquanto... fazer Vejamos:


Algoritmo Nmeros_Primos [Vamos verificar se primo] NUMERO, CONTAGEM: Inteiro FRASE: Caracteres PRIMO: Lgico Incio Ler(NUMERO) PRIMO verdadeiro [Para no ser primo deve ser divisvel por qualquer nmero entre 1 e ele prprio, isto , de 2 at nmero-1] CONTAGEM 2 [Para iniciar a contagem]

Enquanto (CONTAGEM <= NUMERO-1) fazer [Se for divisvel no primo] Se (NUMERO mod CONTAGEM = 0) ento PRIMO falso Fim se CONTAGEM Fim enquanto CONTAGEM + 1 [Incremento de uma unidade]

Prof. Carlos Almeida

43

_____________________________________________________________ Estruturas de Deciso

Se PRIMO ento FRASE nmero primo seno FRASE No primo Fim se Escrever(FRASE) Fim

Neste caso necessria a inicializao da varivel contador (CONTAGEM) antes da estrutura Enquanto... fazer. Dentro do ciclo, necessrio proceder ao incremento da varivel contador (CONTAGEM) para que alcance o valor final pretendido. Vejamos o fluxograma do algoritmo nmero primo usando a estrutura Enquanto... fazer:

Prof. Carlos Almeida

44

_____________________________________________________________ Estruturas de Deciso

Incio

Ler NUMERO

PRIMO <-- verdadeiro

CONTAGEM <-- 2

CONTAGEM <= NUMERO-1

No

Sim

PRIMO

FRASE <-- 'No primo' NUMERO mod CONTAGEM = 0 Sim FRASE <-- ' nmero primo' PRIMO <-- falso No

CONTAGEM <-- CONTAGEM + 1

Escrever FRASE

Fim

Melhoria do Algoritmo O algoritmo pode ser melhorado em dois aspectos: 1. No tem interesse a verificao de nmeros negativos, nem o zero nem o nmero um. Soluo: impedir ao utilizador a introduo dos referidos valores.

Prof. Carlos Almeida

45

_____________________________________________________________ Estruturas de Deciso

2. Quando se encontra um valor em que o nmero divisvel no h vantagem em continuar a verificao, pois o nmero no primo. Soluo: quando se encontra o valor que divide o nmero termina-se a estrutura Enquanto.

Vamos comear 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 varivel NUMERO, obrigando o utilizador a repetir novo valor caso tenha introduzido um valor no apropriado. Existe a inicializao da varivel NUMERO (NUMERO 0) para obrigar ao

pedido da introduo do nmero a verificar. Caso no se faa a inicializao referida, no sabemos o que poder acontecer uma vez que no sabemos que valor a varivel nmero contm no momento do teste da condio 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 divisvel no primo] Se (NUMERO mod CONTAGEM = 0) ento PRIMO Falso Fim se CONTAGEM Fim enquanto CONTAGEM + 1 [Incremento de uma unidade]

Vimos nos operadores lgicos que na conjuno (E) basta uma proposio ser falsa para que a condio seja falsa. Quando a condio falsa termina a estrutura de repetio Enquanto... fazer.

Prof. Carlos Almeida

46

_____________________________________________________________ Estruturas de Deciso

Assim, basta encontrar um valor que divida o nmero (quando PRIMO passa a ter o valor Falso) para acabar a estrutura Enquanto... fazer. Esta, tambm acaba se a contagem chegar ao fim. Vejamos a tabela de teste para as condies postas.
CONTAGEM <= NUMERO-1 V V F F PRIMO V F V F (CONTAGEM <= NUMERO-1) E (PRIMO) V (continua o ciclo) F (termina o ciclo) F (termina o ciclo) F (termina o ciclo)

O algoritmo final seria:


PRIMO: Lgico Incio NUMERO 0

Enquanto NUMERO < 2 fazer Ler(NUMERO) Fim enquanto PRIMO verdadeiro [Para no ser primo deve ser divisvel por qualquer nmero entre 1 e ele prprio, isto , de 2 at nmero-1] CONTAGEM 2 [Para iniciar a contagem]

Enquanto (CONTAGEM <= NUMERO-1) E (PRIMO) fazer [Se for divisvel no primo] Se (NUMERO mod CONTAGEM = 0) ento PRIMO falso Fim se CONTAGEM Fim enquanto Se PRIMO ento FRASE nmero primo seno FRASE No primo Fim se Escrever(FRASE) Fim CONTAGEM + 1 [Incremento de uma unidade]

Para melhor compreenso do algoritmo faz a tabela de teste com valores a tua escolha.

Prof. Carlos Almeida

47

_____________________________________________________________ Estruturas de Deciso

9.

Exerccios

1. Faa um algoritmo para calcular: a.

2N
N =1

50

b.

N
N =1

30

2. Faa um algoritmo para ler base e altura de 50 tringulos e imprimir a sua rea.

3. Faa um algoritmo para calcular o factorial de um nmero N!.

4. Faa um algoritmo que conte de 1 a 100 e a cada mltiplo de 10 emita uma mensagem: Mltiplo de 10.

5. Faa um algoritmo que determine o maior entre N nmeros. A condio de termo a entrada de um valor 0, ou seja, o algoritmo deve continuar a calcular o maior nmero at que a entrada seja igual a 0 (ZERO).

Prof. Carlos Almeida

48

3
ESTRUTURA DE DADO S

1.18. Objectivos O objectivo fundamental conseguir que os alunos percebam em profundidade o conceito de vector e matriz, como estrutura de dados em memria. O conceito de ficheiro dever ser mais explorado na unidade relativa Programao em Pascal. Distinguir estruturas de dados em memria voltil e memria magntica Realizar algoritmos com a utilizao de vectores e matrizes Aplicar no mesmo algoritmo vrias estruturas de deciso.

1.

Estrutura de Dados

Na programao de alto nvel, sempre que se declaram variveis, estas tm de ser associadas a um determinado tipo de dados, para que o compilador saiba com que tipo de valores vai operar e que espao deve ser reservado em memria para cada varivel. Para alm das estruturas de dados que mantenha em memria primria, existem estruturas de dados que conserve em memria secundria, que o caso dos ficheiros. Para alm de uma categoria de dados a que podemos chamar de simples (Inteiro, Lgico, Real, caracteres,...), temos ainda os dados que so estruturadas, isto , que so compostos por outros dados.
Simples Estrutura de Dados Complexas ou Estruturadas

Imaginemos por exemplo, um algoritmo para ler o nome de N pessoas e que imprimisse esses mesmos nomes ordenados alfabeticamente. No seria uma tarefa simples, visto no ser possvel determinar quantos nomes seriam lidos. Mesmo que soubesse-mos o nmero de pessoas, digamos 1000 pessoas, teramos que definir 1000 variveis do tipo Caracteres como indicado abaixo:

Prof. Carlos Almeida

49

_____________________________________________________________ Estruturas de Deciso

Algoritmo Loucura Variveis NOME1, NOME2, NOME3, (...) NOME999, NOME1000: Caracteres Incio <Instrues> Fim

Vamos considerar o tamanho do algoritmo, e o trabalho de escrita necessrio para o construir. Imaginemos agora o algoritmo com 1000000 pessoas. Na prtica, a construo deste algoritmo comearia a ficar invivel. Para resolver problemas como este, e outros, foi criado um novo conceito de estrutura de dados e uma nova forma de definir as variveis, as quais foi denominada de variveis do tipo Array.

Um array revela-se uma estrutura de dados muito mais econmica em termos de escrita, mas, sobretudo, encerra muito mais potencialidades de manipulao em termos de programao.

Uma varivel do tipo Array corresponde a uma sequncia de posies de memria, identificada com um nico nome. Cada uma destas posies pode ser acedida atravs de um ndice. O ndice corresponde a um valor numrico Inteiro. Cada uma das posies de memria de uma varivel Array pode receber valores no decorrer do algoritmo como se fosse uma varivel comum. A nica diferena reside na sintaxe de utilizao desta varivel.

Uma varivel do tipo Array corresponde a uma sequncia de posies de memria, identificada com um nico nome. Um ndice corresponde a um valor numrico Inteiro e representa cada uma das posies de um array.

Prof. Carlos Almeida

50

_____________________________________________________________ Estruturas de Deciso

2.

Vectores

Um vector (Array unidimensional) um tipo estruturado que pode agrupar numa mesma varivel 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 dimenso. O ndice varia entre um limite inferior e um limite superior, em correspondncia com o nmero de elementos do conjunto. Os vectores so colocados na memria em posies ordenadas e adjacentes.

Um vector agrupa numa mesma varivel 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, poderamos definir 12 variveis, designadas por 12 identificadores diferentes; por exemplo: JAN; FEV; MAR; etc. Todavia, o uso de uma varivel estruturada, neste caso, um vector, com um nico identificador agrupando os 12 elementos em causa, revela-se uma tcnica muito mais econmica em termos de escrita, mas, sobretudo, encerra muito mais potencialidades de manipulao em termos de programao. Neste caso, poderamos definir um vector mediante um nico identificador, por exemplo: GASTOS_MS. Mas, para que esse identificador possa representar os 12 elementos correspondentes aos 12 meses do ano, temos de utilizar ndices.

Em pseudocdigo, poderamos escrever assim:


Variaveis GASTOS_MES: Vector[1..12] de Real

em que:

GASTOS_MES o identificador ou nome atribudo varivel; VECTOR indica que a varivel do tipo Vector; [1..12] define o nmero de elementos da varivel (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.

Prof. Carlos Almeida

51

_____________________________________________________________ Estruturas de Deciso

e, em Pascal:
Var GASTOS_MES: Array[1..12] of Real

De um modo geral, cada elemento desta varivel de tipo Vector designa-se por: GASTOS_MES[K] em que [K] representa a posio do elemento no conjunto que compem o vector, ou seja, neste caso, o nmero do ms que se pretende designar. Por exemplo o gasto do ms de Fevereiro seria designados por: GASTOS_MES[2]

Segue-se alguns exemplos de operaes com vectores:


[Definir um vector A de 40 elementos do tipo inteiro] A: Vector[1..40] de Inteiro

[Instruo de leitura com acesso sequencial] Para K de 1 at 40 Fazer Ler(A[K])

[Instruo de atribuio: armazenar na 4 posio do vector A o valor 13] A[4] 13

[Instruo de escrita do 4 elemento do vector A] Escrever(A[4])

De um modo geral a estrutura Para... muito til no trabalho de vectores.

Exerccios 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.

Prof. Carlos Almeida

52

_____________________________________________________________ Estruturas de Deciso

3.

Ordenao de um Vector

Quando se preenche um vector com dados, estes ficam arrumados em funo da ordem de entrada que o utilizador usou. Assim, os dados ficam sem uma ordem convencional. Por questo de lgica de procura ou de leitura, pode haver interesse em que os dados estejam ordenados. Por esta razo, vamos estudar um algoritmo simples que permitir proceder ordenao dos dados de um vector.

Seja o vector definido por:


IDADES: Vector[1..5] de Inteiro

que contm as idades de cinco pessoas:


45 27 33 40 35

Os dados do vector Idades no se encontra ordenado. Seria legtimo pretender-se que as IDADES estivessem ordenadas por ordem crescente. Para tal, teremos de percorrer o vector comparando os valores sucessivos e, caso necessrio, fazer a troca conveniente. Vejamos, a posio IDADES[1] 45 e a posio IDADES[2] 27, logo tero de ser trocados os valores de modo que a posio IDADES[1] fosse 27 e IDADES[2] fosse 45. Depois verificamos IDADES[2] e IDADES[3] e tm 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] ento Troca (IDADES[COLUNA],IDADES[COLUNA+1]) Fim se Fim Para

Este algoritmo tem uma operao especial a que chammos Troca que vai realizar a troca pretendida. Uma anlise mais atenta, mostra-nos que este algoritmo no chega. Vejamos, no quadro seguinte, o que se passa a cada incremento da varivel COLUNA na estrutura Para....

Prof. Carlos Almeida

53

_____________________________________________________________ Estruturas de Deciso

1 2 3 4

45 27 27 27 27

27 45 33 33 33

33 33 45 40 40

40 40 40 45 35

35 35 35 35 40

Vector Original

O vector mostra-nos que a ordenao no ficou completa. necessrio fazer correr, mais uma vez, a estrutura Para.... Portanto, o algoritmo s deve acabar quando a estrutura Para... percorrer o vector e no efectuar nenhuma troca de valores:
Repetir TROCAS FALSO

Para COLUNA de 1 at 4 fazer Se IDADES[COLUNA] > IDADES [COLUNA+1] ento Troca (IDADES[COLUNA],IDADES[COLUNA+1]) TROCAS Fim se Fim Para At NO TROCAS [At no haver trocas] VERDADEIRO

Falta criar o algoritmo da operao Troca:


TEMPORARIO IDADES[COLUNA] IDADE[COLUNA+1] TEMPORARIO IDADES[COLUNA] IDADES[COLUNA+1]

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: Lgico Incio Repetir TROCAS FALSO

Para COLUNA de 1 at 4

Para COLUNA de 1 at 4 fazer Se IDADES[COLUNA] > IDADES [COLUNA+1] ento TEMPORARIO IDADES[COLUNA] IDADE[COLUNA+1] TEMPORARIO

IDADES[COLUNA] IDADES[COLUNA+1]

Prof. Carlos Almeida

54

_____________________________________________________________ Estruturas de Deciso

TROCAS Fim se Fim Para

VERDADEIRO

At NO TROCAS [At no haver trocas] Fim

4.

Matrizes

Uma matriz (Array multidimensional) um tipo estruturado que pode agrupar numa mesma varivel um conjunto finito de valores todos do mesmo tipo. No caso dos vectores, temos apenas um agrupamento de elementos, cujos ndices esto compreendidos entre dois limites; nas matrizes temos dois (ou mais) elementos, cada qual com o seu par de limites prprio. 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 correspondncia com o nmero de elementos do conjunto.

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

Segue-se alguns exemplos de operaes 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

[Instruo de leitura com acesso sequencial] Para K de 1 at 10 Fazer Para L de 1 at 5 Fazer Ler(M[K, L])

[Instruo de atribuio] M[4, 3] 20

Prof. Carlos Almeida

55

_____________________________________________________________ Estruturas de Deciso

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 instruo Ler, o utilizador introduz um inteiro na matriz na posio 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 posio para cada clula da matriz.

Exerccios Sobre Matrizes 1. Um stand de venda de automveis, concessionrio de uma marca, vende sete modelos dessa marca. Crie um algoritmo que introduza num array bidimensional os modelos e respectivo preo para posterior consulta.
Modelos ModA ModB ModC ModD ModE ModF ModG Preo (contos) 2500 3000 2500 3500 2500 3000 4000

A matriz ter de ser do tipo caracteres, pois ter que conter a designao do modelo. Ser de sete linhas e duas colunas como se pode ver na tabela acima apresentada.

Prof. Carlos Almeida

56

_____________________________________________________________ Estruturas de Deciso

2. Faa um algoritmo para mostrar os dados contidos na matriz preenchida no exerccio anterior.
Partindo do algoritmo do exerccio anterior ser fcil construir este.

3. Construa um algoritmo para ordenao dos dados da matriz do exerccio 1, por ordem crescente do preo.
Neste caso, o quadro bidimensional havendo necessidade de ordenar as duas colunas. De qualquer modo, a primeira coluna s ser ordenada em funo da ordenao da segunda, isto , quando houver uma alterao da ordem de preos ter-se- de fazer a alterao na ordem dos modelos respectivos.

5.

Registos

Os registos (Records) so um outro tipo de dados estruturados que permitem agrupar elementos de vrios tipos diferentes, sob a forma de campos.

CAMPO um espao reservado em memria para receber informaes (dados). Exemplo: Campo Nome, Campo Endereo.

A principal diferena 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 diferenas 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 contrrio 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 informao estruturada.

Prof. Carlos Almeida

57

_____________________________________________________________ Estruturas de Deciso

se o problema exige que o acesso seja por indexao, isto , do gnero, toma l um ndice, d c um valor, ento o que faz falta um array; se, por qualquer motivo, o que queremos um acesso por nomeao passa para c a informao com este nome ento o melhor ir pelos registos.

Um exemplo tpico de dados organizveis sob a forma de registos o que se relaciona com informao sobre pessoas. Os seguintes dados poderiam ser os campos de um registo: nome; morada; idade; telefone; etc. Em pseudocdigo 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 Variveis [Definir as varivel 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 varivel RECORD pode ter campos de qualquer tipo vlido do Pascal, sendo permitido inclusive que um RECORD seja definido dentro do outro, ou como parte de um ARRAY.

Prof. Carlos Almeida

58

_____________________________________________________________ Estruturas de Deciso

Continuando o exemplo, caso desejarmos atribuir um valor varivel CLIENTE, devemos faz-lo da seguinte forma: Em pseudocdigo:
[Atribuir 45 ao campo IDADE da varivel CLIENTE_A] CLIENTE_A.IDADE 45

[Os valores existentes de todos os campos da varivel CLIENTA_A para a varivel CLIENTA_B] CLIENTA_B CLIENTA_A

Em Pascal:
CLIENTE_A.IDADE := 45; CLIENTA_B := CLIENTA_A;

O uso do . indica que esta varivel possui campos, e que IDADE um deles. importante lembrar que as operaes realizadas sobre uma varivel RECORD, so as mesmas de uma varivel comum, a nica diferena que devemos indicar o nome da varivel, seguido de um ponto (.) e seguido do nome do campo (CLIENTE_A.IDADE := 45;). possvel atribuir o contedo de uma varivel RECORD para outra varivel, de mesmo tipo, da mesma forma que feito como as outras variveis do Pascal (CLIENTA_B := CLIENTA_A;).

Exerccios Sobres Registos 1. Define um registo tendo os seguintes campos: Nome, Semestre, Sala, Curso, Notas (total de 6 notas).

2. Faa um programa para ler as informaes, descritas no exerccio 1.

3. Ampliar a definio anterior, acrescentando a definio de um outro campo (Endereo) que ser tambm um Registo, o qual ter os seguintes campos: Rua, Bairro, Cdigo Postal, Cidade,.

Prof. Carlos Almeida

59

_____________________________________________________________ Estruturas de Deciso

4. Faa um programa para ler as informaes de um aluno, junto com o endereo descrito no exerccio 3.

5. Defina um vector de alunos, os campos sero os mesmos descritos no exerccio 3.

6. Faa um programa para ler as informaes de n alunos.

7. Ordene crescentemente pelo Nome, os alunos.

6.

Ficheiros

Os ficheiros tm como funo, armazenar a informao em suportes de memria secundria ou externas (discos ou disquetes, etc.), onde essa informao possa ser guardada para alm do tempo em que o programa est a correr no computador, e, eventualmente, reutilizada, nesse ou em outro programa. As restantes estruturas de dados, so dados volteis, porque so armazenados apenas temporariamente na RAM (memria primria) do computador, quando estes esto a funcionar com o programa. Quando se sai do programa em que os dados foram introduzidos ou obtidos, toda a informao desaparece.

Um ficheiro uma unidade de informao, armazenada fisicamente num suporte de memria secundria.

Ao contrrio das estruturas de dados estudadas anteriormente, armazenadas em suporte de memria primria, os ficheiros tm como funo, armazenar a informao em suportes de memria secundria ou externas.

Assim, a unidade bsica de armazenamento de informao em sistemas informticos o ficheiro (file). Um ficheiro uma unidade de informao, armazenada fisicamente num suporte de memria secundria.

ficheiros do tipo texto Tipo de ficheiro ficheiros do tipo binrio (definidos pelo programador)

Prof. Carlos Almeida

60

_____________________________________________________________ Estruturas de Deciso

Ficheiros do Tipo Texto Os ficheiros do tipo texto, so ficheiros em que a informao 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 incio e percorrer todos os elementos at ao ponto pretendido.

Ficheiros do Tipo Binrio Os ficheiros definidos pelo programador so ficheiros que agrupam dados simples (como por exemplo, um inteiro) ou estruturados (como por exemplo, um registo), em formato binrio, assumindo formas muito variveis. Podemos, por exemplo, ter ficheiros de nmeros inteiros ou reais, de vectores ou de registos, etc. - o que permite uma grande flexibilidade de trabalho com sequncias de dados armazenadas em suportes de memria secundria. Em particular, os ficheiros de registos permitem manipular dados num formato bem estruturado para trabalho com informao externa (em disco ou disquete). Com este tipo de ficheiros (ficheiros de registos) pode trabalhar-se com informao um pouco maneira de bases de dados. O acesso aos dados destes ficheiros pode ser feito de forma aleatria, ou seja, por escolha da posio pretendida, e no forosamente de forma sequencial, como nos ficheiros de texto. Em qualquer dos casos, um ficheiro de dados (Ficheiro de texto ou binrio), para alm de permitir o armazenamento da informao num suporte de armazenamento externo memria primria, tambm permite reunir uma coleco de dados sem tamanho fixo partida. Qualquer um dos outros tipos de dados estruturados (vectores, matrizes ou registos) tem um tamanho em termos de nmero de elementos que determinado partida, na respectiva declarao do tipo ou da varivel. Em princpio, um ficheiro no tem essa limitao, pois pode conter um nmero maior ou menor de dados, sem que esse nmero tenha que ser determinado partida. Um ficheiro pode ser acrescentado com mais dados, desde que estes sejam compatveis com o tipo-base dos dados que o constituem, ou pode ser totalmente reescrito com um nmero completamente diferente de elementos.

Prof. Carlos Almeida

61

_____________________________________________________________ Estruturas de Deciso

O acesso de um ficheiro do tipo texto feito de forma sequencial. O acesso de um ficheiro do tipo binrio feito de forma aleatria. Um ficheiro que agrupa dados do tipo registo pode ser considerado uma base de dados.

Suportes Fsicos de Ficheiros As memrias auxiliares, embora sendo exteriores ao computador, operam como extenses da sua memria central. So meios de memorizao capazes de armazenar quantidades de informao muito superiores s que a memria central pode guardar, e funcionam como armazns de informao que a memria central requisita sempre que necessrio. Existem grande variedade de memrias auxiliares, como suporte fsico de ficheiros, sendo mais frequentes as unidades de discos magnticos e as unidades de fita magntica. Suportes fsicos mais utilizados para armazenar informao:

banda magntica; disquetes; disco magntico duro; discos pticos; tapes; etc.

A escolha dos suportes relaciona-se com trs caractersticas: 1. capacidade sendo as bandas magnticas, 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 so os mais rpidos.

O acesso aos ficheiros nestes suportes tambm de grande importncia pois condiciona algumas das caractersticas atrs referidas. Assim o acesso pode ser de dois tipos:

acesso sequencial; acesso directo nunca se poderia utilizar a banda magntica.

Prof. Carlos Almeida

62

_____________________________________________________________ Estruturas de Deciso

Operaes com Ficheiros Os ficheiros so estruturas de dados que implicam a sua manipulao a dois nveis: 1. ao nvel interno do programa, com variveis que identificam os ficheiros e os dados a ler ou escrever nessas unidade de informao; 2. ao nvel externo ou de interaco entre o programa e os dispositivos fsicos onde so armazenados os ditos ficheiros.

As principais operaes a ter em conta no trabalho com ficheiros so:

declarao de tipos e variveis de ficheiros; associao de uma varivel de ficheiro com um nome externo de ficheiro; criao de novos ficheiros ou reescrita total de um ficheiro j existente; escrita de informao num ficheiro; abertura de um ficheiro para leitura; procura de dados num ficheiro; fecho de um ficheiro aberto; fuso de ficheiros; etc.

Exemplos de operaes 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 posio no ficheiro

7.

Manipulao de Ficheiros em Pascal

Um ficheiro de grande importncia nos programas em computador, desde o tempo em que o primeiro computador surgiu, pois, para que um programa faa algum tipo de operao, o mesmo precisa ser alimentado com informaes: estas, ou so fornecidas pelo teclado, ou so fornecidos atravs de um ficheiro.

Prof. Carlos Almeida

63

_____________________________________________________________ Estruturas de Deciso

O PASCAL, possui dois tipos de ficheiros, os quais so: 1. Ficheiros FILE 2. Ficheiros TEXT

Ficheiros FILE Um ficheiro do tipo FILE, tambm conhecido por ficheiro aleatrio, ou de acesso aleatrio, o ficheiro mais importante do Pascal, sendo desta forma tambm o mais utilizado. Um ficheiro aleatrio caracterizado pelo fato de ser possvel buscar uma determinada informao em qualquer posio que a mesma se encontre, sem haver a necessidade de se percorrer todo o ficheiro at se alcanar a informao desejada. O acesso a informao directo.

Sintaxe: <Nome da varivel>: 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 varivel como sendo um ficheiro FILE de STRINGs:
Program Exemplo; Var MINHA_VARIAVEL: File of String; Begin End.

Quando um Ficheiro FILE criado, o mesmo possui a seguinte estrutura interna:


Posio Fsica 0 1 2 N Informao

A posio fsica corresponde a um nmero gerado automaticamente no instante em que uma dada informao inserida no ficheiro. Este nmero, corresponde ao Endereo da informao no ficheiro.

Prof. Carlos Almeida

64

_____________________________________________________________ Estruturas de Deciso

atravs deste endereo que possvel recuperar qualquer informao, sem ter que percorrer todo o ficheiro em busca da mesma, bastando para isto, fornecer o nmero da sua posio fsica.

Vamos passar a chamar as informaes armazenadas num ficheiro por Registros.

Tratamento de Ficheiros FILE Existem uma grande quantidade de subrotinas construdas especialmente para manipular ficheiros FILE. Vamos conhecer as principais:

Rotina: ASSIGN() Funo: 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() Funo: Cria e abre para Entrada\Sada um Ficheiro. Caso o ficheiro no exista, o mesmo ser criado. Caso o ficheiro j exista, todos os dados existentes nele sero apagados. Sintaxe: REWRITE(Meu_Ficheiro);

Prof. Carlos Almeida

65

_____________________________________________________________ Estruturas de Deciso

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() Funo: Abre para E/S um ficheiro que j exista. Caso o ficheiro no exista ocorrer um erro de execuo 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() Funo: Fecha um ficheiro que tenha sido aberto com RESET ou REWRITE. Sintaxe: CLOSE(Meu_Ficheiro);

Prof. Carlos Almeida

66

_____________________________________________________________ Estruturas de Deciso

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() Funo: A rotina WRITE tem a mesma funo de sada de informaes at agora estudado, invs da informao ser apresentada no ecr, a mesma ser armazenada num ficheiro. Sintaxe: WRITE(Meu_Ficheiro, Registro);

Exemplo:
Program Teste; Type REGISTRO = Record NOME: String; 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. IDADE: Byte;

Prof. Carlos Almeida

67

_____________________________________________________________ Estruturas de Deciso

Rotina: READ() Funo: A rotina READ tem a mesma funo de entrada de informaes at agora estudado, invs 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.

Aps cada operao READ/WRITE no Ficheiro, o endereo do registro corrente no ficheiro incrementado em uma unidade. Assim por exemplo, se o endereo do registro corrente igual a 10, aps uma operao de READ/WRITE, o registro corrente passar a ser o nmero 11.

Rotina: ILEPOS() Funo: etorna um nmero inteiro indicando qual o registro corrente do ficheiro. Sintaxe: Registro_Corrente := FILEPOS(Meu_Ficheiro);

Prof. Carlos Almeida

68

_____________________________________________________________ Estruturas de Deciso

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() Funo: 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.

Prof. Carlos Almeida

69

_____________________________________________________________ Estruturas de Deciso

Rotina: SEEK() Funo: Posiciona o ponteiro do ficheiro num registro determinado, para que o mesmo possa ser processado. Sintaxe: SEEK(Meu_Ficheiro, Endereo_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() Funo: Retorna TRUE caso se alcance o final do ficheiro, FALSE caso contrrio. Sintaxe: Chegou_Final := EOF(Meu_Ficheiro);

Prof. Carlos Almeida

70

_____________________________________________________________ Estruturas de Deciso

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() Funo: Elimina o ficheiro do disco. importante notar que o ficheiro a ser eliminado no pode estar aberto. Sintaxe: ERASE(Meu_Ficheiro);

Exemplo:
Program Teste; Type REGISTRO = Record NOME: String; End; Var FICHEIRO: File of REGISTRO; Begin Assign(FICHEIRO, Dados.Dat); Erase(FICHEIRO); End. IDADE: Byte;

Prof. Carlos Almeida

71

_____________________________________________________________ Estruturas de Deciso

Ficheiros TEXT Um ficheiro do tipo TEXT, tambm conhecido por arquivo sequencial, um tipo especial de ficheiro que, ao contrrio do ficheiro FILE, pode ser editado normalmente atravs de um editor de textos qualquer. Ele dito sequencial porque a leitura tem que ser feita sequencialmente do incio ao fim do ficheiro, no podendo desta forma, como feito no arquivo FILE atravs do comando SEEK, posicionar de forma directa, o ponteiro de ficheiro em um registro em particular.

Sintaxe: <Nome da varivel>: TEXT

O programa seguinte define uma varivel como sendo um ficheiro do tipo TEXT:
Program Exemplo; Var MINHA_VARIAVEL: Text; Begin End.

Nos ficheiros do tipo TEXT (STRING), as informaes nele armazenadas so todas texto, mesmo assim, possvel escrever no arquivo informaes de qualquer tipo de dado simples (INTEGER, REAL, BYTE, etc.) as quais, ao serem fisicamente armazenadas no ficheiro, sero automaticamente convertidas do seu tipo original para o tipo STRING. A leitura se processa de forma inversa, ou seja, quando lida uma informao num ficheiro TEXT, a mesma ser automaticamente convertida para o tipo da varivel que ir armazenar a informao, isto , do tipo STRING para o tipo da varivel receptora da informao lida.

Tratamento de Ficheiros TEXT Existem uma grande quantidade de subrotinas construdas especialmente para manipular ficheiros TEXT, algumas das quais j foram vistas. Vamos mostrar as principais.

Prof. Carlos Almeida

72

_____________________________________________________________ Estruturas de Deciso

Rotina: ASSIGN() Funo: 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() Funo: Crie e abre um ficheiro no formato Write-Only (somente para escrita). Caso o ficheiro no exista, este ser criado. Caso j exista, todos os dados existentes nele sero apagados. Sintaxe: REWRITE(Meu_Ficheiro);

Exemplo:
Program Teste; Var FICHEIRO: Text; Begin Assign(FICHEIRO, Dados.txt); Rewrite(FICHEIRO); End.

Rotina: RESET() Funo: Abre um ficheiro que j existe, mas no formato Read-Only (somente para leitura). Caso o ficheiro no exista ocorrer um erro de execuo e o programa ser abortado. Sintaxe: RESET(Meu_Ficheiro);

Prof. Carlos Almeida

73

_____________________________________________________________ Estruturas de Deciso

Exemplo:
Program Teste; Var FICHEIRO: Text; Begin Assign(FICHEIRO, Dados.txt); Reset(FICHEIRO); End.

Rotina: APPEND() Funo: Abre um ficheiro para incluso de novas informaes do tipo Write-Only (somente para escrita). Caso o ficheiro no exista ocorrer um erro de execuo e o programa ser abortado. importante notar que as incluses 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() Funo: 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.

Prof. Carlos Almeida

74

_____________________________________________________________ Estruturas de Deciso

Rotina: WRITE() ou WRITELN() Funo: A rotina WRITE ou WRITELN tm a mesma funo de sada de informaes at agora estudado, invs da informao ser apresentada no ecr, a mesma ser armazenada no ficheiro. Ao ser usado o comando WRITE, todas as informaes sero 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 informaes sero colocadas uma em cada linha, como acontece quando se usa este comando para escrever informaes 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() Funo: A rotina READ ou EADLN tm a mesma funo de entrada de informaes at agora estudado, invs 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 informaes pelo teclado. Por outro lado, ao ser usado o comando READLN, as leituras sero 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);

Prof. Carlos Almeida

75

_____________________________________________________________ Estruturas de Deciso

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() Funo: Retorna TRUE caso se alcance o final do ficheiro, FALSE caso contrrio. 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() Funo: Elimina o ficheiro do disco. importante notar que o ficheiro a ser eliminado no pode estar aberto. Sintaxe: ERASE(Meu_Ficheiro);

Prof. Carlos Almeida

76

_____________________________________________________________ Estruturas de Deciso

Exemplo:
Program Teste; Var FICHEIRO: Text; Begin Assign(FICHEIRO, Dados.txt); Erase(FICHEIRO); End.

Exerccios Sobre Ficheiros 1. Crie um ficheiro FILE formado por nmeros inteiro de 1 a 10000. Faa a leitura do ficheiro e escreva no ecr somente os nmeros mpares.

2. Crie um ficheiro com Nome e salrio de n funcionrios e armazene estas informaes num ficheiro FILE.

3. Faa a leitura do ficheiro anterior e escreva no ecr o nome e o salrio dos funcionrios que ganham mais de 100 000$00.

4. Abra o ficheiro anterior e aumente em 15% o salrio de todos os funcionrios que ganham menos de 100 000$00.

5. Ordene crescentemente pelo nome do funcionrio o ficheiro anterior.

6. Abra o ficheiro anterior e escreva o seu contedo de trs para frente, ou seja, do ltimo registro at o primeiro. Utilize os comandos SEEK, FILEPOS e FILESIZE.

7. Crie um ficheiro com nome e salrio de n funcionrios e armazene estas informaes num ficheiro TEXT. Faa a leitura do ficheiro e escreva no ecr o nome e salrio dos funcionrios que ganham mais que 100 000$00.

Prof. Carlos Almeida

77

_____________________________________________________________ Estruturas de Deciso

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.

Prof. Carlos Almeida

78