Anda di halaman 1dari 24

PASCAL

LIO 1 INTRODUO

Introduo uma linguagem de programao estruturada que recebeu este nome em homenagem ao matemtico Blaise Pascal. Foi criada em 1970 pelo suo Niklaus Wirth, tendo em mente encorajar o uso de cdigo estruturado. O prprio Niklaus Wirth diz que Pascal foi criada simultaneamente para ensinar programao estruturada e para ser utilizada em sua fbrica de software. A linguagem extremamente bem estruturada e muito adequada para ensino de linguagens de programao. provavelmente uma das linguagens mais bem resolvidas entre as linguagens estruturadas, e certamente, um dos exemplos de como uma linguagem especificada por uma pessoa pode ser bem melhor do que uma linguagem especificada por um comit. Pascal originou uma enorme gama de dialetos, podendo tambm ser considerada uma famlia de linguagens de programao. Grande parte de seu sucesso se deve criao, na dcada de 80, da linguagem Turbo Pascal, inicialmente disponvel para computadores baseados na arquitetura 8086 (com verses para 8080 no seu incio). Pascal normalmente uma das linguagens de escolha para ensinar programao, junto com Scheme, C, e Fortran. Pr-requisitos O objetivo deste curso no ensinar a lgica de programao, assim, ele ser melhor aproveitado pelos alunos que j tiverem conhecimentos bsicos sobre ela. Ser necessrio instalar um compilador de pascal no seu computador para fazer os exerccios prticos. Escolha um dos compiladores da lista e instale antes de comear o curso. Para instalar o free pascal: #apt-get update #apt-get install fp-compiler Como compilar e executar Sempre que voc escrever um programa em Pascal ou quiser testar algum dos exemplos faa o seguinte: Abra um editor de texto qualquer (gedit, kate, kedit, etc) e escreva seu programa (ou copie e cole o exemplo); Salve o arquivo com a extenso .pas, por exemplo, teste.pas; Abra um terminal e digite fpc <nome_do_arquivo.pas>, isto ir compilar seu programa. Se houver algum erro nele que impessa ser exibida uma mensagem na tela dizendo qual o erro; Digite ento ./<nome_do arquivo>, agora voc no deve digitar o .pas do nome do arquivo. O ./ executa o programa.

PASCAL
LIO 2 - CONCEITOS INICIAIS

VARIVEIS E CONSTANTES Constantes e variveis so elementos bsicos manipulados pelos programas. Ambos armazenam dados. As constantes armazenam dados que tero o mesmo valor durante toda a execuo do programa. As variveis armazenam dados que podem ter seus valores alterados durante a execuo. Todas as constantes e variveis de um programa em Pascal precisam ser declaradas no incio do programa. Assim o computador poder reservar o espao de memria que ser necessrio para a execuo do programa. Cada constante ou varivel tem um nome que a identifica, ou um identificador, e um tipo. Os identificadores servem para que se tenha acesso aos dados, podendo v-los e modific-los quando for necessrio. Existem algumas regras para os identificadores, so elas: O primeiro caractere de um identificador deve ser obrigatoriamente uma letra; Os caracteres seguintes podem ser letras ou dgitos; No permitido o uso de caracteres em branco ou quaisquer outros que no sejam letras ou dgitos; A linguagem Pascal no diferencia as letras maisculas das minsculas, assim, Variavel3 e variavel3 so considerados o mesmo identificador. Os tipos de dados do Pascal sero explicados a seguir: Para os dados numricos o Pascal tem diferentes tipos tanto para inteiros quanto para reais. A diferena entre os tipos de cada um desses grupos o intervalo de valores que cada um suporta. Por exemplo, os tipos Shortint e Integer armazenam inteiros. A diferena entre eles que um dado do tipo Shortint pode assumir valores entre -128 e 127 e os dados do tipo Integer podem assumir valores de -32768 a 32767. A lista seguinte mostra todos os tipos de dados numricos da linguagem Pascal e o intervalo de valores suportado por cada tipo. Tipos de dados inteiros: Shortint -128 a 127; Integer -32768 a 327667; Longint -2147483648 a 2147483647; Byte 0 a 255; Word 0 a 65535. Tipos de dados reais Real 2,9 * 10-39 a 1,7 * 1038 Single 1,5 * 10-45 a 3,4 * 1038 Double 5,0 * 10-324 a 1,7 * 10308 Extended 3,4 * 10-4932 a 1,1 * 104932 Comp -9,2 * 1018 a 9,2 * 1018 importante escolher o tipo certo de dado para cada situao para que no haja desperdcio de memria. Por exemplo, uma varivel dia que representa os dias do ms poder ter apenas valores inteiros de 0 a 31. Ento, no faz sentido escolher para esta varivel o tipo de dados real, ou

