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

APOSTILA DE TCNICAS DE PROGRAMAO E LINGUAGEM PASCAL

SUMRIO

INTRODUO PROGRAMAO .......................................................................................4 1.1 DEFINIO DE ALGORITMO ........................................................................................................4 1.1.1 Algoritmo x Programa .....................................................................................................4 1.2 LINGUAGEM DE PROGRAMAO ................................................................................................4 1.2.1 Tipos de Linguagens de Programao..............................................................................4 1.2.2 Processo de Criao e Execuo de um Programa...........................................................5 1.3 CRITRIOS DE QUALIDADE DE UM PROGRAMA ............................................................................6 1.4 A LINGUAGEM P ASCAL .............................................................................................................7 1.4.1 Histrico .........................................................................................................................7 1.4.2 O Turbo Pascal ...............................................................................................................7

ESTRUTURA DE UM PROGRAMA EM PASCAL..................................................................9 2.1 2.2 2.3 2.4 CABEALHO DO P ROGRAMA ......................................................................................................9 REA DE DECLARAES ............................................................................................................9 CORPO DO PROGRAMA.............................................................................................................10 EXEMPLO DE UM PROGRAMA EM P ASCAL ................................................................................. 10

VARIVEIS E CONSTANTES ................................................................................................12 3.1 IDENTIFICADORES.................................................................................................................... 12 3.2 PALAVRAS RESERVADAS .........................................................................................................12 3.3 COMENTRIOS ........................................................................................................................13 3.4 TIPOS DE DADOS .....................................................................................................................13 3.4.1 Tipos de Dados Inteiros .................................................................................................13 3.4.2 Tipos de Dados Reais ....................................................................................................14 3.4.3 Tipos de Dados Caracteres ............................................................................................14 3.4.4 Tipos Lgicos ................................................................................................................15 3.5 VARIVEIS ..............................................................................................................................15 3.6 CONSTANTES...........................................................................................................................15

OPERADORES E EXPRESSES............................................................................................17 4.1 PRIORIDADE DAS OPERAES ..................................................................................................17 4.2 TIPOS DE E XPRESSES .............................................................................................................17 4.3 TIPOS DE OPERADORES ............................................................................................................18 4.3.1 Operador de Atribuio.................................................................................................18 4.3.2 Operadores Aritmticos .................................................................................................18 4.3.3 Operador de Concatenao ...........................................................................................19 4.3.4 Operadores Relacionais.................................................................................................20 4.3.5 Operadores Lgicos.......................................................................................................21 4.4 FUNES PREDEFINIDAS ..........................................................................................................22

ESTRUTURAS DE DECISO .................................................................................................24 5.1 5.2 A INSTRUO IF..THEN ............................................................................................................24 A INSTRUO IF...THEN...ELSE .................................................................................................26

ESTRUTURAS DE REPETIO (LOOPS)............................................................................29 6.1 6.2 6.3 INSTRUO FOR ......................................................................................................................29 INSTRUO WHILE...DO ........................................................................................................... 30 INSTRUO REPEAT...UNTIL .....................................................................................................32

VETORES, MATRIZES E REGISTROS................................................................................. 35 7.1 7.2 7.3 VETORES.................................................................................................................................35 MATRIZES ...............................................................................................................................39 REGISTROS ..............................................................................................................................43

PROCEDURES E FUNCTIONS ..............................................................................................46 8.1 UTILIZAO DE UNITS .............................................................................................................46

8.2 PROCEDURES...........................................................................................................................47 8.2.1 Variveis Globais e Locais.............................................................................................51 8.3 PARMETROS ..........................................................................................................................52 8.3.1 Passagem por Valor ......................................................................................................53 8.3.2 Passagem por Referncia...............................................................................................54 8.4 FUNCTIONS .............................................................................................................................55 9 ARQUIVOS ...............................................................................................................................58 9.1 DEFINIO DE UM ARQUIVO ....................................................................................................58 9.2 OPERAES DE UM ARQUIVO ...................................................................................................58 9.3 FORMAS DE ACESSO EM UM ARQUIVO ......................................................................................59 9.3.1 Acesso Seqencial..........................................................................................................59 9.3.2 Acesso Direto ................................................................................................................60 9.3.3 Acesso Indexado ............................................................................................................60 9.4 ARQUIVOS DO T IPO TEXTO ......................................................................................................60 9.5 ARQUIVOS COM TIPO DEFINIDO ...............................................................................................61 9.6 ARQUIVO COM TIPO DEFINIDO DE REGISTRO ............................................................................63

1 INTRODUO PROGRAMAO
1.1 Definio de Algoritmo

a descrio, de forma lgica, dos passos a serem executados no cumprimento de determinada tarefa. a forma pela qual descrevemos solues de problemas do nosso mundo, afim de serem implementadas utilizando os recursos do mundo computacional. Como este possu severas limitaes em relao ao nosso mundo, exige que sejam impostas algumas regras bsicas na forma de solucionar os problemas para que possamos utilizar os recursos de hardware e software disponveis.

1.1.1 Algoritmo x Programa Um algoritmo uma seqncia lgica de aes a serem executadas para se executar uma determinada tarefa. Um programa a formalizao de um algoritmo em uma determinada linguagem de programao, segundo suas regras de sintaxe e semntica, de forma a permitir que o computador possa entender a seqncia de aes.

1.2

Linguagem de Programao

Uma linguagem de programao um conjunto de smbolos ( comandos, identificadores, caracteres ASCII, etc. ... ) e regras de sintaxe que permitem a construo de sentenas que descrevem de forma precisa aes compreensveis e executveis para o computador.
LINGUAGEM DE PROGRAMAO = SMBOLOS + REGRAS DE SINTAXE

Uma linguagem de programao uma notao formal para descrio de algoritmos que sero executados por um computador. Como todas as notaes formais, uma linguagem de programao tem dois componentes: Sintaxe e Semntica. A sintaxe consiste em um conjunto de regras formais, que especificam a composio de programas a partir de letras, dgitos, e outros smbolos. Por exemplo, regras de sintaxe podem especificar que cada parnteses aberto em uma expresso aritmtica deve corresponder a um parnteses fechado, e que dois comandos quaisquer devem ser separados por um ponto-e-vrgula. As regras de semntica especificam o significado de qualquer programa, sintaticamente vlido, escrito na linguagem.

1.2.1 Tipos de Linguagens de Programao Existem diversas linguagens de programao, cada uma com suas caractersticas especficas e com nveis de complexidade e objetivos diferentes, como pode ser visto na tab. 1.1.

LINGUAGEM Linguagem de Mquina Linguagens de Baixo Nvel

Linguagens de Alto Nvel

CARACTERSTICAS nica compreendida pelo computador. Especfica de cada computador. Utiliza mnemnicos para representar instrues elementares Ex.: Assembly Utiliza instrues prximas da linguagem humana de forma a facilitar o raciocnio. Ex.: Uso Cientfico : Fortran Propsito Geral : Pascal, C, Basic Uso Comercial : Cobol, Clipper Uso especfico : Lisp, Prolog

TABELA 1.1 TIPOS DE LINGUAGENS DE PROGRAMAO E SUAS CARACTERSTICAS

1.2.2 Processo de Criao e Execuo de um Programa Embora seja teoricamente possvel a construo de computadores especiais, capazes de executar programas escritos em uma linguagem de programao qualquer, os computadores, existentes hoje em dia so capazes de executar somente programas em linguagem de baixo nvel, a Linguagem de Mquina. Linguagens de Mquina so projetadas levando-se em conta os seguintes aspectos : rapidez de execuo de programas; custo de sua implementao; e flexibilidade com que permite a construo de programas de nvel mais alto.

Por outro lado, linguagens de programao de alto nvel so projetadas em funo de : facilidade de construo de programas; e confiabilidade dos programas.

O PROBLEMA : Como a linguagem de nvel mais alto pode ser implementada em um computador, cuja linguagem bastante diferente e de nvel mais baixo ? SOLUO: Atravs da traduo de programas escritos em linguagens de alto nvel para a linguagem de baixo nvel do computador. Para isso existem trs tipos de programas tradutores : Montadores, Interpretadores e Compiladores. Vejamos o que cada um deles representa. MONTADOR Efetua a traduo de linguagem de montagem ( Assembly ) para a linguagem de mquina, da seguinte forma: obtm a prxima instruo do Assembly; traduz para as instrues correspondentes em linguagem de mquina; 5

executa as instrues em linguagem de mquina; e repete o passo 1 at o fim do programa.

INTERPRETADOR Efetua a traduo a de uma linguagem de alto nvel para linguagem de mquina da seguinte forma: obtm prxima instruo do cdigo-fonte em linguagem de alto nvel; traduz para as instrues correspondentes em linguagem de mquina; executa as instrues em linguagem de mquina; e repete o passo 1 at o fim do programa COMPILADOR Efetua a traduo de todo o cdigo-fonte em linguagem de alto nvel para as instrues correspondentes em linguagem de mquina, gerando o cdigo-objeto do programa. Em seguida necessrio o uso de um outro programa ( Link-Editor ) que responsvel pela juno de diversos cdigos-objeto em um nico programa executvel.
EDIO COMPILAO LINK-EDIO ALGORITMO CDIGO-FONTE CDIGO-OBJETO PROGRAMA EXECUTVEL

Possibilidades de Erros no Programa: Erros de Compilao : erros de digitao e de uso da sintaxe da linguagem. Erros de Link-Edio : erro no uso de bibliotecas de sub-programas necessrias ao programa principal. Erros de Execuo : erro na lgica do programa (algoritmo).

1.3

Critrios de Qualidade de um Programa Vejamos alguns critrios para escrevermos um programa com qualidade:

Integridade: refere-se preciso das informaes manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrrio o programa simplesmente no tem sentido; Clareza: refere-se facilidade de leitura do programa. Se um programa for escrito com clareza, dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim como o prprio autor do programa entend-lo aps ter estado um longo perodo afastado dele. O Pascal favorece a escrita de programas com clareza e legibilidade; Simplicidade: a clareza e preciso de um programa so normalmente melhoradas tornando seu entendimento o mais simples possvel, consistente com os objetivos do programa. Muitas vezes torna-se necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do programa mais simples;

Eficincia: refere-se velocidade de processamento e a correta utilizao da memria. Um programa deve ter performance SUFICIENTE para atender s necessidade do problema e do usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das limitaes do problema; Modularidade: consiste no particionamento do programa em mdulos menores bem identificveis e com funes especficas, de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo do problema de forma mais simples e clara; e Generalidade: interessante que um programa seja to genrico quanto possvel de forma a permitir a reutilizao de seus componentes em outros projetos.

1.4

A Linguagem Pascal

