Escolar Documentos
Profissional Documentos
Cultura Documentos
4242 - Outras Linguagens Programacao
4242 - Outras Linguagens Programacao
Autor:
Silvestre Santos
Linguagem Pascal
Linguagem Pascal
Para escrever um programa em linguagem de mquina, o programador deve conhecer todas as instrues disponveis para aquela mquina e seus respectivos cdigos de operao e formatos, assim como os registradores da CPU disponveis e os endereos das clulas de memria onde sero armazenadas as instrues e os dados. Um programa real em linguagem de mquina, pode conter milhares de instrues, o que uma tarefa extremamente tediosa e difcil, pelos detalhes que precisam ser observados pelo programador. Em um programa escrito em linguagem de mquina, cada instruo escrita pelo programador ser individualmente executada, isto , a cada instruo do programa corresponder uma ao do computador. A relao portanto 1 para 1 - uma instruo do programa corresponde a uma operao do computador. Cada famlia de computadores possui sua prpria linguagem de mquina. Um programa em linguagem de mquina dependente do computador ou seja, tendo sido escrito para um determinado computador, somente poder ser executado em computadores da mesma famlia, que lhe sejam 100% compatveis.
Linguagem Pascal
Os programas escritos apresentam grande velocidade de execuo; Os programas gerados so mais compactos, portanto ocupam menos espao em memria; programador tem sua disposio todos os recursos da mquina, sem limitaes da linguagem.
Desvantagens:
Os programadores devem ter altssimo nvel tcnico; Os programas levam muito tempo para serem desenvolvidos e apresentam grande dificuldade para alteraes futuras; Os programas so muito especficos para cada microprocessador (no so portveis).
Linguagem Pascal
Detail_procedure() { int file_status, current_line, id_num; char *name; float current_sales, ytd_sales, total_sales; ... Vantagens:
programador no se preocupa com aspectos muito tcnicos, permitindo que ele se preocupe com o problema a ser resolvido; Permitem rpido desenvolvimento de novos sistemas; Permitem que os programadores aprendam mais rapidamente, programem com mais eficincia e faam alteraes mais facilmente em programas anteriormente escritos; Maior portabilidade, ou seja, facilidade de transferncia de programas para mquinas diferentes.
Desvantagens:
Os programas (cdigo) ocupam mais espao de memria; A estrutura da linguagem tira parte da liberdade do programador e pode dificultar a implementao de instrues mais tcnicas, aproveitando menos os recursos da mquina. A velocidade de execuo dos programas tende a ser mais lenta.
Foram desenvolvidas diversas linguagens de programao, buscando afastar-se do modelo centrado no computador. Essas linguagens foram estruturadas buscando refletir melhor os processos humanos de soluo de problemas. Essas linguagens orientadas a problema so tambm chamadas linguagens de alto nvel, por serem afastadas do nvel de mquina. As primeiras linguagens foram FORTRAN (1957), usada basicamente para manipulao de frmulas; ALGOL (1958), para manipulao de algoritmos; COBOL (1959), para processamento comercial e ainda hoje bastante usada, especialmente em computadores de grande porte (mainframes) em bancos. Nas dcadas de 60 e 70, podemos citar Pascal, a primeira linguagem de alto nvel estruturada; BASIC, linguagem criada para facilitar a programao por no-profissionais; e ADA, linguagem para processamento em tempo real criada sob encomenda do DoD (Department of Defense norte-americano) e ainda hoje a nica linguagem aceita para programas escritos sob encomenda do DoD. Na dcada de 80, surgiu o C e depois o C++ (com suporte a objetos), que esto entre as linguagens mais utilizadas hoje. Cada nova linguagem criada visa atingir nveis de abstrao mais altos, isto , afastam cada vez mais o programador do nvel de mquina. Se por um lado essas novas linguagens facilitam muito o trabalho do programadores (e reduzem sua necessidade de conhecer o hardware da mquina), elas cobram um alto preo em termos de desempenho (isto , so cada vez mais lentas, ao consumir cada vez mais ciclos de mquina e espao em memria). Esse aumento de exigncia ao poder de processamento dos computadores compensado (e desta forma se faz menos notado) pelo aumento acelerado do poder de processamento dos novos chips (exemplificado pela chamada Lei de Moore, que afirma que o poder de processamento dos chips dobra a cada 18 meses) e pelos avanos na arquitetura dos computadores. Dentre as importantes tendncias atuais, citamos as linguagens de manipulao de bancos de dados (como dBase, Clipper, FoxPro, Paradox, Access, etc) e as linguagens visuais, como o Visual Basic, Visual C e Delphi.
Linguagem Pascal
1.3.1 Montagem
o tipo de traduo mais rpido e simples que existe e realizada por um programa denominado montador (assembler). Como o nome j explica, a montagem realizada para traduzir um programa em linguagem de montagem para seu equivalente em linguagem binria, executvel. Cada ordem do programador convertida diretamente em uma nica ordem de mquina. Neste processo o programa escrito em linguagem de montagem, chamado de cdigo fonte, examinado, instruo por instruo, e, em seguida, convertido (traduzido) para um outro programa em linguagem binria de mquina, denominado cdigo objeto.
Cdigo Fonte
Cdigo Objeto
Linguagem Pascal
1.3.2 Compilao
Quando se deseja converter para linguagem de mquina um programa escrito em linguagem de mais alto nvel que o da linguagem de montagem, ento o mtodo utilizado se chama compilao. Nas linguagens de alto nvel, todo programa escrito em uma determinada linguagem de programao (chamado de cdigo fonte ou programa fonte) convertido em sua verso em linguagem de mquina (cdigo objeto ou programa objeto), sendo esta traduo feita antes de qualquer tentativa de execuo. No processo de montagem, h uma relao de 1:1, ou seja, cada instruo do cdigo fonte resulta em uma instruo de mquina, enquanto na compilao a relao mltipla, cada instruo do cdigo fonte gerando vrias instrues de mquina.
Cdigo Fonte Open file_entrada Read A,B,C While not eof (file_entrada) do Programa escrito pelo programad or em linguagem
Programa compilad or
Compila o Cdigo Objeto 1011 0011 0000 0011 1010 0000 0000 0100
1.3.2.1 Bibliotecas
O desenvolvimento de um programa certamente utilizar diversas operaes que so comuns a muitos outros programas. Por exemplo, a execuo de uma instruo de entrada e sada, a classificao dos dados de um arquivo, o clculo de funes matemticas, etc. Uma linguagem de alto nvel geralmente incorpora diversas rotinas prontas (que fazem parte da linguagem) e que compem bibliotecas (librarys) de funes prprogramadas que podero ser utilizadas pelo programador, poupando tempo, aumentando a eficincia e evitando erros. Dessa forma, um programa em alto nvel possivelmente conter diversas chamadas de biblioteca (library calls). Essas funes no devem ser confundidas com as instrues da linguagem - na realidade, so pequenos programas externos que so chamados atravs de instrues especiais de chamada de biblioteca. Para serem executadas, essas rotinas precisam ser incorporadas ao cdigo do programador, isto , a chamada de biblioteca precisa ser substituda pelo cdigo propriamente dito, incluindo os parmetros necessrios.
1.3.2.2 Ligao
Assim, o cdigo objeto preparado pelo compilador em geral no imediatamente executvel, pois ainda existe cdigo (as rotinas de biblioteca) a ser incorporado ao programa. A cada chamada de biblioteca encontrada no cdigo fonte, o compilador precisar incluir uma chamada para a rotina e o endereo dos dados que devam ser passados para a rotina. A tarefa de examinar o cdigo objeto, procurar as referncias a rotinas de biblioteca (que constituem referncias externas no resolvidas), buscar a rotina da biblioteca, substituir a chamada pelo cdigo ("resolver as
. 7
Linguagem Pascal
referncias externas") e obter os parmetros para inclu-los no cdigo objeto executada por um programa chamado Ligador (LinkEditor). O resultado da execuo do Ligador o cdigo final pronto para ser executado pelo computador, chamado mdulo de carga ou cdigo executvel. Uma biblioteca uma coleo de cdigos objeto, um para cada rotina especfica, e indexada pelo nome da rotina. Quando um programa de aplicao deseja usar uma dessas rotinas, ele insere uma chamada de biblioteca no seu cdigo (library call).
Cdigo Fonte
Programa compilad or
Ligao
Ligador
Biblioteca B Biblioteca C
Cdigo Executvel
O mdulo de carga, aps testado e depurado (isto , depois de resolvidos todos os erros, tambm chamados "bugs") armazenado em memria de massa para ser executado quando necessrio. O processo de compilao e ligao executado apenas pelo programador na fase de desenvolvimento e no mais precisar ser executado pelo usurio, quando da execuo do programa.
1.3.3 Interpretao
Com o processo de execuo de um programa em fases distintas (compilao / ligao / execuo) apresentado, um programa para ser executado precisa primeiro ter sido convertido para cdigo objeto pelo compilador e depois ter passado pelo ligador. Esse processo o mais largamente utilizado, porm no o nico. O mtodo alternativo chama-se de interpretao e, a partir do programa fonte, realiza as trs fases (compilao, ligao e execuo), comando por comando, em tempo de execuo. No existem fases distintas nem se produzem cdigos intermedirios. Todo o processo de converso efetuado em tempo de execuo e imediatamente executado. Ou seja, cada comando lido, verificado, convertido em cdigo executvel e imediatamente executado, antes que o comando seguinte seja sequer lido. Linguagens como C, Pascal, COBOL, etc, so linguagens tipicamente compiladas, enquanto o BASIC foi desenvolvido como linguagem interpretada (hoje tambm existem linguagens BASIC compiladas e o programador pode optar). As linguagens de programao tipicamente de usurio, tais como das planilhas Excel, o Word Basic (linguagem de construo de Macros do Word), o Access, etc, so todas linguagens interpretadas.
Linguagem Pascal
Linguagem Pascal
10
Linguagem Pascal
Linguagem Pascal
Assim, existem linguagens de programao interpretadas e compiladas. O Cobol compilado, o Basic pode ser tanto compilado como interpretado e assim por diante. A linguagem Pascal, tradicionalmente compilada. Por outro lado, o processo de compilao, de certa forma pode se tornar moroso, pois deve seguir as seguintes etapas: 1. Devemos utilizar um editor de textos para escrever e armazenar em disco o nosso programa fonte. 2. Utilizar um compilador para traduzir o programa fonte para um programa em linguagem de mquina. 3. Finalmente, devemos juntar ao programa compilado as diversas rotinas necessrias que, normalmente, ficam armazenadas numa biblioteca. Aps estes passos, suponha que voc chegue a concluso de queo programa tenha que sofrer modificaes, pois bem, voc ter que repetir os trs passos descritos, e assim sucessivamente at que o programa fique ao seu gosto. O compilador Turbo Pascal facilita todo esse processo, pois ele possui numa forma integrada, um editor de textos compatvel com o Wordstar, um compilador e um linkeditor. O processo de compilao pode ser feito tanto em disco como em memria, o que faz com que ele seja muito rpido. Alm disso, o Turbo Pascal atende aos padres da linguagem Pascal definidos por Niklaus Wirth, o pai da linguagem. Na realidade, o Turbo Pascal vai muito alm, pois ele possui inmeras procedures e funes a mais do que as existentes no padro da linguagem Pascal.
2-rea de Declaraes
{ Instrues }
3-Corpo do Programa
12
Linguagem Pascal
Observaes: A primeira linha contm o nome do programa (crculo). Este o cabealho do programa. Esta parte do programa tem s uma linha e no obrigatria. No poder existir nenhuma varivel no programa com o mesmo nome do cabealho do programa.
Linguagem Pascal
... <intruoN>; end. Um programa exemplo: Eis um programa em Pascal elementar chamado crculo, que uma vez fornecido o raio de um crculo calcula a sua rea, e escreve em seguida o raio e rea calculada. PROGRAM circulo; Uses WinCrt; Var area, raio : Real; (*Incio do Corpo do Programa*) Begin Read(raio); Area := 3.14159*Sqr(raio); Write(raio,area); End. (*Fim do Corpo do Programa*) Observaes: As trs linhas que esto em evidncia entre Begin e End so as instrues do programa. Elas fazem com que o valor do raio seja introduzido no computador, o valor da rea seja calculado e os valores do raio e da rea seja escritos para o exterior. Finalmente, note-se a pontuao no fim de cada linha. A maioria das linhas acaba por ponto e vrgula; algumas no tm pontuao e a ltima linha acaba com um ponto final. Isto faz parte da sintaxe do Pascal.
Alguns caracteres especiais so construdos por dois caracteres distintos e consecutivos: <= (*
.
>= *)
:= (.
.. .)
14
Linguagem Pascal
2.5 Identificadores
Um identificador um nome que dado a um elemento do programa, tal como uma constante, campos de registro, tipo, varivel, units, procedimento, programa, etc.. Os identificadores so compostos de letras ou dgitos, em qualquer ordem, desde que o primeiro caracter seja uma letra. permitido usar maisculas ou minsculas, que so consideradas da mesma forma. Regras para formao de identificadores: 1. Um identificador pode ter qualquer tamanho, entretanto, apenas os primeiros 63 caracteres so significativos. 2. O primeiro caracter do identificador deve ser obrigatoriamente uma letra ou um trao de sublinhar ( _ ), tambm chamado de undescore. 3. Os demais caracteres podem ser letras, dgitos ou undescores e no espaos. 4. Um identificador no pode ser palavra reservada. 5. Como regra, um identificador deve conter caracteres suficientes para indicar claramente o seu significado. Tambm como regra, dever ser evitado o nmero excessivo de caracteres. 6. No se pode utilizar os caracteres especiais do Turbo Pascal na formao de identificadores. O Turbo Pascal possui inmeros identificadores pr-definidos, que no fazem parte da definio padro da linguagem Pascal. Esses identificadores consistem em Procedures e Funes, que podem ser utilizados normalmente na construo de programas. Exemplos: ClrScr (limpa a tela de vdeo) e DelLine (deleta a linha em que est o cursor). Exemplos de identificadores vlidos: Meu_Nome MEU_NOME _Variavel01 Exemplo01 Exemplos de identificadores invlidos: Valor=Valor_Anterior 2teste Exemplo 23
15
Linguagem Pascal
Exemplo: PROGRAM circulo; (*CABEALHO DO PROGRAMA*) { Este programa tem como objetivo o clculo da rea de um crculo a partir da entrada do valor do raio deste crculo } Uses WinCrt; Var area, raio : Real; begin Read(raio); Area := 3.14159*Sqr(raio); Write(raio,area); end.
2.6 Comentrios
Comentrios so textos que introduzimos no meio do programa fonte com a inteno de torn-lo mais claro. uma boa prtica em programao inserir comentrios no meio dos nossos programs. No Turbo Pascal, tudo que estiver entre os smbolos (* e *) ou { e } ser considerado como comentrio. Os comentrios so ignorados pelo compilador. Exemplo: PROGRAM circulo; (*CABEALHO DO PROGRAMA*) { Este programa tem como objetivo o clculo da rea de um crculo a partir da entrada do valor do raio deste crculo } Uses WinCrt; Var area, raio : Real; begin Read(raio); Area := 3.14159*Sqr(raio); Write(raio,area); end.
16
Linguagem Pascal
a) instrues compostas, que consistem numa seqncia de duas ou mais instrues consecutivas. Neste caso as instrues simples que formam o bloco de instrues compostas devem estar entre as palavras reservadas begin e end. b) Instrues repetitivas, que envolvem a execuo de forma repetida de vrias instrues simples. c) Instrues condicionais, em que uma ou mais instrues simples so executadas apenas se uma expresso lgica especificada for atendida. Observaes: O ponto e vrgula da ltima instruo do bloco de instrues compostas tpica opcional. O conjunto de instrues consecutivas delimitadas entre as palavras reservadas begin e end podem ser tratadas como uma nica instruo simples.
Exemplo 1: Abaixo voc pode ver um exemplo de instruo composta tpica. begin X:= 1.5; Y:= 2.5; end; Exemplo 2: Abaixo voc pode ver um exemplo de instruo composta repetitiva. For i := to 100 Do writeln(i); Esta instruo ser executa 100 vezes. Cada vez que a instruo for executada o valor atual da varivel i ser visualizado na tela. Assim a instruo far com que os valores 1, 2, 3, e respectivamente at o valor 100 sejam apresentados no monitor. Exemplo 3: Abaixo voc pode ver um exemplo de instruo composta condicional. If (salario < 2000.0) Then writeln(Salrio Baixo!) Else writeln(Salrio Bom!); Esta instruo faz com que a mensagem Salrio Baixo! seja mostrada caso a varivel salrio seja menor do que 2000.0. Se a varivel salrio tiver um valor armazenado maior ou igual a 2000.0 ento a mensagem mostrada ser Salrio Bom!.
17
Linguagem Pascal
Exemplo 4: Program exemplo; ... begin writeln('Digite o valor de read (A); writeln('Digite o valor de read (B); if A = B then begin X:= 1.5; Y:= 2.5 end else begin X:= -1.5; Bloco Y:= -2.5 end; writeln ('O valor de X writeln ('O valor de Y end.
A: '); B: ');
instruo simples
de instrues compostas
Dados de tipo estruturado (padro) String (cadeia de caracteres) Array (matriz) Record (registro) File (arquivos) Set (conjuntos) Text (texto)
Os dados de tipo simples so elementos individuais (nmeros, caracteres, etc.) que esto associados com identificadores simples um a um. Os dados de tipo estruturado compe-se de mltiplos elementos relacionados entre si de forma especificada. Cada grupo de elementos de informao est associado a um nico identificador. Os elementos de informao individuais, dentro de cada grupo, podem tambm estar associados com os correspondentes identificadores individuais. Inicialmente iremos estudar os dados de tipo simples e o tipo String pela sua utilizao prtica incial. Os demais tipos estruturados sero vistos mais para a frente.
18
Linguagem Pascal
O Turbo Pascal fornece cinco tipos pr-definidos de nmeros inteiros. Veja a tabela abaixo. Tipo Shortint Integer Longint Byte Word Faixa -128..127 -32768..32767 -2147483648..2147483647 0..255 0..65535 Formato Sinalizado 8-bit Sinalizado 16-bit Sinalizado 32-bit No Sinalizado 8-bit No Sinalizado 16-bit
19
Linguagem Pascal
O Turbo Pascal fornece cinco tipos pr-definidos de nmeros reais. Veja a tabela abaixo. Tipo Real Single Double Extended Comp Observao:
Bytes 6 4 8 10 8
Uma varivel do tipo real pode armazenar um valor inteiro, mas no o contrrio.
Se uma cadeia de caracteres incluir uma aspas, esta (a aspas) deve ser escrita duas vezes. Neste caso s aparecer uma das aspas quando a cadeia for impressa ou visualizada. Uma string de caracteres de tamanho 0 (zero) chamado de string nula e s compatvel com o tipo string. Uma string de caracteres de tamanho 1 (um) compatvel com o tipo char e tambm o tipo string.
20
Linguagem Pascal
As expresses aritmticas so escritas linearmente, usando-se a notao matemtica. Voc pode observar que toda expresso aritmtica, ao ser avaliada produz um valor que se constitui no resultado da expresso. Esse valor possui um tipo, que pode ser inteiro ou real, conforme a natureza dos operados e operandos envolvidos. Exemplos de expresses aritmticas em Pascal: a) X+Y b) Total/N e) 11 div 4 f) Soma*Soma i) Sqrt(F1+G*G)-H c) X-Y g) 2*Nota d) SqRt(P) h) 11 mod 4
Observaes: No pascal no existe sinal para potenciao e radiciao, devendo-se indic-las com combinaes de produtos ou funes predefinidas. div e mod so operadores que s podem ser aplicados com operandos inteiros dando, respectivamente, o quociente inteiro e o resto inteiro da diviso entre operandos. Uma expresso que s tenha operandos inteiros e operadores *, mod, div, + e ter como resultado um valor inteiro. Se, pelo menos, um dos operandos for real e se os operadores forem *,/,+ ou -, o resultado da expresso ser real. O operador / sempre conduz a um resultado do tipo real, mesmo que os dois operandos sejam inteiros. Programa exemplo:
Program Operadores_aritmeticos; Uses CRT; Var x,y,z : integer; r1,r2 : real; Begin ClrScr; (* limpa a tela *) x:=10; y:=20; z:=x+y; writeln(z); (* escreve o valor de z na tela de video *) x:= 20 DIV 3; y:= 20 MOD 3; writeln(x); (* escreve 6 na tela *) writeln(y); (* escreve 2 na tela *) r1:=3.24; r2:=r1/2.3; writeln(r2); end. 21
Linguagem Pascal
A ordem de precedncia acima indica que primeiro so aplicados os - unrios, depois as potenciaes, em seguida so efetuadas todas as operaes de multiplicao, diviso, resto de diviso inteiro, e s aps estas so efetuadas as adies e subtraes. Exemplo: ... begin writeln(51 div 16 + 48 8 mod 5); {resultado: 3+48-3=48} writeln( (51 div 16) + (48 8) mod 5); {resultado: 3+0=3} writeln( -3*(43/(52 div 3) )); {resultado: -3*(43/17) = -7.588} writeln( 6/3*2 ); {resultado: 4 (real)} ... Observaes: 1) Um operando entre dois operadores de diferentes prioridade relacionado ao operador de maior prioridade. 2) Um operando entre dois operadores de igual prioridade relacionado ao primeiro operador sua esquerda. 3) Operaes com operadores de igual prioridade so normalmente executadas (avaliadas) da esquerda para a direita. 4) Se a expresso tem parnteses , estes tm precedncia superior a todos os operadores, isto , qualquer expresso entre parnteses executada primeiro. Dica: use parnteses sempre que puder!.
22
Linguagem Pascal
Operao Igual Diferente Maior Menor Maior ou igual que Menor ou igual que Contido em (conjunto)
Toda expresso relacional retornar um resultado do tipo booleano: verdadeiro (true) ou falso (false).
Exemplos: program exemplo; uses WinCrt; var x, y:integer; begin x:= 3; y:= 5; Writeln(2 = 3); Writeln(0.6 <= 1.5); Writeln(-4 <> 4); Writeln(x <= 10); Writeln(x+y > 10); Writeln(2*1 >= x div 2); Writeln( (x div 2) > (y+6) ); end. Este programa resultaria na seguinte tela:
--------------------------------------------------------FALSE TRUE TRUE TRUE FALSE TRUE FALSE ---------------------------------------------------------
Linguagem Pascal
Sejam as variveis lgicas P, Q, R, S contendo, respectivamente, os valores true, false, false e true. Exemplo: O valor lgico das expresses: a) P and S b) P and R ser: a) true b) false c) false d) false c) Q and S d) Q and R
24
Linguagem Pascal
b) not R
b) true
Estes operadores s aceitam como operandos, valores lgicos, ou seja : TRUE e FALSE. Com o operador AND a expresso resulta verdadeiro (TRUE) unicamente se ambos os operandos forem verdadeiros (TRUE). Com o operador OR a expresso resulta verdadeiro (TRUE) se qualquer um dos operandos for verdadeiro, ou se ambos forem verdadeiros. O operador NOT utilizado para negar (isto , para inverter) o valor de um operando booleano.
Veja abaixo um pequeno programa que utiliza operador lgico AND: Program testa_logica_and; Uses WinCrt; var numero := integer; begin write(Digite um nmero inteiro: ); readln (numero); if (numero >=20) and (numero <=90) then writeln (O nmero est na faixa de 20 a 90!) else writeln(O nmero est fora da faixa de 20 a 90!); end. Este programa resultaria na seguinte tela:
---------------------------------------------------------
25
Linguagem Pascal
Operadores not *, /, div, mod, and +, -, or =, <>, <, <=, >=, >, in
program Exemplo; uses WinCrt; var A, B, C, K: integer; begin A:= 2; B:= 3; C:= 10; K:= 1; writeln ((A=1) and ((B+C<>0) or (K<=2))); end. Este programa resultaria na seguinte tela:
--------------------------------------------------------FALSE ---------------------------------------------------------
3.10 Concatenao
O Turbo Pascal permite que voc use o operador + para concatenar dois operandos do tipo string. O resultado da concatenao compatvel com o tipo string. Operador + Observao: Se o resultado da concatenao for maior do que 255 caracteres, a strig resultante ser truncada aps o caracter 255. Exemplo: program exemplo; Uses WinCrt; var caracter1, caracter2 :char; string1, string2, string3 :string; begin
. 26
Operao Concatenao
Linguagem Pascal
'A'; ''; 'linguagem Pascal'; 'legal'; caracter1+' '+string1+' '+caracter2+' '+string2+'!'; write (string3); end. Este programa resultaria na seguinte tela:
--------------------------------------------------------A linguagem Pascal legal! ---------------------------------------------------------
Exemplo: Program Exemplo; Uses WinCrt; Var idade, numero_de_filhos altura sexo nome : : : : byte; real; char; string [30];
27
Linguagem Pascal
sim_ou_no quantidade Begin idade:= 34; numero_de_filhos:=2; sexo := M; nome := Jos; sim_ou_nao :=TRUE; quantidade := 3245; End.
: boolean; : integer;
Observao: O resultado da expresso deve ter o mesmo tipo da varivel. Existe uma exceo a esta regra: um valor inteiro pode ser atribudo a uma varivel do tipo real.
Exemplo1: X := Y + Z; conta := conta+1; area := 3.14159*sqr(raio); Exemplo2: X := (I >= 1) and (I < 100); Suponha que X uma varivel booleana, e I seja uma varivel inteira. Ento a instruo faz com que X seja atribudo o valor verdadeiro (TRUE) ou falso (FALSE), conforme determinado pela expresso booleana.
Linguagem Pascal
Inc(numero);
{Incrementa varivel numero em 3. o mesmo que numero := numero+3; }
Inc(numero,3); ... Observaes: O valor de incremento poder ser precedido pelo sinal de menos (-). Desta forma a procedure ir decrementar o valor da varivel. O incremento um valor do tipo longint e conseqntemente no poder ultrapassar a faixa deste tipo.
Exemplo: ... const Pi = 3.1416; cor_preferida = verde; numero_maximo = 24345; ... Observaes:
.
Toda vez que nos referirmos s constantes dentro do programa, o Turbo Pascal substituir-las pelos seus respectivos valores declarados. Aps declaradas as constantes, estas no podem receber atribuies posteriormente.
29
Linguagem Pascal
Observaes:
Constantes tipadas podem ser usadas exatamente como variveis do mesmo tipo, podendo inclusive receber atribuies posteriormente.
Exemplo: ... const Minimo: Integer = 0; Maximo: Integer = 9999; Contador: Integer = 100; C : char = A; ...
30
Linguagem Pascal
Exemplo: ... Type cor dia_util sexo ... Observaes: Note que os elementos do novo tipo devem ser separados por vrgulas. Deve ser entendido que estes elementos so os nicos valores que podem estar associados com o tipo definido. Uma vez que os dados do tipo enumerado esto definidos numa sequncia ordenada, os operadores relacionais podem ser aplicados de modo a formar uma expresso booleana. As funes preexistentes Succ(X), Pred(X) e Ord(X) tambm podem ser utilizadas. Considerando os conceitos introduzidos at aqui, a definio do tipo boolean seria, ento: Type boolean = (false, true); = (azul,vermelho,branco,verde,amarelo); = (segunda,tera,quarta,quinta,sexta); = (masculino,feminino);
Exemplo: Vamos considerar a definio do tipo: Type dias = (domingo, segunda, tera, quarta, quinta, sexta, sabado);
.
Linguagem Pascal
quinta >= sbado - retorna false. segunda <> sexta retorna true. Succ(segunda) = tera retorna true. Ord(quinta) = 4 o nmero inteiro 4 indica a ordem do valor quinta no conjunto (a enumerao comea de zero, contando da esquerda para a direita).
Program exemplo; uses WinCrt; type Cores = (VERMELHO,AZUL,VERDE); begin Writeln(O AZUL tem um nmero ordinal = ,Ord(BLUE)); Writeln('C em cdigo ASCII ',Ord('c'), ' decimal'); end.
Exemplo: ... Type dias = (domingo,segunda,tera,quarta,quinta,sexta,sabado); Dias_da_semana = segunda..sexta; ms = 1..31; maiuscula = A..Z; ... Observaes: Os dados do tipo inteiro, caracter e booleanos podem ser usados para definir uma gama de valores. Os dados do tipo real no podem ser usados para definir uma gama de valores. Note que dois pontos consecutivos devem separar o primeiro e o ltimo elementos da gama de valores.
32
Linguagem Pascal
write e writeln so identificadores com significado predefinido em PASCAL. lista de identificadores so os nomes de variveis do tipo string, char, integer, real ou boolean, cujos valores sero enviados unidade de sada. constantes e/ou expresses de mesmo tipo das variveis tambm podem aparecer nos comandos de sada.
Observao: A instruo Write e Writeln aceita mltiplos parmetros. Estes parmetros devem ser separados por vrgula.
Exemplo:
Program Exemplo; Uses CRT; Var i : integer; r : real; c : char; s : string[20]; Begin ClrScr; Writeln('Exemplos de aplicacao de writeln e write'); writeln; i:=100; r:=3.14; c:='Muito'; s:='interessante!'; writeln('Valor de i e igual a ',i); write('valor de r = '); writeln(r); writeln(c,'',s); end.
33
Linguagem Pascal
e representa o valor a ser escrito e pode ser do tipo integer, real, char, string e boolean, podendo inclusive ser uma constante ou uma expresso. e1 representa um valor inteiro positivo e indica o nmero mnimo de caracteres a ser escrito. Se e1 for insuficiente para representar o valor a ser escrito, ento ser alocado mais espao. Se e1 for excessivo, o espao excedente ser preenchido com brancos. e2 s se aplica se e for do tipo real; neste caso, e2 um valor inteiro positivo e especifica o nmero de dgitos que devem ser escritos aps o ponto decimal. Caso e2 no seja fornecido o valor real ser escrito no formato exponencial.
Exemplo: program Exemplo; uses WinCrt; var A, B: real; K, L: char; begin A:= 3.2; B:= 5.81; K:= 'x'; L:= 'y'; writeln (A:4:2); writeln (K:2); writeln (B:5:2); writeln (A+B:6:3); writeln (A:4:2, K:2, ' +', B:5:2, L:2,' =', A+B:6:3); end. Este programa resultaria na seguinte tela:
--------------------------------------------------------3.20 x 5.81 9.010 3.20 x + 5.81 y = 9.010 --------------------------------------------------------. 34
Linguagem Pascal
read e readln so identificadores predefinidos em Pascal; variveis de entrada so os nomes das variveis do tipo string, char, integer ou real, cujos valores sero lidos na unidade de entrada.
Observao:
As variveis de entrada devem estar separadas por vrgulas. Note que as variveis do tipo booleano no podem ser includas na lista de variveis de entrada. A diferena entre as instrues read e readln que a instruo readln obriga a prxima instruo read ou readln a comear a ler em uma nova linha de dados. J a instruo read permite que a prxima instruo read ou readln comece na mesma linha. Os dados numricos devem ser separados uns dos outros por espaos ou por indicaes de fim de linha (ENTER). Qualquer nmero pode ser precedido por um sinal de mais ou menos, desde que no haja um espao entre o sinal e o nmero. O dado do tipo caracter no deve ser colocado entre aspas.
Exemplo:
Program teste; Uses WinCrt; Var i r c s : : : : integer; real; char; string[10];
Begin ClrScr; Write('Digite um numero inteiro ------> '); Readln(i); Write('Digite um numero real ---------> '); Readln(r); Write('Digite um caractere -----------> '); Readln(c); Write('Digite uma string -------------> '); Readln(s); Writeln;Writeln; (* pula duas linhas *) Writeln(i); Writeln(r); Writeln(c); Writeln(s); End.
35
Linguagem Pascal
Exemplo: ... begin Writeln(2*Sin(3.14)); End. ... A chamada da funo precede as demais operaes; se uma funo um operando de uma expresso, ela deve ser calculada antes que as demais operaes possam ser efetuadas. Observe a seqncia de execuo da instruo acima:
36
Linguagem Pascal
1o) calculado o seno; 2o) o resultado deste clculo multiplicado ento por 2; 3o) e por fim mostrado na tela o resultado. Observaes:
Succ(X) Pred(X)
Retorna um nmero decimal que indica a ordem X no conjunto de caracteres ASCII. Retorna o caracter que corresponde Integer Char ordem, dada pelo valor da expresso aritmtica EA, se existir, no conjunto de caracteres ASCII. Retorna o sucessor de X no Integer ou Char Integer ou Char conjunto de caracteres ASCII, se existir. Retorna o predecessor de X no Integer ou Char Integer ou Char conjunto de caracteres ASCII, se existir.
Observao: As funes Ord(X), Succ(X), Pred(X) aplicam-se no apenas s variveis ou constantes do tipo char, mas de qualquer tipo predefinido, exceto o tipo real.
Exemplo: a) Succ(A) B; Pred(D) C; b) Succ(1) 2; Pred(100) 99; c) Ord(C) 67; Chr(65) A no cdigo ASCII.
37
Linguagem Pascal
As units mais importantes para o nosso estudo so a System e a WinCrt. Antes de utilizarmos algumas das rotinas predefinidas do Pascal devemos antes declarar as Units na rea de Declaraes do programa Pascal. A declarao uses indica ao compilador onde buscar as definies (cdigo objeto) de certas instrues. Sintaxe da declarao uses: Uses <identificador>, ... <identificador>; Onde: Uses uma palavra reservada do Pascal. Identificador o nome de uma das unidades padro do Pascal.
38
Linguagem Pascal
39
Linguagem Pascal
Program exemplo; Uses WinCrt; Var x:string; y:integer; begin Write('Digite uma string qualquer...: '); readln(x); y := Length(x); Write('Esta string tem ',y,' carateres.'); end. Este programa resultaria na seguinte tela: Considerando que a string digitada pelo usurio foi Pascal o programa resulta na seguinte tela: --------------------------------------------------------------Digite uma string qualquer...:Pascal Esta string tem 6 carateres. ---------------------------------------------------------------
40
Linguagem Pascal
Por favor pressione Por favor pressione Por favor pressione ... Por favor pressione Voc pressionou uma
uma tecla qualquer! uma tecla qualquer! uma tecla qualquer! uma tecla qualquer! tecla qualquer!
---------------------------------------------------------
Linguagem Pascal
Writeln('Voc pressionou a tecla ', C, '. Seu valor em ASCII ', Ord(C), '.'); end. Este programa resultaria na seguinte tela: Obs.: Vamos supor que voc tenha pressionado a tecla A (caixa alta).
---------------------------------------------------------
Ol!
---------------------------------------------------------
42
Linguagem Pascal
If Then so palavras reservadas do Pascal. condio a expresso booleana que ser avaliada no comando If-Then. Esta expresso retorna verdadeiro (true) ou falso (false). bloco de comando um nico comando (bloco de instruo simples) ou um conjunto de comandos (bloco de instruo composta) que sero executados, caso a expresso booleana avaliada retorne verdadeiro (true).
Exemplo: Program exemplo; Uses WinCrt; var A, B, C: real; begin read (A, B, C); if A+B < C then write (A soma de A com B menor que C!) end. ou ... begin read (A, B, C); if A+B < C then write (A soma de A com B menor que C!) end. ... Neste exemplo, aps as variveis A, B e C serem declaradas reais, os valores de A, B e C sero lidos; em seguida, o comando If-Then ir avaliar a expresso booleana (A+B<C) e se a resposta for verdadeira (true), ser escrito a mensagem A soma de A com B menor do que C, e a execuo ento terminar; caso contrrio, se a expresso retornar falso (false), cessa a execuo do programa sem nenhuma mensagem exibida. Observaes: Caso a instruo, a ser executada aps a avaliao da expresso booleana, seja uma instruo composta, ou seja, com mais de um comando, deve-se delimitar o bloco de comandos por begin e end.
43
Linguagem Pascal
If Then-Else so palavras reservadas do Pascal. condio a expresso booleana que ser ser avaliada no expresso retorna verdadeiro (true) ou falso (false). bloco de comando1 um nico comando (bloco de instruo comandos (bloco de instruo composta) que sero executados, (condio) avaliada retorne verdadeiro (true). bloco de comando2 um nico comando (bloco de instruo comandos (bloco de instruo composta) que sero executados, (condio) avaliada retorne falso (false).
comando If-Then-Else. Esta simples) ou um conjunto de caso a expresso booleana simples) ou um conjunto de caso a expresso booleana
Exemplo1: Program exemplo1; Uses WinCrt; var A, B, C: real; begin read (A, B, C); if A+B < C then write (A soma de A com B menor que C!) else write (A soma de A com B maior que C!); end. Neste exemplo, aps as variveis A, B e C serem declaradas reais, os valores de A, B e C sero lidos; em seguida o comando if-then-else ir avaliar a expresso booleana (A+B<C) e se a resposta for verdadeira (true), ser escrito a mensagem A soma de A com B menor do que C, e a execuo ento terminar; caso contrrio, se a expresso retornar falso (false), ser escrito a mensagem A soma de A com B maior do que C, e a execuo ento terminar. Exemplo2: Program exemplo2; Uses WinCrt; var A, B, X, Y: real; begin writeln('Digite o valor de A: '); read (A); writeln('Digite o valor de B: '); read (B); if A = B then begin X:= 1.5;
. 44
Linguagem Pascal
Y:= 2.5 end else begin X:= -1.5; Y:= -2.5 end; writeln ('O valor de X :', X:4:1); writeln ('O valor de Y :', Y:4:1); end. Observaes: Caso a instruo, a ser executada aps a avaliao da expresso booleana, seja uma instruo composta, ou seja, com mais de um comando, deve-se delimitar o bloco de comandos por begin e end. O sinal de ponto e vrgula no deve aparecer numa estrutura If-Then-Else, exceto como separador dentro de um bloco de instruo composta (entre o begin e o end). Colocar um ponto e vrgula antes da palavra reservada Else resultar num erro de compilao.
Linguagem Pascal
tipo if-then para verificar a escolha do operador. Esta forma pode ser simplificada com a utilizao da estrutura case-of. Syntaxe: Case <varivel> Of <opo1>: <instruo1>; <opo2>: <instruo1>; ... <opoN>: <instruoN>; Else <instruo>; End; ou Case <varivel> Of <opo1>: begin <instruo1.1>; <instruo1.2>; <instruo1.N>; end; <opo2>: begin <instruo2.1>; <instruo2.2>; <instruo2.N>; end; <opoN>: begin <instruoN.1>; <instruoN.2>; <instruoN.N>; end; Else <instruo-else>; End; Onde: Case Of-Else so palavras reservadas do Pascal. varivel o nome da varivel a ser controlada na estrutura de deciso Case-Of-Else. opo o contedo da varivel a ser verificado (lista de constantes), separadas por vrgula, cujo tipo seja o mesmo da varivel de controle da estrutura. instruo - um nico comando (bloco de instruo simples) ou um conjunto de comandos (bloco de instruo composta) que sero executados.
Observaes: A opo consite de uma ou mais constantes ou gama de valores, separadas por vrgulas. As constantes ou gama de valores da opo tem que ser do mesmo tipo da varivel de controle da estrutura Case-of-end. Instrues (bloco de comando) vazias so permitidas, para indicar que nenhuma ao deve ser tomada para certos valores. As instrues no necessitam ser nicas, isto , a mesma instruo pode ser usada com duas ou mais listas de opo do case. A instruo pode ser uma instruo simples do pascal ou uma chamada a uma rotina, por exemplo.
46
Linguagem Pascal
A instruo else s ser executada se nenhuma das opes anteriormente testadas, na estrutura case, for atendida.
Exemplo utilizando a estrutura Case-Of-End: program principal; ... begin while (opcao <> '5') do begin clrscr; gotoxy(33,1); write ('Menu Principal'); gotoxy(28,6); write ('[ 1 ] - Soma'); gotoxy(28,8); write ('[ 2 ] - Subtrao'); gotoxy(28,10); write ('[ 3 ] - Multiplicao'); gotoxy(28,12); write ('[ 4 ] - Diviso'); gotoxy(28,14); write ('[ 5 ] - Fim de Programa'); gotoxy(28,18); write ('Escolha uma opo.....:'); readln(opcao); case opcao of '1': rot_adicao; '2': rot_subtracao; '3': rot_multiplicacao; '4': rot_divisao; else writeln(' o fim do programa!'); end; end; end.
47
Linguagem Pascal
Observaes: O bloco de comando pode ser do tipo simples ou composto, apesar de normalmente ser composto. Quando o bloco de comando for constitudo por um nico comando, o begin e o end podem ser omitidos. Quando o bloco de comando for constitudo por mais de um comando obrigatrio o begin e o end. A expresso booleana do comando While-do avaliada antes do bloco de comando ser executado. Se esta expresso retornar um valor falso (false) na primeira vez em que a expresso for avaliada, os comandos do bloco de comando no sero executados nenhuma vez.
Exemplo: Vamos supor, por exemplo, que queremos escrever os nmeros inteiros 1,2,...,20, com um inteiro em cada linha. Isso pode ser conseguido com a seguinte estrutura While-Do: Program exemplo; Uses WinCrt; var digito: integer; begin digito:= 1; while digito <= 20 do begin writeln('O ',digito,' digito :',digito); digito := digito+1; end; end. Este programa resultaria na seguinte tela:
--------------------------------------------------------O 1o digito :1 O 2o digito :2 ... . 48
Observaes: Note que nesta estrutura o bloco de comando ser sempre executado pelo menos uma vez, dado que a expresso booleana no testada no ncio e sim no fim da estrutura de repetio. A seqncia de instrues dentro da estrutura Repeat-Until no necessita ser includa dentro de um bloco Begin e End. A expresso booleana do comando Repeat-Until avaliada aps a instruo ou instrues serem executadas.
Exemplo: Vamos supor, por exemplo, que queremos escrever os nmeros inteiros 1,2,...,20, com um inteiro em cada linha. Isso pode ser conseguido com a seguinte estrutura Repeat-Until: Program exemplo; Uses WinCrt; var digito: integer; begin digito:= 1; Repeat writeln('O ',digito,' digito :',digito); digito := digito+1; Until digito > 20; end. Este programa resultaria na seguinte tela:
--------------------------------------------------------O 1o digito :1 O 2o digito :2 ... . 49
Observaes: Esta estrutura muito utilizada quando conhecemos de antemo o nmero de ciclos a executar. Se a varivel de controle uma varivel do tipo inteira, ento aumentar automaticamente uma unidade, cada vez que o bloco de comando da estrutura For-to-do for executado; portanto, a instruo (bloco de comando) ser executada (valor final valor inicial +1) vezes. A varivel de controle, o valor inicial e o valor final devem pertencer ao mesmo tipo predefinido (excluindo o real). A varivel de controle no pode ser alterada, por qualquer instruo, que esteja dentro do bloco de comando. A varivel de controle deve ter sido previamente declarada. O valor inicial e o valor final, caso sejam dados como expresso, so calculados uma nica vez antes da primeira execuo da estrutura For-to-do. Os valores de valor inicial e valor final podem ser expressos como constantes, variveis ou expresses. Contudo, estes valores devem ser do mesmo tipo que a varivel de controle. O valor de valor incial deve ser menor do que valor final se pretendemos que a instruo dentro da estrutura For-to-do seja executada mais de uma vez. Se valor incial for igual a valor final , a instruo ser executada somente uma vez; se valor incial for maior que valor final, a instruo no chegar a ser executada.
Exemplo: Program exemplo; Uses WinCrt; var i: integer; begin for i:= 1 to 20 do writeln('O ',i,' digito :',i); end.
. 50
Linguagem Pascal
Sintaxe da Segunda forma: For <varivel de controle> := <valor inicial> downto <valor final> do <bloco de comando>; A segunda forma da estrutura for semelhante primeira, exceto no uso da palavra reservada Downto em vez de To. A ao produzida por esta forma da estrutura For semelhante primeira forma, exceto pelo fato de que a varivel de controle decrementada. Esta varivel decrementada automaticamente de uma em uma unidade, desde o valor incial at o valor final, durante as sucessivas passagens pelo ciclo. Observaes: O valor inicial deve ser maior que o valor final se pretendemos que a instruo dentro da estrutura For-downto-do seja executada mais de uma vez. Se os dois valores forem iguais, ento a instruo ser executada uma nica vez; e se o valor inicial for menor que o valor final, ento a instruo no ser sequer executada.
Exemplo: Program exemplo; Uses WinCrt; var i: integer; begin for i:= 20 downto 1 do writeln('O ',i,' digito :',i); end. Este programa resultaria na seguinte tela:
--------------------------------------------------------O 1o digito : 20 O 2o digito : 19 ... O 20o digito :1 ---------------------------------------------------------
Linguagem Pascal
resp: char; begin For i:= 1 to 5 do begin ClrScr; Write('Entre com o valor para A: '); readln(A); Write('Entre com o valor para B: '); readln(B); Writeln; R := A+B; Writeln('O resultado da soma de A com B : ',R); Writeln; Write('Deseja continuar? '); Readln(resp); if (resp <> 's') and (resp <> 'S') then Goto sai_do_loop; end; sai_do_loop: Writeln('Sa do loop for-to-do!'); end.
52
Linguagem Pascal
65
3
55 100 70
4 5 6
85
7
90
8
55 100
9 10
Se utilizarmos uma varivel I como ndice de Nota, tem-se a possibilidade de acesso a qualquer uma das notas armazenadas, atravs da notao Nota[I]. Exemplo 2: Vamos considerar um trecho de programa que faa a leitura de 10 notas dos alunos de uma disciplina, digitadas uma em cada linha, armazene-as na varivel composta Nota (vetor Nota) e calcule a sua mdia. Program exemplo3; . . begin for I := 1 to 10 do begin readln(Nota[I]); soma := soma+Nota[I]; end; media := soma/10; . . end.
. 53
Linguagem Pascal
Exemplo 3: Considerando o trecho de programa abaixo, podemos tambm comparar o contedo da stima posio da varivel Nota com o valor 60. Program exemplo3; . . begin if Nota[7] > 60 then . . else . . end. Podemos tambm, neste caso, utilizar uma varivel ndice: Program exemplo3; . . begin indice := 7; if Nota[indice] > 60 then . . else . . end. Exemplo 4: Considerando a varivel composta montada no exemplo 3, podemos codificar um trecho de programa que calcule e escreva o nmero de alunos com nota superior Media. Program exemplo4; . . begin quant := 0; for I := 1 to 10 do if Nota[I] > Media then Inc(quant); Writeln(Nmero de alunos c/ nota superior a mdia :,quant); . . end.
54
Linguagem Pascal
Observaes:
As regras para a formao dos identificadores das variveis compostas so as mesmas que a dos identificadores das variveis simples. O tipo de dado dos elementos da varivel pode ser qualquer tipo de dado vlido no pascal. O ndice da varivel, li e ls, deve ser do tipo ordinal: inteiro, caracter, booleano, enumerado ou uma gama de valores. Quando acessamos os elementos individuais das variveis compostas o valor do ndice pode ser expresso como uma constante, uma varivel ou uma expresso. Contudo o valor do ndice deve ser do tipo correto e deve estar dentro do intervalo correto. Os elementos individuais da varivel do tipo vetor podem ser usados em expresses, instrues de atribuio, instrues read e write, etc., como se fossem variveis de tipo simples.
Exemplo 1: Vamos observar o programa a seguir. Este programa efetua a leitura de dez elementos de uma matriz A tipo vetor e em seguida constroi uma matriz B de mesmo tipo, acompanhando 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 das duas matrizes. Este exemplo demonstra como fazer o tratamento da condio do ndice. program check_indice; Uses WinCrt; var A, B : array[1..10] of integer; I : integer; begin writeln('Clculo com checagem do indice da matriz'); writeln; { Entrada dos Dados } for I := 1 to 10 do begin write('Informe o ', I:2,' o. valor: '); readln(A[I]); end; { Processamento Par ou mpar } for I := 1 to 10 do begin if (I mod 2 = 0) then
. 55
Linguagem Pascal
B[I] := A[I]*5 else B[I] := A[I]+5; end; 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...'); readkey; end. Este programa resultaria na seguinte tela:
---------------------------------------------------------
Clculo com checagem do indice da matriz Informe Informe Informe ... Informe A[ 1] A[ 2] A[ 3] ... A[ 1] o o o 1 o. valor: 10 2 o. valor: 10 3 o. valor: 10
o 10 o. valor: 10 B[ 1] = 15 B[ 2] = 50 B[ 3] = 15 B[10] = 50
= 10 = 10 = 10 = 10
No programa acima, so utilizados trs loopings do tipo for: o primeiro looping controla a entrada dos dados na matriz A, o segundo looping verifica se cada elemento da matriz A par ou mpar e faz as operaes de soma ou multiplicao atribuindo o resultado na matriz B, e o terceiro looping utilizado para apresentar as duas matrizes.
56
Linguagem Pascal
Os valores esto armazenados na ordem: 9, 7, 5, 3 e 1 e devero ser apresentados na ordem 1, 3, 5, 7 e 9. A tabela acima, no formato matricial, ficaria assim: A[1] = 9, A[2] = 7, A[3] = 5, A[4] = 3, A[5] = 1. Para efetuar o processo de troca necessrio aplicar o mtodo de propriedade distributiva: a) o elemento que estiver em A[1] dever ser comparado com os elementos que estiverem em A[2], A[3], A[4] e A[5]. b) depois o elemento que estiver em A[2] no necessita ser comparado com o elemento que estiver em A[1], pois j foram anteriormente comparados, passando a ser comparado somente com os elementos que estiverem em A[3], A[4] e A[5]. c) na seqncia, o elemento que estiver em A[3] comparado com os elementos que estiverem em A[4] e A[5] e por fim, d) o elemento que estiver em A[4] comparado apenas com o elemento que estiver em A[5]. Seguindo este conceito faz-se a troca dos elementos desta forma: a) basta comparar o valor do elemento armazenado em A[1] com o valor do elemento armazenado em A[2]. Se o primeiro for maior que o segundo, ento trocam-se os seus valores. Podemos observar na tabela acima que a condio verdadeira e assim o elemento 9 de A[1] maior que o elemento 8 de A[2], passa-se para A[1] o elemento 8 e para A[2] passa-se o elemento 9. b) desta forma passa-se a fazer as trocas sucessivas at que se alcance o ltimo elemento da matriz, ou seja, a comparao entre o valor armazenado em A[4] com o valor de A[5] . Observao: Este procedimento de troca ser o mesmo para dados do tipo caracter (char ou string), uma vez que cada letra possui um valor diferente da outra. A letra A, por exemplo, tem valor menor que a letra B, e assim por diante. Se a letra A maiscula for comparada com a letra a minscula, estas tero valores diferentes. O processo de ordenao para caracteres no Pascal baseado no uso da tabela ASCII (American Standard Code for Information Interchange Cdigo Americano para Troca de Informaes).
. 57
Linguagem Pascal
58
Linguagem Pascal
Observaes: importante observar que no caso do encadeamento das estrutura for-to-do, ser executado primeiro a rotina mais interna, no caso a rotina de contagem da varivel J, passando o processamento para a rotina mais externa, quando a rotina mais interna fechar o seu ciclo. O segundo ponto a se observar a utilizao de uma segunda varivel no processo de ordenao, no caso , a varivel J. Observe que somente quando a varivel J atinge o valor 5 que este looping se encerra, retornando ao looping da varivel I, acrescentando mais um em I at que I atinja o seu limite e ambos os loopings sejam encerrados. Veja abaixo o quadro que mostra o comportamento dos valores das variveis I e J durante o processo de ordenao: Comportamento de I e J Quando I for J ser 1 2, 3, 4, 5 2 3, 4, 5 3 4, 5 4 5
59
Linguagem Pascal
Linguagem Pascal
else writeln(nome,' no foi localizado!'); writeln; write('Deseja Continuar a Pesquisa? (S/N) '); readln(resp); end; donewincrt; end. Analisando o trecho da pesquisa seqencial: Primeiro solicitado ao usurio a digitao do nome a ser pesquisado. Este nome atribudo ento varivel NOME. varivel I (varivel contadora do ndice) ento atribudo o valor 1 (ndice 1) e varivel ACHOU atribudo o valor falso (false). Isto necessrio para que a expresso da instruo while (i <= 10) and (achou=false) do seja validada no seu primeiro teste da condio. As instrues que se encontram dentro da estrutura while-do sero executadas enquanto o valor da varivel I for menor ou igual a 10 e simultaneamente o valor da varivel ACHOU for igual a falso (false). A estrutura if-then-else, localizada dentro da estrutura While-do citada acima, verifica se o valor digitado pelo usurio e atribudo varivel NOME igual ao valor do elemento da varivel indexada NOMES[I] (i variando de 1 at 10). Se o valor da varivel NOME for diferente do valor do elemento da varivel indexada NOMES[I] a varivel I ser incrementada em 1. Ser executada a prxima verificao de NOME com NOMES[I], e assim por diante. Caso seja igual, a varivel ACHOU passa a ter o valor verdadeiro (true), indicando que o nome procurado foi encontrado. Assim o fluxo de execuo do programa desviado para fora da estrutura whiledo e o programa informar ao usurio, atravs de uma mensagem, que o valor procurado foi encontrado. Caso o processamento das instrues da estrutura while-do (while (i <= 10) and (achou=false) do) chege ao seu final sem encontrar uma equivalncia entre a varivel NOME e a varivel NOMES[I], a varivel ACHOU permanece com o valor falso. Assim o programa ir informar ao usurio, atravs de uma mensagem, que o valor procurado no foi encontrado. Observe que a varivel ACHOU exerce um papel importante dentro da rotina de pesquisa, pois esta serve como um piv, estabelecendo um valor verdadeiro quando uma determinada informao localizada. Este tipo de tratamento de varivel conhecido como FLAG (Bandeira). A varivel ACHOU o flag, podendo-se dizer que ao comear a rotina a bandeira estava abaixada falsa, e quando a informao foi encontrada, a bandeira foi levantada verdadeira, indicando a localio da informao desejada.
61
Linguagem Pascal
Linhas
1 1 2 3 4 5
6 Posio 2,3
Observando a matriz TABELA de duas dimenses acima podemos concluir: a) o seu nome, obviamente, TABELA; b) esta matriz possui duas dimenses (linhas e colunas): TABELA[1..5,1..6] ; c) esta matriz possui o tamanho de 5 linhas (de 1 a 5) e 6 colunas (de 1 a 6), ou seja, uma matriz de 5 por 6 e, d) nesta matriz podero ser armazenados at 30 elementos (5x6=30). Em matrizes bidimensionais, assim como em matrizes de uma s dimenso, os seus elementos sero tambm manipulados (acessados) de forma individualizada, sendo a referncia a esses elementos feita sempre atravs de dois ndices: convenciona-se que o primeiro ndice indica a linha da matriz e o segundo ndice indica a coluna. Assim, TABELA[2,3] indica que est sendo feita uma referncia ao elemento armazenado na linha 2 coluna 3 da matriz. Quando manipulamos uma matriz do tipo vetor utilizamos uma nica estrutura de repetio (um for-todo por exemplo) para acessarmos os seus elementos individuais. No caso de matrizes com mais de uma dimenso, dever ser utilizado tantas estruturas de repetio quantas forem as suas dimenses. Para uma matriz de duas dimenses, por exemplo, deveremos utilizar duas estruturas de repetio encadeadas para que possamos acessar todos os seus elementos. Uma matriz de duas dimenses representada por seu nome, tamanho (dimenso de linhas e colunas) entre colchetes e o seu tipo, tendo assim, a seguinte sintaxe: <lista de identificadores> : array[li1..ls1,li2..ls2] of <tipo de dado>; Onde:
.
Linguagem Pascal
array-of so palavras-chave. li1 o limite inferior do intervalo de variao do ndice, que define a dimenso da linha varivel. ls1 o limite superior do intervalo de variao do ndice, que define a dimenso da linha varivel. li2 o limite inferior do intervalo de variao do ndice, que define a dimenso da coluna varivel. ls2 o limite superior do intervalo de variao do ndice, que define a dimenso da coluna varivel. tipo de dado o tipo de dado dos elementos da varivel.
da da da da
Observaes:
As regras para a formao dos identificadores das variveis compostas so as mesmas que a dos identificadores das variveis simples. O tipo de dado dos elementos da varivel pode ser qualquer tipo de dado vlido no pascal. O ndice da varivel, li1, ls1, li2 e ls2 deve ser do tipo ordinal (inteiro, caracter, booleano ou enumerado) ou uma gama de valores. Quando acessamos os elementos individuais das variveis compostas o valor do ndice pode ser expresso como uma constante, uma varivel ou uma expresso. Contudo o valor do ndice deve ser do tipo correto e deve estar dentro do intervalo correto. Os elementos individuais da varivel do tipo vetor podem ser usados em expresses, instrues de atribuio, instrues read e write, etc., como se fossem variveis de tipo simples.
Exemplo 1: Declarar a varivel composta (varivel bidimensional) MatrizA, de 4 linhas por 3 colunas, constituda de valores numricos reais. Var MatrizA : array[1..4,1..3] of real; Esta declarao cria uma estrutura de dados agrupados com o nome de MatrizA, com 4 x 3 = 12 elementos reais, endereveis por um par de ndices, com o primeiro deles indicando a linha e o outro indicando a coluna. Exemplo 2: Declarar a varivel composta (varivel bidimensional) MatrizB, de 5 linhas por 5 colunas, constituda de valores caracteres do tipo string. Var MatrizB : array[1..5,1..5] of string; Esta declarao cria uma estrutura de dados agrupados com o nome de MatrizB, com 5 x 5 = 25 elementos string, endereveis por um par de ndices, com o primeiro deles indicando a linha e o outro indicando a coluna. Exemplo 3: Exemplificando a utilizao de matrizes bidimensionais, vamos considerar o programa de entrada e sada de notas escolares de alunos . Assim como na leitura e escrita de uma matriz de uma dimenso, as operaes de entrada e sada com matrizes de duas dimenses processada passo a passo. Vamos considerar a manipulao de quatro notas de oito alunos. A tabela em questo (matriz) armazenar ento trinta e dois elementos (4x8=32). Um detalhe importante a ser considerado a utilizao de duas variveis para controlar os dois ndices de posicionamento de dados na tabela. Vejamos o programa abaixo.
. 63
Linguagem Pascal
Program Nota_aluno; Uses WinCrt; var Notas : array[1..8,1..4] of real; i,j : integer; resp: char; begin resp := 'S'; while (UpCase(resp)='S') do begin {Estrutura for-to-do encadeada - leitura das notas} for i:= 1 to 8 do {linha - alunos} begin clrscr; writeln('Leitura das Notas dos Alunos'); writeln('============================'); writeln('Entre com as notas do ',i:2,' aluno'); writeln; for j:= 1 to 4 do {coluna - notas} begin write('Digite a ',j:2,'a. nota: '); readln(Notas[i,j]); end; end; {Estrutura for-to-do encadeada-apresentao das notas} for i:= 1 to 8 do begin clrscr; writeln('Apresentao das Notas dos Alunos'); writeln('================================='); writeln; writeln('As notas do ',i:2,' aluno'); writeln; for j:= 1 to 4 do begin writeln(j:2,' a. Nota : ',Notas[i,j]:5:2); end; writeln; write('Tecle algo para ver as notas do prximo aluno...'); readkey; end; writeln; write('Deseja Continuar? (S/N) '); readln(resp); end; end. Analisando o trecho do programa acima, onde feita a leitura das notas dos alunos, podemos observar que foi utilizada a varivel I para controlar as posies dos elementos, a nvel de linha (alunos), dentro da matriz. Podemos observar tambm que foi utilizada a varivel J para controlar as posies dos elementos, a nvel de coluna (notas dos alunos). Observando o programa podemos verificar tambm que as variveis I e J so inicializadas com 1, ou seja, a leitura ou a apresentao, ser iniciada na primeira linha da primeira coluna da matriz. Assim sendo, ser ento digitada para o primeiro aluno a sua primeira nota, ou seja, aluno 1, nota 1. Logo em seguida ser
. 64
Linguagem Pascal
incrementado mais 1 varivel J, varivel que controla as posies da coluna (notas), passando ento para a posio Notas[1,2], ou seja, aluno 1, nota 2. Quando o contador de coluna, a varivel J, atingir o valor 4, a estrutura for-to-do ser ento encerrada. Em seguida o contador de linha, a varivel I, ser incrementado em 1, tornando-se 2. Ser ento inicializado novamente o contador J em 1, permitindo assim, que seja, digitado a nota 1 do aluno 2 (Notas[2,1]). A entrada dos dados estende-se- at que o valor do contador de linhas (varivel I) atinja o seu ltimo valor, no caso, 8. Esta estrutura for I:= 1 to 8 do tem a funo de controlar o posicionamento na tabela por aluno. A outra estrutura mais interna for J:= 1 to 4 do, controla o posicionamento das notas. Este programa resultaria na seguinte tela: Primeira tela - l as quatro notas dos oito alunos.
---------------------------------------------------------
Leitura das Notas dos Alunos ============================ Entre com as notas do 1 aluno Digite Digite Digite Digite a a a a 1a. 2a. 3a. 4a. nota: nota: nota: nota:
---------------------------------------------------------
Apresentao das Notas dos Alunos ================================= As notas do 1 aluno 1a. 2a. 3a. 4a. Nota Nota Nota Nota : : : :
Pessoas
1 2 3 4 ... 10
Bairro
Telefone
65
Linguagem Pascal
Aps o cadastramento de todos os elementos na matriz AGENDA, ser iniciado o processo de classificao alfabtica pelo nome de cada pessoa. Este mtodo j foi anteriormente estudado. o mesmo processo de ordenao utilizado em matrizes de uma s dimenso. Aps a comparao do primeiro nome com o segundo por exemplo, sendo o primeiro maior que o segundo, estes devero ser trocados. importante observar que alm de trocar os nomes de posio, ou seja, o contedo de AGENDA[1,1] passa para a posio AGENDA [2,1] e o elemento de AGENDA [2,1] passa para a posio AGENDA [1,1], trocase tambm todos os elementos relacionados ao nome (o endereo, o cep, o bairro e o telefone). Veja abaixo a rotina de troca do nome e demais elementos relacionados a ele na mesma linha. {*** Rotina de entrada ***} ... {*** Ordenao e troca de elementos ***} for atual := 1 to 9 do for proximo := atual+1 to 10 do if (AGENDA[atual,1] > AGENDA[proximo,1]) then begin {troca do nome} temp := AGENDA[atual,1] AGENDA[atual,1] := AGENDA[proximo,1]; AGENDA[proximo,1]:= temp; {troca do endereo} temp := AGENDA[atual,2] AGENDA[atual,2] := AGENDA[proximo,2]; AGENDA[proximo,2]:= temp; {troca do cep} temp := AGENDA[atual,3] AGENDA[atual,3] := AGENDA[proximo,3]; AGENDA[proximo,3]:= temp; {troca do bairro} temp := AGENDA[atual,4] AGENDA[atual,4] := AGENDA[proximo,4]; AGENDA[proximo,4]:= temp; {troca do telefone} temp := AGENDA[atual,5] AGENDA[atual,5] := AGENDA[proximo,5]; AGENDA[proximo,5]:= temp; end; ... {*** Rotina de sada ***}
66
Linguagem Pascal
12.1 Registros
O Registro a principal estrutura de dados, cujos os elementos constituintes no necessitam ser do mesmo tipo. Podemos, desta forma, nos referir coletivamente a um conjunto de elementos que diferem entre si no seu tipo. Aos elementos individuais dessa estrutura damos o nome de campos do registro. Pelo fato de podermos trabalhar com os vrios dados de tipos diferentes (os campos) em uma mesma estrutura, este tipo de dado considerado heterogneo. A forma mais fcil de se definir um registro incluir a definio como parte de uma declarao de varivel. Isto nos permite declarar uma varivel individual do tipo registro, tal como declaramos variveis de tipo simples ou variveis do tipo array. Veja abaixo a sintaxe. Sintaxe Primeira Forma: Var <identificador> : record <campo 1: tipo>; <campo 2: tipo>; ... <campo n: tipo> end; Onde: Var, Record e End so palavras reservadas do Pascal. Identificador o nome da varivel do tipo registro que se deseja declarar; Campo representam as variveis que sero usadas como campos do registro. Tipo so os tipos das variveis (campos) e podem ser: real, integer, boolean, string entre outros existentes no Pascal. Observaes: Cada declarao de campo escrita seguindo as mesmas regras de declarao de variveis no Pascal. Alm dos tipos simples, vlidos no Pascal, os campos do registro podem ser outro tipo definido pelo usurio ou um outro registro previamente declarado.
Exemplo: Suponha que um registro de funcionrio de uma empresa consista na sua matrcula do tipo inteiro, no seu nome do tipo literal, na sua conta bancria do tipo real e no seu cargo do tipo literal. Representamos este registro como uma varivel do tipo registro chamada reg_funcionario. A declarao da varivel mostrada abaixo. Var reg_funcionario : record matricula : integer; nome : string[30]; conta : real; cargo : string[10]; end;
67
Linguagem Pascal
Outra maneira de definir um registro, que freqentemente mais utilizada do que a simples declarao de varivel a definio de um tipo registro. Assim, as variveis individuais podero ser declaradas como sendo deste tipo previamente declarado. Neste caso um tipo registro declarado em Pascal com a instruo type em conjunto com a instruo record. Veja abaixo a sintaxe. Sintaxe Segunda Forma: Type <identificador> = record <campo 1: tipo>; <campo 2: tipo>; ... <campo n: tipo> end; Var <identificador> : <tipo>; Onde: Type, Record e End so palavras reservadas do Pascal. Identificador na declarao Type o nome do tipo registro que se deseja declarar. Na declarao Var o nome da varivel que ser declarada como tipo registro; Campo representam as variveis que sero usadas como campos do registro. Tipo na declarao Type so os tipos das variveis (campos) e podem ser: real, integer, boolean, string entre outros existentes no Pascal. Na declarao Var refere-se ao tipo registro previamente declarado. Observe que aps a declarao do tipo registro (declarao Type) voc poder ento declarar as novas variveis individuais como sendo deste tipo declarado. Vale lembrar que a declarao acima tem o mesmo resultado que a declarao de varivel mostrada na primeira forma de declarao. Esta abordagem , contudo, mais geral, porque nos permite declarar variveis registro adicionais (com a mesma composio) medida que se faz necessrio. Observaes: Note que neste caso, os tipos registro devem ser declarados antes das declaraes das variveis do tipo registro, pois bastante comum ocorrer a necessidade de se declarar uma varivel com o tipo de registro previamente declarado. Cada declarao de campo escrita seguindo as mesmas regras de declarao de variveis no Pascal. Alm dos tipos simples, vlidos no pascal, os campos do registro podem ser outro tipo definido pelo usurio ou um outro registro previamente declarado.
Exemplo: Vamos utilizar o mesmo exemplo utilizado anteriormente do registro de funcionrio de uma empresa. A declarao da varivel mostrada abaixo. Type reg_funcionario = record matricula : integer; nome : string[30]; conta : real; cargo : string[10]; end; Var funcionario : reg_funcionario;
68
Linguagem Pascal
Observe que primeiro declaramos um o registro lgico chamado reg_funcionrio e logo em seguida declaramos a varivel funcionrio do tipo reg_funcionrio. O registro reg_funcionrio um conjunto de dados heterogneos (um campo integer, um campo real e dois campos string).
69
Linguagem Pascal
{*** declarao do conjunto de registros aluno ***} Var aluno : array[1..8] of reg_aluno; ... Observe que a declarao VAR, declara uma varivel de registro chamada ALUNO, sendo esta um conjunto de oito registros (array[1..8]) do tipo reg_aluno, que por sua vez formado por dois tipos de dados: o nome (nome do aluno) como caractere e a nota (quatro notas do aluno) como bimestre.
Linguagem Pascal
writeln; for j := 1 to 4 do {coluna - notas} begin write('Informe a',j:2,'a. nota.........: '); readln(aluno[i].nota[j]); end; end; {*** Apresentao - 8 alunos com 4 notas cada***} for i := 1 to 8 do begin clrscr; writeln('Apresentao das Notas dos Alunos'); writeln('================================='); writeln; writeln('Aluno : ',aluno[i].nome); writeln; for j := 1 to 4 do writeln('Nota ',j:2,'......: ' ,aluno[i].nota[j]:5:2); writeln; write('Tecle <ENTER> para ver as notas do prximo aluno...'); readln; end; writeln; write('Deseja Continuar? (S/N) '); readln(resp); end; donewincrt; end. Este programa resultaria na seguinte tela: Primeira tela - l as quatro notas dos oito alunos.
---------------------------------------------------------
Leitura das Notas dos Alunos ============================ Informe o nome do 1 aluno...: XXXXXXXXXXXXXXXXXXXX Digite Digite Digite Digite a a a a 1a. 2a. 3a. 4a. nota: nota: nota: nota: 99.99 99.99 99.99 99.99
---------------------------------------------------------
Apresentao das Notas dos Alunos ================================= Aluno : XXXXXXXXXXXXXXXXXXXX 1a. 2a. 3a. 4a. Nota Nota Nota Nota : : : : 99.99 99.99 99.99 99.99
Linguagem Pascal
Captulo 13 - Arquivos
J estudamos os conceitos de tabelas em memria (memria RAM) atravs da utilizao de VETORES e MATRIZES. Estudamos tambm o conceito de utilizao do tipo definido REGISTRO. Estes conceitos vistos anteriormente formaram a base para a utilizao de um arquivo, pois um arquivo na verdade uma estrutura de dados (tabela de informaes) gravada em um meio magntico como disquetes, discos rgidos ou fitas magnticas. As matrizes e os vetores so manipuladas atravs de um ndice de controle ao passo que os arquivos so manipulados por um ponteiro de registro. Os arquivos so usados principalmente em dois casos: a) Quando necessitamos armazenar as informaes permanentemente. O contedo da memria principal do computador se perde, quando se executa outro programa ou quando se desliga o computador, entretanto as informaes armazenadas em um meio magntico ficam guardadas permanentemente, podendo ser utilizadas a qualquer momento. b) Quando as informaes so muito numerosas para caber memria principal do computador. Utilizando arquivos podemos armazenar um nmero maior de informaes (registros) do que em uma tabela em memria, estando apenas limitado ao tamanho do meio fsico utilizado para a sua gravao.
Linguagem Pascal
A sintaxe: Var <identificador> : File Of <tipo registro>; Onde: Var e File Of so palavras reservadas do Pascal. Identificador o nome da nova varivel que ser usada para representar o arquivo; Tipo registro o tipo a que pertencem os registros do arquivo. Observaes: importante observar que devemos, antes de declarar a nova varivel do tipo arquivo, definir um tipo registro. O tipo registro, previamente declarado, definir ento a estrutura do registro do novo arquivo.
Exemplo: Type reg_agenda = record nome : rua : numero: cidade: end; string[30]; string[25]; integer; string[25];
Var arq_agenda : file of reg_agenda; agenda : reg_agenda; Neste exemplo, foi declarado uma varivel chamada arq_agenda, um arquivo com tipo definido de registro, composta por registros do tipo reg_agenda. A varivel arq_agenda representar o novo arquivo criado. Note ento que, conforme descrito anteriormente, o tipo registro reg_agenda foi previamente declarado e s depois foi declarada a varivel arq_agenda. A estrutura de arq_agenda foi definida na declarao do novo tipo record chamado reg_agenda. A figura abaixo mostra a representao do arquivo arq_agenda. Registro reg_agenda Nome Rua Campo numero Numero Cidade Arquivo arq_agenda
13.3 Operaes com arquivos 13.3.1 Associando um arquivo varivel de controle (assign)
A procedure assign tem por finalidade associar um nome lgico de arquivo (varivel arquivo) ao arquivo fsico (arquivo em meio magntico). importante frisar que esta instruo no criar o arquivo fsico. Antes de executarmos a abertura de um arquivo no Pascal devemos fazer uma associao do arquivo lgico declarado com o arquivo fsico. Para se fazer a associao desta identificao interna (a varivel arquivo) com a identificao externa (o arquivo fsico) usa-se a procedure assign. Ateno! Este comando deve anteceder a abertura do arquivo que feita usando-se a procedure reset. Veja abaixo sua sintaxe: A sintaxe:
73
Onde: Assign palavra-chave do Pascal; Varivel arquivo o nome da varivel arquivo (arquivo lgico) declarada no programa, que se deseja associar ao arquivo fsico. Arquivo o nome do arquivo fsico (arquivo em meio magntico) pelo qual conhecido externamente ao programa. Ateno: este parmetro deve estar entre aspas simples. Observao: Pode-se acrescentar ao parmetro arquivo da procedure assing um caminho (path). Este caminho indicar o local (a unidade e a pasta) onde dever ser feita a gravao do arquivo, quando da sua criao pela procedure rewrite.
Exemplo: Assign(arq_agenda,agenda.dat); Esta instruo associa o arquivo lgico arq_agenda ao arquivo fsico agenda.dat que ser criado posteriormente com a procedure rewrite.
Onde: Rewrite palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo fsico (arquivo em meio magntico). Observao: Antes de se criar um arquivo utilizando a procedure rewrite obrigatrio fazer a associao do arquivo lgico (varivel arquivo) com o arquivo fsico, utilizando a procedure assing. Caso contrrio uma erro em tempo de execuo (Run-time error 102: File not assigned) ser apresentado. Cuidado! Caso o arquivo j exista a procedure rewrite ir apagar todos as informaes (registros) existentes. Quando um arquivo criado o ponteiro do arquivo posiciona-se no primeiro registro deste arquivo, ou seja, no registro de nmero 0 (zero).
Exemplo: rewrite(arq_agenda);
74
Linguagem Pascal
Onde: Reset palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo fsico (arquivo em meio magntico). Observao: Caso voc faa a tentativa de abrir um arquivo ainda no existente, ser apresentada a mensagem de erro em tempo de execuo (Run-time error 2: File not found). Esta mensagem representa uma tentativa de abertura de um arquivo inexistente. necessrio ento que se crie o arquivo (procedure rewrite) antes da sua abertura.
Exemplo: reset(arq_agenda);
Onde: Read palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo (arquivo fsico). varivel registro o nome de uma varivel , geralmente uma varivel do tipo registro. Esta varivel receber a informao lida no arquivo. Exemplo: read(arq_agenda,agenda); Esta instruo faz a leitura de um registro no arquivo arq_agenda e o armazena na varivel do tipo registro chamada agenda. A instruo l o registro para o qual o ponteiro do arquivo aponta no momento.
75
Linguagem Pascal
Onde: Write palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo (arquivo fsico). varivel registro o nome de uma varivel , geralmente uma varivel do tipo registro. Observao: Aps a gravao da informao no arquivo a instruo write posiciona o ponteiro do registro no prximo registro.
Exemplo: write(arq_agenda,agenda); Esta instruo grava o registro, que se encontra armazenado na varivel agenda, no arquivo arq_agenda. A instruo grava a informao no registro para o qual o ponteiro do arquivo aponta no momento.
Onde: Close palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo fsico (arquivo em meio magntico). Exemplo: Close(arq_agenda);
Linguagem Pascal
procedure podemos acessar o n-simo registro de um arquivo. Lembre-se: No Pascal o primeiro registro de um arquivo o de nmero 0 (zero). A sintaxe:
Seek(<varivel arquivo>,<n>);
Onde: Seek palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo (arquivo fsico). n o nmero do registro que se quer acessar. Exemplo: Seek(arq_agenda,1); Esta instruo posiciona o ponteiro do arquivo no registro de nmero 1 (segundo registro) do arquivo associado varivel arquivo arq_agenda.
Onde: FilePos palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo fsico (arquivo em meio magntico). Exemplo: ... Seek(arq_agenda,1); Writeln(FilePos(arq_agenda)); ... No exemplo acima a instruo Writeln(FilePos(arq_agenda)); mostrar na tela o valor 1 que corresponde posio do registro de nmero 1 do arquivo arq_agenda. Observe que a procedure seek forou o ponteiro do arquivo a se posicionar neste registro (o de nmero 1) atravs da instruo Seek(arq_agenda,1);.
Onde:
77
Linguagem Pascal
FileSize palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo fsico (arquivo em meio magntico). Exemplo: ... Writeln(FileSize(arq_agenda)); ... No exemplo acima a instruo Writeln(FileSize(arq_agenda)); mostrar na tela a quantidade de registros do arquivo arq_agenda.
Onde: Eof palavra-chave do Pascal; varivel arquivo o nome da varivel arquivo (arquivo lgico) associada ao arquivo (arquivo fsico). Exemplo: ... while (not Eof(arq_agenda)) do begin read(arq_agenda,x); writeln(x.codigo, ,x.nome); end; ... No exemplo acima a instruo writeln(x.codigo, ,x.nome);; mostrar na tela os campos codigo e nome de todos os registros do arquivo arq_agenda at que seja encontrado o fim deste arquivo. Bibliografia: Aprendendo a Programa na Prtica Turbo Pascal Virglio V. Vilela Fevereiro 1999. Programando em Turbo Pascal 7.0 Jos Augusto N. G. Manzano, Wilson Y. Yamatumi, Editora rica, quarta edio 1996. Pascal Estruturado Uarry Farrer, Christiano G. Becker, Eduardo Chaves Faria, Frederico Ferreira Campos, e outros Editora LTC, terceira edio, 1999. Programao em Pascal Byron S. Gottfried, Ph. D.
McGraw-Hill, 1988.
78