PASCAL
longint. O tipo Byte capaz de armazenar todos os valores possveis de dia e o que menos ocupa memria (quanto menor o intervalo de valores suportado pelo tipo menor, ser a quantidade de memria alocada), ento a melhor escolha a ser feita. O tipo Shortint tambm poderia ser escolhido, pois ocupa a mesma quantidade de memria do tipo Byte e capaz de armazenar valores inteiros de 0 a 31. Alm dos tipos dados numricos, o Pascal tem tipos de dados lgicos e de caracteres, mostrados abaixo: Tipos de dados caracteres: String; Char.

Tipos de dados lgicos: True; False. As variveis do tipo char armazenam um caractere (isto , uma letra, um dgito ou um smbolo especial). As do tipo string armazenam uma cadeia de caracteres, podendo formar palavras. Uma string pode ter no mximo 255 caracteres. Os dados do tipo lgico s podem assumir os valores verdadeiro (true) ou falso (false). Uma varivel, ou constante, lgica deve ser declarada como boolean. DECLARAO DE VARIVEIS Voc j sabe que as variveis tem de ser declaradas, ento, vejamos como se faz isto. Var nome: string [30]; idade: shortint; salrio: comp; Antes das declaraes utilizamos a palavra reservada var, que indica que as prximas linhas tero declaraes de variveis. Depois a sintaxe a seguinte: <nome da varivel> : <tipo>; Observe que ao final de cada linha necessrio usar um ponto-e-vrgula. Se houver mais de uma varivel do mesmo possvel escrev-las na mesma linha. Neste caso o nome das variveis deve ser separado por vrgulas, como no exemplo abaixo: nota1, nota2, nota3 : real; tambm permitido declarar variveis de tipos diferentes em uma linha. nome: string [30]; idade: shortint; porm, como voc deve ter percebido, isto dificulta a legibilidade do programa. Em alguns casos a declarao de muitas variveis do mesmo tipo em uma linha tambm causa este problema.

PASCAL
DECLARAO DE CONSTANTES Para declarar uma constante em Pascal basta escrever seu identificador e seu valor, precedidos da palavra const. Como foi feito abaixo: const nome = 'Ana Maria de Souza'; idade = 35; O valor atribudo a uma constante na declarao pode ser um real, inteiro, uma string ou um valor lgico. A sintaxe de uma declarao de constante sempre igual a do exemplo acima: <identificador> = <valor>;

OPERAES ARITMTICAS As operaes aritmticas bsicas do Pascal so: soma, subtrao, multiplicao, diviso, diviso inteira e resto. As operaes de soma e subtrao tm menor prioridade que as demais. Entre operaes com a mesma prioridade ser executada primeiro a que estiver mais esquerda na expresso. A representao dos operadores em Pascal mostrada a seguir: + _ * / div mod soma subtrao multiplicao diviso diviso de inteiros resto da diviso de inteiros

Os operadores +, -, * e / podem ser usados tanto para reais quanto para inteiros. Os operadores div e mod s podem ser usados para nmeros inteiros. Em expresses com os operadores +, - e * se um dos operandos for real o resultado ser origatoriamente real. O operador / s produz resultados reais, independentemente do tipo dos operandos. Veja alguns exemplos: Considere i1 e i2 variveis inteiras, e r1 e r2 variveis reais, i1 + i2 tem resultado inteiro; i1 + r1 tem resultado real; i1 / i2 tem resultado real; i1 * i2 tem resultado inteiro; i1 mod i2 tem resultado inteiro; i1 mod r1 uma operao invlida, j que os operandos de mod tm de ser necessariamente inteiros.

O Pascal tem tambm funes para realizar operaes diferentes das que j foram citadas, como seno e exponenciao. A tabela seguir mostra estas funes.

PASCAL

Funo ln(ea) exp(ea) abs(ea) trunc(ea) round(ea) sqr(ea) sqrt (ea) sin(ea) cos(ea) arctan(ea)

Resultado logartmo natural de ea eelevado a ea mdulo de ea valor truncado de ea valor arredondado de ea ea elevado ao quadrado raz quadrada de ea seno de ea cosseno de ea arco tangente de ea

Tipo do resultado real real integer ou real integer integer integer ou real real real real real

Obs: 1. ea uma expresso aritmtica; 2. truncar um nmero significa considerar apenas sua parte inteira. Por exemplo, truncando 4,87 teramos 4 como resultado. EXPRESSO LGICA Uma expresso lgica uma expresso qual podem ser atribudos os valores verdadeiro ou falso. Chamamos de relao uma expresso que compara dois valores do mesmo tipo. Freqentemente utiliza-se uma combinao de relaes com expresses lgicas nos programas em Pascal. Os operadores relacionais esto listados na tabela seguinte. > >= < <= = <> maior maior ou igual menor menor ou igual igual diferente