1.4.1 Histrico Origem: desenvolvida nos anos entre 1968 e 1970 por Nicklaus Wirth na Universidade Tcnica de Zurique, Sua. Em 1970 disponibilizado o primeiro compilador para a linguagem. Objetivo: desenvolver uma linguagem de programao disciplinada de alto nvel para ensinar programao estruturada. Esta linguagem foi batizada com o nome de Pascal, em homenagem a Blaise Pascal, filsofo e matemtico francs que viveu entre 1623 e 1662. Padronizao: ANSI ( American National Standars Institute ) e IEEE ( Institute of Eletrical and Eletronics Engineers ) Padro de Fato: Borland International cria em 1983 o Turbo Pascal. Atualizaes: durante os ltimos anos foram lanadas diversas variaes da linguagem Pascal-Padro, implementando recursos que no so encontrados na estrutura padro da linguagem. Nas mos da Borland, j foram lanadas as verses 3.0, 4.0, 5.0 e 5.5 na dcada de 80. Durante a dcada de 90 foram lanadas as verses 6.0, 7.0 e o lanamento da linguagem Delphi, para programao em ambiente Windows.

1.4.2 O Turbo Pascal O Turbo Pascal mais que um simples compilador da linguagem Pascal, ele um Ambiente Integrado de Desenvolvimento ( IDE - Integrated Development Environment ), consistindo de um conjunto de ferramentas de desenvolvimento integradas. Entre as ferramentas que compem o Turbo Pascal temos:

Editor de Cdigo-Fonte Compilador Link-Editor Depurador Ajuda On-Line da Linguagem e do prprio IDE

Podemos citar alguns comandos principais do Turbo Pascal : Compilar o programa : ALT + F9 Compilar e Executar o Programa : CTRL + F9 Acessar o Menu : ALT + Letra realada. Criar um novo programa : menu FILE | NEW Salvar o programa atual : F2 Sair do Turbo Pascal : ALT + X Ver tela com os resultados do programa executado : ALT + F5

2 ESTRUTURA DE UM PROGRAMA EM PASCAL


Todo programa escrito em Pascal subdividido em trs reas distintas: cabealho do programa, rea de declaraes e corpo do programa.

2.1

Cabealho do Programa

Esta rea utilizada para se fazer a identificao do programa com um nome. O cabealho de um programa atribudo pela instruo program seguida de um nome. Ao final do nome deve-se colocar o smbolo ponto-e-vrgula ( ; ). No pode existir nenhuma varivel no programa que tenha o mesmo nome dado ao programa. Vejamos um exemplo: program CALCULA_AREA; Caso voc tenha atribudo ao programa o nome Soma e tambm tenha atribudo este nome a uma varivel no programa, quando for executado apresentar um mensagem de erro.

2.2

rea de Declaraes

Esta rea utilizada para validar o uso de qualquer tipo de identificador que no seja predefinido, estando subdividida em sete sub-reas: uses, label, const, type, var, procedure e function. Inicialmente, vamos estudar apenas a sub-rea var. As demais sero estudadas em captulos posteriores. A sub-rea var utilizada na declarao das variveis que sero utilizadas durante a execuo de um programa, bem como, tambm o seu tipo. Desta forma, a linguagem Pascal efetua a reserva de espao na memria para que as variveis sejam utilizadas. A declarao das variveis atribuda pela instruo var seguida da relao de variveis. Aps os nomes de cada varivel dever ser utilizado o smbolo dois-pontos ( : ), e aps estes mencionado o tipo de dado que a varivel ir receber, seguido de ponto-e-vrgula. Vejamos um exemplo: var NOME : string; IDADE : integer; ALTURA : real; Caso as variveis sejam de mesmo tipo, estas podero ser relacionadas separadas por vrgula. Vejamos um exemplo: A, B, C : integer;

2.3

Corpo do Programa

O programa propriamente dito em Pascal est escrito na rea denominada corpo do programa. esta rea tem incio com a instruo begin e finalizada pela instruo end seguida do smbolo ponto ( . ). O uso destas instrues caracteriza o que chamado de bloco, como indicado abaixo: begin instrues; (...) end. Na rea denominada corpo do programa, podero existir, dependendo da necessidade, vrios blocos. 2.4 Exemplo de um Programa em Pascal

Para se colocar em prtica o que foi explicado at este momento, considere o seguinte exemplo de um problema: Desenvolver um programa que efetue a leitura de dois valores numricos. Faa a operao de adio entre os dois valores e apresente o resultado obtido. Note que sempre estaremos diante de um problema, e que este dever ser resolvido primeiro por ns, para que depois seja resolvido por um computador. Primeiramente, voc deve entender bem o problema, para depois buscar a sua soluo dentro de um computador, ou seja, voc dever ensinar a mquina a resolver seu problema, atravs de um programa. Desta forma, o segredo de uma boa lgica est na compreenso adequada do problema a ser solucionado. Vejamos nosso problema citado acima: Algoritmo: 1. Ler um valor para a varivel A; 2. Ler outro valor para a varivel B; 3. Efetuar a soma das variveis A e B, colocando o resultado na varivel X; 4. Apresentar o valor da varivel X aps a operao de soma dos dois valores fornecidos. Completada a fase de interpretao do problema e da definio das variveis a serem utilizadas passa-se para a fase de codificao de nosso programa para a linguagem Pascal.

10

Programa em Pascal

program ADICIONA_NUMEROS; var X : integer; A : integer; B : integer; begin readln(A); readln(B); X := A + B; writeln(X); end.

Entrada e Sada dos Dados Voc deve ter observado os comandos readln e writeln. Estes comandos so chamados de entrada e sada dos dados, respectivamente. A instruo readln permite a entrada de dados via teclado e a instruo writeln gera a sada de dados via vdeo. Poderiam tambm ser utilizadas as instrues write e read. Mas qual a diferena entre elas? muito simples: a colocao da ln indica line new, ou seja, nova linha. Ser realizado um pulo de linha aps a leitura ou exibio dos dados. As instrues write e read permitem manter o cursor na mesma linha, aps a exibio das mensagens ou leitura de dados.

11

3 VARIVEIS e CONSTANTES
3.1 Identificadores

Os identificadores so nomes a serem dados a variveis, tipos definidos, procedimentos, funes e constantes nomeadas. Devem seguir as seguintes regras de construo: iniciar sempre por uma letra (a - z , A - Z) ou um underscore ( _ ); o restante do identificador deve conter apenas letras, underscores ou dgitos (0 - 9). No pode conter outros caracteres; e pode ter qualquer tamanho, desde que os primeiros 63 caracteres sejam significativos. No existe distino entre letras maisculas e minsculas no nome de um identificador. Por exemplo, os nomes ALPHA, alpha e Alpha so equivalentes. Ateno para o fato de que identificadores muito longos so mais fceis de serem lidos pelas as pessoas quando se usa uma mistura de letras maisculas e minsculas; por exemplo, SalarioMinimo mais fcil de se ler do que SALARIOMINIMO. Vejamos alguns exemplos de identificadores vlidos: PAGAMENTO Soma_Total MaiorValor Media1 _Media e alguns exemplos de identificadores invlidos: %Quantidade 4Vendedor Soma Total O smbolo % no permitido No pode comear com um nmero No pode ter espaos entre as letras

Observao : Um identificador dever ficar inteiramente contido em uma linha do programa, ou seja voc no pode comear a digitar o nome do identificador numa linha e acabar em outro.

3.2

Palavras Reservadas

Pascal reconhece certo grupo de palavras como sendo reservadas. Essas palavras tem significado especial e no podem ser usadas como identificadores em um programa. A tab. 3.1 apresenta todas as palavras reservadas do Pascal Padro:

12

and array asm begin case const constructor destructor div do

downto else End File For Foward Function Goto If implementation

In inline interface Label mod nil not object of or

packed procedure program record repeat set shl shr string then

to type unit until until uses var while with xor

TABELA 3.1 PALAVRAS RESERVADAS DO PASCAL

3.3

Comentrios

Comentrios so textos escritos dentro do cdigo-fonte para explicar ou descrever alguns aspectos relativos ao mesmo. Os comentrios podem ser colocados em qualquer lugar do programa onde um espao em branco possa existir. Voc pode colocar comentrios de duas formas: ou envolvendo o texto entre chaves {..} ou entre (* .. *). Quando o compilador encontra o smbolo { ele salta todos os caracteres at encontrar um }. Da mesma forma, todos os caracteres que seguem (* so pulados at ser detectado o smbolo *). Como resultado disso, qualquer uma das formas pode ficar dentro da outra; por exemplo {...(*...*)...} um comentrio.

3.4

Tipos de Dados

Os dados so representados pelas informaes a serem processadas por um computado. Um tipo de dados especifica as caractersticas, ou seja os valores e operaes possveis de serem utilizados com um dado desse tipo. Toda varivel e constante usada em um programa tem um tipo associado a ela. A linguagem Pascal fornece ao programador um conjunto de tipos de dados predefinidos. 3.4.1 Tipos de Dados Inteiros So caracterizados tipos inteiros, os dados numricos positivos ou negativos, excluindo-se qualquer nmero fracionrio. Em Pascal, este tipo de dado pode ser referenciado por um dos seguintes identificadores: Tipo de dado inteiro shortint integer longint byte word Faixa de abrangncia de 128 at 127 de 32.768 a 32.767 de 2.147.483.648 a 2.147.483.647 de 0 at 255 de 0 at 65535 Tamanho(bytes ) 1 byte 2 bytes 4 bytes 1 byte 2 bytes

13

Vejamos um exemplo: var NumAlunos Cont,cont1

: integer; : integer;

3.4.2 Tipos de Dados Reais O tipo de dado real permite trabalhar com nmeros fracionrios, tanto positivos como negativos, sendo sua capacidade de armazenamento maior que dos nmeros inteiros. Vejamos os tipos: Tipo de dado real real single double extended comp Vejamos um exemplo: var Nota : real; Salario, media : real; Faixa de abrangncia de 2.9 e-39 at 1.7 e38 de 1.5 e-45 at 3.4 e38 de 5.0 e-324 at 1.7e308 de 3.4 e-4.932 at 1.1 e4.932 de 9.2 e18 at 9.2 e18 Tamanho(bytes ) 6 bytes 4 bytes 8 bytes 10 bytes 8 bytes

3.4.3 Tipos de Dados Caracteres So considerados tipos caracteres, as seqncias contendo letras, nmeros e smbolos especiais. Uma seqncia de caracteres, em Pascal, deve ser representada entre apstrofos (). Este tipo de dado referenciado pelo identificador string, podendo armazenar de 1 at 255 caracteres. Podemos ainda especificar um tamanho menor do que os 255 caracteres permitidos. Vejamos a sintaxe para criarmos uma varivel do tipo string com tamanho limitado. Sintaxe: varivel : string[tamanho]; Vejamos um exemplo do uso de strings: var Frase : string; Nome : string[45]; Existe ainda o tipo char, utilizado da mesma forma que o tipo string, porm com uma pequena diferena: usado para strings de apenas um caracter. Vejamos um exemplo do tipo de dado char: var Sexo : char; 14

