ࡱ> #% !"q`bjbjqPqP9*::FWƑƑƑ8dbhRR"tttSSS'))))))$hxlM OS Mttbuuu Ttt'u 'uuV@[tF `Hj#wƑ] x0Te[[0S>,u$(SSSMMXSSS ĊƑƑ   DISCIPLINA: LGICA DE PROGRAMAO I PASCAL 1 INTRODUO A programao deve ser entendida como uma arte ou tcnica de se construir algoritmos, sendo que estes so mtodos para se resolver problemas. Existem diversas linguagens para se programar, umas mais adequadas a certos tipos de algoritmos, outras a outros tipos. No entanto, uma linguagem de programao no deve ser um fim em si mesma, mas um meio, uma ferramenta para se traduzir os algoritmos em programas a serem executados por computadores. Existem diversas linguagens de programao, dizer qual a melhor muito relativo. H os que defendem o Basic, o Cobol, a C, o Pascal e tantas outras. 2 O PRIMEIRO PROGRAMA EM PASCAL PROGRAMA EXEMPLO.PAS -> Exemplo de um programa em Pascal com finalidade de mostrar os componentes do Pascal. {Tudo que estiver entre chaves so comentrios e no so levados em conta pelo compilador.} Program Primeiro_Exemplo; { este e o cabealho do programa } Var idade :integer; nome :string[30]; Begin { Aqui comea o programa propriamente dito } ClrScr; { apaga a tela } Write('Qual o seu nome ----> '); Readln(Nome); Write('Qual a sua idade ---> '); Readln(idade); Writeln (Seu nome : , Nome); Writeln (Sua idade : , idade); Write('Prazer em conhece-lo'); End. 3 - ESTRUTURA DE UM PROGRAMA EM PASCAL Todo programa em Pascal subdividido em 3 reas: - cabealho do programa - rea de declaraes de variveis. - corpo do programa O Turbo Pascal tem basicamente os seguintes tipos de variveis pr-definidas: Integer, Real, Boolean e String. Todas as variveis utilizadas no programa devem ser declaradas na subrea Var, pois a alocao de espao de memria para as variveis feita durante a compilao. 4 ELEMENTOS BSICOS DO PASCAL 4.1 - CARACTERES UTILIZADOS Os caracteres que podem ser utilizados no Turbo Pascal so divididos em: Letras: 'A' at 'Z', 'a' at 'z' Nmeros: 0,1,2,3,4,5,6,7,8 e 9 Especiais: + - * / = ^ < > ( ) [ ] { } . , : ; ' # $ Observaes: 1-) O Turbo Pascal no faz distino entre letras maisculas e minsculas, de tal forma que no desenvolvimento deste curso eu utilizarei os dois tipos da forma que achar mais conveniente. 2-) Embora na maioria das linguagens o sinal de atribuio de valores a variveis seja o =, em Pascal, o smbolo de atribuio :=, 4.2 - PALAVRAS RESERVADAS As palavras reservadas do Turbo Pascal so palavras que fazem parte da sua estrutura e tm significados pr-determinados. Elas no podem ser redefinidas e no podem ser utilizadas como identificadores de variveis, procedures, functions etc. Algumas das palavras reservadas so: absoluteandarrayxorofbegincaseconstdivuntilprogramdodowntoelseendstringshlexternalfileforforwardwithtofunctiongotoifintypeorinlinelabelmodnilwhilerecordnotsetrepeatpackedthenvarprocedure 4.3 - IDENTIFICADORES PR-DEFINIDOS O Turbo Pascal possui inmeros identificadores pr-definidos, que no fazem parte da definio padro da linguagem Pascal. Os identificadores consistem em Procedures/Functions, que podem ser utilizados na construo de programas. Ex: ClrScr (limpa tela). 4.3 - NMEROS No Turbo Pascal, podemos trabalhar com nmeros inteiros e reais. 4.4 - 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 programas. No Turbo Pascal, tudo que estiver entre os smbolos (* e *) ou { e } ser considerado como comentrio. 4.5 - STRINGS Strings so conjunto de caracteres entre aspas simples. 4.6 - A DECLARAO VAR Esta a subrea onde devemos declarar todas as variveis que iremos utilizar em nosso programa. Exemplo: Program Exemplo; (* cabealho do programa *) Var idade,numero_de_filhos : integer; altura : real; sexo : char; nome : string[30]; sim_ou_nao : boolean; quantidade : integer; (* aqui comea o programa *) Begin idade:=34; numero_de_filhos:=2; sexo:='M'; nome:='Jos'; sim_ou_nao:=TRUE; quantidade:=3245; End. Observaes importantes: 1-) A palavra reservada Var aparece uma nica vez num programa 2-) A sintaxe geral para declarao de variveis : varivel_1,varivel_2,...,varivel_n : tipo; 3-) As instrues so separadas entre si por ponto e vrgula ';'. Se voc quiser, pode colocar mais de uma instruo numa nica linha. Lembre-se que o limite de caracteres numa linha de 127 4-) O tipo string deve ser procedido da quantidade mxima de caracteres que a varivel pode assumir. Lembre-se que a alocao de espao de memria para as variveis feita durante a compilao, portanto o compilador precisa saber desse dado. Por outro lado, o fato de termos, por exemplo, atribudo o valor mximo de 30 no significa que tenhamos que utilizar os 30 caracteres e sim no mximo 30. 4.7 - OPERADORES ARITMTICOS + adio/ diviso entre nmeros reais- subtraoDIV diviso entre nmeros inteiros* multiplicaoMOD resto da diviso Program Operadores_aritimeticos; 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 vdeo *) x:= 20 DIV 3; y:= 20 MOD 3; writeln(x); (* escreve 6 na tela 20/3 = 6,66666 somente nmero inteiro ento resultado 6 *) writeln(y); (* escreve 2 na tela 20/3 = 18 e resta apenas 2 para 20 ento resulta 2*) r1:=3.24; r2:=r1/2.3; writeln(r2); end. 4.8 - OPERADORES LGICOS AND, OR Estes operadores s aceitam como operando, valores lgicos, ou seja: TRUE e FALSE. A operao AND resulta em TRUE se e somente se todos os operando forem TRUE, se um deles ou mais de um for FALSE ento o resultado ser FALSE. A operao OR resulta TRUE quando pelo menos um dos operando for TRUE. Exemplo: Program operadores_logicos; Var x,y : boolean; Begin x:=TRUE; y:=FALSE; Writeln( x OR y ); (* escreve TRUE *) Writeln( x AND y ); (* escreve FALSE *) End. 4.9 - OPERADORES RELACIONAIS O Turbo Pascal possui ao todo 7 operadores relacionais que so muito utilizados nas tomadas de decises, so eles: = igual <> diferente > maior que < menor que >= maior ou igual que <= menor ou igual que Exemplos: 1-) Se A=30 e B=50 ento ( A = B ) FALSE ( A < B ) TRUE 2-) Se A=TRUE e B=FALSE ( A <> B ) TRUE ( A = B ) FALSE 3-) Se A=50 , B=35, C='A' , D='B' ( ( A < B ) OR ( C < D ) ) TRUE A avaliao ser verdadeira se uma ou outra expresso for verdadeira, no caso, como C < D ento a resposta TRUE 4.10 - CONCATENAO Esta operao representada pelo sinal de adio, ou seja, +. Os operandos devem ser do tipo string ou char. Exemplo: 'Isto uma ' + 'string' = 'Isto uma string' 5 - ENTRADA E SADA DE DADOS 5.1 - WRITE E WRITELN Estas so as principais procedures destinadas a exibir todos os tipos dados no vdeo. A diferena entre write e writeln reside no fato de que a procedure write escreve o parmetro, e mantm o cursor do lado daquilo que foi escrito, enquanto que writeln passa o cursor para a prxima linha. Exemplo: Program Exemplo; Var i : integer; r : real; c : char; s : string[20]; Begin ClrScr; (* apaga a tela e coloca o cursor em 1,1 *) Writeln('Exemplos de aplicao de writeln e write'); writeln; (* apenas pula uma linha *) i:=100; r:=3.14; c:='A'; s:='interessante'; writeln('Valor de i e igual a ',i); write('valor de r = '); writeln(r); writeln(c,' ',s); writeln(A:5); writeln(r:10:2); end. Este programa resultaria na seguinte tela: Exemplos de aplicao de writeln e write Valor de i e igual a 100 valor de r = 3.1400000000E+00 A interessante ..... A 3,14 Obs: Os pontos representem espaos em branco. 5.2 - READ E READLN Estas procedures so utilizadas para fazer leitura de dados via teclado. A procedure Read l um dado do teclado at que se pressione a tecla ENTER, sendo que cada tecla digitada ecoada para o vdeo. Aps pressionarmos ENTER, o cursor permanecer no mesmo lugar. J, a procedure Readln faz a mesma coisa s que o cursor passa para a prxima linha. Exemplo 1: Program teste; Var a,b,c:integer; Begin clrscr; readln(a,b,c); writeln (a,' ',b,' ',c); end. Exemplo 2: Program teste; Var i : integer; r : real; c : char; s : 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. 5.3 - READKEY L uma tecla do teclado, sem que seja necessrio pressionar a tecla ENTER Exemplo: Program Exemplo; Var tecla:char; Begin Write('digite uma tecla ->'); Tecla:=readkey; Writeln; writeln('voc digitou ',tecla); end. 6 - FUNES E PROCEDURES PARA CONTROLE DE VDEO 6.1 - CLRSCR Esta procedure tem a finalidade de limpar a tela de vdeo e colocar o cursor na primeira coluna da primeira linha. A tela de vdeo dividida em 80 colunas e 25 linhas. O canto superior esquerdo tem coordenadas (1,1) e o inferior direito (80,25). 6.2 - GOTOXY(X,Y) Move o cursor para a coluna x e linha y. Exemplo: Program Exemplo; Var x,y : integer; Begin ClrScr; Gotoxy(10,2); Write('Coluna 10 da linha 2'); x:=40; y:=10; Gotoxy(x,y); Write('Coluna 40 da linha 10'); End. 6.3 - TEXTBACKGROUND Esta procedure seleciona a cor do fundo sobre o qual o texto ser escrito. Sua sintaxe geral : TextBackGround(cor); Tabela de cores 0BlackPreto1BlueAzul2GreenVerde3CyanCiano4RedVermelho5MagentaMagenta6LightGrayCinza-claroNs podemos entrar com o nmero ou o nome da cor em ingls Exemplo: Program Exemplo; Begin ClrScr; WriteLn('teste'); TextBackGround(7); Writeln('teste'); End. 6.4 - TEXTCOLOR Esta procedure permite selecionar a cor com que o texto ser impresso. Tabela de cores BlackPretoBlueAzulGreenVerdeCyanCianoRedVermelhoMagentaMagentaBrown MarromLightGrayCinza-claroDarkGrayCinza-escuroLightBlueAzul-claroLightGreenVerde-claroLightCyanCiano-claroLightRedVermelho-claroLightMagentaMagenta-claroYellowAmareloWhiteBrancoBlinkPiscante Exemplo: Program Exemplo; Begin Clrscr; TextBackGround(7); TextColor(black); writeln('teste'); TextColor(black+blink); write('teste'); End. 7 - COMANDOS PARA CONTROLE DO FLUXO DO PROGRAMA. 7.1 - IF THEN ELSE O comando If permite ao programa tomar decises. Primeira Sintaxe: If Then Begin Comando_1; Comando_2; . . . End; Segunda Sintaxe: If Then Begin Comando_1; Comando_2; . . . End Else Begin Comando_3; . . . End; Na primeira Sintaxe, se a expresso_lgica resultar verdadeira (TRUE), ento o comando ser executado caso contrrio no. Para os casos em que tivermos mais de um comando para serem executados, eles devero vir delimitados pelas palavras Begin e End. Na segunda sintaxe, se expresso_lgica for TRUE ento comando_1 ser executado e comando_2 no, caso contrrio, comando_2 ser executado e comando_1 no. Repare que no temos ; no final de comando_1. Exemplos: Program Exemplo_1; Var i : Integer; Begin Write('Digite um inteiro maior que 100 --> '); Readln(i); Writeln; Writeln; If (i>100) Then Writeln('Voc conseguiu') Else Writeln(i,' no e maior que 100'); End. Program Exemplo_2; Var Numero_1,Numero_2 : Integer; Begin ClrScr; Write('Primeiro numero ----> '); Readln(Numero_1); Write('Segundo numero -----> '); Readln(Numero_2); Writeln; Writeln; If (Numero_1 > Numero_2) Then Write(Numero_1,' e o maior') Else If (Numero_2 > Numero_1) Then Writeln(Numero_2,' e o maior') Else Writeln('so iguais'); End. Program Exemplo_3; Var x,y,z : Integer; Begin ClrScr; Write('Primeiro numero --> '); Readln(x); Write('Segundo numero ---> '); Readln(y); Write('Terceiro numero --> '); Readln(z); Writeln; Writeln; If (x>=y) Then If (x>=z) Then If (y>=z) Then Writeln(x,' ',y,' ',z) Else Writeln(x,' ',z,' ',y) Else Writeln(z,' ',x,' ',y) Else If (y>=z) Then If (x>=z) Then Writeln(y,' ',x,' ',z) Else Writeln(y,' ',z,' ',x) Else Writeln(z,' ',y,' ',x); End. 7.2 - FOR Este comando permite que um grupo de operaes ou comandos sejam repetidos um certo nmero de vezes. A varivel dever ser, obrigatoriamente, do tipo integer (qualquer um), char ou Boolean. A variao de varivel entre valor inicial e valor final ser crescente e de um em um, quando utilizamos a palavra to, e decrescente de um em um, quando utilizamos a palavra downto. Exemplos: Program Exemplo_1; Var i : Integer; Begin ClrScr; For i:=10 to 15 do Writeln(i); (* para i igual a 10 at 15 faa escreva i *) End. Program Exemplo_2; Var i : Integer; Begin ClrScr; For i:=10 downto 1 do Writeln(i); End. Program Exemplo_3; Var i : Integer; Begin ClrScr; For i:=1 to 20 do Begin Write('Valor de i --> '); Write(i:3); Write('..... quadrado de i = '); Writeln(i*i:5); End; End. Program Exemplo4; Var i, N: integer ; Begin write('Informe o nmero desejado: '); readln(N); for i:= 1 to 10 do begin writeln(N, ' X ', i:2, ' = ', N*i:2); end; End. 7.3 - REPEAT UNTIL Repete um bloco de instrues at que uma certa condio seja satisfeita. Sua sintaxe : Repeat Comando_1; Comando_2; Comando_3; . . . Until (expresso_lgica); Neste caso, todos os comandos entre as palavras reservadas Repeat e Until sero executadas, at que a expresso lgica seja verdadeira (TRUE), obviamente, devemos ter o cuidado para que ela venha a ser TRUE em determinado momento, pois caso contrrio, teremos um LOOP INFINITO, (o programa fica preso dentro da estrutura Repeat - Until). Exemplos: Program Exemplo_1; {Programa exemplo para mostrar o funcionamento da estrutura Repeat Until} Var i : Integer; Begin ClrScr; i:=1; Repeat Writeln(i); i:=i+1; Until i=10; End. 7.4 - WHILE DO A estrutura While..Do permite controlar o nmero de vezes que uma instruo ou bloco de instrues ser executado. Ela difere da instruo Repeat..Until porque esta s avalia a expresso lgica no final do primeiro Loop, enquanto que a instruo While..Do avalia a expresso lgica antes da primeira interao, isto significa que, eventualmente, pode no ocorrer sequer a primeira interao. While Do Begin comando_1; comando_2; . . . End; Exemplos: Program Exemplo_1; {Programa exemplo que escreve na tela de 0 at 10} Var i : Integer; Begin ClrScr; i:=0; While (i<11) Do Begin Writeln(i); i:=i+1; End; End. 7.5 - CASE Esta instruo nos permite selecionar uma opo baseada no valor de uma varivel ou expresso. Existem duas sintaxes, a saber: Sintaxe: Case of : Begin comando_1; comando_2; . . . End; : Begin comando_1; comando_2; . . . End; . . . : Begin comando_1; comando_2; . . . End; End; A expresso ou varivel no comando Case deve ser do tipo simples, normalmente Char ou Integer. Aps a avaliao da expresso, seu valor ou o valor da varivel comparado com os diversos valores discriminados. Se houver algum que satisfaa, o comando subsequente ser executado. Exemplos: Program Exemplo_1; {Calcula a soma, ou a subtrao, ou a multiplicao, ou a diviso entre dois nmeros lidos do teclado} Var oper : Char; x,y : Real; Begin ClrScr; Write('Valor de X = '); Readln(x); Write('Valor de Y = '); Readln(y); Writeln; Write('Operao --> '); oper:=ReadKey; Writeln(oper);Writeln; Case Oper of '+' : Write('X + Y = ':10,x+y:6:2); '-' : Write('X - Y = ':10,x-y:6:2); '*' : Write('X * Y = ':10,x*y:6:2); '/' : Write('X / Y = ':10,x/y:6:2); Else Writeln(oper,' no e operao'); End; (* case *) End. (* programa *) Program Exemplo_2; {Programa para clculo de rea de figuras} Var escolha,continua : Char; x,y : real; Begin Repeat ClrScr; Write('Calculo de rea de figuras':53); Gotoxy(25, 5);Write('1 - Sair do programa'); Gotoxy(25, 7);Write('2 - Tringulo'); Gotoxy(25, 9);Write('3 - Quadrado'); Gotoxy(25,11);Write('4 - Retngulo'); TextBackGround(7); TextColor(0+16); Gotoxy(10,17);Write('Sua escolha ---> '); escolha:=ReadKey; Textbackground(0); Textcolor(14); Case escolha of '2' : Begin ClrScr; Writeln('Calculo da rea de triangulos':55); continua:='s'; While Continua='s' Do Begin Writeln; Write('Base = '); Readln(x); Write('Altura = '); Readln(y); Writeln; Writeln('rea = ',x*y/2:8:2); Writeln; Writeln; Write('Mais clculos (s/n) --> '); continua:=ReadKey; Writeln;Writeln; End; End; '3' : Begin ClrScr; Writeln('Calculo da rea de quadrados':55); continua:='s'; While Continua='s' Do Begin Writeln; Write('lado = '); Readln(x); Writeln; Writeln('rea = ',x*x:8:2); Writeln; Writeln; Write('Mais clculos (s/n) --> '); continua:=Readkey; Writeln;Writeln; End; End; '4' : Begin ClrScr; Writeln('Calculo da rea de retangulos':55); continua:='s'; While Continua='s' Do Begin Writeln; Write('comprimento = '); Readln(x); Write('largura = '); Readln(y); Writeln; Writeln('rea = ',x*y:8:2); Writeln; Writeln; Write('Mais clculos (s/n) --> '); continua:=readkey; Writeln;Writeln; End; End; End; Until escolha='1'; End. 8 TIPOS DE DADOS ESTRUTURADOS. At o presente instante, ns definimos dados do tipo simples ou no estruturados, como por exemplo: Integer, Real, Char e Boolean. No entanto, existem outros tipos de dados chamados complexos ou estruturados. Ns j falamos sobre o tipo de dado estruturado String, por ser extremamente utilizado. Mas o Turbo Pascal possui outros tipos de estruturas: - Array - Record - Set - File O tipo file refere-se a arquivos de discos e ser amplamente estudado num captulo parte. Os demais sero vistos neste captulo. 8.1 - ARRAY Imagine que ns precisemos declarar 100 variveis do tipo integer, isso poderia ser feito da seguinte forma: Var i1,i2,i3,i4,...,i100 : Integer; Embora isso parea uma brincadeira, possvel. Mas podemos tambm dizer que um grande incmodo. Turbo Pascal nos fornece um tipo de dado estruturado chamado Array, que nos permite criar um grande nmero de variveis de determinado tipo. Sintaxe: Type Arranjo = Array[1..100] of Integer; Var i : Arranjo; Aps a declarao acima, teramos definidas 100 variveis do tipo Integer, cujos nomes seriam:i[1] - i[2] - i[3] - ... - i[100] Exemplos: Program Exemplo; {Programa que l as notas de alunos de uma determinada classe e lista as notas menores que 5.0} Const No_de_alunos = 30; Type Classe = Array[1..No_de_alunos] Of Real; Var n : Integer; a : Classe; Begin ClrScr; For n:=1 to No_de_alunos Do Begin Write('Aluno no. ',n:2,' ---> '); Readln(a[n]); End; ClrScr; Writeln('Alunos com media menor que 5':40+15); Writeln('numero nota'); For n:=1 to No_de_alunos Do If a[n]<5 Then Writeln(n:2,a[n]:10:1); End. 8.2 - TIPO RECORD At o presente momento, trabalhamos com estruturas que envolvem dados do mesmo tipo. O tipo Record nos permite criar um tipo de dado que composto de itens de vrios tipos. Estes itens dos quais o tipo Record formado recebem o nome de campos. Imaginem que queiramos armazenar os seguintes dados a respeito de uma pessoa: Nome - Idade - Sexo - Altura At o momento, no temos nenhum tipo de varivel capaz de fazer isso, pois como podemos reparar, os quatros itens so de tipos diferentes, a saber: Nome ---> String Idade --> Integer Sexo ---> Char Altura -> Real Como veremos a seguir, o tipo Record resolver-nos- o problema. A definio de uma varivel do tipo record, comea com a palavra reservada Record, a qual seguida pelos campos (variveis) e os seus tipos. A palavra reservada End seguida de um ponto e vrgula, termina a definio do Record. Exemplo: Var Nome_Do_Registro : Record Nome : String[30]; Idade : Integer; Sexo : Char; Altura : Real; End; OU Type Registro = Record Nome : String[30]; Idade : Integer; Sexo : Char; Altura : Real; End; Var Nome_Do_Registro : Registro; Para acessarmos os elementos da estrutura, ou seja, os campos, ns devemos incluir o nome da varivel seguida de um ponto e depois o nome do campo, exemplos: Nome_Do_Registro.Altura := 1.78; Nome_Do_Registro.Sexo := 'M'; Etc... Exemplo: Program Exemplo_1; {L uma varivel do tipo record do teclado e em seguida a mostra no monitor} Type Pessoas = Record Nome : String[30]; Idade : Integer; Sexo : Char; Altura : Real; End; Var p : Pessoas; Begin ClrScr; Write('Nome ------> '); Readln(p.Nome); Write('Idade -----> '); Readln(p.Idade); Write('Sexo ------> '); Readln(p.Sexo); Write('Altura ----> '); Readln(p.Altura); Writeln; Writeln('Voce digitou os seguintes dados :'); Writeln;Writeln; Writeln(p.nome); Writeln(p.idade); Writeln(p.sexo); Writeln(p.altura:6:2); End. Podemos tambm definir arrays de records, vejam o exemplo abaixo: Program Nomes; {Programa para ler dados de pessoas. Em seguida feita uma listagem em ordem alfabtica pelo nome} Type Pessoas = Record Nome : String[30]; Idade : Integer; Sexo : Char; Altura : Real; End; Var p : array[1..20] of Pessoas; i,x,y, vezes : Integer; s : Pessoas; Begin ClrScr; Write ('Quantos nome deseja inserir? '); Readln (vezes); ClrScr; i:=0; Repeat i:=i+1; Write('Nome -> '); Readln(p[i].Nome); Write('Idade -> '); Readln(p[i].Idade); Write('Sexo -> '); Readln(p[i].Sexo); Write('Altura -> '); Readln(p[i].Altura); Writeln; Until (i = vezes); ClrScr; Writeln('NOME':30,'IDADE':6,'SEXO':5,'ALTURA':8); For x:=1 to i do begin Writeln(p[x].nome:30,p[x].idade:6,p[x].sexo:5,p[x].altura:8:2); end; End. 9 - PROCEDURES Uma das tcnicas mais utilizada e tida como vantajosa na confeco de programas grandes a modularizao. Consiste em dividir o programa em diversos mdulos ou subprogramas, de certa forma dependentes uns dos outros. Existe um mdulo que o principal, a partir do qual so chamados os outros mdulos. Esse mdulo recebe o nome de programa principal, enquanto que os outros so chamados de subprogramas. No sistema Turbo Pascal, existem dois tipos de subprogramas, a saber: - Procedures (procedimentos) - Functions (funes) A procedure como se fosse um programa. Ela tem a estrutura praticamente igual a de um programa, como veremos mais adiante. A procedure deve ser ativada (chamada) pelo programa principal ou por uma outra procedure, ou at por ela mesma. 9.1 - DECLARAO DE PROCEDURES Uma procedure tem praticamente a mesma estrutura de um programa, ou seja, ela contm um cabealho, rea de declaraes e o corpo da procedure. Devemos salientar que tudo que for declarado dentro das sub-reas s ser reconhecido dentro da procedure. Exemplo: Program Exemplo_1; (* cabealho do programa *) Procedure linha; (* cabealho da procedure linha *) Var i : integer; (* subrea Var da procedure linha *) Begin (* corpo da procedure linha *) for i:=1 to 80 do write('-'); End; Begin (* corpo do programa principal *) ClrScr; linha; (* ativao da procedure linha *) writeln('teste'); linha; (* ativao da procedure linha, novamente *) End. O programa acima, pura e simplesmente faz o seguinte: 1-) Apaga a tela e coloca o cursor em 1,1 2-) Ativa a procedure linha 3-) Escreve a palavra teste 4-) Ativa novamente a procedure linha. Por sua vez, a procedure linha traa uma linha a partir da posio atual do cursor. Uma observao importantssima a ser feita neste instante, que a varivel inteira i, definida dentro da procedure linha s existe dentro da procedure, isto significa que toda vez que ativamos a procedure linha, a varivel 'i' criada e toda vez que samos da procedure linha, ela destruda. 9.2 - PASSAGEM DE PARMETROS No exemplo acima, ao ativarmos a procedure linha, no houve passagem de parmetros, mas poderia haver, repare no exemplo: Exemplo: Program Exemplo; Var i,j:integer; Procedure soma(x,y:integer); Begin writeln(x+y); end; Begin ClrScr; soma(3,4); i:=45; j:=34; soma(i,j); end. Como podemos reparar, a procedure soma depende de dois parmetros inteiros, e ao ativarmos esta procedure, devemos fornecer os dois parmetros. Esses parmetros podem ser dois nmeros inteiros ou duas variveis inteiras, obviamente deve haver compatibilidade entre os parmetros passados. Podemos tambm passar parmetros de tipos diferentes, seno vejamos: Program Exemplo_1; Var i,j:integer; Procedure soma(x,y:integer;h,g:real); Begin writeln(x+y); writeln(h/g:10:2); end; Begin ClrScr; i:=34; j:=35; soma(i,j,3.4,4.5); End. {Nos exemplos acima, houve passagem de parmetros para as procedures, mas elas tambm podem passar dados de volta para o programa chamador, exemplo:} Program exemplo; Var i : Integer; Procedure Soma(x,y:Integer;Var z:Integer); Begin z:=x+y; End; Begin ClrScr; Soma(3,4,i); Writeln(i); End. Da forma como foi declarada a procedure soma, quando a ativamos com a seqncia Soma(3,4,i), ocorrem as seguintes passagens: - O nmero 3 passado para x - O nmero 4 passado para y - O parmetro z passado para i. Como podemos ver, houve passagem de dados do programa chamador para a procedure e da procedure para o programa chamador. 9.3 - O ESCOPO DE OBJETOS NOPROGRAMA Reparem o Exemplo abaixo: Program Exemplo; Const a=100; (* constante global *) Var i,x,y : Integer; (* variveis globais *) Procedure Linha; Var i : Integer; (* i local procedure linha *) Begin For i:=1 to 80 do Write('-'); End; Procedure Teste; Procedure Sub_teste; (* a procedure Sub_teste local procedure Teste *) Begin Write('Estive em sub_teste'); End; Begin Sub_teste; Writeln; End; Begin ClrScr; i:=100; Linha; x:=20; y:=30; Teste; Linha; Writeln('i=',i,' y=',y,' x=',x); End. Todos os elementos (constantes, variveis, labels etc.) que forem definidos antes de comear o corpo do programa, so considerados globais e podem ser utilizados por todas as procedures, functions e o prprio programa. O espao para tais elementos criado durante a compilao. J, os elementos declarados dentro de uma procedure, s existem dentro da procedure, exemplo: ao declararmos uma varivel dentro de uma procedure, toda vez que ativarmos a procedure, tal varivel ser criada e ao sairmos da procedure ela ser destruda. Portanto, dizemos que esta varivel local procedure. No entanto, se repararmos bem no exemplo, veremos que existe uma varivel i inteira declarada antes do incio do programa, portanto global, e outra dentro da procedure linha, portanto local a esta procedure. Mas no h problema, pois o Turbo Pascal ir consider-las diferentes. Quando estivermos dentro do programa, teremos acesso varivel global e quando estivermos dentro da procedure, teremos acesso varivel local. 10 FUNCTIONS. As funes so muito parecidas com as procedures. A principal diferena que o identificador de uma funo assume o valor de retorno da funo. Uma funo deve sempre retornar um valor e em Turbo Pascal, este valor retornado no nome da funo. A declarao de uma funo muito parecida com de uma procedure que por sua vez parecida com a de um programa: Function Nome_da_funo(parmetros) : Tipo_da_funo; < rea de declaraes > Begin corpo da funo End; A formao do nome da funo deve seguir as mesmas regras para formao de identificadores em Turbo Pascal. Dentro dos parnteses devemos declarar os parmetros e seus respectivos tipos dos quais a funo depende. O tipo de valor retornado pela funo tambm deve ser declarado. Na rea de declaraes, podemos declarar labels, constantes, variveis e at mesmo Procedures e Functions. Devemos lembrar que tais elementos s podero ser utilizados dentro do corpo da funo, pois so locais a ela. Abaixo, temos o exemplo de uma funo. Program Exemplo; Var x,y : Real; (* variveis globais *) Function Soma(a,b:real):real; (* Soma uma funo que depende de 2 parmetros reais e devolve valor real *) Begin Soma:=a+b; (* reparem que o valor da funo retornado p. seu nome *) End; Begin ClrScr; x:=Soma(4,5); y:=Soma(3,6)-Soma(45.5,5.6); Writeln(x:10:2,y:10:2); Writeln; Write('Valor de x --> '); Readln(x); Write('Valor de y --> '); Readln(y); Writeln; Writeln(Soma(x,y):10:2); End. 11 ARQUIVO EM DISCO. O tipo file ou arquivo, uma estrutura constituda de elementos do mesmo tipo dispostos seqencialmente. Essa estrutura utilizada para comunicao com o meio externo, principalmente com discos magnticos. O acesso a arquivos sempre segue a mesma seqncia, a saber: 1-) Abertura do arquivo 2-) Leitura e/ou escrita de dados no arquivo 3-) Fechamento do arquivo 11.1 - ASSIGN Esta procedure tem a finalidade de atribuir um nome lgico ao arquivo em disco. Sintaxe: assign ( variavelArquivo , nomeArquivo ); onde: variavelArquivo uma varivel do tipo TEXT nomeArquivo uma cadeia de caracteres contendo o nome do arquivo associado, ou uma varivel do tipo string Exemplo: assign ( arq, c:\dados.txt ) ; O nome do arquivo externo pode ser definido por uma varivel do tipo string, cujo valor pode ser determinado durante a execuo do programa. 11.2 - RESET O comando reset abre um arquivo j existente, posicionando o cursor de leitura no seu incio. Sintaxe: Reset ( VariavelArquivo ); onde VariavelArquivo uma varivel do tipo TEXT. 11.3 - REWRITE O comando Rewrite usado para criar um arquivo do tipo texto ou, se ele j existir, para apag-lo e criar um novo arquivo, posicionando o cursor de leitura no seu incio. Sintaxe: rewrite ( variavelArquivo ); onde variavelArquivo uma varivel do tipo TEXT. 11.4 APPEND Abre um arquivo j existente para escrita no final. Sintaxe: append ( variavelArquivo ); onde variavelArquivo uma varivel definida com o tipo TEXT. 11.5 - CLOSE Fecha um arquivo. Sintaxe: close ( variavelArquivo ); onde variavelArquivo uma varivel definida com o tipo TEXT. Exemplo: Program ARQUIVO; var arq: Text; begin assign( arq, 'c:\TEST.TXT' ); rewrite( arq ); { Cria um novo arquivo } writeln( arq, 'texto inicial' ); close( arq ); { Fecha o arquivo, salvando as alteracoes efetuadas } append( arq ); { Abre o arquivo para adicionar mais texto no seu final } writeln( arq, 'mais texto!' ); close( arq ); { Fecha o arquivo, salvando as alteracoes efetuadas} end.     LGICA DE PROGRAMAO I PASCAL PROF. SANDRO PAGE  PAGE 6 ().5BCET  o p K L  . 6 F  6 9:?$mt׷װמחחחװ׎מװzphc6>*CJ\hc5CJ\hc56CJNHhc56CJ hc6CJhcCJNH hcNHhc hc5\hcCJOJQJhcCJ8aJ,hcCJ$aJ, hcCJ$ hcCJhcCJaJ,jhcCJUaJ,hcB*CJOJQJph+()*+,-.56789:;<=>?@ABCE$dhdd[$\$a$$a$FET . G h v   6 7 i $`a$$a$ B$m56Pgptz~$&$If]`&a$ $&$If`&a$$7`7a$$a$t#1356P[\gRwTUv CD[żůŞŞŔŔŔŔŞŞŦůŞůůōō hc6CJhcCJmH sH hcCJNHhc5CJ\hc5>*B* CJphhc56CJ hcCJhc6CJ\hcCJNH\ hc\]hc56>*CJhc6>*CJ\ hcCJ\7m```OOO$&$If]`&a$ $&$If`&a$kd $$IfFֈ +u%4 FaFm```OOO$&$If]`&a$ $&$If`&a$kd $$IfFֈ +u%4 FaFm```OOO$&$If]`&a$ $&$If`&a$kdD $$IfFֈ +u%4 FaF m```OOO$&$If]`&a$ $&$If`&a$kd $$IfFֈ +u%4 FaF   '+m```OOO$&$If]`&a$ $&$If`&a$kdz$$IfFֈ +u%4 FaF+,07>CGQm```OOO$&$If]`&a$ $&$If`&a$kd$$IfFֈ +u%4 FaFQRSwvw mhhhhhhhhhhh$a$kd$$IfFֈ +u%4 FaF CD[ 3Ka}&=WuX$`a$$a$-0h:lz./púسسسسسةآة؍؍غ؆ hc>*CJhc56CJ\hc6CJmH sH  hc6CJhcCJmH sH  hc5CJhc5CJ\hc5>*B* CJphhcCJNH hcCJhcCJNH\hc6CJ\ hcCJ\hc5CJ]2-BXEkd$$IfF0SF9!4 FaEkdK$$IfF0SF9!4 Fa $$If`a$ $$Ifa$$a$ BCh;Pe/@Sgpq$a$$`a$Ekd $$IfF0SF9!4 Faqw  B q v w !!3!K!c!!!!$`a$ $^`a$$`a$$ & F ^`a$$a$/ A ] p q v !! !"!8!9!P!Q!g!i!!!!!!"D"f"""###y#z#####G$H$$$%% %'%S%%%%&-&&'''忴堓 hc6CJhc5>*B*CJph hc5\hc5>*B* CJphhcCJ\mH sH  hcCJ\ hc>*CJ hc5CJhcCJNHhc5CJ\ hcCJhc6CJmH sH hcCJmH sH 7!!!!"*"D"f""#########%%)%>%S%]%g%w%% $^`a$$`a$$a$%%&.&=&M&\&v&&&&&''&'''R'{''''''(*$$d%d&d'dNOPQ]a$$a$$`a$'(((((()))))))))***&*(*X**i+++9,>,?,M,,,,,,)-R-S------q.r.......//%0&020G0[0򨡔hc5>*B* CJph hc5\hc5>*B*CJphhc5>*B*CJphhc6CJmH sH hcCJmH sH hc5>*CJ\hcCJNHhc5CJ\ hcCJ hc>*CJ8(((())))))))***(*;*P*b*t******+/+b+t++$`a$$a$++++,",5,>,?,M,,,,,,,-&-I-R-S----....$`a$$a$$`a$.../ //1/X/g/v//////G0[0]0c0i0 $$Ifa$ ^ $`a$$a$[0]0c0j0l0w0y000000000011O1111 22 3 3S3W3^3`3u344K4L4_44444526z6{6!7"77777778o88;=̴̼ệ̴̴̴̪̏ hc5CJhc5>*B*CJph hc5\hc5>*CJ\hcCJNH hc>*CJhc5CJ\ hcCJhc5CJ\mH sH hcCJmH sH hcCJmH sH hc5CJ\mH sH 8i0j0l0q0v0w0y00DXkd$$IfFF     4 FaY $$Ifa$Xkdh$$IfFF     4 FaY 00000000DXkd$$IfFF     4 FaY Xkdn$$IfFF     4 FaY $$Ifa$00000000DXkd$$IfFF     4 FaY Xkdt$$IfFF     4 FaY $$Ifa$00000 11-171G1a1|111111$`a$$a$Xkdz$$IfFF     4 FaY $$Ifa$1 2 222222$2Xkd$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$$2%2&2,22232427Xkd$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$Xkd$$IfFF0     4 Fav 4292?2@2A2E2N2 $ & F$Ifa$Xkd$$IfFF0     4 Fav $$Ifa$N2O2P2X2`2a2b27Xkd$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$Xkd $$IfFF0     4 Fav b2k2r2s2t2~22 $ & F$Ifa$Xkd$$IfFF0     4 Fav $$Ifa$22222227Xkd$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$Xkd$$IfFF0     4 Fav 2222222 $ & F$Ifa$Xkd$$IfFF0     4 Fav $$Ifa$22222227Xkd$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$Xkd$$IfFF0     4 Fav 223333!3 $ & F$Ifa$Xkd!$$IfFF0     4 Fav $$Ifa$!3"3#3*32333437Xkd'$$IfFF0     4 Fav $$Ifa$ $ & F$Ifa$Xkd$$IfFF0     4 Fav 43:3A3B3C3I3R3 $ & F$Ifa$Xkd$$IfFF0     4 Fav $$Ifa$R3S3`3u3333333444K4L4_444$`a$$a$Xkd-$$IfFF0     4 Fav 44444445#5)5O5u555555626-7788(828$`a$$`a$ $^`a$$a$ $^`a$28h8z88888999$9I9S9b999999:$:P:x::::::$a$$`a$$`a$:; ;/;U;g;;;;;;;<!<B<x<<<<=L======9?:?D?$a$$`a$====>>"?#?9?B?D???@Y@@ANAxAA1B*CJhcCJmH sH  hc6CJhc5>*CJ\hcCJNHhc5CJ\hc5>*B*CJph hcCJFD?[?p?z??????@@,@U@^@_@w@@@@@@@A@A^AnAwAxAA$`a$AAAAAA+B6B*CJ\hc5CJ\mH sH hc5CJ\hcCJNH hc5\hc6CJmH sH hcCJmH sH hcCJmH sH  hcCJ hc6CJhc6CJNH=LLLLLL M,M>MNMmMMMMMNENuNNNNNNO?OSO]OkO}O$`a$}OOOPEPuPPPPPQ3QMQfQQQQR4RVRRRRRSQSsSSS$`a$SS'TBTZTsTTTT$U@UbUUUUV*VLVVVVVW*WHWWWWW$`a$WXLXpXXXXY?YaYYYYZ&Z5ZOZXZYZzZ{Z[[[[[\\\$a$$`a$\\ ^^G^]^^^^^`_j______``!`D`T``````a$`a$$`a$$a$a5aIasa|a}aabbcccccee$eFezeee f)f*f1f2fMf$a$$`a$VcWcdd e ee"e$e*f1fggJhNhUhWhnhhijjHkll[mfmmnno*B*CJph hc5\h%jhcCJmH sH hcCJmH sH  hc6CJhcCJmHsHhc5CJ\hc5>*CJ\ hcCJhcCJNH@Mffffg1gVgWggh>hIhJhWhnhhhi.iTiziiiiiii`$`a$$a$$ a$ij-jLjcjjjjjjk)kAk_khkikkk,lFlellllllmm$a$$`a$m m/m_mvmmmmmmmn$nAn^n}nnnnno)o6o|oooooo$a$$`a$oyqqqrrrssstXtttuuNuauuu vvvMvwvvvvv$`a$$a$MuuuuvMvPvwvzvvvvvAwBwww xxLxMxVxsxxxxx1yyozpzzzP{Q{{e||||}W}~Y~Z~jk{݀ӂ ʄ˄ ;<#$BR҇Ӈ hc5\hc6CJNHhcCJmH sH hc5>*CJ\hc5CJ\hcCJNH hc5CJ hc6CJ hcCJHvUxVxsxxxxy)yNy\yuyyyyyyyyzzh{i{|{{{{{|$`a$$a$||#|6|H|Z|x|||}}6}O}}}}}}}}~ ~~~~~{$a$$`a${|Vo*C|0=KauȂ$`a$$a$Ȃڂ<IJABRS!ANOfhi'5$a$$`a$ʉˉMNՊ֊JK؋ۋ#&Kٌvwrޑ5DLZ7;vݔFh%jhcCJmH sH hchc5CJ\ hc5\hcCJmH sH hcCJmH sH  hc6CJ hc6CJhcCJNH hcCJBΌ-Rhۍю.cL$a$$`a$Lqrޑ45DKLZuv$a$$`a$ה/{˕;EFHIKLNOQR*&#$h]h&`#$ "*&dP$a$$`a$FGIJLMOPR໪ hcCJ+h=40J5CJOJQJ\^JmHnHu hc0J5CJOJQJ\^J)jhc0J5CJOJQJU\^J hc0Jjhc0JUhchc5CJOJQJ\^Jh2jh2U$a$h$dN]h7 0PP&P . A!7"7#7$%  Dd\  C *ALogoEte2"b^ ݭp>H"s: Dn2 ݭp>H"sPNG  IHDRMFnۀ0PLTE)%"ROLxvthec:52XX䧧i!c tRNS="bKGDHgIFg6 cmPPJCmp0712Om ^IDAThkIL1fc,%&#hH¬#y}8{;QfcGIrHGŇ#83V7lw:rH}_UwOtq3 өW_}W_W WQ&YSB,+7dԚŹ ^kFl k õFts4kJk]Zo{ 5}zO,s˷ &s :RH2Ld2J'{$Qq)˜/.!+K=J赦,s.uإ]֐;1(yOE8tlZwއ*krWG }nV8gi?Kc?o<5ɶ WQl~S_~U(, nSg<&gkW0v'd.jvԫY]se Ȯ&bx]jQKmc&t|sfbXWlCR^ڰm˙iGkg jB5 ǼC䣂R JL!{8;_3}"ߌgy3KIܣE;Ъ&hPtB;tTҕ `@BTO3rڱjS6ewV`0g!}*zp'wVtG,#z8_Ţ,EA>uyU4wpa Vz9KpV'g*6ßsW&cb2&rc=T؜Kem^y>K'>7 ?N> _ݜmm'h*>zOyڋͥKCRN6ցG-QJwf~nTqӇs!/ouVO~ IQO?\GuN >z*%}vWڗ * %}މ]yuɳO N>{&YUDd*ýD $ZzjEXZ I=iq񖚮2> 'V/gQG_j—gw_XA(g$9Hք>sF07ODNwt^h6H#gO<'\TSz;;~ )9+}J|8Gv/G^'vrzS@rΎ^\ŋPͱ\9|Nq?s ZR,cJ P(S;H5ܜ E:g&OIPˢԽE eBͯL:N(q jeьB8HWUO&q@ 2Tw͹ˏ8\FI8@',)]d@2U074b7)< )]A:>59|oW}d)/ י٧7|:8Ӵi-r)Т2!@s b9gϹ0qYTpw7 }r~A&5R71zTܜM )l9'd}|sro*`qjAA8tpq;qqS>#go% Nq'8+ Nrrgh dXaTVpV>͸DKY\甛3`sJ3J.%VL 8͚;UO_f68gb0R'B(:-'8Q^+) 4p+nqb>L4->-+uD,^&P*v Y)_8qw~EK*ǭĞ@fV dLNjýGW 0(hp˼G'禹V1.9+u*v6}÷pΉv |0yA,j:xCH/VySҴ8zoKwEnR, qo07%6fQa' yy_09Ssk ==sR, MN7KҾt$r%Lؤ))rF9Q1/u ϙ6ҿw fAV|F9# eYb\މ,5iB|+=ӇY"q5Qog>O:;_^ך9|YW_6W&h IENDB`$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF$$IfF!vh555555#v#v#v:V F55544 FaF]$$If!vh55#v:V F544 Fa]$$If!vh55#v:V F544 Fa]$$If!vh55#v:V F544 Fa$$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$IfY !vh555#v#v#v:V F55544 FaY $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav $$Ifv !vh555#v#v#v:V F55544 Fav D@D NormalCJOJQJ_HmHsHtH<@< Ttulo 1$$@&a$5B@B Ttulo 2$$@&a$ 5CJ \L@L Ttulo 3$$@&a$5>*B* CJphZ@Z Ttulo 4$$-D@&M a$5B* CJphJ@J Ttulo 5$$@&a$5CJ\mH sH T@T Ttulo 6$L@&^L`5CJ\mH sH >A@> Fonte parg. padroXi@X  Tabela normal :V 44 la ,k, Sem lista BB@B Corpo de texto$a$54 @4 Rodap  C"8)@8 Nmero de pginaFP@"F Corpo de texto 2$a$CJ:@2: Cabealho  C"FQ@BF Corpo de texto 3$a$CJ*()*+,-.56789:;<=>?@ABCET.Ghv 67iB$m5 6 P g p t z ~      ' + , 0 7 > C G Q R S w v w CD[ 3Ka}&=WuX-BCh;Pe/@Sgpqw Bqvw3Kc*Df)>S]gw.=M\v&'R{  ( !!!!!!!!"""(";"P"b"t""""""#/#b#t#####$"$5$>$?$M$$$$$$$%&%I%R%S%%%%&&&&&&' ''1'X'g'v''''''G([(](c(i(j(l(q(v(w(y(((((((((((((((((((( ))-)7)G)a)|)))))) * ******$*%*&*,*2*3*4*9*?*@*A*E*N*O*P*X*`*a*b*k*r*s*t*~*********************++++!+"+#+*+2+3+4+:+A+B+C+I+R+S+`+u+++++++,,,K,L,_,,,,,,,,,-#-)-O-u------.2.-//00(020h0z00000111$1I1S1b1111112$2P2x2222223 3/3U3g33333334!4B4x44445L55555597:7D7[7p7z77777788,8U8^8_8w88888889@9^9n9w9x9999999+:6:<:=:P:::::::;;m<n<x<<<<< ==%=;=M=`=i=j=y=?%?/?@?Q?]?f?t???????@#@<@Q@`@i@j@u@@A&A@AaAAAAAAB/BHBVBpBBBBBBBDD-DDDDDDD E,E>ENEmEEEEEFEFuFFFFFFG?GSG]GkG}GGGHEHuHHHHHI3IMIfIIIIJ4JVJJJJJKQKsKKKK'LBLZLsLLLL$M@MbMMMMN*NLNNNNNO*OHOOOOOPLPpPPPPQ?QaQQQQR&R5RORXRYRzR{RSSSSSTTTT VVGV]VVVVV`WjWWWWWWXX!XDXTXXXXXXY5YIYsY|Y}YYZZ[[[[[]]$]F]z]]] ^)^*^1^2^M^^^^_1_V_W__`>`I`J`W`n```a.aTazaaaaaaab-bLbcbbbbbbc)cAc_chciccc,dFdeddddddee e/e_eveeeeeeef$fAf^f}fffffg)g6g|ggggggyiiijjjkkklXlllmmNmammm nnnMnwnnnnnUpVpsppppq)qNq\quqqqqqqqqrrhsis|ssssstt#t6tHtZtxtttuu6uOuuuuuuuuv vvvvvww{w|wwwwwxVxoxxxxy*yCy|yyyz0z=zKzazuzzzzzzzzz{<{I{J{}ABRS!ANOfhi'5΄-Rhۅц.cLqrމ45DKLZuv׌/{ˍ;EFHIKLNOQR0h00000(0(0(0(0(00.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.(0.00000000000000 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0 000000000000000000000000000000000000000000 0 0 0 0 0 0 0 0 00000000000000000000 0 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000H00G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G( 0G(0G(0G(0G(0G(0G(0G(0G(0G(0G(0G(0G(X0G( 0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0) 0) 0) 0)  0 ) 0) 0) 0)  0 ) 0) 0) 0)  0 ) 0) 0) 0)  0 ) 0) 0) 0)  0 ) 0) 0) 0)  0) 05* 05* 05*  05* 05* 05* 05*  05* 06* 06* 06* 06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*06*H0B0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^00e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0e^0@0I00@0I00@0I00@0I00@0@0@0@0@0@0@0@0I00 >IVVVYt'[0=~LVcMuFLQZ^aey~E  +Q Bq!%(+.i00001$242N2b22222!343R3428:D?AEjHL}OSW\aMfimov|{ȂLMOPRSTUVWXY[\]_`bcdfghijklmnopqrstuvwxz{|}N>EIPRY!!8  @ 0(  n B S  ?zA<{A||AP}ADѸaaaa8*urn:schemas-microsoft-com:office:smarttagsCity9*urn:schemas-microsoft-com:office:smarttagsplace>*urn:schemas-microsoft-com:office:smarttags PersonName # em Turbo Pascalem Turbo Pascal. Dentro ProductID.4GLhnv{&/6' 1 3 < z } C F    & a g W b '*1[_!cmEOGNOflosx{')lsZa29BI`g_dho-4JQ} kruz. 8 s | } 6!?!@!F!!!!!!!!!!!!!,"3"G"N"""""""""$#*#6#;#i#o#################$ $$$)$0$$$$$$$$$$$% % %%%$%)%0%%%&&&&' '''#')'9'>'~''''''2(@(A(D(K(Q(c(h((((((((((((()#)1)6)?)E)O)V)X)])i)w))))))))** * ****4*8*9*>*E*M*b*g*k*q*t*}*~****************+++ +#+)+C+H+I+Q+d+k+++++++++++++++, ,,,,,,-- ---L.\. /%/D/T/000&0,01090>0o0u0v0w00000000000000011@1G1M1R1Z1`1i1n11111111112.2223282Z2^22222222222 3333'3-363;3\3b3n3s33333333333a4h4444455<5k5r555H7O7g7n7t7y777 88$8*87888=8C8I8P8Q8R8888888N9U9V9W99999999999: :::;;|<<<<<<====/=6=7=8=E=F=T=Y=== ??? ?x?????????? @ @0@7@8@9@:A?AAAD!DDDDDDDDDDDDDDDEEEE E,E3E>EEENE\EdEtEEEEEEEEEF!FEFQFuFFFFFWG\GdGjGuG{GGGGH H&H9HAHOHUHhHsHtHuHHHHHHHII$I1I=IMIZIfI|IIII.J4JMJVJoJJJJJJJJKK3K:KCKOKPKQKKKL'L=LBLmLrL:M@MYMbM{MMMMMMMMMMNNNNNN$O)OPP3PLPePpPPPPPPPPPQQ QQ6Q=QXQ_QQQQQQQQQ R R RR!R&R0R3RBRIRRRSSUUVV#V*VVVdWiWxWW XXXXXXXXXX[YbY,]<]6^:^9_I__ ``.`[`b```aaaaaaaaaab bb"b#b*b;b?bSbYbZb`bqbwbbbbbbbbbbbbcc cccc&c0c7c8c>cHcOccc0d4dxddddddddddee'e-e6e;efelenese}eeeeeeeeeeeeff.f3fKfQfhfmfffffffffffff$g%g>5?>?F?O?????0@8@I@J@VA_AwAAAABBBBBBDDDDDDDDEEUE[EtExEEEEEEE#F&FSFVFFF&G.GGGIGuG{GGGGGGG H'HOHVHHHHHHHHHII$I.IZI_I|IIIIIIoJuJJJJJ3K;KKKKKL%LhLiLLLLLLL{MMMMeNkNNNNNO O@OFO^OfOOO3P9PPPQ QzQQQQQQTU-V3VNVPVVVVVWWWWWWXX,X.XaXgXXXXXXYYYEYGY[YcYZZ`Z\\Z\`\,]<]n]u]u^|^9_I__ ``.````` a$aHaMapasaaaaaaaabb#b4b:bSbZbjbpbbbbbbbbccc0c8cHcPc*d+dSdXdsdwddddddddd e e'e-e>eJeeeeeeeeeeeff.f4fKfRfhfnfffffgg0g5gsy…ʅ69knLWɈˈ"$݌5:э؍@DFFHHIIKLNOQR3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333B w h((),@EFFHHIIKLNOQR{FFHHIIKLNOQR71D;L1. cjh ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`.c71D;L2c=4%j!@|Q(mg p t z ~      ' + , 0 7 > C G Q R Iu-BC&' ''G([(](c(i(j(l(q(v(w(y((((((((((((((((((((O))))) * ******$*%*&*,*2*3*4*9*?*@*A*E*N*O*P*X*`*a*b*k*r*s*t*~*********************++++!+"+#+*+2+3+4+:+A+B+C+I+R+S+_,,@BB?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     $Root Entry F0[j#w&Data 1TableWordDocument9*SummaryInformation(DocumentSummaryInformation8CompObju  F#Documento do Microsoft Office Word MSWordDocWord.Document.89q