Podemos utilizar os operadores relacionais tanto para comparar dados numricos quanto caracteres. A comparao entre strings feita caractere a caractere de acordo com a ordem alfabtica, assim, 'ana' < 'bruno'. Cada comparao retorna um valor lgica. Por exemplo, se a = 2 e b = 2.5, a comparao a > b retornar o valor false. Operador lgico, assim como um operador aritmtico, uma classe de operao sobre variveis ou elementos pr-definidos. AND, OR e NOT so os principais operadores lgicos, base para a construo de sistemas digitais e da Lgica proposicional. Os operadores AND e OR so operadores binrios, ou seja, necessitam de dois elementos, enquanto o NOT para um nico elemento. Uso: x1 AND x2 x1 OR x2 NOT x1

PASCAL
Descrio:

AND: operador lgico onde a resposta da operao verdade (1) somente se ambas as variveis forem verdade.

x1 0 0 1 1

x2 0 1 0 1

x1 AND x2 0 0 0 1

OR: operador lgico onde a resposta da operao verdade (1) se pelo menos uma das variveis de entrada for verdade. x1 0 0 1 1 x2 0 1 0 1 x1 OR x2 0 1 1 1

NOT: operador lgico que representa a negao (inverso) da varivel atual. Se ela for verdade, torna-se falsa, e vice-versa. x1 0 NOT x1 1

OBS: nas tabelas acima o valor 0 equivale a false e o valor 1 equivale a true. COMANDO DE ATRIBUIO A funo de um comando de atribuio modificar o valor de uma varivel. A sintaxe de uma atribuio a seguinte: <nome da varivel> := <novo valor>; OBS: o novo valor pode ser uma expresso, por exemplo: salarioliquido := salariobruto - (dependentes * mensalidade); onde mensalidade o valor pago para cada um dos dependentes para que ele tenha direito ao plano de sade do funcionrio. Antes de usar um comando de atribuio lembre-se de que a varivel e o novo valor devem ser de tipos compatveis. Por exemplo, se idade uma varivel inteira no poderamos escrever idade := 'maria'; Mesmo entre um valor inteiro e uma varivel inteira preciso tomar algum cuidado para que no haja erros. Neste caso, o importante verificar que o tipo de dado da varivel capaz de

PASCAL
armazenar o novo valor. Veja um exemplo: numerodealunos := 400; se numerodealunos for do tipo integer no haver nenhum problema com esta atribuio, porm, se ele for do tipo byte no ser possvel atribuir o novo valor a ele, pois variveis deste tipo s podem assumir valores entre 0 e 255. O mesmo acontece com os reais. Antes de atribuir um valor a uma varivel tenha certeza de que ela ser capaz de armazenar este valor. O comando de atribuio tambm pode ser usado para variveis lgicas (boolean). Veja um exemplo: aprovado := false; onde aprovado uma varivel booleana que recebe valor verdadeiro se o aluno obteve mdia maior ou igual a 6, e falso caso contrrio.

PASCAL
LIO 3 - COMEANDO A PROGRAMAR

Agora que voc j sabe um pouco sobre a linguagem Pascal comearemos a programar! Todo programa em Pascal tem a seguinte estrutura: Program <nome do programa>; var <declaraes de variveis> begin <instrues> end. Se o programa tiver constantes basta declar-las logo depois das variveis, como foi mostrado na primeira lio. As palavras begin e end delimitam o bloco principal do programa, onde so escritos os comandos. program Hello; var mensagem : string; begin mensagem := 'Hello World'; write (mensagem); end. Copie e cole o programa acima no editor de texto. salve-o com o nome de hello.pas, agora abra o terminal, entre na pasta que voc salvou o hello.pas e digite os seguintes comandos: $ fpc hello.pas $ ./hello O primeiro comando compila o programa, isto , traduz o seu programa em Pascal para um cdigo objeto, que posteriormente resultar num programa executvel. O segundo comando executa o executvel gerado aps a compilao. Se tudo der certo depois destes comandos voc ver na tela a frase Hello World. A maior parte do programa voc j deve ter entendido. Primeiro declaramos uma varivel do tipo string chamada mensagem. Depois, dentro do bloco principal do programa, atribumos a mensagem string Hello World. A ltima parte a que voc no tinha aprendido ainda, write (mensagem); faz com que o contedo da varivel mensagem seja impresso na tela. Na prxima pgina voc aprender mais alguns comandos de entrada e sada. Voc muito provavelmente percebeu que a funo do comando WRITE escrever uma mensagem na tela. Existem outros comandos que tm a funo de receber dados do usurio e mostrar informaes a ele. Eles so chamados comandos de entrada e sada, e sero apresentados a seguir.

PASCAL
Entrada read O comando read usado para ler dados que o usurio digita. A sintaxe desse comando a seguinte:

read (lista de identificadores); quando a lista de identificadores tiver mais de um identificador, separe-os com vrgulas. Quando o programa executado os valores devem ser escritos separados por espaos.

Readln

O readln tambm tem como funo ler dados da entrada padro. Sua sintaxe a seguinte: readln (lista de identificadores); A diferena entre estes dois comandos que se em uma linha de entrada forem digitados mais valores do que os que o programa precisa ler no momento, o readln ignora os prximos valores. O read, ao contrrio, utilizar estes valores como entradas na prxima vez que o programa tiver um comando de entrada. Veja um exemplo: program funcoesdeleitura; var i1, i2, i3: integer; r1, r2, r3: real; begin read (i1,r1); read (i2,r2); read (i3,r3); end. Suponha que o programa foi executado e o usurio digitou os seguintes valores: 1 3.2 3 3.8 2 2.4 <-' 5 4.2 8 2.5 9 4.2 <-' 6 4.3 7 7.3 4 5.5 <-' em que o smbolo <-' representa a tecla enter. Neste caso as variveis i1, i2, i3 e r1, r2, r3 receberiam os seguintes valores: i1 = 1 r1 = 3.2 i2 = 3 r2 = 3.8 i3 = 2 r3 = 2.4 Se o mesmo programa tivesse sido escrito substituindo os read por readln os valores das variveis seriam os seguintes: i1 = 1 r1 = 3.2 i2 = 5 r2 = 4.2 i3 = 6

PASCAL
r3 = 4.3 Isto porque depois de fazer r1 = 3.2 os demais valores da primeira linha seriam ignorados. O segundo read utilizaria os valores da segunda linha, fazendo i2 = 5 e r2 = 4.2. Sada Assim como para a entrada existem dois comandos para sada, write e writeln. A sintaxe desses comandos idntica dos mostrados anteriormente. write (lista de identificadores); writeln (lista de identificadores); Como ja foi dito, a funco deles imprimir algo na tela. No lugar da lista de identificadores podemos colocar valores constantes, strings, expresses etc. Veja alguns exemplos: writeln ('Bom Dia'); writeln ('idade: ',idade); writeln ('media = ', lies*0.7 + prova*0.3); Se as variveis tivessem os valores idade = 18; lies = 9; prova = 10. Os comandos acima teriam as seguintes sadas: Bom Dia; idade: 18; media = 9.3. A diferena entre os comandos write e writeln que o segundo depois de imprimir a mensagem muda o cursor para a prxima linha. Assim, se houver vrios writeln no programa, a sada de cada um deles ser escrita em uma linha. Por outro lado, se houver vrios write, todas as sadas sero escritas na mesma linha. Exerccio 1 Escreva um programa que leia os dados de uma pessoa, nome, idade, nmero de identidade, telefone e endereo, e os imprima na tela.

PASCAL
LIO 4 - CONDICIONAIS E ESTRUTURAS DE REPETIO

Os programas em Pascal so executados sequencialmente, isto , os comandos so executados um a um na ordem em que foram escritos. Porm, existem algumas estruturas que podem mudar esta ordem. Por exemplo, usando uma estrutura de repetio pode-se fazer com que o prximo comando executado no seja o da prxima linha, mas o que est cinco linhas acima do ltimo comando executado. A seguir sero apresentadas as estruturas de deciso e repetio. ESTRUTURAS DE DECISO Se voc j conhece a lgica de programao, ou alguma outra linguagem, provavelmente se lembrar de que muito comum ter de associar determinados comandos em um programa a condies. Por exemplo, se (mdia >= 6.0) ento aprovado := true seno aprovado := false Neste caso a condio para que uma pessoa seja aprovada que sua mdia final seja maior ou igual a 6. Se isto no acontecer ela ser reprovada (aprovado = false). A sintaxe das estruturas de repetio em Pascal a seguinte: If condio; then comandos; {else comandos}. O que essa estrutura faz primeiro verificar se a condio verdadeira ou falsa. Se for verdadeira os comandos que vm depois do then sero executados. Se for falsa os comandos depois do else sero executados. O else no necessrio. Voc pode usar uma condio apenas para decidir se um comando ser ou no executado, sem precisar dizer o que ser feito se a condio no for verdadeira. Quando h mais de um comando a ser executado no then ou no else precisamos sinalizar quais so eles, caso contrrio seria impossvel distinguir estes comandos dos que vem depois da estrutura de repetio e devem ser executados independentemente da condio. Veja o exemplo abaixo: If (hora >= 16.0); then write ('O horrio de funcionamento j foi encerrado'); write ('Obrigado por visitar nossa pgina'). Neste caso a linha write ('Obrigado por visitar nossa pgina'); dever ser executada apenas se a condio hora >= 16.0 ou em todos os casos? Seria impossvel saber isso. Por isso usamos blocos de comandos que delimitam quais comandos esto dentro de cada parte da estrutura. As palavras utilizadas para isso so begin e end. Veja outro exemplo:

PASCAL If (hora >= 16.0) then begin write ('O horrio de funcionamento j foi encerrado'); write ('Por favor retorne amanha'); end else begin write ('por favor digite seu nmero de identificao'); read (numero); write ('por favor digite a senha de acesso'); read (senha); end; write ('Obrigado por visitar nossa pgina'); Neste caso fica claro que quando a condio for verdadeira ser executado o bloco: begin write ('O horrio de funcionamento j foi encerrado'); write ('Por favor retorne amanha'); end e se a condio for falsa ser executado o seguinte: begin write ('por favor digite seu nmero de identificao'); read (numero); write ('por favor digite a senha de acesso'); read (senha); end; e o comando write ('Obrigado por visitar nossa pgina'); ser executado independentemente da condio.

PASCAL
ESTRUTURAS DE REPETIO OU LAOS (FOR, WHILE, REPEAT) Outra forma de mudar a ordem seqencial de execuo de um programa atravs das estruturas de repetio ou laos. Estas estruturas so usadas para que um mesmo bloco de comandos seja executado vrias vezes. No Pascal existem trs diferentes formas de fazer isto, for, while e repeat.

FOR
A primeira forma de lao estudada neste curso ser o for. Nela sempre usado um contador, que controla o nmero de vezes que o bloco ser repetido. A sintaxe do for a seguinte: for contador := valor-inicial to valor-final do begin bloco de comandos end; ou for contador := valor-inicial downto valor-final do begin bloco de comandos end; onde contador a varivel responsvel por determinar quantas vezes o bloco ainda ser executado. A cada vez que o lao executado o valor de contador incrementado (quando usamos o to) ou decrementado (quando usamos o downto). importante observar que o contador deve ser sempre declarado como uma varivel inteira. O lao ser repetido at que o contador seja maior que o valor final, se for usado to, ou menor que ele, se for usado o downto. Observe os valores assumidos pelo contador na execuo do seguinte programa: program UsandoFor; var contador: byte; begin for contador := 1 to 10 do writeln ('contador= ', contador); writeln ('fim do laco'); writeln ('contador= ', contador); end. A sada impressa na tela ser a seguinte: contador= 1 contador= 2 contador= 3 contador= 4 contador= 5 contador= 6 contador= 7 contador= 8 contador= 9 contador= 10 fim do lao

PASCAL
contador= 10 Ao final de cada execuo do lao a varivel contador incrementada automaticamente. Isso acontece at que seu valor seja igual ao valor final (10). Ento o prximo comando depois do for executado. Observe que aps o fim das repeties o contador ter o tilmo valor que recebeu no for, 10. Os valores inicial e final no precisam ser necessariamente constantes, podem ser variveis inteiras, como no exemplo abaixo: program UsandoFor; var valorinicial, valorfinal : byte; contador : byte; begin writeln ('digite o valor inicial'); readln (valorinicial); writeln ('digite o valor final'); readln (valorfinal); for contador := valorinicial to valorfinal do writeln ('contador= ', contador); writeln ('fim do laco'); writeln ('contador= ', contador); end. Exerccio: Agora que voc j sabe como utilizar o lao for, escreva um programa que receba as notas finais de oito alunos da turma do curso de Pascal e calcule a mdia da turma. Como a mdia igual a (soma das notas)/8, voc precisar de uma varivel que armazene a soma das notas. Depois de ter lido todas elas basta dividir o valor desta varivel por 8. Depois modifique seu programa para que o usurio possa informar qual o nmero de alunos da turma.

WHILE
O for um lao do tipo contado. Ou seja, h uma varivel que conta quantas vezes ele j foi executado e o fim da execuo acontece quando esta varivel atinge um valor mximo ou mnimo. Os outros dois tipos de loops do Pascal (while e repeat) no so contados, so condicionais. Isto quer dizer que a execuo no tem um nmero definido de vezes para acontecer. Seu fim depende de uma condio. Veja a sintaxe do while: while (condio) do begin comandos end; No exemplo abaixo o usurio pode definir at quando o loop ser executado. A situao a seguinte, deseja-se calcular a renda per capita de um condomnio, porm, o nmero de moradores desconhecido. O programa executado at que a renda de todos os moradores j