3.4.4 Tipos Lgicos So caracterizados tipos lgicos, os dados com valores true (verdadeiro) e false (false). Este tipo de dado tambm e chamado de tipo boleano. Ele representado pelo identificador boolean. Vejamos um exemplo da utilizao do tipo de dado boolean: var Aprovado : boolean; Confirma : boolean;

3.5

Variveis

Varivel, no sentido de programao, uma regio previamente identificada, que tem por finalidade armazenar informaes (dados) de um programa temporariamente. Uma varivel armazena apenas um valor por vez. Sendo considerado como valor o contedo de uma varivel, este valor est associado ao tipo de dado da varivel. Sintaxe: var identif [ , identif ]... : tipo-de-dado; [identif [ , identif ]... : tipo-de-dado; ] ... onde: tipo-de-dado um dos tipos predefinidos ou um tipo definido pelo usurio: Vejamos um exemplo: var Soma, Total, Salario Idade, Contador

: real; : integer;

3.6

Constantes

Uma constante um valor que no pode ser alterado durante a execuo do programa, sendo que seu tipo definido por seu contedo. Sintaxe: const identificador = expresso; ... identificador = expresso; Vejamos um exemplo:

15

program Area_Circulo; { Programa para calcular a rea de um crculo. } const PI = 3.141519265; var Area, Comprimento, Raio : real; begin writeln( Digite o Raio : ); readln( Raio ); Area := PI * Raio * Raio; Comprimento := 2 * PI * Raio; writeln( rea = , Area ); writeln( Comprimento da Circunferencia = , end.

Comprimento );

16

4 OPERADORES E EXPRESSES
Um programa tem como caracterstica fundamental a capacidade de processar dados. Processar dados significa realizar operaes com estes dados. O uso de operadores permite a realizao de tais operaes. Exemplo: o smbolo + um operador que representa a operao aritmtica de adio. Uma expresso um arranjo de operadores e operandos. A cada expresso vlida atribudo um valor numrico. Exemplo: 4 + 6 uma expresso cujo valor 10. Os operandos podem ser variveis, constantes ou valores gerados por funes. Os operadores identificam as operaes a serem efetuadas sobre os operandos. Cada tipo de dados possui um conjunto de operadores relacionados. Os operadores classificam-se em Unrios e Binrios, conforme tenham um ou dois operandos, respectivamente. 4.1 Prioridade das Operaes

Se vrios operadores aparecerem em uma expresso, a ordem de execuo das operaes ser dada segundo os critrios abaixo : pelo emprego explcito de parnteses; pela ordem de precedncia existente entre os operadores; e se existirem operadores de mesma ordem de precedncia, a avaliao ser feita da esquerda para a direita..

Vejamos a ordem de precedncia dos operadores ( da maior para a menor ): Operadores ( ) not * / div mod and or = <> < > <= >= Categoria Parntesis Operador Lgico Unrio Operadores Multiplicativos Operadores Lgicos Operadores Relacionais

4.2

Tipos de Expresses Existem trs tipos bsicos de expresses:

Numricas: uma expresso numrica quando os seus operandos so numricos ( inteiros ou reais ) e o resultado tambm um valor numrico. 17

Literais: Uma expresso literal quando os seus operandos so literais do tipo string (no pode ser char) e o resultado tambm um valor literal. S existe um nico operador para se usar em expresses literais, o operador Concatenao( + ). Boolenas: Uma expresso booleana quando seu resultado do tipo boolean (TRUE ou FALSE), podendo seu operando serem de qualquer tipo de dados. Nas expresses relacionais so usados os operadores Lgicos e os Relacionais.

4.3

Tipos de Operadores

Existem vrios operadores para a realizao de expresses em Pascal. Veremos agora algumas das mais importantes.

4.3.1 Operador de Atribuio O operador de atribuio utilizado para atribuir o valor de uma expresso a uma varivel. Sintaxe: identificador_varivel := expresso; Vejamos um exemplo: A := 10; Nome := Josias;

4.3.2 Operadores Aritmticos Os operadores aritmticos so utilizados para efetuar operaes aritmticas com nmero inteiros e reais. A tab. 4.1 apresenta os operadores aritmticos existentes em Pascal. Operador Subtrao Adio Multiplicao Diviso Real Diviso Inteira ( truncada ) Resto da Diviso Inteira Inverte Sinal Mantm Sinal Smbolo + * / div mod +

TABELA 4.1 OPERADORES ARITMTICOS

18

Vejamos um exemplo: var A, B : integer; C, D : real; begin A := 1; B := 3; C := 5; D := 10; A := 1 + B; A := B + D; B := 10 div A := 10 mod C := D / C; D := 10 div inteiros A := -1; B := 5 + A; B := -A; C := D * A; B := C * B; end.

{ errado, D real } 3; 3; C; } { errado, o operado div s para

{ errado, C real }

4.3.3 Operador de Concatenao O operador de concatenao efetua a juno de duas variveis ou constantes do tipo string. Vejamos um exemplo: var PreNome, SobreNome, NomeCompleto : string[ 30 ]; begin { Suponhamos o nome Josias Lima Santos } PreNome := Josias; SobreNome := Santos; NomeCompleto := PreNome + SobreNome; writeln( NomeCompleto ); NomeCompleto := Jose + Maria; writeln( NomeCompleto ); ... end.

19

4.3.4 Operadores Relacionais Os operadores relacionais so utilizados para efetuar a comparao entre dados de mesmo tipo. Os operadores relacionais existentes em Pascal podem ser vistos na tab.4.2. Operador Maior que Menor que Maior ou igual Menor ou igual Igual Diferente Smbolo

> < >= <= = <>

TABELA 4.2 OPERADORES RELACIONAIS

Vejamos um exemplo: var Nota1, Nota2 : real; NomeAluno1, NomeAluno2 : string[ 30 ]; A, B, C : integer; begin A := 2; B := 3; C := 1; if B = A + C then writeln( B ); Nota1 := 5.0; Nota2 := 10.0; if Nota1 < Nota2 then writeln( Nota1 ); NomeAluno1 := Maria Jose; NomeAluno2 := MariaJose; if NomeAluno1 < NomeAluno2 then writeln( NomeAluno1 ); end.

20

4.3.5 Operadores Lgicos Os operadores lgicos so utilizados para se analisar duas ou mais expresses interrelacionadas. A tab. 4.3 exibe os operadores lgicos existentes em Pascal. Operador E OU NO Smbolo and or not

TABELA 4.3 OPERADORES LGICOS

Vejamos um exemplo: var Nota1, Nota2 : real; NomeAluno1, NomeAluno2 : string[ 30 ]; A, B, C : integer; begin A := 2; B := 3; C := 1; NomeAluno1 := Maria Jose; NomeAluno2 := MariaJose;
if ( B = A + C ) and ( NomeAluno1 <> NomeAluno2 ) then

writeln( NomeAluno1, B ); if ( A = C ) or ( NomeAluno1 = NomeAluno2 ) then writeln( NomeAluno1 ); if not( A = C ) then writeln( NomeAluno1 ); end.

Abaixo, segue trs tabelas, chamadas tabela-verdade, contendo o resultado do uso dos operadores lgicos sobre dois operandos.

OPERADOR AND OPERANDO 1 TRUE TRUE FALSE FALSE

OPERANDO 2 TRUE FALSE TRUE FALSE

RESULTADO TRUE FALSE FALSE FALSE

21

OPERADOR OR OPERANDO 1 TRUE TRUE FALSE FALSE

OPERANDO 2 TRUE FALSE TRUE FALSE

RESULTADO TRUE TRUE TRUE FALSE

OPERADOR NOT OPERANDO TRUE FALSE RESULTADO FALSE TRUE

4.4

Funes predefinidas

O Pascal oferece um conjunto de funes predefinidas (built-in functions), que so usadas com vrios tipos de dados simples. As funes, na maioria das vezes, necessitam de dados como parmetro (dados de entrada). Vejamos algumas dessas funes: Funes Matemticas: Nome Funo abs( x ) cos( x ) exp( x ) Objetivo Calcula o valor absoluto de x. Calcula o coseno de x em radianos x Calcula e , em que e=2.7182818 Tipo Parmetro inteiro ou real inteiro ou real inteiro ou real Tipo do Retorno o mesmo que x real real

sistema natural de logaritmos neperianos.


ln( x ) exp(ln(x)*y) sin( x ) sqr( x ) sqrt( x ) odd( x ) random( x ) Calcula o logaritmo natural de x (x>0) Retorna x elevado a y {utilizando regras de logaritmos}. Calcula o seno de x em radianos Calcula o quadrado de x Calcula a raiz quadrada de x (x>=0) Determina se x par ou impar TRUE, X par / FALSE, X impar Retorna um nmero pseudo-aleatrio entre 0 e x. Se x no for especificado retorna um valor entre 0.0 e 1.0 Retorna o valor de PI (3.1415...) inteiro ou real Inteiro ou real inteiro ou real inteiro ou real inteiro ou real inteiro inteiro real real real o mesmo que x real boolean real

pi

Nenhum

real

22

Funes Literais: Nome Funo length( x ) concat( x1, x2, x3,...) copy( x, y, z ) Objetivo Determina o nmero de caracteres de x Concatena duas ou mais strings (mx 255 caracteres) Retorna uma subcadeia da cadeia x, com z caracteres, comeando no caracter y. Retorna x convertido para maiscula Tipo Parmetro string string string, inteiro, inteiro char Tipo Retorno inteiro string string

UpCase( x )

char

Funes para Converso: Nome Funo trunc( x ) int( x ) frac( x ) round( x ) chr( x ) Objetivo Trunca x para um nmero inteiro Retorna a parte inteira de x Retorna a parte fracionria de x Arredonda x para um inteiro Determina o caracter ASCII representado por x Tipo Parmetro real real real real inteiro Tipo Retorno inteiro real real inteiro char

Funes e Procedimentos de Uso Geral: Nome Funo sizeof( x ) gotoxy(x,y) Objetivo Retorna o nmero de byte de x Move o curso para a coluna x e linha y Tipo Parmetro qualquer tipo inteiro Tipo do Retorno inteiro

23

5 ESTRUTURAS DE DECISO
Imagine um programa que apresente a mdia escolar de um aluno. At aqui, muito simples; mas alm de calcular a mdia, o programa deve apresentar uma mensagem indicando se o aluno foi aprovado ou reprovado. Esta varivel, que at ento servia para clculos, agora passa a ser uma varivel de controle, onde partir dela poderemos tomar uma deciso sobre o status do aluno. Em Pascal existem duas instrues para efetuar tomadas de deciso e desvios de operaes: 5.1 a instruo de deciso simples if...then; e a instruo de deciso composta if...then...else.

A instruo if..then

A instruo if...then tem por finalidade tomar uma deciso e efetuar um desvio no processamento, dependendo, claro, da condio atribuda ser verdadeira ou falsa. Sendo a condio verdadeira, ser executada a instruo que estiver escrita aps a instruo if..then. Se a instruo for falsa, sero executadas as instrues que estejam aps as instrues consideradas verdadeiras. Sintaxe: if <condio> then <instruo para condio verdadeira>; <instruo para condio falsa ou aps condio ser verdadeira>; Vejamos um exemplo de um trecho de programa com o uso da instruo if...then: ... if (x > 10) then writeln(O valor da variavel X e 10); ... Caso venha a existir mais de uma instruo verdadeira para uma determinada condio, estas devero estar inseridas em um bloco. Um bloco o conjunto de instrues estar entre begin e end. Sintaxe: if <condio> then begin <instruo para condio verdadeira> <instruo para condio verdadeira> <instruo para condio verdadeira> <instruo para condio verdadeira> end; <instruo para condio falsa ou aps condio ser verdadeira>

24

Observe que o end finalizado com um ponto-e-vrgula ( ; ) e no apenas ponto. O uso de ponto ao final de um end ocorre somente na finalizao de um programa. Vejamos um exemplo de um trecho de programa com a utilizao de um bloco de instrues: ... if (x > 10) then begin writeln(O valor da variavel X e 10); x : = x + 1; writeln(O valor da variavel X agora e11); end; ... Vejamos um exemplo completo de um programa com o uso da instruo if...then. Ler dois valores inteiros e independentemente da ordem em que foram inseridos, estes devero ser exibidos em ordem crescente, ou seja, se forem fornecidos 5 e 3 respectivamente, devero ser apresentados 3 e 5. O programa em questo dever efetuar a troca dos valores entre as duas variveis Algoritmo 1. Ler dois valores inteiros (estabelecer variveis A e B); 2. Verificar se o valor de A maior que o valor de B: a. se for verdadeiro, efetuar a troca de valores entre as variveis; b. se for falso, pedir para executar o que est estabelecido no passo 3; 3. Apresentar os valores das duas variveis. Programa em Pascal program ORDENA; var X, A, B : integer; begin write (Informe uma valor para a variavel A: ); readln(A); write (Informe uma valor para a variavel B: ); readln(B); writeln; if (A > B) then begin X := A; A := B; B := X; end; writeln(Os valores ordenados so: ); write(A, , B); end. 25

5.2

A instruo if...then...else

Assim como a instruo if...then, a instruo if...then...else tem por finalidade tomar uma deciso e efetuar um desvio no processamento. Se a condio for verdadeira ser executada a instruo logo abaixo do if. Sendo a condio falsa, ser executada a instruo que estiver posicionada logo aps a instruo else. O conceito de blocos de instrues vale tambm para esta instruo. Sintaxe: if <condio> then <instrues para condio verdadeira> else <instrues para condio falsa>; Caso venha a existir mais de uma instruo verdadeira ou falsa para uma condio, estas devero estar inseridas em um bloco. Sintaxe: if <condio> then begin <instrues para condio <instrues para condio end else begin <instrues para condio <instrues para condio end;

verdadeira>; verdadeira>;

falsa>; falsa>;

Observe que nos dois casos abordados acima, qualquer instruo que antecede a instruo else est escrita sem o ponto-e-vrgula (;). Isto ocorre pelo fato de a instruo else ser uma extenso da instruo if...then, e sendo assim, o final da condio somente ocorre aps o processamento da instruo else. Vejamos um exemplo: Ler dois valores numricos e efetuar a adio. Caso o valor somado seja maior ou igual a 10, este dever ser apresentado somando-se a ele mais 5. Caso o valor somado no seja maior ou igual a 10, esta dever ser apresentado subtraindo-se 7. Algoritmo 1. Ler dois valores (variveis A e B); 2. Efetuar a soma dos valores A e B, atribuindo o resultado da soma a uma varivel X; 3. Verificar se X maior ou igual a 10: a. se for verdadeiro, mostrar X+5; b. se for falso, mostrar X-7.

26

Programa em Pascal program ADICIONA_NUMEROS; var X, A, B : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); writeln; X := A + B; write (O resultado equivale a: ); if (X>=10) then writeln(X+5) else writeln(X-5) end.

