Transcript of Apostila pascal
- 1. APOSTILA DE TCNICAS DE PROGRAMAO E LINGUAGEM PASCAL
- 2. 2 SUMRIO 1 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 PASCAL
.............................................................................................................7
1.4.1 Histrico
.........................................................................................................................7
1.4.2 O Turbo Pascal
...............................................................................................................7
2 ESTRUTURA DE UM PROGRAMA EM
PASCAL..................................................................9
2.1 CABEALHO DO PROGRAMA
......................................................................................................9
2.2 REA DE
DECLARAES............................................................................................................9
2.3 CORPO DO
PROGRAMA.............................................................................................................10
2.4 EXEMPLO DE UM PROGRAMA EM PASCAL
.................................................................................10
3 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
4 OPERADORES E
EXPRESSES............................................................................................17
4.1 PRIORIDADE DAS OPERAES
..................................................................................................17
4.2 TIPOS DE EXPRESSES
.............................................................................................................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
5 ESTRUTURAS DE DECISO
.................................................................................................24
5.1 A INSTRUO IF..THEN
............................................................................................................24
5.2 A INSTRUO IF...THEN...ELSE
.................................................................................................26
6 ESTRUTURAS DE REPETIO
(LOOPS)............................................................................29
6.1 INSTRUO FOR
......................................................................................................................29
6.2 INSTRUO WHILE...DO
...........................................................................................................30
6.3 INSTRUO REPEAT...UNTIL
.....................................................................................................32
7 VETORES, MATRIZES E
REGISTROS.................................................................................35
7.1
VETORES.................................................................................................................................35
7.2
MATRIZES...............................................................................................................................39
7.3
REGISTROS..............................................................................................................................43
8 PROCEDURES E FUNCTIONS
..............................................................................................46
8.1 UTILIZAO DE
UNITS.............................................................................................................46
- 3. 3 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 TIPO TEXTO
......................................................................................................60
9.5 ARQUIVOS COM TIPO DEFINIDO
...............................................................................................61
9.6 ARQUIVO COM TIPO DEFINIDO DE REGISTRO
............................................................................63
- 4. 4 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.
- 5. 5 LINGUAGEM CARACTERSTICAS Linguagem de Mquina nica
compreendida pelo computador. Especfica de cada computador.
Linguagens de Baixo Nvel Utiliza mnemnicos para representar
instrues elementares Ex.: Assembly Linguagens de Alto Nvel 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;
- 6. 6 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;
- 7. 7 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:
- 8. 8 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
- 9. 9 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;
- 10. 10 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.
- 11. 11 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.
- 12. 12 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 O
smbolo % no permitido 4Vendedor No pode comear com um nmero Soma
Total 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:
- 13. 13 and downto In packed to array else inline procedure type
asm End interface program unit begin File Label record until case
For mod repeat until const Foward nil set uses constructor Function
not shl var destructor Goto object shr while div If of string with
do implementation or then 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 Faixa de abrangncia
Tamanho(bytes ) shortint de 128 at 127 1 byte integer de 32.768 a
32.767 2 bytes longint de 2.147.483.648 a 2.147.483.647 4 bytes
byte de 0 at 255 1 byte word de 0 at 65535 2 bytes
- 14. 14 Vejamos um exemplo: var NumAlunos : integer; Cont,cont1
: 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 Faixa de abrangncia
Tamanho(bytes ) real de 2.9 e-39 at 1.7 e38 6 bytes single de 1.5
e-45 at 3.4 e38 4 bytes double de 5.0 e-324 at 1.7e308 8 bytes
extended de 3.4 e-4.932 at 1.1 e4.932 10 bytes comp de 9.2 e18 at
9.2 e18 8 bytes Vejamos um exemplo: var Nota : real; Salario, media
: real; 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;
- 15. 15 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 : real; Idade, Contador : 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:
- 16. 16 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 = , Comprimento );
end.
- 17. 17 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 Categoria ( ) Parntesis not Operador
Lgico Unrio * / div mod Operadores Multiplicativos and or
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.
- 18. 18 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 Smbolo Subtrao - Adio + Multiplicao
* Diviso Real / Diviso Inteira ( truncada ) div Resto da Diviso
Inteira mod Inverte Sinal - Mantm Sinal + TABELA 4.1 OPERADORES
ARITMTICOS
- 19. 19 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; {
errado, D real } B := 10 div 3; A := 10 mod 3; C := D / C; D := 10
div C; { errado, o operado div s para inteiros } A := -1; B := 5 +
A; B := -A; C := D * A; B := C * B; { errado, C real } end. 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.
- 20. 20 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 Smbolo Maior que > Menor que < Maior ou
igual >= Menor ou igual 0) inteiro ou real real exp(ln(x)*y)
Retorna x elevado a y {utilizando regras de logaritmos}. Inteiro ou
real real sin( x ) Calcula o seno de x em radianos inteiro ou real
real sqr( x ) Calcula o quadrado de x inteiro ou real o mesmo que x
sqrt( x ) Calcula a raiz quadrada de x (x>=0) inteiro ou real
real odd( x ) Determina se x par ou impar TRUE, X par / FALSE, X
impar inteiro boolean random( x ) Retorna um nmero pseudo-aleatrio
entre 0 e x. Se x no for especificado retorna um valor entre 0.0 e
1.0 inteiro real pi Retorna o valor de PI (3.1415...) Nenhum
real
- 23. 23 Funes Literais: Nome Funo Objetivo Tipo Parmetro Tipo
Retorno length( x ) Determina o nmero de caracteres de x string
inteiro concat( x1, x2, x3,...) Concatena duas ou mais strings (mx
255 caracteres) string string copy( x, y, z ) Retorna uma subcadeia
da cadeia x, com z caracteres, comeando no caracter y. string,
inteiro, inteiro string UpCase( x ) Retorna x convertido para
maiscula char char Funes para Converso: Nome Funo Objetivo Tipo
Parmetro Tipo Retorno trunc( x ) Trunca x para um nmero inteiro
real inteiro int( x ) Retorna a parte inteira de x real real frac(
x ) Retorna a parte fracionria de x real real round( x ) Arredonda
x para um inteiro real inteiro chr( x ) Determina o caracter ASCII
representado por x inteiro char Funes e Procedimentos de Uso Geral:
Nome Funo Objetivo Tipo Parmetro Tipo do Retorno sizeof( x )
Retorna o nmero de byte de x qualquer tipo inteiro gotoxy(x,y) Move
o curso para a coluna x e linha y inteiro
- 24. 24 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: a instruo de deciso simples if...then;
e a instruo de deciso composta if...then...else. 5.1 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 then ; ; 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
then begin end;
- 25. 25 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.
- 26. 26 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 then else ; Caso venha a existir
mais de uma instruo verdadeira ou falsa para uma condio, estas
devero estar inseridas em um bloco. Sintaxe: if then begin ; ; end
else begin ; ; end; 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.
- 27. 27 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 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.
- 29. 29 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 := to/downto do instruo; ou for variavel := to/downto
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. Criar uma varivel para servir como contador,
que ir variar de 1 at 5; 2. Ler dois valores (variveis A e B); 3.
Efetuar o clculo, armazenando o resultado em R; 4. Apresentar o
valor calculado contido na varivel R; 5. Repetir os passos 2, 3 e 4
at que o contador seja encerrado.
- 30. 30 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 do ;
ou while do begin ; end;
- 31. 31 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);
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.
- 34. 34 Algoritmo 1. Criar uma varivel para ser utilizada como
resposta; 2. Ler dois valores (variveis A e B); 3. Efetuar o
clculo, armazenando o resultado em R; 4. Apresentar o valor
calculado contido na varivel R; 5. Perguntar ao usurio se deseja
continuar executando o programa; e 6. 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 ( SIM) and (
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.
- 35. 35 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: : array[tamanho] of ; 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
- 36. 36 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 para
encerrar: ); readln; end. Vejamos um exemplo do uso de vetores de
strings:
- 37. 37 Ler e exibir o nome de 10 pessoas. Algoritmo 1. Definir
a varivel I do tipo inteira para controlar a repetio; 2. Definir a
matriz NOME do tipo string para 10 elementos; 3. Iniciar o
programa, fazendo a leitura dos 10 nomes; e 4. 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 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:
- 38. 38 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 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;
- 39. 39 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: : array[dimenso_linha,dimenso_coluna] of ; 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: 8.5
9.0 7.8 8.9 5.0 6.8 8.7 6.5 7.0 7.5 7.8 6.5 8.5 8.0 9.2 7.9 5.5 8.0
7.2 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: Pedro Ana
Joana Joao Mauro
- 40. 40 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 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:
- 41. 41 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 Endereo CEP Bairro Telefone 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]);
- 42. 42 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 para
encerrar: ); readln; end.
- 43. 43 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 = record end; var : 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);
- 44. 44 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 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 para encerrar: );
readln; end.
- 45. 45 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
para encerrar: ); readln; end.
- 46. 46 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.
- 47. 47 Para se fazer uso deste recurso necessrio o uso da
instruo uses situada antes da declarao da instruo var. Sintaxe:
uses ; 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
begin 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
- 48. 48 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);
- 49. 49 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.
- 50. 50 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 Tipo Funcionalidade clrscr
Procedure Efetua a limpeza da tela, posicionando o cursor do lado
esquerdo superior. gotoxy (coluna,linha) Procedure Permite
posicionar o cursor em ponto da tela. Para utiliz-lo necessrio
informar dois parmetros: a coluna e linha para posicionamento.
readkey 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 para confirmar a entrada
da informao Podemos simplificar nosso programa com a utilizao da
instruo condicional, semelhante ao if...then, chamada case...of
Sintaxe: case of : ; : ; : ; else ; 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.
- 51. 51 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.
- 52. 52 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:
- 53. 53 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:
- 54. 54 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 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:
- 55. 55 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 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 [(parmetros)] : ; var ; begin ; end;
- 56. 56 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.
- 57. 57 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 para encerrar o program); readln; end.
- 58. 58 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 = [text][file [of ]];
var : ; ou : [text][file [of ]]; 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:
- 59. 59 Instruo Tipo Sintaxe Descrio assign procedure assign (,
) Tem por finalidade associar um nome lgico de arquivo ao arquivo
fsico. o parmetro a indicao da varivel do tipo arquivo, e o nome do
arquivo a ser manipulado rewrite procedure rewrite () Tem por
finalidade criar um arquivo para uso, utilizando o nome associado
ao parmetro . Caso o arquivo j exista, esta instruo o apagar para
cri-lo novamente. reset procedure reset () Tem por finalidade abrir
um arquivo existente, colocando-o disponvel par leitura e gravao,
utilizando o nome associado ao parmetro . write procedure write(,)
Tem por finalidade escrever a informao no arquivo indicado pelo
parmetro . read procedure read(,) Tem por finalidade ler a informao
no arquivo indicado pelo parmetro . close procedure close() 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.
- 60. 60 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:
- 61. 61 program GRAVA_ARQUIVO_TEXTO; var ARQUIVO_TXT : text;
MENSAGEM : string[50]; 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; MENSAGEM : string[50];
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.
- 62. 62 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; NUMERI : integer; RESP :char; 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
apresentada uma linha com a instruo seek(ARQUIVO_INT,
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.
- 63. 63 program CADASTRA_ARQUIVO_INTEIRO; uses Crt; var
ARQUIVO_INT : file of integer; NUMERI : integer; RESP :char; 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 = record end; var : ; :
file of ; 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;