PASCAL
tenha sido digitada. Para que o clculo seja feito corretamente, se um morador no tem renda alguma ser digitado para ele o valor 0. A execuo do loop terminar quando for digitado o valor -1 para a renda. A condio uma expresso lgica, que pode assumir os valores verdadeiro ou falso. Antes de entrar no lao esta condio testada. Se ele for verdadeira os comandos de dentro do while sero executados. Se for falsa o loop termina. Program RendaPerCapita; var renda : integer; rendatotal : integer; nmoradores : integer; percapita : real; begin renda := 0; rendatotal := 0; nmoradores := 0; while (renda <> -1) do begin writeln ('digite a renda do morador'); readln (renda); if (renda >= 0) then begin rendatotal := rendatotal + renda; nmoradores := nmoradores +1; end; end; percapita := rendatotal/nmoradores; writeln ('renda per capita do condiminio: ',percapita:6:2); end. Como voc j deve ter percebido as variveis renda, rendatotal e nmoradores foram inicializadas com 0 no incio do programa. Isto importante porque diferentes compiladores podem atribuir diferentes valores a variveis no inicializadas. No free pascal elas teriam o valor zero mesmo que voc no atribuisse esse valor a elas, mas em outro compilador talvez tivessem um valor diferente. O zero o melhor valor inicial porque antes de entrar no lao ainda no foi contado nenhum morador e nenhuma renda. Alm disso renda = 0 permite que o lao comece. Neste exemplo h uma estrutura que no tinha sido mostrada ainda neste curso, um bloco de comandos dentro de outro (no if). Exerccio Pesquise a funo do :6:2 da ltima linha do ltimo exemplo.

PASCAL

REPEAT
O repeat o segundo tipo de loop condicional do Pascal. A diferena entre ele e o while que no while a condio testada antes de entrar no lao, enquanto que no repeat ela testada no final de cada repetio. A sintaxe deste lao a seguinte: repeat comandos until condio; no repeat no preciso utilizar begin e end para delimitar os comandos que fazem parte do lao, pois o until j faz isso. Como a condio de parada s testada no final do lao todos os comandos sero executados pelo menos uma vez. Depois de terem sido executados a condio testada. Se ele for verdadeira o programa no entrar de novo no lao, se for falsa repetir todos os comandos e testar novamente a condio at que ela seja verdadeira. Sempre que voc for utilizar loops tenha certeza de que h um momento em que o programa sair deles. Caso contrrio voc ter um loop infinito.

PASCAL
LIO 5 - ESTRUTURAS DE DADOS E MANIPULAO DE ARQUIVOS

At agora vimos apenas variveis que armazenam um nico dado, as variveis simples. Existe um outro tipo de variveis, as compostas. As variveis compostas tm diversos dados armazenados. Elas correspondem a diferentes posies de memria identificadas por um nico nome. A distino entre essas posies feita por ndices. Variveis compostas podem ser unidimensionais (vetores) ou multidimensionais (registros). Em Pascal ambas so chamadas de arrays. Tais variveis podem ser ainda classificadas como homogneas (quando todos os dados so de um mesmo tipo) ou heterogneas (quando as variveis so de tipos diferentes). VETORES A declarao de um vetor feita da seguinte maneira: <identificador> : array [<inicio>..<fim>] of <tipo>; em que <tipo> o tipo dos componentes da varivel e incio e fim so os limites inferior e superior dos ndices. Por exemplo, se queremos um vetor que armazene os nomes dos 30 alunos de uma turma podemos fazer o seguinte: nomes : array [1..30] of string; MATRIZES As variveis compostas homogneas multidimensionais so chamadas matrizes. Se um vetor pode ser representado por uma seqncia linear de elementos, uma matriz pode ser representada por uma tabela (se for bidimensional). No h um limite para o nmero de dimenses de uma matriz. Esse tipo de estrutura comumente utilizado quando necessria mais de uma informao para distinguir um componente de outro. A sintaxe bastante parecida com a dos vetores. A nica diferena que para as matrizes necessrio informar os limites superior e inferior de cada dimenso. <identificador> : array [<i1>..<f1>,<i2>..<f2>,.......,<in>..<fn>] of <tipo>; em que <i1>,<f1>,<i2>,<f2>, etc so os limites inferior e superior dos ndices de cada dimenso da matriz. O exemplo seguinte mostra um trecho de programa que armazena em um vetor o nome e o endereo 10 pessoas e depois os imprime na tela. program Agenda; var i: byte; lista : array [1..10,1..2] of string; nome,endereco : string;