Podemos trabalhar com o relacionamento de duas ou mais condies dentro da instruo if...then. Para estes casos, necessrio trabalhar com os operador lgicos, vistos anteriormente. Vejamos alguns exemplos : Operador AND program TESTA-LOGICA-AND; var NUMERO : integer; begin write(Informe um numero: ); readln(NUMERO); writeln; if (NUMERO >= 20) and (NUMERO <=90) then writeln(O numero esta na faixa de 20 a 90) else writeln(O numero esta fora da faixa de 20 a 90); end.

27

Operador OR program TESTA-LOGICA-OR; var A, B : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); writeln; if (A>0) or (B>0) then writeln(Um dos numeros e positivo);

Operador NOT program TESTA-LOGICA-NOT; var A, B, C, X : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); write(Informe um valor para a variavel X: ); readln(X); if not (X>5) then C := (A + B) * X else C := (A - B) * X; writeln(O resultado da variavel C corresponde a:, C); end.

28

6 ESTRUTURAS DE REPETIO (LOOPS)


Existem situaes onde necessrio repetir um determinado trecho de um programa um certo nmero de vezes. Imagine que voc tenha que executar um determinado bloco de instrues 5 vezes. Com os conhecimentos que voc tem at agora, seria necessrio repetir as instrues CINCO vezes, tornando seu trabalho muito cansativo. Assim, existem as estruturas de repetio, que permitem que voc execute estas tarefas de forma mais simplificada. Podemos chamar as estruturas de repetio de laos ou loops, sendo que podem existir dois tipos de laos de repetio: laos finitos: neste tipo de lao se conhece previamente o nmero de repeties que sero executadas; e laos infinitos: neste tipo de lao no se conhece previamente o nmero de repeties que sero executadas. So tambm chamados de condicionais, pelo fato de encerrarem sua execuo mediante uma determinada condio.

6.1

Instruo for

O comando FOR executa repetitivamente um comando enquanto atribudo uma srie de valores a uma varivel de controle (contador do FOR). Sintaxe : for variavel := <incio> to/downto <fim> do instruo; ou for variavel := <incio> to/downto <fim> do begin instruo1; instruo2; instruo3; end;

Vejamos um exemplo da utilizao da estrutura de repetio for. Ler dois valores inteiros. Realize a adio destes nmeros, armazenando o resultado em uma terceira varivel. Apresente o valor encontrado. Repita esta operao 5 vezes. Algoritmo 1. 2. 3. 4. 5. Criar uma varivel para servir como contador, que ir variar de 1 at 5; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Repetir os passos 2, 3 e 4 at que o contador seja encerrado.

29

Programa em Pascal program EXEMPLO_FOR; var A, B, R, I : integer; begin for I := 1 to 5 do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; end; end.

Quando executado o programa, o conjunto de instrues situadas abaixo da instruo for sero executadas durante 5 vezes, pois a varivel I (varivel de controle) inicializada com o valor 1 incrementada com mais 1 a cada vez que o processamento passa pela instruo for. Este tipo de estrutura de repetio pode ser utilizado todas as vezes que se tiver necessidade de repetir trechos finitos, ou seja, quando se conhece o nmero de vezes que se deseja repetir tais instrues.

6.2

Instruo while...do

Esta estrutura de repetio se caracteriza por efetuar um teste lgico no incio de um loop, verificando se permitido executar o trecho de instrues abaixo dela. A estrutura while...do tem o seu funcionamento controlado por condio. Desta forma, poder executar um determinado conjunto de instrues enquanto a condio verificada permanecer verdadeira. No momento em que a condio se torna falsa, o processamento da rotina desviado para fora do loop. Sendo a condio falsa logo no incio do loop, as instrues contidas nele so ignoradas. Sintaxe: while <condio> do <instruo para condio verdadeira>; ou while <condio> do begin <instrues para condio verdadeira>; end;

30

Vejamos novamente o exemplo da adio de dois nmeros, utilizado agora a instruo while...do. Ler dois valores inteiros. Realize a adio destes nmeros, armazenando o resultado em uma terceira varivel. Apresente o valor encontrado. Repita esta operao 5 vezes. Algoritmo 1. Criar uma varivel para servir como contador, com valor inicial igual a1; 2. Enquanto o valor do contador for menor ou igual a 5, processar os passos 3, 4 e 5; 3. Ler dois valores (variveis A e B); 4. Efetuar o clculo, armazenando o resultado em R; 5. Apresentar o valor calculado contido na varivel R; 6. Acrescentar ao contador mais 1; e 7. Quando o contador for maior que 5, encerrar o processamento.

Programa em Pascal program EXEMPLO_WHILE_DO1; var A, B, R, I : integer; begin while (I <= 5) do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; I := I + 1; end; end.

Alm da utilizao das variveis A, B e R, foi necessrio criar uma terceira varivel, no caso I, para controlar a contagem do nmero de vezes que o trecho de programa dever ser executado. Imagine ainda uma outra situao, onde o usurio deseja executar a rotina do programa vrias vezes, mas este no sabe quantas vezes ao certo dever executar o trecho de programa. Neste caso no seria conveniente manter um contador para controlar o looping, e sim, seria melhor que o programa fizesse ao usurio uma pergunta, solicitando se o mesmo deseja ou no continuar executando o programa. Vejamos o mesmo exemplo, agora sob esta nova situao: 31

Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para ser utilizada como resposta; Enquanto a resposta for sim, executar os passos 3, 4 e 5; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Quando resposta for diferente de sim, encerrar o processamento.

Programa em Pascal program EXEMPLO_WHILE_DO2; var A, B, R : integer; RESP : string; begin RESP := SIM; while (RESP = SIM) or (RESP = S) do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; write(Deseja continuar ??); readln(RESP); end; end.

No programa acima, o contador foi substitudo pela varivel RESP, que enquanto tiver o seu valor igual a SIM ou igual a S, executar as instrues contidas entre as instrues begin e end do comando while...do. 6.3 Instruo repeat...until

Esta estrutura caracteriza-se por efetuar um teste lgico no final de um looping, sendo parecida com a estrutura while...do. Seu funcionamento controlado tambm por deciso. Esta instruo ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Desta forma, repeat ir processar um conjunto de instrues, no mnimo uma vez, at que a condio se torne verdadeira. Para a estrutura repeat um conjunto de instrues executado enquanto a condio se mantm falsa e at que se torne verdadeira.

32