PASCAL begin for i:= 1 to 10 do begin writeln ('nome?'); readln (nome); lista[i,1] := nome; writeln ('endereco?'); readln (endereco); lista[i,2] := endereco; end; for i:= 1 to 10 do begin writeln (i,'-> nome:',lista[i,1],' endereco:',lista[i,2]); end; end.
REGISTROS Um registro um conjunto de dados de diferentes tipos relacionados. O registro identificado por um nome. Cada campo de um registro tambm tem um nome que o identifica dentro do registro. Por exemplo, para construir um registro que contm os dados de um filme declararamos o registro filme com os campos nome, gnero, autor, durao e censura. Esta declarao seria feita da seguinte forma: var filme : record nome : string; genero : string; autor: string; durao : real; censura : integer; end; Podemos tambm declarar os registros como tipos e depois declarar variveis destes tipos. A vantagem deste tipo de declarao que podemos declarar vrias variveis com a mesma estrutura sem precisar repetir a declarao acima. Basta dizer uma vez quais sero os campos. Depois podemos declarar quantas variveis quisermos com os mesmos campos. No exemplo abaixo declaramos um tipo endereo como sendo um registro com os campos cidade, bairro, rua, nmero. Depois declaramos uma varivel dadospessoais que um registro onde um dos campos do tipo endereo. type endereco = record cidade : string; bairro : string; rua : string; numero : integer; end;

PASCAL
var dadospessoais : record nome: string; idade : byte; residencia : endereo; telefone : string; end; Para acessar um dado de um registro usamos a sintaxe: identificador.nomedocampo Se quisermos, por exemplo, saber o autor do filme armazenado em filme podemos escrever: writeln (filme.autor); E para imprimir o nome da rua da pessoa cujos dados esto na varivel dadospessoais fazemos o seguinte: writeln (dadospessoais.endereco.rua); ARRAYS DE REGISTROS Podemos construir arrays de registros da mesma forma que fizemos com variveis simples. Para fazer um vetor de filmes por exemplo teramos a seguinte declarao: Type filme = record nome : string; genero : string; autor: string; durao : real; censura : integer; end; Var filmes : array [1..15] of filme; ARQUIVOS Arquivos so estruturas de dados armazenadas fora da memria principal e que podem ser acessadas durante a execuo do programa. Isto inclui discos rgidos, fitas magnticas, disquetes, DVDs ou qualquer outro dispositivo que possa ser acessado pelo computador onde ocorre a execuo. Os arquivos podem ser de dois tipos, binrios ou de texto. Ambos sero explicados a seguir. DECLARAO DE ARQUIVOS A declarao de um arquivo feita da seguinte forma: type <nome do tipo> = file of <tipo> var <nome da varivel> : file of <tipo>

PASCAL

em que: nome do tipo o nome o identificador do novo tipo; tipo o tipo dos dados do arquivo, pode ser text, string, real, record, etc. Exemplo 1 type endereco = record cidade : string; bairro : string; rua : string; numero : integer; end; arqend : file of endereco; var arq1: arqend; Exemplo 2 var arquivotexto : text; OBS: text o tipo dos arquivos de texto. OPERAES COM ARQUIVOS As principais operaes que podem ser realizadas sobre arquivos so, abertura, fechamento, leitura e escrita. Antes de abrir um arquivo preciso associ-lo varivel declarada no comeo. Para isso usamos o comando assign, que tem a seguinte sintaxe: assign (nome da varivel, nome do arquivo); poderamos por exemplo escrever: assign (arquivo, 'nomes.txt'); Depois de associar o nome do arquivo varivel precisamos abri-lo. Existem diferentes tipos de abertura do arquivo, dependendo do que ser feito com ele: Reset (nome da varivel) - Abre o arquivo que foi associado varivel para leitura. Este comando s funciona se o arquivo j existir, caso contrrio haver erro de execuo; Rewrite (nome da varivel) Abre o arquivo que foi associado varivel para escrita. Se o arquivo ainda no existir ele ser criado pelo programa. Porm, se ele j existir todo seu contedo ser apagado. S use este comando quando voc quiser que os dados sejam apagados ou quando o arquivo ainda no existir;

PASCAL
Append (nome da varivel) Abre o arquivo que foi associado varivel para escrita. Este comando s funciona se o arquivo j existir, caso contrrio haver erro de execuo. Se j houver algum contedo no arquivo ele ser preservado e os novos dados sero escritos no final do arquivo. As operaes bsicas sobre um arquivo so leitura e escrita. Os comandos de leitura e escrita em arquivos so os mesmos que utilizamos para a entrada e sada padro, read, readln, write e writeln. A nica diferena que antes do nome da varivel a ser lida ou escrita, ou da string a ser escrita devemos escrever o identificador da varivel correspondente ao arquivo. Veja alguns exemplos: Read (arqnomes, nome); Readln (arqnomes, nome); Write (arq1, identidade); Writeln (arq2, 'Hello World'); OBS: os comandos readln e writeln s podem ser usados para arquivos de texto, para arquivos binrios utiliza-se apenas read e write. Se voc abrir um arquivo para leitura no poder escrever nele, e se abri-lo para escrita no poder ler dados dele. Depois de executar todas as operaes necessrias em um arquivo voc deve fech-lo. Isto garante a corretude dos dados aps o trmino do programa. Nunca deixe um arquivo aberto aps a execuo. O comando utilizado para fechar arquivos o close e sua sintaxe a seguinte: close (nome da varivel); ARQUIVOS BINRIOS Existem algumas operaes que s podem ser realizadas em arquivos binrios. Algumas delas so descritas abaixo: seek (nome do arquivo, n) - Acessa o n-simo registro do arquivo. n deve ser menor que o nmero total de registros do arquivo. importante lembrar que para o primeiro registro do arquivo n=0. Assim, se queremos acessar o quinto registro do arquivo arq fazemos: seek (arq, 4); Se voc no souber o nmero total de registros do arquivo use o comando filesize. A sua sintaxe : filesize (nome do arquivo); A linha de cdigo abaixo imprime o nmero de registros do arquivo arq: writeln('numero de registros: ',filesize(arq));

LOCALIZANDO O FIM DO ARQUIVO Em muitas situaes voc precisar verificar se o arquivo j terminou ou se ainda h registros nele. Para isto o Pascal tem a funo eof (end of file) que retorna true se o arquivo j terminou e

PASCAL
false caso contrrio. Veja um exemplo de utilizao desta funo: repeat readln (arquivo, nome); until eof (arquivo); este bloco l do arquivo uma string nome at que chegue o fim do arquivo. MDULOS DE PROGRAMAS Modularizar um programa significa dividi-lo em pequenas partes simples. Cada parte deve realizar uma tarefa e ao final o conjunto das partes deve ser capaz de fazer tudo que a especificao do programa exige. Estas partes, ou subprogramas, em Pascal so classificadas como funes ou arquivos. Entre as vantagens de se modularizar um programa esto:

Maior legibilidade; Facilidade de manuteno; Possibilidade de diviso do trabalho para um grupo de pessoas; Possibilidade de reaproveitamento de cdigo (um trecho do programa que se repete vrias vezes poder ser escrito apenas uma vez).

PROCEDIMENTOS E FUNES PROCEDURES Procedimentos so subprogramas. Isto , programas menores que ficam dentro de um programa principal. Sendo assim, sua estrutura bastante semelhante dos programas vistos at agora. procedure <nome do procedimento> (lista de parmetros); var { declarao de variveis } begin { comandos} end; A primeira diferena que pode ser vista entre um programa principal e um procedure a lista de parmetros. Parmetros so variveis declaradas fora do procedure que sero utilizadas dentro dele. por meio deles que feita a comunicao do procedimento com a parte do programa externa a ele. No obrigatrio que um subprograma receba parmetros, mas muitas vezes eles ajudam a possibilidade de reutilizao do software. O programa seguinte contm um procedimento que troca os valores das variveis v1 e v. procedure troca (var v1, v2: integer); var aux: integer; begin aux:=v1; v1:=v2; v2:=v1; end; Na seo var so declaradas as variveis locais do procedure. Tambm possvel declarar nesta parte constantes e tipos, como foi feito em sees anteriores do curso. Os procedures so escritos

PASCAL
antes do programa principal. A estrutura de um programa com um procedure a seguinte: Program <nome do programa>; const {declaraes de contantes tipos e variveis globais que forem necessrias} type var Procedure . begin . . end; Begin . . . End. Note que os comandos do programa principal s comeam depois de todos os procedures. Para utilizar um procedimento dentro do programa principal basta escrever FUNCTIONS Funes tambm so subprogramas. A diferena entre functions e procedures que as primeiras retornam um valor ao final de sua execuo, os procedures no. A sintaxe de uma function a seguinte: Function <nome da function> (lista de parmetros) : tipo retornado; var { declarao de variveis } begin { comandos} end; onde tipo retornado o tipo do valor que a funo retorna. A funo do exemplo seguinte recebe como parmetros a altura e a largura de um retngulo e retorna o comprimento de sua diagonal. function Diagonal (altura, largura : real): real; begin Diagonal := sqrt (sqr(altura)+sqr(largura)); end; Agora podemos escrever um programa maior que pergunta ao usurio a altura, largura e profundidade de um paraleleppedo e calcula sua diagonal. Para fazer isso ser preciso primeiro calcular a diagonal da base do paraleleppedo (formada por largura e profundidade). Depois calculamos a diagonal do retngulo formado pela diagonal da base e a altura do paraleleppedo, que igual a diagonal do paraleleppedo. Program DiagParalelepipedo; function Diagonal (altura, largura : real): real; begin Diagonal := sqrt (sqr(altura)+sqr(largura));

PASCAL
end; var altura, largura, profundidade : real; diag: real; aux: real; begin writeln ('altura?'); readln (altura); writeln ('largura?'); readln (largura); writeln ('profundidade'); readln (profundidade); aux := Diagonal (largura, profundidade); diag := Diagonal (aux, altura); writeln ('A diagonal do paralelepipedo e: ',diag); end.

Anda mungkin juga menyukai