Sintaxe: repeat <instruo1 at que a condio seja verdadeira> ; <instruo1 at que a condio seja verdadeira> ; <instruo1 at que a condio seja verdadeira> ; until <condio>; Vejamos novamente nosso exemplo da adio, agora utilizando a instruo repeat...until: Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para servir como contador, com valor inicial igual a 1; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Acrescentar o contador com mais 1; Repetir os passos 2, 3 e 4 at que o contador seja maior que 5.

Programa em Pascal program EXEMPLO_REPEAT1; var A, B, R, I : integer; begin I := 1; repeat write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; I := I + 1; until (I > 5); end. Assim que o programa executado, a varivel contador inicializada com valor igual a 1. Em seguida a instruo repeat indica que todo trecho de instrues situado at a instruo until ser executado repetidas vezes at que sua condio se torne verdadeira, ou seja, at que I seja maior que 5. Vejamos o mesmo exemplo, agora considerando que o usurio encerrar a execuo segundo sua vontade.

33

Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para ser utilizada como resposta; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Perguntar ao usurio se deseja continuar executando o programa; e Repetir o passos 2, 3 e 4 at que a resposta do usurio seja no.

Programa em Pascal program EXEMPLO_REPEAT2; var A, B, R : integer; RESP : string; begin RESP := SIM; repeat write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; write(Deseja continuar Sim/No ??); readln(RESP); writeln; until (<RESP <> SIM) and (<RESP <> sim); end.

Assim que o programa executado, a varivel RESP inicializada com o valor SIM. Em seguia, a instruo repeat indica que todas as instrues situadas at a instruo until devero ser executadas at que sua condio se torne verdadeira, ou seja que o usurio responda algo diferente de SIM, e tambm diferente de sim.

34

7 VETORES, MATRIZES E REGISTROS


Ao utilizamos variveis, podemos armazenar apenas um valor por vez. Agora, imagine um programa onde precisa-se armazenar as notas de 5 provas realizadas por um aluno. Com os conhecimentos que voc possui at agora, seria necessrio criar cinco variveis para armazenar as notas. Desta forma: NOTA1, NOTA2, NOTA3, NOTA4, NOTA5 : integer; Em Pascal existem estruturas que nos permitem agrupar vrias informaes dentro de uma mesma varivel. Estas estruturas so chamadas de vetores e matrizes.

7.1

Vetores

Este tipo de estrutura tambm chamado de matriz unidimensional. Um vetor representado por seu nome, tamanho e seu tipo. Sintaxe: <vetor> : array[tamanho]

of

<tipo_de_dado>;

onde: vetor o nome atribudo ao vetor, tamanho o tamanho atribudo ao vetor, em nmero de elementos e tipo_de_dado o tipo de elemento armazenado (inteiro, real...). Como j visto, uma varivel somente pode conter um valor por vez. No caso dos vetores, estes podero armazenar mais de um valor por vez, pois so dimensionados exatamente para este fim. Vejamos como poderamos declarar um vetor para armazenar as cinco notas do aluno: NOTAS : array[1..5] of real; A leitura e exibio de vetores so feitas indicando individualmente quais elementos se deseja ler ou imprimir. Vejamos como inserir as notas do aluno: NOTA[1] := 5.2; NOTA[2] := 8.0; NOTA[3] := 9.2; NOTA[4] := 7.5; NOTA[5] := 8.3; Observe que o nome um s, o que muda a informao indicada dentro dos colchetes. A esta informao d-se o nome de ndice, sendo este o endereo onde o valor est armazenado, ou seja, a nota do aluno. Podemos imaginar o vetor como uma tabela com cinco colunas: NOTA 5.2

8.0

9.2

7.5

8.3 35

Vamos analisar um programa com a utilizao de vetores: Desenvolver um programa que efetue a leitura de 10 elementos de um vetor A Construir um vetor B de mesmo tipo, observando a seguinte lei de formao: se o valor do ndice for par, o valor dever ser multiplicado por 5; sendo mpar, dever ser somado com 5. Ao final, mostrar os contedos dos dois vetores. Algoritmo 1. Iniciar o contador do ndice de um vetor (A), com valor 1 at 10; 2. Ler os 10 valores, um a um; 3. Verificar se o ndice par: a. Se for, multiplica por 5 e atualiza no vetor B; b. Se no for par, soma 5 e atualiza no vetor B. 4. Apresentar o contedo dos dois vetores. Programa em Pascal program EXEMPLO_VETOR; var A, B : array[1..10] of integer; I : integer; begin { *** Entrada dos Dados ***} for I := 1 to 10 do begin write(Informe o valor, I); readln(A[I]); end; { *** Teste Par ou mpar ***} for I := 1 to 10 do if (I mod 2 = 0) then B[I] := A[I] * 5 else B[I] := A[I] + 5; writeln; { *** Apresentao das matrizes ***} for I := 1 to 10 do writeln(A[, I:2,] = , A[I]:2, , B[, I:2, ] = , B[I]:2 ); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Vejamos um exemplo do uso de vetores de strings:

36

Ler e exibir o nome de 10 pessoas. Algoritmo 1. 2. 3. 4. Definir a varivel I do tipo inteira para controlar a repetio; Definir a matriz NOME do tipo string para 10 elementos; Iniciar o programa, fazendo a leitura dos 10 nomes; e apresentar, aps a leitura, os 10 nomes.

Programa em Pascal program LISTA_NOME; var NOME : array[1..10] of string; I: integer; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 10 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; writeln; { *** Apresentao dos Nomes *** } for I := 1 to 10 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Uma forma mais organizada de apresentar o programa acima, seria exibir os nomes das pessoas em ordem alfabtica, contribuindo para uma pesquisa mais fcil. Vejamos como ficaria o programa desta forma:

37

Programa em Pascal program LISTA_NOME_ORDENADO; var NOME : array[1..10] of string; I, J: integer; X : string; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 10 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; { *** Ordenao dos Nomes *** } for I := 1 to 9 do for J := I +1 to 10 do if (NOME[I] > NOME[J]) then begin X := NOME[I]; NOME[I] := NOME[J]; NOME[J] := X; end; { *** Apresentao dos Nomes *** } writeln; for I := 1 to 10 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Observe o algoritmo da troca, utilizado junto da instruo if NOME[I] > NOME[J] then. Aps a verificao desta condio, sendo o primeiro nome maior que o segundo, efetua-se ento a sua troca com a seqncia: X := NOME[I]; NOME[I] := NOME[J]; NOME[J] := X;

38

Considere o vetor NOME[I] com o valor CARLOS e o vetor NOME[J] com o valor ALBERTO. Ao final, NOME[I] dever estar com ALBERTO e NOME[J] dever estar com o valor CARLOS. Para se conseguir este efeito necessria a utilizao de uma varivel de apoio, no caso X. Para que o vetor NOME[I] fique livre para receber o valor do vetor NOME[J], X dever receber o valor de NOME[I], assim sendo X passa a ter o valor CARLOS. Neste momento passa-se o valor de NOME[J] para NOME[I], no caso ALBERTO. Po fim, NOME[J] pode receber o valor de X para receber o valor CARLOS.

7.2

Matrizes

Vamos imaginar que queremos rescrever o programa das notas do aluno, agora mantendo o controle para cinco alunos ao invs de apenas um. Com os conhecimentos adquiridos at agora seria necessrio criar cinco vetores (matrizes unidimensionais), um para cada aluno. Esta uma soluo, e funciona, porm, torna nosso trabalho mais cansativo. Para facilitar o trabalho com estruturas deste porte, existem as chamadas matrizes (ou matrizes multidimensionais, se voc pensar que vetores so matrizes unidimensionais).A mais comum a matriz de duas dimenses. Uma matriz de duas dimenses estar sempre fazendo meno a linhas e colunas e ser representada por seu nome e seu tamanho. Sintaxe: <matriz> : array[dimenso_linha,dimenso_coluna] of <tipo_de_dado>; onde: matriz o nome atribudo matriz, dimenso_linha o tamanho da matriz em nmero de linhas, dimenso_coluna o tamanho da matriz em nmero de colunas e tipo_de_dado o tipo do elemento armazenado(inteiros, reais...). Vejamos como ficaria a matriz das notas dos nossos 5 alunos: Pedro Ana Joana Joao Mauro 8.5 5.0 7.0 8.5 5.5 9.0 6.8 7.5 8.0 8.0 7.8 8.7 7.8 9.2 7.2 8.9 6.5 6.5 7.9 7.0

E como ficaria sua declarao em Pascal: NOTAS : array[1..5,1..4] of real; Vamos ver o programa em Pascal para este exemplo para entenderemos melhor o conceito de matriz:

39

Programa em Pascal program NOTA_ALUNO; var NOTAS : array[1..5,1..4] of real; I, J : integer; begin writeln(Leitura e Apresentacao da Notas); writeln; for I := 1 to 5 do begin writeln; writeln(Informe as notas do , I:2, o. aluno: ); for J:= 1 to 4 do begin write(Nota, J:2, :); readln(NOTAS[I, J]); end; end; writeln; for I:= 1 to 5 do begin write(As notas do aluno , I:2, so: ); for J := 1 to 4 do write(NOTAS[I, J] :2 :2, ); writeln; end; writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Em um exemplo anterior, foi utilizada a varivel I para controlar as posies dos elementos dentro do vetor, ou seja, a posio em nvel de linha. Neste exemplo, a varivel I continua tendo o mesmo efeito e a segunda varivel, J, est controlando a posio da coluna. Analisando o programa, temos a inicializao das variveis I e J como 1, ou seja, a leitura ser efetuada na primeira linha da primeira coluna. Primeiro iniciado o looping das linhas e aps, para cada linha feito o looping para todas as colunas de uma linha. Quando todas as notas (colunas) de um aluno forem preenchidas, passa-se para o prximo aluno (linha), e novamente so preenchidas todas as notas(colunas) para o segundo aluno (linhas). Assim at o final. Vamos ver mais um exemplo para fixarmos nosso conhecimento:

40

Desenvolver um programa de agenda que cadastre o nome, endereo, CEP, bairro e telefone de 10 pessoas. Ao final, o programa dever apresentar seus elementos dispostos em ordem alfabtica, independentemente da ordem em que foram digitados Algoritmo Para resolver este problema, voc dever possuir uma tabela com 10 linhas (pessoas) e 5 colunas (dados pessoais). Assim sendo, imagine esta tabela: Nome 1 2 3 4 5 6 7 8 9 10 Nesta tabela, sero utilizados dois elementos numricos, O CEP e o telefone, mas como no so executados clculos com estes nmeros, eles sero armazenados como caracteres. Depois de cadastrar todos os elementos, ser iniciado o processo de classificao alfabtica, pelo nome de cada pessoa. Este mtodo j foi anteriormente estudado, bastando aplic-lo neste contexto. Porm, aps a comparao do primeiro nome com o segundo, sendo o primeiro maior que o segundo, estes devero ser trocados, bem como os elementos relacionados ao nome tambm. Ao final, as informaes so apresentadas. Programa em Pascal program AGENDA; var DADO : array[1..10,1..5] of string; I, J : integer; X : string; begin { *** Rotina de Entrada ***} writeln(Programa agenda); writeln; for I := 1 to 10 do begin write(Nome......: ); readln(DADO[I,1]); write(Endereo.: ); readln(DADO[I,2]); write(CEP.........: ); readln(DADO[I,3]); write(Bairro.....: ); readln(DADO[I,4]); write(Telefone..: ); readln(DADO[I,5]); Endereo CEP Bairro Telefone

41

writeln; end; { *** Rotina de ordenao e troca de elementos *** } for I := 1 to 9 do for J := I + 1 to 10 do if (DADO[I,1] )> (DADO[J,1]) then begin {Troca Nome} X := DADO[I,1]; DADO[I,1] := DADO[J,1]; DADO[J,1] := X; {Troca Endereo} X := DADO[I,2]; DADO[I,2] := DADO[J,2]; DADO[J,2] := X; {Troca CEP} X := DADO[I,3]; DADO[I,3] := DADO[J,3]; DADO[J,3] := X; {Troca Bairro} X := DADO[I,4]; DADO[I,4] := DADO[J,4]; DADO[J,4] := X; {Troca Telefone} X := DADO[I,5]; DADO[I,5] := DADO[J,5]; DADO[J,5] := X; end; { *** Rotina de Saida ***} for I := 1 to 10 do for J := 1 to 5 do writeln(DADO[I, J]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

42

7.3

Registros

Quando trabalhamos com matrizes percebemos que somente foi possvel agrupar informaes com o mesmo tipo de dados. Caso fosse necessrio trabalhar com mais de um tipo de dado, precisaramos criar matrizes diferentes. Para solucionar esta deficincia podemos utilizar uma estrutura de dados chamada de Registro. Em um registro poderemos utilizar uma estrutura que agrupe vrias informaes, que podem ser de tipos de dados diferentes. Por esta razo, este tipo de dado considerado heterogneo. Em Pascal, os tipos registro devem ser declarados ou atribudos antes das definies das variveis, pois muito comum ocorrer a necessidade de se declarar uma varivel com o tipo de registro atribudo. Um tipo registro declarado em Pascal com a instruo type em conjunto com a instruo record. Sintaxe: type <identificador> = record <lista de campos e seus tipos> end; var <variavel> : <identificador_registro> onde: identificador o nome do tipo registro e lista de campos e seus tipos a relao de variveis que sero usadas como campos, bem como seu tipo(real, integer...). Aps a instruo var, dever ser indicada uma varivel tipo registro e a declarao do seu tipo de acordo com um identificador definido anteriormente. Perceba que a instruo type dever ser utilizada antes da instruo var, pois, ao definir um tipo de varivel, pode-se fazer uso deste tipo definido. Vamos novamente analisar o exemplo do aluno e suas 4 notas, considerando, agora, que devemos armazenar o nome deste aluno e suas 4 notas em uma mesma estrutura. Programa em Pascal program EX_REGISTRO1; type CAD_ALUNO = record NOME : string; NOTA1 : real; NOTA2 : real; NOTA3 : real; NOTA4 : real; end; var ALUNO : cad_aluno; begin writeln(Cadastro de Aluno); writeln; write(Informe o nome..............: );

readln(ALUNO.NOME); 43

write(Informe a primeira nota..: ); readln(ALUNO.NOTA1); write(Informe a segunda nota...: ); readln(ALUNO.NOTA2); write(Informe a terceira nota....: ); readln(ALUNO.NOTA3); write(Informe a quarta nota......: ); readln(ALUNO.NOTA4); writeln; writeln(Nome..: , ALUNO.NOME); writeln(Nota 1.: , ALUNO.NOTA1 :2:2); writeln(Nota 2.: , ALUNO.NOTA2 :2:2); writeln(Nota 3.: , ALUNO.NOTA3 :2:2); writeln(Nota 4.: , ALUNO.NOTA4 :2:2); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end. Perceba que o registro est sendo denominado como CAD_ALUNO, o qual ser um conjunto de dados heterogneos (um campo tipo string e quatro do tipo real). Desta forma, possvel guardar em uma mesma estrutura, vrios tipos diferentes de dados. Para armazenar as notas do aluno foram necessrias 4 variveis. E se utilizssemos um vetor para armazenar as notas, como j fizemos anteriormente? Vejamos como ficar: Programa em Pascal program EXEMPLO_REGISTRO2; type NOTAS = array[1..4] of real; CAD_ALUNO = record NOME : string; NOTA : notas; end; var ALUNO : cad_aluno; I : integer; begin writeln(Cadastro de Aluno); writeln; write(Informe o nome..............: ); readln(ALUNO.NOME); writeln; for I := 1 to 4 do begin write(Informe a , I:2, a. nota..: ); readln(ALUNO.NOTA[I]); end; writeln; writeln(Nome..: , ALUNO.NOME); for I := 1 to 4 do writeln(Nota ,I, ...: , ALUNO.NOTA[I]:2:2); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

44

At agora, os dois exemplos apresentados s servem para a leitura e exibio das notas de um aluno. E se quisssemos apresentar as notas de cinco alunos, como fizemos utilizando matrizes? Vamos ver como ficaria um programa assim: Programa em Pascal program EXEMPLO_REGISTRO3; type NOTAS = array[1..4] of real; CAD_ALUNO = record NOME : string; NOTA : notas; end; var ALUNO : array[1..5] of cad_aluno; I , J: integer; begin writeln(Cadastro de Aluno); writeln; for J := 1 to 5 do begin write(Informe o nome do , J:2, o. aluno...: ); readln(ALUNO[J].NOME); writeln; for I := 1 to 4 do begin write(Informe a , I:2, a. nota...............: ); readln(ALUNO[J].NOTA[I]); end; writeln; end; writeln; writeln; for J := 1 to 5 do begin writeln(Nome aluno , J:2, ...: , ALUNO[J].NOME); writeln; for I := 1 to 4 do writeln(Nota ,I, ............: , ALUNO[J].NOTA[I]:2:2); writeln; end; writeln(Tecle <ENTER> para encerrar: ); readln; end.

45

8 PROCEDURES E FUNCTIONS
At agora temos desenvolvido programas que englobam a lgica completa do algoritmo para a soluo de um determinado problema. comum, em programao, decompor a lgica de programas complexos em programas menores e, depois, junt-los para compor o programa final. Essa tcnica de programao denominada programao modular. A programao modular consiste num mtodo para facilitar a construo de grandes programas, atravs de sua diviso em pequenas etapas, que so os mdulos ou rotinas e para possibilitar o reaproveitamento de cdigo, j que podemos utilizar um mdulo quantas vezes for necessrio, eliminando assim a necessidade de escrever o mesmo cdigo do programa em situaes repetitivas. Outra importncia da modularizao que ela permite que diferentes programadores trabalhem simultaneamente na soluo de um mesmo problema, atravs da codificao separada dos diferentes mdulos. A modularizao, em Pascal, pode ser feita atravs de procedimentos (procedures) e funes (functions). Isso feito associando-se um nome a uma seqncia de comandos atravs do que chamamos Declarao do Procedimento ou da Funo. Pode-se, ento, usar o nome do procedimento ou da funo dentro do corpo do programa, sempre que desejarmos que o seu bloco de comandos seja executado, isso o que chamamos de Chamada do Procedimento ou da Funo. Alm das rotinas desenvolvidas pelo usurio, existe na linguagem Pascal, um conjunto de rotinas embutidas. Este tipo de rotina embutida conhecido pelo nome de unidade (do ingls, unit).

8.1

Utilizao de Units

Vejamos de forma bsica as units embutidas no Turbo Pascal. As units so conjuntos de rotinas prontas para serem usadas pelo programador. Uma unit , na verdade, uma biblioteca de funes e procedimentos. Vejamos a lista das unidades do Pascal: CRT: esta unidade a mais utilizada na programao Pascal. Ela possui a maior parte das rotinas e variveis de gerao de som, controle de vdeo e teclado; DOS: esta unidade possui as rotinas que envolvem a utilizao do sistema operacional, na maior parte das vezes permitindo controles de baixo nvel; GRAPH: esta unidade possui rotinas destinadas manipulaes grficas; OVERLAY: esta unidade possibilita gerenciar as atividades de um programa, desta forma, possvel aproveitar uma mesma rea de memria para rodar vrias rotinas diferentes, economizando memria; PRINTER: esta unidade permite declarar um arquivo tipo texto com o nome LST e associ-lo impressora; e SYSTEM: esta unidade possui a maior parte das rotinas padro da linguagem Pascal, no necessitando ser citada para ser usada, pois o turbo Pascal j a executa de forma automtica. 46

Para se fazer uso deste recurso necessrio o uso da instruo uses situada antes da declarao da instruo var. Sintaxe: uses <unidade>; medida que formos estudando procedimentos e funes veremos a utilizao das units.

8.2

Procedures

Um procedimento uma estrutura de programa autnoma que est includa num programa em Pascal. Nele podem ser colocados todos os elementos da linguagem Pascal, como se fosse um programa completo; isso feito atravs de sua declarao. Um procedimento pode ser referido escrevendo simplesmente o seu nome seguido de um lista opcional de parmetros. Quando um procedimento referenciado, o controle de execuo do programa automaticamente transferido para o incio do procedimento. As instrues de execuo dentro do procedimento so ento executadas, tendo em conta quaisquer declaraes especiais que sejam nicas para o procedimento. Quando todas as instrues de execuo tiverem sido executadas, o controle passa automaticamente para a instruo imediatamente a seguir da chamada do procedimento. Sintaxe: procedure Nome( parametros ) var <variveis> begin <instrues> end; onde: nome o nome atribudo ao procedimento e parametros so informaes adicionais que sero vistas mais tarde. A linguagem Pascal exige que os procedimentos sejam definidos antes do programa principal Para entendermos melhor o conceito de procedimento vamos fazer um exemplo. Desenvolver um programa calculadora que apresente um menu de selees no programa principal. Este menu dever dar ao usurio a possibilidade de escolher uma entre duas operaes aritmticas. Escolhida a opo desejada, dever ser solicitada a entrada de dois nmeros, e processada a operao, dever ser exibido o resultado. Algoritmo Note que este programa dever ser um conjunto de cinco rotinas sendo uma principal e 2 secundrias. A rotina principal efetuar o controle sobre as duas rotinas secundrias, que por sua vez efetuaro o pedido de leitura de dois valores, faro a operao e apresentaro o resultado obtido. Tendo-se uma idia da estrutura geral do 47

programa, ser escrito em separado cada algoritmo com os seus detalhes de operao. Primeiro o programa principal e depois as outras rotinas. Programa principal 1. Apresentar um menu de seleo com cinco opes: a. Adio b. Multiplicao c. Fim de Programa 2. Ao ser selecionado um valor, procedimento correspondente dever ser executado; e 3. Ao se escolher o valor 3 (c), o programa dever ser encerrado. Rotina 1 Adio 1. Ler dois valores, no caso, variveis A e B; 2. Efetuar a soma das variveis A e B, armazenando o resultado na varivel X; 3. Apresentar o valor da varivel X; e 4. Voltar ao programa principal. Rotina 1 Multiplicao 1. Ler dois valores, no caso, variveis A e B; 2. Efetuar a multiplicao das variveis A e B, armazenando o resultado na varivel X; 3. Apresentar o valor da varivel X; e 4. Voltar ao programa principal.

Programa em Pascal program CALCULADORA; uses Crt; var OPCAO : char; { ** Procedimento de Soma ** } procedure ADICAO; var X, A, B : real; TECLA : char; begin clrscr; gotoxy(32,1); write(Procedimento de Adicao); gotoxy(5,6); write(Informe um valor para A: ); readln(A); gotoxy(5,7); write(Informe um valor para B: ); readln(B); X := A + B; gotoxy(5,10); write(O resultado e: , X:4:2); 48

gotoxy(25,24); writeln(Tecle algo para voltar ao menu); TECLA := readkey; end; { ** Procedimento de Multiplicacao ** } procedure MULTIPLICA; var X, A, B : real; TECLA : char; begin clrscr; gotoxy(32,1); write(Procedimento de Multiplicacao); gotoxy(5,6); write(Informe um valor para A: ); readln(A); gotoxy(5,7); write(Informe um valor para B: ); readln(B); X := A * B; gotoxy(5,10); write(O resultado e: , X:4:2); gotoxy(25,24); writeln(Tecle algo para voltar ao menu); TECLA := readkey; end; { ** Programa Principal **} begin OPCAO := 0 while (OPCAO <> 3) do begin clrscr; gotoxy(33,1); write(Menu Principal); gotoxy(28,6); write(1. Soma....................); gotoxy(28,8); write(2. Multiplicacao.......); gotoxy(28,10); write(3. Fim do Programa.); gotoxy(28,12); write(Escolha uma opcao:); readln(OPCAO); if (OPCAO = 1) then Adicao; if (OPCAO = 2) then Multiplica; end; end.

49

Como voc j deve ter percebido, uma das unidades foi utilizada neste programa: a CRT, e com ela apareceram algumas novas instrues, tais como gotoxy, clrscr e readkey. Vamos ver a funcionalidade destas instrues: Instruo clrscr gotoxy (coluna,linha) Tipo Funcionalidade Procedure Efetua a limpeza da tela, posicionando o cursor do lado esquerdo superior. Procedure Permite posicionar o cursor em ponto da tela. Para utiliz-lo necessrio informar dois parmetros: a coluna e linha para posicionamento. Function Permite retornar o valor da tecla pressionada, sendo este valor do tipo caractere. Quando utilizada em um programa, e esta funo faz a leitura de apenas um caractere. Por esta razo, no necessita ser usada a tecla <ENTER> para confirmar a entrada da informao

readkey

Podemos simplificar nosso programa com a utilizao da instruo condicional, semelhante ao if...then, chamada case...of Sintaxe: case <variavel> of <opcao1> : <instrucao1>; <opcao2> : <instrucao2>; <opcao3> : <instrucao3>; else <instruo4>; end; onde: variavel o nome da varivel a ser controlada na deciso, opcao o contedo da varivel a ser verificado e instrucao a execuo de um comando ou bloco de comandos. Lembre-se que voc pode inserir um bloco de instrues aps uma instruo condicional. Para isto basta colocar as instrues entre begin e end. Vejamos um trecho do programa da calculadora, com o uso da instruo case...of.

50

Programa em Pascal { ** Programa Principal **} begin OPCAO := 0 while (OPCAO <> 3) do begin clrscr; gotoxy(33,1); write(Menu Principal); gotoxy(28,6); write(1. Soma....................); gotoxy(28,8); write(2. Multiplicacao.......); gotoxy(28,10); write(3. Fim do Programa.); gotoxy(28,12); write(Escolha uma opcao:); readln(OPCAO); if (OPCAO <> 3) then case OPCAO of 1 : Adicao; 2 : Multiplica; else gotoxy(27,24); writeln(Opcao invalida Tecle algo: ); OPCAO := readkey; end; end; end.

No programa da calculadora voc deve ter observado que utilizamos algumas variveis dentro dos procedimentos (A, B e X), e tambm uma varivel fora das rotinas (OPCAO). Estas variveis so chamadas de locais e globais, respectivamente.

8.2.1 Variveis Globais e Locais Uma varivel considerada Global quando declarada no incio de um programa escrito em Pascal, podendo ser utilizada por qualquer procedimento ou funo. Assim sendo, este tipo de varivel passa a ser visvel a todas as funes ou procedimentos. No programa anterior, a varivel OPCAO uma varivel global. Uma varivel considerada Local quando declarada dentro de uma funo ou procedimento, sendo somente vlida dentro da qual est declarada. Desta forma, as demais rotinas e o programa principal no podero fazer uso daquelas variveis como Global, pois no visualizam a existncia das mesmas. No programa anterior, as variveis A, B e X so locais. Por este motivo esto sendo declaradas repetidas vezes dentro de cada procedimento. Dependendo da forma como se trabalha com as varveis, possvel economizar espao em memria, tornando o programa mais eficiente.

51

8.3

Parmetros

Os parmetros tm por finalidade servir como um ponto de comunicao entre uma rotina e o programa principal, ou com outra rotina de nvel mais alto. Desta forma, possvel passar valores de uma rotina a outra rotina, atravs do uso de parmetros que podero ser formais ou reais. Sero considerados parmetros formais quando forem declarados atravs de variveis juntamente com a identificao do nome da rotina, os quais sero tratados exatamente da mesma forma que so tratadas as variveis globais ou locais. Vejamos um exemplo: procedure CALC_ADICAO(A, B : integer); var Z : integer; begin Z := A + B; writeln(Z); end;

Observe que Z uma varivel local e est sendo usada para armazenar a soma das variveis A e B que representam os parmetros formais da rotina CALC_ADICAO Sero considerados parmetros Reais quando estes substiturem os parmetros formais, quando da utilizao da rotina por um programa principal ou por uma rotina chamadora. Vejamos um exemplo do programa principal que chama o procedimento CALC_ADICAO begin readln(X); readln(Y); Calc_Adicao(X,Y); readln(W); readln(T); Calc_Adicao(W,T); Calc_Adicao(6, 4); end.

No trecho acima, toda vez que a rotina CALC_ADICAO chamada, faz-se uso de parmetros reais. Desta forma, so parmetros reais as variveis X, Y, W e T, pois so fornecidos seus valores para as rotinas. Vejamos agora o programa completo:

52

Programa em Pascal procedure CALC_ADICAO(A, B : integer); var Z : integer; begin Z := A + B; writeln(Z); end; var X, Y, W, T : integer; begin readln(X); readln(Y); Calc_Adicao(X,Y); readln(W); readln(T); Calc_Adicao(W,T); Calc_Adicao(6, 4); end.

A passagem de parmetro ocorre quando feita uma substituio dos parmetros formais pelos reais no momento da execuo da rotina. Estes parmetros sero passados de duas formas: por valor e por referncia.

8.3.1 Passagem por Valor A passagem de parmetro por valor caracteriza-se pela no alterao do valor do parmetro real, quando este manipulado dentro da rotina. Assim sendo, o valor passado pelo parmetro real copiado para o parmetro formal, que no caso assume o papel de varivel local da rotina. Desta forma, qualquer modificao que ocorra na varivel local da rotina no afetar o valor do parmetro real correspondente. Vejamos um exemplo utilizando passagem de parmetro por valor:

53

Programa em Pascal program FATORIAL; uses Crt; procedure FATOR(N : integer); var I, FAT : integer; begin FAT := 1; for 1 to N do FAT := FAT * I; writeln(A fatorial de , N, equivale a: , FAT); end; var LIMITE : integer; begin clrscr; writeln(Programa Fatorial); writeln; write(Informe um valor inteiro: ); readln(LIMITE); Fatorial (LIMITE); writeln(Tecle <ENTER> para encerrar o programa); readln; end.

8.3.2 Passagem por Referncia A passagem de parmetro por referncia caracteriza-se pela ocorrncia da alterao do valor do parmetro real quando o parmetro formal manipulado dentro da rotina chamada. Desta forma, qualquer modificao feita no parmetro formal, implica em alterao no parmetro real correspondente. A alterao efetuada devolvida para a rotina chamadora. Vejamos novamente o exemplo do programa FATORIAL agora com passagem de parmetros por referncia:

54

program FATORIAL2; uses Crt; procedure FATOR(N : integer; var FAT : integer); var I : integer; begin FAT := 1; for 1 to N do FAT := FAT * I; end; var LIMITE, RETORNO : integer; begin clrscr; writeln(Programa Fatorial); writeln; write(Informe um valor inteiro: ); readln(LIMITE); Fatorial (LIMITE, RETORNO); writeln(A fatorial de , LIMITE, equivale a: , RETORNO); writeln(Tecle <ENTER> para encerrar o programa); readln; end.

Neste exemplo, indicado o uso da passagem de parmetro por referncia. A varivel N continua sendo uma varivel do tipo passagem por valor, pois esta receber o valor de LIMITE. Este valor estabelece quantas vezes o looping deve ser executado. Dentro da rotina encontrada a varivel FAT que do tipo passagem de parmetro por referncia. Ao trmino do looping o valor da varivel FAT transferido para fora da rotina, ou seja, seu valor transferido para a varivel RETORNO.

8.4

Functions

Uma function, assim com uma procedure, um bloco de programa, ao qual so vlidas todas as regras estudadas de programao. Sua diferena em relao a uma procedure est no fato de retornar sempre um valor. O valor de uma funo retornado no prprio nome da funo. Quando se diz valor, devem ser levados em conta os valores numricos, lgicos ou literais. Sintaxe: function <nome> [(parmetros)] : <tipo>; var <variaveis> ; begin <instrucoes>; end; 55

onde: nome o nome atribudo a uma funo, parmetro uma informao opcional e tipo o tipo de dado a ser retornado pela funo. Vejamos o exemplo da procedure do Fatorial agora, na forma de funo: Programa em Pascal function FATOR(N : integer) : integer; var I, FAT : integer; begin FAT := 1; for 1 to N do FAT := FAT * I; FATOR := FAT; end;

Observe que o nome da funo, no caso FATOR, tambm o nome da varivel interna que recebe o valor acumulado da varivel FAT, caso o nmero fornecido para o parmetro no seja zero. muito simples, o resultado da funo atribudo ao prprio nome da funo. A definio de tipo de dado fora do parnteses, na declarao da funo, indica o tipo de dado que retornar rotina chamadora. Vejamos um exemplo completo do uso de funes: Desenvolver um programa que faa uso de uma rotina de funo que retorne o valor da adio de dois valores fornecidos como parmetros. Algoritmo Programa Principal: 1. Ler dois valores, no caso as variveis NUM1 e NUM2; 2. Chamar a funo de soma, fornecendo como parmetros as duas variveis; e 3. Apresentar o resultado retornado. Rotina para Adio: 1. Receber dois valores fornecidos atravs de parmetros; 2. Efetuar o clculo entre os dois valores, no caso a adio; e 3. Retornar para a funo o resultado obtido.

56

Programa em Pascal program CALC_ADICAO; uses Crt; function ADICAO (A, B : real) : real; begin ADICAO := A + B; end; var NUM1, NUM2 : real; begin clrscr; write(Informe o 1o. valor : ); readln(NUM1); write(Informe o 2o. valor : ); readln(NUM2); writeln; writeln(O resultado da adicao = , Adicao(NUM1, NUM2) :2:2 ); writeln(Tecle <ENTER> para encerrar o program); readln; end.

57

9 ARQUIVOS
Anteriormente foi estudado o conceito de vetores e matrizes para armazenar informaes. Depois foi estudado o tipo registro. Porm, estas informaes so armazenadas na memria RAM de nosso computador, permanecendo l apenas at que nosso programa encerre a execuo. Para que possamos armazenar nossas informaes fisicamente, de forma a recuperarmos tais informaes quando quisermos surge o conceito de arquivos, que permite que gravemos nossas informaes em dispositivos fsicos, tais como o winchester e os disquetes. A principal vantagem na utilizao de um arquivo est no fato de as informaes poderem ser utilizadas a qualquer momento. Outra vantagem encontrada na utilizao de arquivos o fato de poder armazenar um nmero maior de informaes do que as de memria, estando apenas limitado ao tamanho do meio fsico para sua gravao.

9.1

Definio de um Arquivo

A manipulao de um arquivo em Pascal ocorre com a definio do tipo file, o qual se caracteriza por ser uma estrutura formada por elementos do mesmo tipo dispostos de forma seqencial, tendo como finalidade fazer a comunicao entre a memria principal e a memria secundria. Sintaxe: type <arquivo> = [text][file [of <tipo>]]; var <variavel> : <arquivo>; ou <variavel> : [text][file [of <tipo>]]; onde: arquivo o nome de um arquivo com tipo definido, tipo o tipo de um arquivo (text, string, real, record, etc...) e variavel a varivel que ser usada para representar o arquivo.

9.2

Operaes de um Arquivo

Um arquivo tem a capacidade de executar algumas operaes, tais como: abertura, leitura ou escrita e fechamento de um arquivo, sendo que estas operaes, em Pascal, possuem algumas instrues apropriadas. Vejamos:

58

Instruo assign

rewrite

reset

write

read

close

Tipo Sintaxe Descrio procedure assign (<variavel>, <arquivo>) Tem por finalidade associar um nome lgico de arquivo ao arquivo fsico. o parmetro <variavel> a indicao da varivel do tipo arquivo, e <arquivo> o nome do arquivo a ser manipulado rewrite (<variavel>) procedure Tem por finalidade criar um arquivo para uso, utilizando o nome associado ao parmetro <variavel>. Caso o arquivo j exista, esta instruo o apagar para cri-lo novamente. procedure Tem por finalidade abrir um reset (<variavel>) arquivo existente, colocando-o disponvel par leitura e gravao, utilizando o nome associado ao parmetro <variavel>. write(<variavel>,<dado>) procedure Tem por finalidade escrever a informao <dado> no arquivo indicado pelo parmetro <variavel>. read(<variavel>,<dado>) procedure Tem por finalidade ler a informao <dado> no arquivo indicado pelo parmetro <variavel>. close(<variavel>) procedure Tem por finalidade fechar um arquivo em uso dentro de um programa. nenhum programa deve ser encerrado sem antes fechar os arquivos abertos.

9.3

Formas de Acesso em um Arquivo

Os arquivos criados podero ser acessados para leitura e gravao na forma seqencial, direta ou indexada.

9.3.1 Acesso Seqencial O acesso seqencial ocorre quando o processo de gravao e leitura feito de forma contnua, um aps o outro. Desta forma, para se gravar a informao necessrio percorrer todo o arquivo a partir do primeiro registro, at localizar a primeira posio vazia. A leitura tambm ocorre desta maneira.

59

9.3.2 Acesso Direto O acesso direto ocorre atravs de um campo chave previamente definido. Desta forma, passa a existir um vnculo existente entre um dos campos do registro e sua posio de armazenamento, atravs da chave. Assim sendo, o acesso a um registro tanto para leitura como para gravao poder ser feito de forma instantnea.

9.3.3 Acesso Indexado O acesso indexado ocorre quando se acessa de forma direta um arquivo seqencial. Na sua maioria, todo arquivo criado armazena os registros de forma seqencial. A forma seqencial de acesso se torna inconveniente, pois medida que o arquivo aumenta de tamanho, aumenta tambm o tempo de acesso ao mesmo. Por isso, cria-se um ndice de consulta, passando a ser esse arquivo indexado. Existiro dois arquivos, um seqencial e outro indexado. Os acessos sero feitos com em um livro: primeiro se consulta o ndice de localizao, e depois procura-se o contedo desejado.

9.4

Arquivos do Tipo Texto

Os arquivos do tipo texto esto capacitados a armazenar palavras, frases e tambm dados numricos. Os nmeros, entretanto, sero armazenados com um caractere do tipo alfanumrico. Ao serem lidos de um arquivo e passados para a memria, os dados numricos so convertidos para seu formato original. Vamos criar um arquivo do tipo texto: program CRIA_ARQUIVO_TEXTO; var ARQUIVO_TXT : text; begin assign(ARQUIVO_TXT, ARQTXT.XXX); rewrite(ARQUIVO_TXT); close(ARQUIVO_TXT); end.

O programa acima estabelece para a varivel ARQUIVO_TXT o identificador text, que tem por finalidade definir para a varivel indicada o tipo de arquivo texto. Tendo sido o arquivo criado, este poder ser agora utilizado para a gravao das informaes que ir guardar. Vejamos:

60

program GRAVA_ARQUIVO_TEXTO; var ARQUIVO_TXT : text; : string[50]; MENSAGEM begin assign(ARQUIVO_TXT, ARQTXT.XXX); append(ARQUIVO_TXT); readln(MENSAGEM); writeln(ARQUIVO_TXT, MENSAGEM); close(ARQUIVO_TXT); end.

Observao: quando a instruo write ou writeln utilizada para escrever um dado em um arquivo, esta no apresenta o dado no vdeo, ficando disponvel apenas para a operao de gravao do arquivo. A seguir, necessrio podermos ler nosso arquivo texto. O programa abaixo mostra como fazemos isto: program LER_ARQUIVO_TEXTO; var ARQUIVO_TXT : text; : string[50]; MENSAGEM begin assign(ARQUIVO_TXT, ARQTXT.XXX); reset(ARQUIVO_TXT); readln(ARQUIVO_TXT , MENSAGEM); writeln( MENSAGEM); close(ARQUIVO_TXT); end.

9.5

Arquivos com Tipo Definido

Os arquivos com tipo definido caracterizam-se por serem do tipo binrio, diferente dos arquivos do tipo texto. Este arquivo permite armazenar especficos, podendo ser: integer, real, record, entre outros. Um arquivo com tipo definido executa as operaes de gravao e leitura mais rpido que os arquivos texto. Os arquivos de tipo definido esto capacitados a armazenar dados na forma de registro. Vamos criar um arquivo que seja capacitado a receber dados numricos inteiros: program CRIA_ARQUIVO_INTEIRO; var ARQUIVO_INT : file of integer; begin assign(ARQUIVO_INT, ARQINT.XXX); rewrite(ARQUIVO_INT); close(ARQUIVO_INT); end. 61

O programa acima estabelece para a varivel ARQUIVO_INT o identificador file of integer, que tem a finalidade de definir para a varivel indicada de arquivo como sendo inteiro. Todas as operaes so semelhantes s operaes usadas para se criar um arquivo texto Estando o arquivo criado, este agora poder ser utilizado para a gravao de dados de tipo inteiro. Vejamos program CADASTRA_ARQUIVO_INTEIRO; uses Crt; var ARQUIVO_INT : file of integer; : integer; NUMERI :char; RESP begin assign(ARQUIVO_INT, ARQINT.XXX); reset(ARQUIVO_INT); RESP := S; while (RESP = S) or (RESP = s) do begin clrscr; writeln(Gravacao de Registros Inteiros); writeln; seek(ARQUIVO_INT, filesize(ARQUIVO_INT)); write(Informe um numero inteiro: ); readln(NUMERO); write(ARQUIVO_INT, NUMERO); writeln; write(Deseja continuar ? [S/N] ); readln(RESP); end; close(ARQUIVO_INT); end.

O programa acima utiliza a funo assign para associar o arquivo varivel de controle. Faz uso da instruo reset para abrir o arquivo. Um pouco abaixo seek(ARQUIVO_INT, apresentada uma linha com a instruo filesize(ARQUIVO_INT)); que executa em um arquivo definido o mesmo efeito que a instruo append em um arquivo texto, ou seja, se o arquivo j possuir algum registro, o prximo registro ser sempre colocado aps o ltimo cadastrado. A instruo filesize retorna o nmero de registros do arquivo e a instruo seek posiciona o ponteiro de registro em uma determinada posio do arquivo. Vamos agora ver um programa, que ir efetuar a leitura em um arquivo do tipo definido: Ler um arquivo de nmeros inteiros, mostrando no vdeo a informao armazenada com o programa anterior.

62

program CADASTRA_ARQUIVO_INTEIRO; uses Crt; var ARQUIVO_INT : file of integer; : integer; NUMERI :char; RESP begin assign(ARQUIVO_INT, ARQINT.XXX); reset(ARQUIVO_INT); RESP := S; while not eof(ARQUIVO_INT) do begin read(ARQUIVO_INT, NUMERO); writeln(NUMERO); end; close(ARQUIVO_INT); end.

9.6

Arquivo com Tipo Definido de Registro

Em Pascal, existe um arquivo do tipo record, que nos permite desenvolver uma aplicao de forma mais profissional e com acessos mais rpidos. Sintaxe: type <nome_arquivo> = record <campos do arquivo> end; var <variavel> : <nome_arquivo>; <variavel> : file of <nome_arquivo>;

Vejamos um exemplo: type BIMESTRE = array[1..4] of real; REG_ALUNO = record FLAG : char; MATRICULA : integer; NOME : string[30]; NOTAS : bimestre; end; var ALUNO : reg_aluno; ARQALU : file of reg_aluno;

63