Você está na página 1de 102

APRESENTAO .................................................................................................................................. 8 CAPTULO I INTRODUO ................................................................................................................. 9 1. A Linguagem Pascal ............................................................................................................................ 9 2. Turbo Pascal ....................................................................................................................................... 9 3. Compilao e Linkedio ..................................................................................................................... 9 4.

. Ambiente de Desenvolvimento ........................................................................................................... 10 5. Execuo de um Programa ................................................................................................................ 11 CAPTULO II DADOS NO PASCAL..................................................................................................... 12 1. Manipulando Dados .......................................................................................................................... 12 2. Variveis .......................................................................................................................................... 12 3. Tipos de Dados ................................................................................................................................. 12 3.1. O Tipo Integer ................................................................................................................................ 13 3.2. O Tipo Byte.................................................................................................................................... 13 3.3. O Tipo Real ................................................................................................................................... 13 3.4. O Tipo Char ................................................................................................................................... 14 3.5. O Tipo Boolean .............................................................................................................................. 15 3.6. O Tipo String ................................................................................................................................. 15 3.7. O Tipo Word .................................................................................................................................. 15 3.8. O Tipo Shortint ............................................................................................................................... 15 3.9. O Tipo Longint ............................................................................................................................... 15 3.10. O Tipo Single ............................................................................................................................... 16 3.11 O Tipo Double............................................................................................................................... 16 3.12. O Tipo Comp ............................................................................................................................... 16 3.13. O Tipo Extended .......................................................................................................................... 16 4. Comando de Atribuio ...................................................................................................................... 16 5. Operadores Aritmticos ...................................................................................................................... 17 6. Operadores Lgicos ........................................................................................................................... 17 7. Operadores Relacionais ..................................................................................................................... 18 CAPTULO III CRIANDO OS PRIMEIROS PROGRAMAS .................................................................... 19 1. Estrutura de um Programa ................................................................................................................. 19 2. rea de Cabealho ............................................................................................................................ 19 3. rea de Definies e Declaraes ...................................................................................................... 19 3.1. Definio de Units .......................................................................................................................... 19 3.2. Declarao de um Label ................................................................................................................. 19 3.3. Declarao de Constantes .............................................................................................................. 20 3.4. Declarao de Variveis ................................................................................................................. 20 4. rea do Programa Principal ................................................................................................................ 20 5. Procedimentos de Entrada e Sada..................................................................................................... 21 5.1. Procedimento READ ...................................................................................................................... 21 5.2. Procedimento WRITE ..................................................................................................................... 21 6. Procedimentos de Controle de Vdeo .................................................................................................. 22 6.1. Textmode ...................................................................................................................................... 22 6.2. TextColor....................................................................................................................................... 23 6.3. Textbackground ............................................................................................................................. 23 6.4. Clrscr ............................................................................................................................................ 23 6.5. Gotoxy(x,y) .................................................................................................................................... 23 CAPTULO IV ESTRUTURAS DE CONDIO .................................................................................... 25 1. Deciso ............................................................................................................................................. 25 2. A Estrutura IF .................................................................................................................................... 25 Apostila de Turbo Pascal 7.0 1

2.1. Aninhamento de Estruturas IF ......................................................................................................... 26 3. A Estrutura CASE .............................................................................................................................. 26 CAPTULO 5 ESTRUTURAS DE REPETIO .................................................................................... 29 1. Introduo ......................................................................................................................................... 29 2. Estrutura de Repetio FOR ............................................................................................................... 29 2.1. Aninhamento de Estruturas FOR .................................................................................................. 30 3. Estrutura de Repetio WHILE ........................................................................................................... 30 4. Estrutura de Repetio REPEAT UNTIL.............................................................................................. 31 CAPTULO VI FUNES E PROCEDIMENTOS PREDEFINIDOS ....................................................... 33 1. Funes e Procedimentos Matemticos .............................................................................................. 33 1.1. EXP(num) ................................................................................................................................... 33 1.2. LN(num) ..................................................................................................................................... 33 1.3. SQR(num) .................................................................................................................................. 33 1.4. SQRT(num) ................................................................................................................................ 33 1.5. ABS(num) ................................................................................................................................... 33 1.6. INT(num) .................................................................................................................................... 33 1.7. TRUNC(num) .............................................................................................................................. 33 1.8. ROUND(num) ............................................................................................................................. 33 1.9. FRAC(num) ................................................................................................................................ 34 1.10. SIN(num) .................................................................................................................................. 34 1.11. COS(num) ................................................................................................................................ 34 1.12. VAL(atr,num,code) .................................................................................................................... 34 1.13. STR(num,str) ............................................................................................................................ 34 2. Funes e Procedimentos Booleanos ................................................................................................. 34 2.1. Keypressed ................................................................................................................................. 34 2.2. ODD(num) .................................................................................................................................. 34 3. Funes e Procedimentos Ordinais..................................................................................................... 35 3.1. INC(num, val) .............................................................................................................................. 35 3.2. DEC(num,val) ............................................................................................................................. 35 3.3. SUCC(num) ................................................................................................................................ 35 3.4. PRED(num) ................................................................................................................................ 35 3.5. ORD(par).................................................................................................................................... 35 4. Funes e Procedimentos de Caracter ................................................................................................ 35 4.1. UPCASE(char)............................................................................................................................ 35 4.2. CHR(code) ................................................................................................................................. 36 4.3. READKEY .................................................................................................................................. 36 5. Funes e Procedimentos de String .................................................................................................... 36 5.1. INSERT(str,str_destino,pos_inicio) ............................................................................................... 36 5.2. DELETE(str,pos_inicio,quant) ...................................................................................................... 36 5.3. CONCAT(str1,str2,...,strN) ........................................................................................................... 36 5.4. COPY(str,pos_inicio,quant).......................................................................................................... 36 5.5. LENGTH(str) ............................................................................................................................... 36 5.6. POS(str_proc,str) ........................................................................................................................ 37 6. Funes e Procedimentos Diversos .................................................................................................... 37 6.1. CLREOL ..................................................................................................................................... 37 6.2. DELLINE .................................................................................................................................... 37 6.3. INSLINE ..................................................................................................................................... 37 6.4. SOUND (freq) ............................................................................................................................. 37 6.5. NOSOUND ................................................................................................................................. 37 6.6. DELAY(ms)................................................................................................................................. 37 6.7. RANDOM(num) ........................................................................................................................... 38 Apostila de Turbo Pascal 7.0 2

6.8. RANDOMIZE .............................................................................................................................. 38 6.9. WHEREX ................................................................................................................................... 38 6.10. WHEREY .................................................................................................................................. 38 6.11. EXIT ......................................................................................................................................... 38 CAPTULO VII UNITS ........................................................................................................................ 39 1. Definio........................................................................................................................................... 39 1.1.System ........................................................................................................................................ 39 1.2.Crt ............................................................................................................................................... 39 1.3. Dos ............................................................................................................................................ 39 1.4. Graph ......................................................................................................................................... 39 1.5. Printer ........................................................................................................................................ 39 1.6. Overlay ....................................................................................................................................... 39 2. Criando Units .................................................................................................................................... 40 CAPTULO VIII A UNIT CRT............................................................................................................... 42 1. Unit CRT........................................................................................................................................... 42 1.1. ASSIGNCRT............................................................................................................................... 42 1.2. WINDOW .................................................................................................................................... 42 1.3. HIGHVIDEO ............................................................................................................................... 42 1.4. LOWVIDEO ................................................................................................................................ 42 1.5. NORMVIDEO .............................................................................................................................. 42 CAPTULO IX A UNIT DOS ................................................................................................................ 43 1. Unit DOS ........................................................................................................................................... 43 2. Funes e Procedimentos de Data e Hora .......................................................................................... 43 2.1. GETDATE (ano,ms,dia,semana) ................................................................................................ 43 2.2. GETTIME(hora,min,s,cent_s)....................................................................................................... 43 2.3. SETDATE (ano,mes,dia) ............................................................................................................. 44 2.4. SETTIME (hora,min,s,cent_s) ...................................................................................................... 44 2.5. PACKTIME (VAR <dt>: DATETIME; VAR <ftime>: LONGINT) ....................................................... 44 2.6. UNPACKTIME (<ftime>: LONGINT; VAR <dt>: DATETIME) .......................................................... 44 2.7. GETFTIME (VAR <arquivo>; VAR <dh>:LONGINT) ....................................................................... 45 2.8. SETFTIME (VAR <arquivo>; VAR <ftime>:LONGINT) ................................................................... 45 3. Funes e Procedimentos de Disco .................................................................................................... 45 3.1. DISKFREE (drive) ....................................................................................................................... 45 3.2. DISKSIZE(drive) ......................................................................................................................... 45 3.3. GETVERIFY(bol) ......................................................................................................................... 45 3.4. SETVERIFY(bol) ......................................................................................................................... 46 4. Funes e Procedimentos Diversos .................................................................................................... 46 4.1. DOSVERSION ............................................................................................................................ 46 4.2. GETCBREAK(bol) ....................................................................................................................... 46 4.3. SETCBREAK(bol) ....................................................................................................................... 46 4.4. ENVCOUNT ............................................................................................................................... 46 4.5. ENVSTR(ind) .............................................................................................................................. 46 4.6. GETENV(str) .............................................................................................................................. 46 4.7. EXEC ......................................................................................................................................... 47 4.8. DOSEXITCODE .......................................................................................................................... 47 4.9. FEXPAND .................................................................................................................................. 47 4.10. FSEARCH ................................................................................................................................ 47 4.11. FSPLIT ..................................................................................................................................... 47 4.12. FINDFIRST............................................................................................................................... 47 4.13. FINDNEXT ................................................................................................................................ 47 Apostila de Turbo Pascal 7.0 3

4.14. GETFATTR ............................................................................................................................... 48 4.15. SETFATTR ............................................................................................................................... 48 4.16. GETINTVEC ............................................................................................................................. 48 4.17. SETINTVEC.............................................................................................................................. 48 4.18. SWAPVECTORS ...................................................................................................................... 48 4.19. INTR ......................................................................................................................................... 48 4.20. MSDOS .................................................................................................................................... 48 4.21. KEEP ....................................................................................................................................... 48 CAPTULO X A UNIT GRAPH ............................................................................................................ 49 1. Unit GRAPH...................................................................................................................................... 49 2. Procedimentos Diversos .................................................................................................................... 49 2.1. DETECTGRAPH......................................................................................................................... 49 2.2. INITGRAPH................................................................................................................................ 49 2.3. GETDRIVERNAME ..................................................................................................................... 49 2.4. GETMODENAME ........................................................................................................................ 49 2.5. GETMODERANGE ..................................................................................................................... 49 2.6. GRAPHRESULT ......................................................................................................................... 49 2.7. GETGRAPHMODE ..................................................................................................................... 49 2.8. SETGRAPHMODE ...................................................................................................................... 50 2.9. GETMAXMODE .......................................................................................................................... 50 2.10. GRAPHERRORMSG ................................................................................................................. 50 2.11. CLOSEGRAPH ......................................................................................................................... 50 2.12. ARC ......................................................................................................................................... 50 2.13. GETARCCOORDS .................................................................................................................... 50 2.14. BAR ......................................................................................................................................... 50 2.15. BAR3D ..................................................................................................................................... 50 2.16. CIRCLE .................................................................................................................................... 50 2.17. ELLIPSE ................................................................................................................................... 51 2.18. LINE ......................................................................................................................................... 51 2.19. LINEREL .................................................................................................................................. 51 2.20. LINETO .................................................................................................................................... 51 2.21. MOVETO .................................................................................................................................. 51 2.22. MOVEREL................................................................................................................................ 51 2.23. GETY ....................................................................................................................................... 51 2.24. GETX ....................................................................................................................................... 51 2.25. GETMAXX ................................................................................................................................ 51 2.26. GETMAXY ................................................................................................................................ 51 2.27. RECTANGLE ............................................................................................................................ 51 2.28. DRAWPOLY ............................................................................................................................. 52 2.29. SECTOR .................................................................................................................................. 52 2.30. FILLPOLY ................................................................................................................................. 52 2.31. SETGRAPHBUFSIZE ................................................................................................................ 52 2.32. FILLELLIPSE ............................................................................................................................ 52 2.33. FLOODFILL .............................................................................................................................. 52 2.34. GETASPECTRATIO .................................................................................................................. 52 2.35. SETASPECTRATIO .................................................................................................................. 52 2.36. GETCOLOR .............................................................................................................................. 52 2.37. GETMAXCOLOR ...................................................................................................................... 53 2.38. SETCOLOR .............................................................................................................................. 53 2.39. GETBKCOLOR ......................................................................................................................... 53 2.40. SETBKCOLOR ......................................................................................................................... 53

Apostila de Turbo Pascal 7.0

2.41. GETPALETTE ........................................................................................................................... 53 2.42. SETPALETTE ........................................................................................................................... 53 2.43. GETDEFAULTPALETTE ........................................................................................................... 53 2.44. SETALLPALETTE ..................................................................................................................... 53 2.45. OUTTEXT ................................................................................................................................. 53 2.46. OUTTEXTXY ............................................................................................................................ 53 2.47. GETPALETTESIZE ................................................................................................................... 54 2.48. SETRGBPALETTE .................................................................................................................... 54 2.49. CLEARDEVICE ......................................................................................................................... 54 2.50. SETTEXTJUSTIFY .................................................................................................................... 54 2.51. SETTEXTSTYLE ....................................................................................................................... 54 2.52. GETTEXTSETTINGS ................................................................................................................ 54 2.53. TEXTHEIGHT ........................................................................................................................... 54 2.54. TEXTWIDTH ............................................................................................................................. 54 2.55. GETPIXEL................................................................................................................................ 54 2.56. PUTPIXEL ................................................................................................................................ 55 2.57. GETLINESETTINGS ................................................................................................................. 55 2.58. SETLINESTYLE ........................................................................................................................ 55 2.59. PIESLICE ................................................................................................................................. 55 2.60. SETFILLPATTERN .................................................................................................................... 55 2.61. GETF ILLPATTERN ................................................................................................................... 55 2.62. SETFILLSTYLE ......................................................................................................................... 55 2.63. GETFILLSETTINGS .................................................................................................................. 55 2.64. REGISTERBGIDRIVER ............................................................................................................. 55 2.65. REGISTERBGIFONT ................................................................................................................ 56 2.66. INSTALLUSERDRIVER ............................................................................................................. 56 2.67. INSTALLUSERFONT ................................................................................................................ 56 2.68. SETUSERCHARSIZE ................................................................................................................ 56 2.69. SETWRITEMODE ..................................................................................................................... 56 2.70. SETVIEWPORT ........................................................................................................................ 56 2.71. CLEARVIEWPORT ................................................................................................................... 56 2.72. GETVIEWSETTINGS ................................................................................................................ 56 2.73. GRAPHDEFAULTS ................................................................................................................... 57 2.74. RESTORECRTMODE ............................................................................................................... 57 2.75. IMAGESIZE .............................................................................................................................. 57 2.76. GETIMAGE ............................................................................................................................... 57 2.77. PUTIMAGE ............................................................................................................................... 57 2.78. SETACTIVEPAGE .................................................................................................................... 57 2.79. SETVISUA LPAGE ..................................................................................................................... 57 CAPTULO XI A UNIT OVERLAY........................................................................................................ 58 1. Unit OVERLAY .................................................................................................................................. 58 2. Procedimentos Diversos .................................................................................................................... 58 2.1. OVRINIT..................................................................................................................................... 58 2.2. OVRINITEMS ............................................................................................................................. 58 2.3. OVRGETBUF ............................................................................................................................. 58 2.4. OVRSETBUF .............................................................................................................................. 58 2.5. OVRCLEARBUF ......................................................................................................................... 58 2.6. OVRGETRETRY ......................................................................................................................... 58 2.7. OVRSETRETRY ......................................................................................................................... 59 CAPTULO XII TIPOS DEFINIDOS PELO USURIO ........................................................................... 60 1. Tipos de Dados ................................................................................................................................. 60 Apostila de Turbo Pascal 7.0 5

2. Definio........................................................................................................................................... 60 3. Operaes com Tipos Enumerados .................................................................................................... 60 4. Tipo Derivado Faixa ........................................................................................................................... 61 CAPTULO XIII PROCEDURES .......................................................................................................... 63 1. Procedimentos .................................................................................................................................. 63 2. Definio........................................................................................................................................... 63 3. Chamadas a Procedures .................................................................................................................... 64 4. Parmetros das Procedures ............................................................................................................... 65 5. Localidade ........................................................................................................................................ 65 CAPTULO XIV FUNCTIONS ............................................................................................................. 67 1. Funes ............................................................................................................................................ 67 2. Definio........................................................................................................................................... 67 CAPTULO XV ARRAYS UNIDIMENSIONAIS ..................................................................................... 70 1. Introduo ......................................................................................................................................... 70 2. Definio e Declarao de um Array Unidimensional ........................................................................... 70 3. Constante Array Unidimensional ......................................................................................................... 72 CAPTULO XVI ARRAYS MULTISIMENSIONAIS ................................................................................ 73 1. Matrizes ............................................................................................................................................ 73 1.1. Acessando Elementos da Matriz .................................................................................................. 73 2. Matriz Constante ............................................................................................................................... 74 3. Aplicaes com Matrizes .................................................................................................................... 74 3.1. Construo de Matrizes .................................................................................................................. 74 3.2. Somando Duas Matrizes ................................................................................................................. 75 3.3. Matrizes Transpostas ..................................................................................................................... 76 CAPTULO XVII TIPOS ESTRUTURADOS - REGISTRO ..................................................................... 78 1. Introduo ......................................................................................................................................... 78 2. Declarao ........................................................................................................................................ 78 3. Operaes com tipo Record ............................................................................................................... 79 4. O comando WITH .............................................................................................................................. 80 5. Record dentro de Record ................................................................................................................... 80 6. Constante Record.............................................................................................................................. 81 7. Array de Records ............................................................................................................................... 81 8. Record com Variante ......................................................................................................................... 82 CAPTULO XVIII TURBO DEBBUGER ................................................................................................ 84 1. Definio........................................................................................................................................... 84 2. Execuo Linha-a-linha Usando o Debugger ....................................................................................... 84 CAPTULO XIX I/O CHECKING .......................................................................................................... 86 1. Run-time Error ................................................................................................................................... 86 CAPTULO XX O TIPO TEXT - ARQUIVOS ......................................................................................... 87 1. Introduo ......................................................................................................................................... 87 2. Arquivos de Dados ............................................................................................................................ 87 3. Tipos de Arquivos .............................................................................................................................. 87 4. Declarao e Assinalamento de Arquivos-Texto .................................................................................. 88 5. Abrindo um Arquivo-Texto .................................................................................................................. 89 6. Escrevendo Dados num Arquivo-Texto ............................................................................................... 90 7. Fechando um Arquivo-Texto............................................................................................................... 91 Apostila de Turbo Pascal 7.0 6

8. Lendo Dados de um Arquivo-Texto ..................................................................................................... 91 APNDICE A ERROS DE COMPILAO ........................................................................................... 93 APNDICE B ERROS DE EXECUO ............................................................................................... 96 APNDICE C PALAVRAS RESERVADAS .......................................................................................... 97 APNDICE D TECLAS DE FUNO .................................................................................................. 99 APNDICE E GRFICOS NOS PASCAL .......................................................................................... 100 1. Introduo ...................................................................................................................................... 100 2. Inicializao da BGI ........................................................................................................................ 100 1.1. Escrita de um Programa Bsico Usando a BGI ........................................................................... 100 1.2. Trabalhando com Coordenadas ................................................................................................. 101 1.3. Endereamento por linha e coluna da tela .................................................................................. 101 3. Padres de Preenchimento Pr-Definidos ........................................................................................ 102 4. Padres de preenchimento pr-definidos .......................................................................................... 102 5. Estilos de Linhas ............................................................................................................................ 102

Apostila de Turbo Pascal 7.0

APRESENTAO
Algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitos. O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios. No se aprende algoritmos apenas copiando e estudando. Algoritmos s se aprendem construindo e testando.

"A rocha imensa e dura. O cortador bate uma, duas, trs, dez vezes, nenhuma rachadura. Ele d 100 marteladas, s tirando lascas. Na centsima primeira batida, a rocha imensa e dura se parte em duas. O cortador de pedras sabe que no foi somente aquela martelada a que conseguiu, mas tambm todas as que vieram antes". "E na prxima pedra, o cortador pode pegar uma ferramenta mais apropriada e cortar a pedra mais rapidamente".

Comentrios, crticas e sugestes sero muito bem-vindos e podem ser enviados para o email giselle@ucam-capos.br. Home page da disciplina: http://www.ucam-campos.br/graduacao/computacao/disciplinas/matriz2/2periodo/tec_prog1/tec_prog1.htm

Giselle Teixeira de Almeida Campos dos Goytacazes, maro de 2003.

Apostila de Turbo Pascal 7.0

CAPTULO I INTRODUO
Este captulo tem por objetivo dar ao leitor os principais conhecimentos necessrios ao aprendizado da Linguagem Turbo Pascal.

1. A Linguagem Pascal
A Linguagem Pascal destina-se programao de computadores. Seu nome trata-se de uma homenagem ao matemtico e filsofo francs, Blaise Pascal (1623-1662), criador da primeira calculadora mecnica. Esta linguagem foi desenvolvida por volta de 1968, por Niklaus Wirth, no Technical University, em Zurique, na Sua, com o objetivo de ensinar aos seus alunos a programar em ALGOL e PLI. Desde ento, as qualidades da Linguagem Pascal vm sendo universalmente reconhecidas. A criao da Linguagem Pascal teve por objetivo a obteno de uma linguagem simples, capaz de incentivar a confeco de programas claros e facilmente legveis, favorecendo a utilizao de boas tcnicas de programao. Suas caractersticas foram criteriosamente escolhidas visando a permitir a obteno de programas confiveis, modularizados e bem estruturados, processveis por compiladores compactos, eficientes e econmicos. Sob outros aspectos, a Linguagem Pascal inovou, em relao s linguagens existentes at ento, ao apresentar e utilizar outros conceitos: criao de novos tipos e subtipos dentro de um programa; manipulao de tipos enumerveis; a estruturao de dados, que permite criar e manipular, alm de arranjos, tambm registros, conjuntos e arquivos; a alocao dinmica de variveis, com o auxlio de ponteiros; declarao de identificadores para constantes: utilizao de procedimentos que lem e escrevem em campos individuais em vez de registros completos, uso de procedimentos e funo recursivos, etc.

2. Turbo Pascal
Em 1970 foi disponibilizado o primeiro compilador para a Linguagem Pascal, ainda um produto acadmico. Foi em novembro de 1983 que surgiu a primeira verso do Turbo Pascal, criada pela Borland International, logo atualizada para a verso 2.0. Naquela poca, a Borland era uma pequena e desconhecida empresa de Scotts Valley. Ainda na dcada de 80, foram lanadas outras verses: 3.0, 4.0, 5.0, 5.5, 6.0, e o 7.0. O nosso objetivo de estudo a verso 7.0. A mesma apresenta vrias caractersticas importantes: uma linguagem extremamente rpida, tanto no tempo de compilao quanto no tempo de execuo dos programas. Embora o compilador possa usar arquivos criados por muito editores de texto, o editor do Turbo Pascal extremamente eficiente e est diretamente ligado s rotinas de manipulao de erros do compilador. Quando o compilador detecta um erro, o controle automaticamente transferido para o editor e o cursor indica a localizao do erro juntamente com uma mensagem de descrio. O Turbo Pascal permite utilizar com eficincia os recursos de hardware do seu computador assim, por exemplo, utilizando declaraes do Pascal, voc pode desenhar na tela e compor msicas. Os programadores mais experientes podem combinar programas em Pascal com subrotinas em linguagem de mquina e se comunicarem diretamente com os terminais de entrada e de sada (I/O) e com o sistema operacional do computador.

3. Compilao e Linkedio
Quando escrevemos um programa em qualquer linguagem de alto nvel (como C, Pascal, Delphi, Java, VisualBasic, etc), utilizamos um editor de textos para escrever uma srie de comandos e cdigos que desejamos que o computador execute. Este arquivo contendo estes cdigos e comandos em linguagem de alto nvel chamado programa fonte. Apostila de Turbo Pascal 7.0 9

Entretanto, o computador no capaz de compreender os comandos contidos neste programa (ou arquivo) fonte, pois a nica linguagem que o computador entende a linguagem de baixo nvel, conhecida como linguagem de mquina, extremamente complexa e desagradvel para os padres humanos. Assim, deve haver um processo de traduo que transforma o nosso programa fonte em um programa equivalente escrito em linguagem de mquina. As duas principais maneiras de realizar este processo de traduo so chamadas de interpretao e compilao. No processo de interpretao, o programa interpretador analisa cada linha de seu programa fonte separadamente, verifica se esta linha est correta e, caso esteja, gera uma linha equivalente em linguagem de mquina e realiza a execuo. Este processo se repete at que a ltima linha do seu programa tenha sido executada. No final, o cdigo em linguagem de mquina resultante da traduo das linhas de seu programa fonte no guardado. Todas as linhas so descartadas e todo o processo de traduo deve ser repetido em uma nova execuo. J no processo de compilao, o programa compilador da linguagem analisa todo o programa fonte gerado. Caso nenhum erro seja encontrado, todo o programa fonte ser traduzido para uma linguagem de baixo nvel e armazenado em um arquivo separado, chamado de arquivo objeto. Um processo adicional chamado de linkedio, transforma este arquivo objeto em um arquivo executvel, tambm capaz de ser compreendido pela mquina. O arquivo executvel, como o prprio nome indica, est pronto para ser executado pelo computador. Uma das principais vantagens da compilao est no fato de que, uma vez gerado o arquivo executvel, ele pode ser utilizado inmeras vezes sem a necessidade da presena do compilador ou qualquer outro utilitrio, ao passo que os interpretadores so sempre necessrios para a execuo de seus programas. Outra vantagem est na velocidade de execuo. Um programa compilado possui uma execuo muito mais rpida que um equivalente interpretado, pois a interpretao sempre tem de realizar a traduo de cada linha do seu programa fonte. Por ltimo, os compiladores garantem segurana em relao ao seu cdigo-fonte, j que ele no necessrio para a execuo de um programa j compilado.

4. Ambiente de Desenvolvimento
O ambiente de desenvolvimento do Turbo Pascal composto de um editor de texto, um compilador, um programa ligador (link) e um depurador (debugger), harmonicamente integrados. O nmero de janelas que podem ser abertas simultaneamente na rea de trabalho est limitado pelo espao na memria RAM do equipamento. Cada janela pode conter um arquivo. Um mesmo arquivo pode ser colocado em vrias janelas diferentes, caso haja necessidade de visualizar simultaneamente reas diferentes. Apenas a janela ativa completamente visvel.

TECLAS F5 F6 F3 F2 Alt+x Alt+n Alt+F3 Alt+F5 Alt+F9 Ctrl+Ins Ctrl+F9 Shift+Del Shift+F6 Shift+Ins

EFEITO Zoom da janela ativa Prxima janela Abrir arquivo Salvar arquivo Sair do Turbo Pascal Ativar a janela n Fechar arquivo Janela do Usurio Compilar o programa Copiar contedo marcado para a memria intermediria (clipboard) Rodar o programa Mover contedo marcado para o clipboard Janela anterior Colar o contedo copiado para o clipboard

Tabela 1.1 - Tabela de teclas de atalho para janelas e operaes. Apostila de Turbo Pascal 7.0 10

5. Execuo de um Programa
Aps editar um arquivo natural compil-lo e rod-lo, para ver os resultados do programa. Durante esse processo, o Pascal ir procurar erros em tempo de compilao. Seno houver erros, o programa rodar normalmente. Caso contrrio, o processo de compilao ser interrompido e o compilador indicar o erro e a sua posio. Para executar um programa, ative a opo RUN do Menu RUN ou pressione Ctrl+F9. Ao terminar a execuo, o Pascal volta para a janela de edio. Para ver os resultados do programa, basta pressionar Alt+F5. A compilao normalmente feita na memria. Se desejar compilar o programa para um disco em um arquivo executvel, mude a opo DESTINATION do menu COMPILE para DISK.

Apostila de Turbo Pascal 7.0

11

CAPTULO II DADOS NO PASCAL


Este captulo tem por objetivo demonstrar ao leitor a utilizao de dados nos seus programas escritos em Pascal.

1. Manipulando Dados
Quando escrevemos nossos programas, trabalhamos com dados que ns fornecemos ao programa (literais) e dados so fornecidos ao programa atravs do usurio (variveis). No Turbo Pascal, esses dados so divididos em diversos tipos, cada qual com a sua funo especfica.

2. Variveis
O objetivo das variveis armazenar dados na memria do computador. Podemos utilizar as literais em nossos programas, mas sem as variveis no seria possvel, por exemplo, solicitar dados ao usurio para alimentar o programa. Uma varivel, no Pascal, referenciada por um identificador e, por isso, sua criao segue as regras da formao dos identificadores: (os identificadores servem para nomear procedimentos, funes, tipos de dados, etc). Os identificadores devem sublinhado/underscore (_). comear com uma letra (A..Z) ou por um sinal de

Todos os outros caracteres devem ser uma letra (A..Z), um nmero (0..9) ou um sinal de sublinhado (_). Todos os caracteres so significativos, inclusive o sinal de sublinhado. Um identificador no pode ter mais de 127 caracteres, o comprimento mximo de uma linha em Pascal ( aconselhvel utilizar no mximo 10 caracteres). O Turbo Pascal no faz diferena entre letras maisculas e minsculas. Os identificadores no podem ser palavras reservadas (nomes de comandos, procedimentos do Pascal, etc) Ver Apndice C.

DICA: aconselhvel que se defina o nome da varivel de forma que este lembre a funo assumida pela varivel no contexto do programa.

3. Tipos de Dados
Em Pascal, quando definimos uma varivel, devemos especificar o seu tipo, isto , o conjunto de valores que podem ser atribudos a estas variveis. Os tipos de dados podem ser divididos em: Tipos predefinidos, isto , que j fazem parte da prpria linguagem; Tipos definidos pelo usurio, isto , que so criados pelo prprio usurio. Os tipos predefinidos esto divididos em escalares ou simples e estruturados ou compostos.

Apostila de Turbo Pascal 7.0

12

ESCALARES Integer Byte Real Char Boolean String Word Shortint Longint Single Double Comp Extended

ESTRUTURADOS Array String Record File Text Set Pointer -

Tabela 2.3 Tipos escalares e estruturados.

3.1. O Tipo Integer O tipo integer est representado pelo conjunto dos nmeros inteiros no interv-lo 32768 a 32767. Um nmero inteiro ocupa 2 bytes na memria. Voc no poder atribuir um valor a uma varivel inteira fora da faixa definida. Caso isso acontea, o sistema detecta o erro em tempo de compilao. Entretanto, numa operao matemtica do tipo 20000 + 20000 no ser detectado nenhum erro em tempo de compilao, mas o resultado da operao 40000 ultrapassa a faixa e o mesmo no ser o esperado e sim 25536 (40000 - 65536). O Pascal dispe de uma constante predefinida, maxint, que sempre igual a 32767. Use a mesma em seus programas no lugar de 32767 sempre que desejar referir-se ao maior nmero inteiro. Os nmeros inteiros podem ser expressos em notao decimal ou em hexadecimal. Exemplos: 10=$A, A 42=$2 , etc.

3.2. O Tipo Byte O tipo byte simplesmente um subconjunto dos nmeros inteiros. A faixa coberta pelo tipo byte de 0 a 255. O tipo byte ocupa apenas 1 byte na memria. Se o valor de uma expresso ultrapassar 255, o resultado que ser atribudo varivel tipo byte ser o resto da diviso do nmero por 256, somado com 256. Exemplos: 200 + 200 + 112 = 0; 200 200 = 112.

3.3. O Tipo Real Nmero real em Pascal qualquer nmero que possua uma parte inteira e uma parte decimal. Os nmeros reais podem variar de -+ 2.9 x 10 a -+ 1.7 x 10 , mantendo uma preciso de 11 algarismos significativos. Um nmero real ocupa 6 bytes na memria. Um nmero real pode ser escrito em notao decimal (20.3, 40.34) ou em notao exponencial (2.9E+01, 3 1.22E-02 = mantissa e expoente; 2.4E03=2,4 x 10 ). Se uma varivel receber um valor que ultrapasse 1.7 x 10 , o compilador acusar o erro. Mas se o resultado de uma expresso ultrapassar o referido valor, o programa ser abortado. Se o resultado de uma -39 operao for menor ou igual a -+2.9 x 10 , o sistema assumir o valor zero.
38 -39 38

Apostila de Turbo Pascal 7.0

13

3.4. O Tipo Char O computador no dispe de nenhum meio para guardar letras e outros caracteres no numricos na memria; ele s pode guardar nmeros. Assim, foram inventados cdigos que associam um nmero diferente a cada caracter. Esses nmeros so guardados na memria do computador no lugar de letras e smbolos. Quase todos os computadores pessoais utilizam um tipo particular de cdigo, o cdigo ASCII ampliado (ASCII trata-se da abreviao de American Standard Code for Information Interchange, ou seja, Cdigo Padro Americano para Intercmbio de Informaes). Assim, por exemplo, o cdigo ASCII da letra A 65, para a letra B 66, e assim por diante. O cdigo da letra a 97, a letra b 98, e assim por diante. Pode-se observar que o cdigo da letra minscula o cdigo da letra maiscula correspondente somada ao nmero 32. At o nmero 127, o cdigo ASCII padronizado. A partir desse nmero so representados caracteres grficos, acentuados, letras gregas, etc. Estes caracteres no so padronizados e podem variar de equipamento para equipamento. Os primeiros 32 lugares na tabela ASCII, os cdigos de 0 a 31, tm um uso especial que nada tem a ver com a aparncia dos caracteres mostrados. So usados para passar informaes especiais para o computador, ou para outro computador atravs de linha telefnica ou cabos de rede, comunicao com impressoras, etc. Cdigo Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Cdigo Hexadecimal 00 01 02 03 04 05 06 07 08 09 A 0 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 A 1 1B 1C 1D 1E 1F Teclas de Controle ^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^ Nome NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Descrio Null character Start of header Start of text End of text End of transmission Enquire Acknowledge Bell Backspace Horizontal tab Line feed Vertical tab Form feed Carriage return Shift out Shift in Delete Device control 1 Device control 2 Device control 3 Device control 4 Negative acknowledge Synchronize End of text block Cancel End of medium Substitute Escape File separator Group separator Record separator Unit separator Significado Caracter nulo Incio de cabealho Incio de texto Fim de texto Fim de transmisso Caracter de consulta Confirmao Alarme ou chamada Retrocesso Tabulao horizontal Alimentao de linha Tabulao vertical Alimentao de pgina Retorno de carro Mudana para nmeros Mudana para letras Caracter de supresso Controle de dispositivo 1 Controle de dispositivo 2 Controle de dispositivo 3 Controle de dispositivo 4 Confirmao negada Sincronismo Fim de bloco de texto Cancelamento Fim de meio de dados Substituio Diferenciao Separador de arquivo Separador de grupo Separador de registro Separador de unidade

Tabela 2.4 - Caracteres de Controle. Os dados do tipo char fazem parte do conjunto de caracteres ASCII. So usados quando o programa envolve manipulao de caracteres isolados. Ocupam 1 byte na memria.

Apostila de Turbo Pascal 7.0

14

Os caracteres devem ser colocados entre apstrofos ( ), e qualquer caracter poder ser representado pelo seu cdigo ASCII em decimal, precedido por #, ou em hexadecimal, precedidos por # e $. Exemplos: #65 = A #$20= espao em branco

#27=ESC #$41=A

#32= espao em branco #$D = #13 = ^M = enter

3.5. O Tipo Boolean Os dados do tipo boolean s podem assumir um dos dois valores: true (verdadeiro) ou false (falso). O Pascal dispe de duas constantes pr-declaradas, true e false, para facilitar as operaes com dados booleanos. Esses dois valores so definidos de tal forma que false < true. Um dado boolean ocupa 1 byte na memria.

3.6. O Tipo String Uma string uma seqncia de caracteres entre dois apstrofos. Exemplo: eu sou uma string. Para representar um sinal de apstrofo dentro de uma string, basta usar dois apstrofos seguidos: O nome do cliente : O nome do cliente e: . A string mais curta a string vazia () e seu comprimento zero. O comprimento mximo de uma string em Pascal 255. Ao definir uma varivel como string preciso informar ao computador o nmero mximo de caracteres que a string pode guardar como, por exemplo, nome: string[30];. O espao alocado por uma varivel string um byte a mais que o comprimento mximo de caracteres indicado em sua definio de tipo. O byte adicional ser usado para guardar o tamanho atual da seqncia de caracteres, na forma de caracter ASCII. Este byte de comprimento est contido no elemento zero da matriz de caracteres. Utilizando a funo ORD do Pascal, que retorna a posio de um elemento numa seqncia, podemos obter o comprimento da string: Nome:=TCNICAS DE PROGRAMAO I; Write(ord(nome[S])); {vai escrever 8} As strings podem ser concatenadas ou unidas. Observe os exemplos: 20+ 20 = 2020 20 + 20 = 40 20 + 20 = 20 + 20

3.7. O Tipo Word O tipo Word trata-se de um tipo numrico inteiro, representando nmeros de 0 a 65535. Ocupa 2 bytes na memria. Disponvel apenas a partir da verso 4.0 do Turbo Pascal.

3.8. O Tipo Shortint O tipo Shortint trata-se de um tipo numrico inteiro, representando os nmeros entre 128 at 127. Ocupa 1 byte na memria. Utiliza o bit mais direita como sinalizador, se 0 positivo, se 1 somado ao valor e tornase negativo. Disponvel apenas a partir da verso 4.0 do Turbo Pascal.

3.9. O Tipo Longint O tipo Longint trata-se de um tipo numrico inteiro, representando os nmeros entre 2.147.483.648 at 2.147.483.648. Ocupa 4 bytes na memria. Utiliza o bit mais direita como sinalizador, se 0 positivo, se 1 somado ao valor e torna-se negativo. Disponvel apenas a partir da verso 4.0 do Turbo Pascal.

Apostila de Turbo Pascal 7.0

15

3.10. O Tipo Single O tipo Single trata-se de um tipo numrico real, representando os nmeros entre 1.5 X 10 at 3.4 X 10 . Ocupa 4 bytes na memria e tem de 7 a 8 dgitos significativos. Disponvel apenas a partir da verso 4.0 do Turbo Pascal e seu uso s permitido com o co-processador presente.
-45 38

3.11 O Tipo Double O tipo Double trata-se de um tipo numrico real, representando os nmeros entre 5 X 10 at 1.7 X 10 . Ocupa 8 bytes na memria e tem entre 15 e 16 dgitos significativos. Seu uso s permitido com o coprocessador 8087 presente.
-324 308

3.12. O Tipo Comp O tipo Comp trata-se de um tipo numrico, representado uma faixa de valores que variam entre 9.2 X 10 18 a 9.2 X 10 . Ocupa 8 bytes de memria e tem entre 19 a 20 dgitos significativos. S pode ser usado com o co-processador 8087 presente. Apesar de ser do tipo real, s armazena nmeros inteiros e s est disponvel a partir da verso 4.0 do Turbo Pascal.
18

3.13. O Tipo Extended O tipo Extended trata-se de um tipo numrico real, representando uma faixa de valores entre 3.4 X 10-4932 a 1.1 X 104932. Ocupa 10 bytes na memria e tem entre 19 a 20 dgitos significativos. Somente disponvel a partir da verso 4.0 do Turbo Pascal e seu uso s permitido com o co-processador presente.

4. Comando de Atribuio
Quando definimos uma varivel natural atribuirmos a ela uma informao. Uma das formas de colocar um valor dentro de uma varivel, consequentemente colocado este dado na memria do computador, atravs da atribuio direta, do valor desejado que a varivel armazena. Para isto utilizaremos o smbolo ( := (Pascal) , <- (Algoritmo) ), que significa: recebe, ou seja, a posio, de memria que uma varivel representa, receber uma informao, a qual ser armazenada no interior desta varivel. Exemplo: Program Teste; var numero: integer; begin numero:=10; end.

O Exemplo acima informa que: foi definida uma varivel com o nome de Nmero que s pode aceitar dados numricos entre -32768 a +32767 (tipo INTEGER); atribumos varivel Nmero o valor 10.

A memria se comportaria da seguinte forma, de acordo com os itens acima: Varivel Contedo - Nmero indefinido; Varivel Contedo - Nmero 10.

Apostila de Turbo Pascal 7.0

16

5. Operadores Aritmticos
Muito da manipulao de dados que ocorre na criao dos programas feita com operadores. Trs so as categorias de operadores: aritmticos, lgicos e relacionais. Chamamos de expresso a qualquer combinao de literais, constantes, identificadores de variveis, com um ou mais operadores. Se uma expresso s contm operadores aritmticos a mesma dita expresso aritmtica. Quando mais de um operador aparece numa expresso, a seqncia de clculo depende da precedncia. O operador de mais alta precedncia ser calculado primeiro. Se dois ou mais operadores tiverem o mesmo nvel de precedncia, o clculo processa da esquerda para a direita. PRECEDNCIA 1 2 2 2 2 3 3 SMBOLO * / Div Mod + NOME Menos unrio Produto Diviso real Diviso inteira Resto da diviso inteira Adio Subtrao EXEMPLO -50; -n=10, se n=10 14 * 2 = 28 25/5=5.00000000E00 5 div 2 = 2 5 mod 2 = 1 5+3=8 53=2

Tabela 2.5 Tabela de precedncia dos operadores aritmticos. OBS.: em muitos casos necessria a utilizao dos parnteses para fugir da lei da precedncia dos operadores. Exemplo: 5 + 3 * 2 = 11, porm (5 + 3) * 2 = 16.

6. Operadores Lgicos
O Pascal possui quatro operadores lgicos. Trs dos quais AND, OR e XOR so binrios, usados para combinar pares de valores lgicos. O quarto operador NOT unrio, pois modifica o operando lgico para o seu valor oposto. A False False True True B False True False True A and B False False False True A or B False True True True not A True True False False A xor B False True True False

PRECEDENCIA 1 2 3 4 5

OPERADOR - (menos unrio) Not *, /, div, mod, and +, -, or, xor =, <>, <, >, <=, >=, in

Tabela 2.6 - Precedncia dos Operadores Lgicos

OBS.: ao utilizar os operadores lgicos juntamente com os relacionais numa mesma expresso, pode ser necessrio utilizar parnteses, j que a ordem de precedncia de ambos diferente. REGRA: sempre que utilizar operadores lgicos em comparaes, separe os mesmos com parnteses. Veja o exemplo na pgina 15.

Apostila de Turbo Pascal 7.0

17

7. Operadores Relacionais
Uma relao uma comparao realizada entre valores de mesmo tipo ou tipos compatveis. Estes valores podem ser constantes, identificadores de variveis, expresses, etc. Uma operao relacional compara dois itens de dados e fornece um valor booleano como resultado da comparao. Logo a seguir encontramos os seis operadores relacionais: OPERADOR = > < >= <= <> SIGNIFICADO Igual a, mesma quantidade Maior que, acima de Menor que, abaixo de Maior ou igual a, a partir de Menor ou igual a, at Diferente de

Tabela 2.7 Operadores relacionais. Existe um operador relacional (IN) que resulta em um valor booleano. O operador IN trabalha com o tipo set (conjunto) e retorna true se o contedo de uma varivel pertencer ao conjunto descrito. Exemplo: Letra in [a, e, i, o, u] {retornar true se a letra estiver contida no conjunto} Em expresses mais elaboradas envolvendo os operadores aritmticos, relacionais e lgicos; a avaliao observa a seguinte precedncia: 1. Expresses dentro de parnteses; 2. Operador unrio menos ou negao; 3. Operador NOT; 4. Operadores multiplicativos *, /, DIV, MOD e AND; 5. Operadores aditivos +, -, OR e XOR; 6. Operadores relacionais =, <, >, <>, <=, >= e IN.

Apostila de Turbo Pascal 7.0

18

CAPTULO III CRIANDO OS PRIMEIROS PROGRAMAS


Este captulo tem por objetivo instruir o leitor na tarefa de criao dos primeiros programas em Pascal.

1. Estrutura de um Programa
Um programa em Pascal dividido em trs reas distintas: rea de cabealho; rea de definies e declaraes; rea do programa principal - instrues. De uma forma geral, a rea de cabealho e a rea de definies e declaraes so opcionais. A nica rea realmente necessria a rea de instrues que feita dentro do bloco principal do programa.

2. rea de Cabealho
No Turbo Pascal esta rea opcional. Serve apenas para nomear o programa, como o ttulo em um livro. O cabealho deve ser iniciado com a palavra reservada PROGRAM, a seguir um identificador e terminar com ponto e vrgula (;). Exemplo: Program teste;

3. rea de Definies e Declaraes


A rea das definies e declaraes est dividida em seis partes e tambm opcional: Definio de UNITS; Declarao de LABELS; Declarao de CONSTANTES; Declarao de TIPOS; Declarao de VARIVEIS; Declarao de PROCEDIMENTOS E FUNES.

3.1. Definio de Units O objetivo desta rea definir quais so as units utilizadas no seu programa. A UNIT nada mais que um conjunto de procedimentos e funes que trabalham sob um mesmo objetivo. Por exemplo, a unit Graph possui comandos para criao de desenhos, figuras, barras, entre outros; a unit Crt possui os procedimentos bsicos de entrada e sada de dados. Esta rea se inicia com a palavra reservada USES. Exemplo: uses crt;

3.2. Declarao de um Label O objetivo de um label (rtulo) marcar o destino de uma instruo goto. Na verdade, um programa planejado adequadamente no dever precisar de labels. No entanto, se voc escrever um programa que necessite usar um label, ele deve ser declarado nesta rea. Para isso, use a palavra reservada LABEL seguida da lista de rtulos vlidos, separados por vrgulas (,) e terminados por um ponto e vrgula (;). Para identificar outros rtulos podem ser usados letras e nmeros. Exemplo: label inicio,fim,erro;

Apostila de Turbo Pascal 7.0

19

3.3. Declarao de Constantes Em Turbo Pascal, constantes so utilizadas para associar um valor fixo a um identificador. A rea das constantes deve comear com a palavra reservada CONST, logo aps um identificador, o sinal de igual, o valor da constante e terminar com ponto e vrgula. Exemplo: const mnimo = 130; O Turbo Pascal possui algumas constantes pr-declaradas: CONSTANTE PI MAXINT TRUE, FALSE VALOR Contm o valor do : 3.1415926536 Contm o maior valor inteiro: 32767 Constantes do tipo boolean

3.4. Declarao de Variveis Quando se declara uma varivel em Turbo Pascal, aloca-se um espao na memria do computador, fornecendo um lugar para se colocar este dado especfico. A declarao no guarda nenhum valor no espao que foi reservado. O valor da varivel fica indefinido at que a mesma receba um valor atravs da atribuio. Todas as variveis devem ser declaradas na rea de declarao de variveis, que comea com a palavra reservada VAR. Exemplo: var salario, inss, liquido: real; nome: string; idade: byte; Como j foi mencionado, at que lhes atribua um valor, o espao na memria representado por uma varivel conter lixo da memria. Essa atribuio pode ser: Feita pelo operador de atribuio := Feita com um procedimento do Pascal para leitura de dados de dispositivos. Exemplo: taxa_inss := 11/100; {foi atribudo um valor diretamente} read(salario); {observe que aqui o valor est sendo lido, ou seja, solicitado ao usurio} inss := salario * taxa_inss; {foi atribudo o resultado de uma expresso}

4. rea do Programa Principal


Contm os comandos que definem a ao do programa: atribuio, controle de fluxo, procedures, functions, etc. Comea com a palavra reservada BEGIN e termina com outra palavra reservada END, seguida de um ponto. Exemplo: Program exemplo; uses crt; const desc = 9/100; {ou seja, 9% -tambm poderamos ter escrito 0.09} var prod: string; preco: real; begin clrscr; {procedimento para limpar a tela, est na unit CRT} write (Entre com o produto: ); readln (prod); write (Seu preo unitrio: ); readln (preco); writeln; Apostila de Turbo Pascal 7.0 20

write (Preo de venda: R$ , preco*(1-desc):10:2); readkey; {l um caracter do teclado, um efeito pausa} end.

5. Procedimentos de Entrada e Sada


Os procedimentos de entrada e sada permitem uma maior interao com o usurio, permitindo no s a visualizao de informaes na tela, bem como a entrada de dados pelo teclado. Os procedimentos de entrada do Pascal so:READ e READLN, ao passo que os procedimentos de sada so WRITE e WRITELN.

5.1. Procedimento READ Procedimento para entrada de dados. Seu formato : read (dispositivo, lista de variveis); COMANDO read (input,var); read (arq,var); readln (var); EFEITO Leitura feita atravs do dispositivo de entrada padro (keyboard). Equivale a read(var);. Aps o ENTER, o cursor permanece na mesma linha. Sendo arq uma varivel do tipo arquivo, a leitura dos dados ser feita em disco no arquivo assinalado por arq. L a varivel var e aps o ENTER o cursor se desloca para o incio da linha seguinte. Tabela 3.1 - Tabela de exemplos. Para ler apenas um caracter do teclado, sem pressionar a tecla ENTER, use a funo READKEY. Exemplo: uses crt; var tecla: char; begin tecla := readkey; write(tecla); end.

5.2. Procedimento WRITE Procedimento para sada de dados. Seu formato geral : write (dispositivo, lista de variveis); COMANDO write(output,var); writeln(var); write(lst,var); write(arq,var); EFEITO Escrita feita atravs do dispositivo de sada padro (vdeo). Equivale a write(var);. Aps escrever o contedo de var, o cursor permanece na mesma linha. Escreve o contedo de var e avana o cursor para o incio da linha seguinte. Direciona o contedo de var para a impressora. Se arq uma varivel do tipo arquivo, a sada direcionada para o arquivo em disco assinalado por arq. Tabela 3.2 - Tabela de Exemplos. O procedimento write aceita parmetros para a formatao da sada. O formato completo : write(var:m,d) onde: M a mscara que determina o tamanho do campo (incluindo ponto e casas decimais). Mximo de 255. D o nmero de casas decimais (para variveis do tipo real). Mximo de 24.

Apostila de Turbo Pascal 7.0

21

write (1200*10/100); write (1200*10/100:7:2)

1.200000000000E+02 120.00 1 2 0 . 0 0

(sada no formatada) (sada formatada)

Observaes: O comando writeln sem parmetros apenas imprime uma linha em branco e salta para a linha seguinte. O comando readln sem parmetros funciona como um comando de espera dando uma pausa at que o usurio pressione ENTER.

6. Procedimentos de Controle de Vdeo


6.1. Textmode No modo texto, temos 25 linhas disponveis com 40 ou 80 colunas. 1,1 80,1

Coordenadas da tela

1,25 A coordenada x cresce para a direita e a coordenada y para baixo.

80,25

O procedimento que controla o modo texto o textmode e pode ser chamado dos seguintes modos: COMANDO textmode textmode(bw40); textmode(c40); textmode(bw80); textmode(c80); EFEITO Limpa o vdeo, mas no muda a seleo atual. Coloca o vdeo em modo 40x25 em preto e branco. Bw40 uma constante inteira predefinida que tem o valor 0. Coloca o vdeo em modo 40x25 a cores. C40 uma constante inteira predefinida que tem valor 1. Coloca o vdeo em modo 80x25 em preto e branco. Bw80 uma constante inteira predefinida que tem o valor 2. Coloca o vdeo em modo 80x25 a cores. C80 uma constante inteira predefinida que tem o valor 3.

Nos modos colorido de texto, cada caracter pode ter uma das 16 cores possveis, controladas pelo procedimento TextColor, e tambm uma das possveis cores de fundo, controladas pelo procedimento TextBackground. As cores so numeradas com valores de 0 a 15, porm o Turbo Pascal possui 16 constantes predefinidas correspondentes s cores. Observe a tabela a seguir: CONSTANTE 0 black 1 blue 2 green 3 cyan 4 red 5 magenta COR Preto Azul Verde Ciano Vermelho Magenta CONSTANTE 6 - brown 7 - lightgray 8 - darkgray 9 - lightblue 10 - lightgreen 11 lightcyan COR Marrom Cinza claro Cinza escuro Azul claro Verde claro Ciano claro CONSTANTE 12 lightred 13 lightmagenta 14 yellow 15 white COR Vermelho claro Magenta claro Amarelo Branco

Tabela 3.3 Tabela de cores.

Apostila de Turbo Pascal 7.0

22

6.2. TextColor Esse procedimento seleciona a cor que dever ser usada na representao dos prximos caracteres no vdeo. A sintaxe : textcolor(cor); A cor um inteiro na faixa [0..15] podendo ser uma das constantes da tabela anterior. Caso se deseje que o caracter fique piscando, deve-se somar 16 ao valor da cor, ou somar constante outra constante chamada blink. textcolor (2+16); textcolor (red + blink); {verde piscando} {vermelho piscando}

6.3. Textbackground Esse procedimento ajusta a cor de fundo a ser utilizada no modo texto colorido. Sua sintaxe: textbackground(cor); A cor um inteiro na faixa [0..7]. textcolor(15); textbackground(0);

{letra branca com fundo preto}

6.4. Clrscr O procedimento CLRSCR (clear screen) limpa o vdeo e coloca o cursor no canto esquerdo do mesmo. Sintaxe: Clrscr;

6.5. Gotoxy(x,y) O procedimento gotoxy permite colocar caracteres de texto em qualquer lugar da tela. Seu objetivo nica e exclusivamente posicionar o cursor numa coordenada informada atravs dos parmetros X e Y. Sintaxe: gotoxy(x,y); COMANDO gotoxy(1,1); gotoxy(40,25); gotoxy(80,12); EFEITO Coloca o cursor no canto superior esquerdo da tela. Coloca o cursor no meio da ltima linha do vdeo. Coloca o cursor no final da linha do meio do vdeo.

Exemplo: Program calcula_resistncia_eltrica; uses crt; const titulo = CLCULO DA RESISTNCIA ELTRICA; unidade = #32#234; {espao junto com o smbolo da resistncia, o ohm - } var corrente, ddp, R: real; begin textmode(c40); textcolor(0); textbackground(7); gotoxy(4,1); write(titulo); textcolor(15); textbackground(0); gotoxy(6,7); write(U); gotoxy(1,8); write(R=___=___=); gotoxy(6,9); write(l); Apostila de Turbo Pascal 7.0 23

gotoxy(12,7); read(ddp); gotoxy(12,9); read(corrente); r := ddp/corrente; gotoxy(20,8); write(R:7:1, +unidade); readkey; end.

Apostila de Turbo Pascal 7.0

24

CAPTULO IV ESTRUTURAS DE CONDIO


Este captulo tem por objetivo orientar o leitor no que diz respeito tomada de deciso com base nas estruturas de condio do Turbo Pascal.

1. Deciso
Uma caracterstica peculiar do computador a capacidade de tomar decises. Num programa interativo freqentemente temos que tomar decises, escolher entre os percursos de ao disponveis. O Turbo Pascal fornece duas estruturas de controle para a tomada de decises: a estrutura IF e a estrutura CASE.

2. A Estrutura IF
Uma estrutura de deciso IF seleciona um entre dois comandos (simples ou compostos) para a execuo. A estrutura completa consiste em: COMANDO SIMPLES IF <condio> THEN Comando1 ELSE Comando2; COMANDO COMPOSTO IF <condio> THEN Begin Comando1; Comando2; End ELSE Begin Comando3; Comando4; End;

Observe que no colocamos um ponto e vrgula aps o comando 1 (antes do ELSE). O Pascal interpretaria o ponto e vrgula como o fim do comando IF (uma vez que o ELSE opcional na estrutura) e a clusula ELSE no seria reconhecida, resultando um erro em tempo de compilao. Exemplo: Program e_par_ou_impar; uses crt; var n: integer; begin clrscr; read(n); if odd(n) then write ( mpar) else write ( par); readkey; end. A clusula ELSE da estrutura IF opcional, ento a forma simples a seguinte: Exemplo: Program e_par_ou_impar; {o mesmo programa anterior, porm sem ELSE} uses crt; var n:integer; msg: string; Apostila de Turbo Pascal 7.0 25

begin clrscr; read(n); msg := par; if odd(n) then msg := mpar; write (msg); readkey; end.

2.1. Aninhamento de Estrutura s IF As estruturas IF podem estar aninhadas, ou seja, uma dentro da outra. O aninhamento de estruturas pode resultar em seqncias de deciso complexas e poderosas. Veja o exemplo: Exemplo: Program maior_numero; uses crt; var a,b,c: integer; begin clrscr; write (Entre com o primeiro nmero: ) ; write (Entre com o segundo nmero: ) ; write (Entre com o terceiro nmero: ) ; if (a>b) and (a>c) then write (O maior : , a) else if (b>c) then write (O maior : , b) else write (O maior : , c); readkey; end.

readln(a); readln(b); readln(c);

Observe que ao utilizar operadores lgicos e relacionais, separamos as comparaes com parnteses. Isto evitar erro e tipos misturados (boolean com integer).

Sem dvida alguma a endentao um fator importante no aninhamento, pois facilita a compreenso do que est escrito. Antes do ELSE no se use ponto e vrgula, lembre-se disso. Caso tenhamos vrios IFs aninhados, a clusula ELSE, independente de onde estiver, pertence ao ltimo comando IF aberto sem ELSE.

3. A Estrutura CASE
Como a estrutura IF, a CASE divide uma seqncia de possveis aes em sees de cdigo individual. Para a execuo de um determinado comando CASE, somente uma dessas sees ser selecionada. A seleo est baseada numa srie de testes de comparao, sendo todos executados sobre um valor desejado. A estrutura CASE tambm chamada de seleo mltipla.

Apostila de Turbo Pascal 7.0

26

COMANDO SIMPLES CASE valor OF Opo1: comando1; Opo2: comando2; OpoN: comando n; ELSE comandos; END;

COMANDO COMPOSTO CASE valor OF Opo1: Begin comando1; comando2; End; ELSE Begin comandos; End; END;

Para executar a deciso nesta estrutura, o Pascal comea por avaliar a expresso de seletor na clusula CASE OF. Esse valor deve pertencer a um tipo ordinal (real e string no so permitidos) predefinido ou definido pelo usurio. O seletor se torna alvo das comparaes com cada valor subseqente. Numa execuo, o Pascal avalia cada comparao, seleciona o primeiro valor que corresponde com o seletor e executa o(s) comando(s) especificado(s) aps os dois pontos. No ser executado mais nenhum outro comando do CASE. Voc pode expressar valor em qualquer uma das formas a seguir: Uma constante literal ou nomeada: 22 comando; F comando; Uma lista de constantes separadas por vrgulas: a, e, i , o, u, comando; 2, 4, 6, comando; uma sub-faixa (subrange) de constantes: 1..10 comando; a..z comando;

Exemplo: Program exemplo_case; uses crt; var tecla: char; begin clrscr; write(Entre com um caracter: ); tecla := readkey; case tecla of a..z: writeln(O caracter alfabtico minsculo); A..Z: writeln(O caracter alfabtico maisculo); 0..9: writeln(O caracter numrico); #0..#31: writeln(O caracter um caracter de controle ASCII); else writeln(O caracter : , tecla); end; readkey; end. Exemplo: Program meses; uses crt; var mes:byte; begin clrscr; write(Entre com o nmero do ms: ); Apostila de Turbo Pascal 7.0

readln(mes); 27

case mes of 01: writeln(Janeiro); 02: writeln(Fevereiro); 03: writeln(Maro); 04: writeln(Abril); 05: writeln(Maio); 06: writeln(Junho); 07: writeln(Julho); 08: writeln(Agosto); 09: writeln(Setembro); 10: writeln(Outubro); 12: writeln(Novembro); 12: writeln(Dezembro); else writeln(Nmero de ms invlido !); end; readkey; end.

Apostila de Turbo Pascal 7.0

28

CAPTULO 5 ESTRUTURAS DE REPETIO


Este captulo tem por objetivo instruir o leitor na utilizao de estruturas de repetio nos programas feitos em Pascal.

1. Introduo
A repetio a essncia de muitas aplicaes em computadores. Um loop uma estrutura de controle que governa os processos de repetio num programa. Como as estruturas de deciso, o loop delimita um bloco de comandos para processamento especial. O Turbo Pascal fornece trs estruturas de repetio diferentes, cada qual com um esquema diferente para o controle do processo de iterao (repetio): 1. O loop FOR que especifica a priori o nmero de iteraes; 2. O loop WHILE que expressa uma condio sobre a qual o loop continua. As iteraes terminam quando a condio se torna falsa; 3. O loop REPEAT tambm contm uma expresso condicional de controle, mas neste caso o loop continua at que a condio se torne verdadeira (inverso do WHILE).

2. Estrutura de Repetio FOR


O loop FOR , talvez, a estrutura de repetio mais familiar e comumente usada. Pode ser usado com TO, onde a varivel de controle assume valores crescentes e com DOWNTO, onde a varivel assume valores decrescentes. COMANDO SIMPLES FOR var:=inicio TO fim DO comando; FOR var:=inicio DOWNTO fim DO comando; COMANDO COMPOSTO FOR var:=inicio TO fim DO begin comando1; comando2; end;

No loop FOR que usa a clusula TO o valor de incio deve ser menor que o valor de fim. Se isso no acontecer o loop no produzir nenhum efeito. O mesmo vlido para DOWNTO, s que invertido. Exemplo: Program tabela_razes_quadrados_e_quadrados; uses crt; var num: byte; begin clrscr; writeln(Nmero Quadrado Raiz Quadrada); for num := 0 to 20 do writeln(num:6, ,sqrt(num):8, ,sqrt(num):13:2); readkey; end. Exemplo: Program notas_de_alunos; uses crt; var x, y: byte; soma, nota, media: real; nome: string; begin Apostila de Turbo Pascal 7.0 29

for x := 1 to 10 do begin write(Entre com o nome do aluno: ); readln (nome); soma := 0; for y:= 1 to 4 do begin write(Sua nota,y,:); readln(nota); soma := soma + nota; end; {do for y} media := soma / 4; writeln (Sua media : ,media:6:1); readkey; end; {do for x} end. {do programa principal} Exemplo: Program alfabeto; uses crt; var tecla: char; begin clrscr; writeln(Alfabeto Completo); for tecla:=a to z do write(tecla:8); readkey; end. Ao terminar a execuo do loop FOR, a varivel de controle permanece com o ltimo valor da seqncia.

2.1. Aninhamento de Estruturas FOR Em programao de computadores, podemos colocar um loop dentro do outro, para formar loops aninhados. O resultado um padro complexo e poderoso de aes repetitivas. Exemplo: Program tabuada; uses crt; var a,b: byte; begin clrscr; writeln(Tabela de Tabuada de Adio); for a:= 1 to 10 do write(a:8); for a:= 1 to 10 do for b := 1 to 10 do {loops FOR aninhados} write(b:2,+,a:2,=,a+b:2); readkey; end.

3. Estrutura de Repetio WHILE


Diferentemente do loop FOR, WHILE depende de uma condio expressa para determinar a durao do processo de repetio.

Apostila de Turbo Pascal 7.0

30

Num loop WHILE a condio vem no incio do mesmo e as iteraes continuam enquanto a condio verdadeira. Dizemos que o loop WHILE testa a condio no incio se ela for falsa no primeiro teste, no resultar nenhuma iterao. COMANDO SIMPLES WHILE condio DO comando; COMANDO COMPOSTO WHILE condio DO Begin comandos; End;

A condio uma expresso que o Pascal avalia como true ou false. A repetio continua enquanto a condio for true. Normalmente, em algum ponto, a ao dentro do loop comuta a condio para false e o loop termina. Se a condio no for alterada para false teremos um loop infinito. Exemplo: Program exemplo_while; uses crt; var n: byte; begin clrscr; n := 0; {valor inicial de n} while n<= 20 do begin write(n:8); n := n + 1; {contador} end; readkey; end. Exemplo: Program notas_alunos_escola; uses crt; var n: integer; soma, nota: real; begin clrscr; writeln(Para encerrar a entrada de notas, digite - 1); writeln; n := 1; soma := 0; write (Nota,n,:); readln(nota); while nota <> -1 do begin soma := soma + nota; n:= n + 1; write(Nota,n,:); readln(nota); end; if n>1 then write(A media de notas : ,soma/(n-1):8:2) else write(Nehuma nota digitada); readkey; end.

4. Estrutura de Repetio REPEAT UNTIL


A declarao REPEAT faz com que comandos sejam executados repetidas vezes, at que certa condio seja satisfeita. Observe que na forma composta da declarao, as palavras BEGIN e END no so usadas Apostila de Turbo Pascal 7.0 31

porque as palavras reservadas REPEAT e UNTIL servem como delimitadores para os comandos dentro do loop. COMANDO SIMPLES E COMPOSTO REPEAT comando1; comando2; comandoN; UNTIL condio;

Como a condio verificada no final do loop, todo loop REPEAT UNTIL executado pelo menos uma vez. Se a condio nunca assumir o valor true, o loop s para de ser executado quando o programa interrompido manualmente (Ctrl+C ou Ctrl+Break). Por esse motivo, dentro do loop deve ter um comando que tome a condio verdadeira pelo menos uma vez. Exemplo: Program notas_alunos_escola; uses crt; var n: integer; soma, nota: real; begin clrscr; n := 1; soma := 0; writeln(Para encerrar a entrada de notas, digite - 1); writeln; repeat write (Nota,n,:); readln(nota); soma := soma + nota; n:= n + 1; until nota = -1; if n>2 then write(A media de notas : ,(soma+1)/(n-2):8:2) else write(Nehuma nota digitada); readkey; end.

Caso voc entre num loop sem fim devido a algum erro de programao, pressione Ctrl+Break para abortar a execuo do seu programa. O loop sem fim ocorre quando voc usa um WHILE ou REPEAT com condies cujo seu valor booleano no se altera, ou quando no FOR, o valor da varivel de controle constantemente alterado e no consegue chegar no seu valor final.

Apostila de Turbo Pascal 7.0

32

CAPTULO VI FUNES E PROCEDIMENTOS PREDEFINIDOS


Este captulo tem por objetivo demonstrar ao leitor a utilizao de funes e procedimentos predefinidos da linguagem Pascal.

1. Funes e Procedimentos Matemticos


1.1. EXP(num) A funo EXP devolver o exponencial de um num, que ser e , onde e a base dos logaritmos neperianos e vale aproximadamente 2.718282. A funo EXP sempre devolver um valor real. Exemplo: 2 write(exp(2)); {7.3890560989E00, o mesmo que e }
num

1.2. LN(num) A funo logartmica LN devolver o logaritmo natural ou neperiano do parmetro entre parnteses, na forma de um nmero real. O parmetro dever ser maior que zero. Exemplos: write(ln(2)); {6.9314718056E-01, o mesmo que loge2} 2 write(exp()2*ln(5))); {2.50000000000E+01, o mesmo que 5 }

1.3. SQR(num) A funo SQR devolver o quadrado do seu parmetro, que poder ser um nmero inteiro ou real. O tipo do 2 resultado ser o mesmo tipo de parmetro. Exemplo: write(sqr(9)); {81, o mesmo que 9 }

1.4. SQRT(num) A funo SQRT devolver a raiz quadrada do seu parmetro, que poder ser integer ou real. Exemplo: write(sqrt(16)); {4.0000000000E00, o mesmo que

16 }

1.5. ABS(num) A funo ABS devolver o mdulo do parmetro informado, que pode ser inteiro ou real. O tipo do resultado ser o mesmo tipo do parmetro. Exemplo: write(abs(-150)); {150}

1.6. INT(num) A funo INT devolver a parte inteira do nmero informado. O tipo do resultado sempre real. Exemplo: write(int(-94.34)); {-9.40000000000E+C1, o mesmo que 94.00}

1.7. TRUNC(num) A funo TRUNC devolver a parte inteira do nmero informado, sendo o parmetro do tipo real, mas o resultado ser inteiro. Exemplo: write(trunc(-94.34)); {-94}

1.8. ROUND(num) A funo ROUND devolver a parte inteira do nmero informado, porm fazendo o arredondamento. Exemplo: write(round(-94.84)); {95} write(round(1.5); {2}

Apostila de Turbo Pascal 7.0

33

1.9. FRAC(num) A funo FRAC devolver a parte fracionria do nmero informado. O resultado ser sempre real. Exemplo: write(frac(-2.34)); {-3.40000000000E-01, o mesmo que 0.34}

1.10. SIN(num) A funo SIN devolver o valor do seno do ngulo em radianos informado. O resultado ser real. Exemplo: write(sin(pi):5:2); {seno rad = 0.00} 0 write(sin(30*pi/180):5:2); {seno 30 = 0.50}

1.11. COS(num) A funo COS devolver o valor do coseno do ngulo em radianos informado. O resultado ser real. Exemplo: write(cos(pi):5:2); {cos rad = -1.00} 0 write(cos(60*pi/180):5:2); {cos 60 = 0.50} Sen 30 = cos 60 , pois so ngulos complementares (somados resulta em 90 ) O Pascal no possui a funo tan para calcular a tangente, porm podemos chegar neste resultado atravs de sin(ang)/cos(ang). Sin e cos trabalham, com ngulos em radianos, porm para trabalhar com ngulos em graus basta multiplicar o valor em graus pela constante PI do Pascal e dividir por 180.
0 0 0

1.12. VAL(atr,num,code) O procedimento val tentar converter a string informada em NUM valor numrico, seja real ou integer. Caso no seja possvel, a varivel inteira CODE retornar a posio de erro encontrada. Exemplo: a val(str_idade,val_idade,code); {exemplo, se str_idade tiver 12 , code ter 3} write(Nmero de dias: ,val_idade*365); {se no houver erro, code ter 0}

1.13. STR(num,str) O procedimento STR converter o valor numrico informado em uma string. Exemplo: str(val_idade,str_idade); write(Sua idade: +str_idade);

2. Funes e Procedimentos Booleanos


2.1. Keypressed A funo Keypressed retornar true caso haja alguma informao no buffer do teclado. Caso contrario, retornar false. Exemplo: repeat until keypressed; {dar uma pausa no programa at que se pressione algo}

2.2. ODD(num) A funo ODD retornar true se o valor informado for mpar (inteiro). Caso contrrio, retornar false. Exemplo: if odd(num) then write( mpar);

Apostila de Turbo Pascal 7.0

34

3. Funes e Procedimentos Ordinais


3.1. INC(num, val) O procedimento INC ir incrementar o nmero informado em 1 (um), caso o segundo parmetro no seja informado. Se o mesmo for informado, o incremento ser de seu valor. Exemplo: inc(x); {o mesmo que x:=x+1;} inc(y,5); {o mesmo que y:=y+5;}

3.2. DEC(num,val) O procedimento DEC ir decrementar o nmero informado em 1 (um), caso o segundo parmetro no seja informado. Se o mesmo for informado, o decremento ser de seu valor. Exemplo: dec(x); {o mesmo que x:=x-1;} dec(y,5); {o mesmo que y:=y-5;}

3.3. SUCC(num) A funo SUCC retornar o sucessor do nmero informado. Exemplo: write(succ(10)); {mostrar 11}

3.4. PRED(num) A funo PRED retornar o antecessor do nmero informado. Exemplo: write(pred(10)); {mostrar 9}

3.5. ORD(par) A funo ORD retornar a ordem ou posio do parmetro informado na lista ou conjunto que ele faz parte. Esse parmetro pode ser um elemento de um tipo definido pelo usurio, ou um nmero, ou um caracter. Neste caso, mostrar a ordem de um caracter mostrar seu cdigo ASCII em decimal. Exemplo: write(ord(a),#32,ord(A)); {mostrar 97 65, os respectivos cdigos ASCII} uses crt; var i: char; begin clrscr; for I:=#0 to #255 do write(Cord: ,ord(i):3,Carac: ,I, ); readkey; end.

4. Funes e Procedimentos de Caracter


4.1. UPCASE(char) A funo UPCASE retornar o caracter informado em formato maisculo. Caso o caracter informado no seja alfabtico, o mesmo ser retornado como foi informado. Exemplo: write(upcase(a)); {mostrar A} {Obs.: para converter um carcter em maisculo, basta diminuir 32 de seu cdigo ASCII, veja:} write(letra); {a} dec(letra,32); write(letra); {A}

Apostila de Turbo Pascal 7.0

35

4.2. CHR(code) A funo CHR retornar o caracter correspondente ao cdigo ASCII informado. Exemplo: write(chr(97)); {mostrar a}

4.3. READKEY A funo READKEY retornar o caracter (tipo char) digitado pelo usurio, sem mostr-lo na tela. Esta funo provoca uma parada na execuo do programa, esperando at que o usurio pressione uma tecla. Exemplo: write(readkey); {aps o usurio digitar, a informao ir aparecer na tela}

5. Funes e Procedimentos de String


5.1. INSERT(str,str_destino,pos_inicio) O procedimento INSERT ir inserir a string de primeiro parmetro na string de segundo parmetro, a partir da posio informada no terceiro parmetro. Somente o segundo parmetro ser alterado. Exemplo: msg := O Brasil foi penta!; adic := no#32; insert(adic,msg,10); write(msg); {O Brasil no foi penta!}

5.2. DELETE(str,pos_inicio,quant) O procedimento DELETE ir eliminar uma string interna a outra string. O primeiro parmetro a string, o segundo a posio inicial e o terceiro e ltimo a quantidade de caracteres a remover. Somente o primeiro parmetro ser alterado. Exemplo: msg := O Brasil no foi penta!; delete(msg,10,4); write(msg); {O Brasil foi penta!}

5.3. CONCAT(str1,str2,...,strN) A funo CONCAT retornar a concatenao ou unio de todas as strings informadas como parmetros. O resultado da concatenao no pode ultrapassar os 255 caracteres permitidos. Utilize o operador + ao invs de CONCAT, pois + mais veloz. Exemplo: msg1:=Linguagem; msg2:=#32; msg3:=Pascal; write(concat(msg1,msg2,msg3)); {Linguagem Pascal}

5.4. COPY(str,pos_inicio,quant) A funo COPY retornar uma substring a partir de uma string original. A string original o primeiro parmetro, a posio inicial de cpia o segundo e a quantidade de caracteres a serem copiados o terceiro. Exemplo: msg := A Linguagem Pascal; write(copy(msg,13,6)); {Pascal}

5.5. LENGTH(str) A funo LENGTH retornar o comprimento da string, ou seja, seu nmero de caracteres. Exemplo: msg := A Linguagem Pascal; write(length(msg),#32,pos(msg[0])); {1919 = so commandos equivalentes}

Apostila de Turbo Pascal 7.0

36

5.6. POS(str_proc,str) A funo POS retornar a posio da string de primeiro parmetro na string de segundo parmetro. Caso a mesma no exista, ser retornado o valor 0 (zero). Exemplo: msg := A Linguagem Pascal; a := Delphi; b := Pascal; write(pos(a,msg),#32,pos(b,msg)); {0 13}

6. Funes e Procedimentos Diversos


6.1. CLREOL O procedimento CLREOL limpar parte da tela apenas da posio do cursor at o final da mesma linha. Exemplo: for i := 1 to 10 do begin write(Digite a nota: ); clreol; read(nota); end;

6.2. DELLINE O procedimento DELLINE limpar toda a linha onde estiver o cursor, sem mov-lo. Exemplo: gotoxy(); delline;

6.3. INSLINE O procedimento INSLINE ir inserir uma linha onde estiver o cursor, sem mov-lo. Todos os dados que estiverem abaixo da posio do cursor sero deslocados para baixo. Caso se queira inserir mais de uma linha, basta colocar a procedure num loop for. Exemplo: for x := 1 to 10 do insline; {ir inserir10 linhas a partir da posio do cursor}

6.4. SOUND (freq) O procedimento SOUND ir ativar o auto-falante do micro, bastando apenas informar no parmetro a freqncia do som desejado. Normalmente utiliza-se esse procedimento com os procedimentos delay e nosound, j que sound sozinho ir ativar o som e o mesmo ficar tocando o tempo todo. Exemplo: sound(200);

6.5. NOSOUND O procedimento NOSOUND ir desligar o som do auto-falante do micro. Exemplo: nosound;

6.6. DELAY(ms) O procedimento DELAY ir dar uma pausa na execuo do programa, s que diferentemente dos procedimentos j citados, essa pausa se dar por um tempo informado no parmetro em milisegundos (10 3 s). Exemplo: sound(240); OBS.: O tempo em milisegundos no exato e sim aproximado. delay(1000); {equivale a 1s} nosound;

Apostila de Turbo Pascal 7.0

37

6.7. RANDOM(num) A funo RANDOM retornar um valor randmico ou aleatrio a partir do nmero informado. Esse nmero randmico ser um nmero qualquer na faixa de 0<= < num. Caso no seja informado um nmero, o valor randmico estar na faixa 0<= < 1. Normalmente esta funo utilizada com o procedimento randomize. Exemplo: random(300); {atravs de frmulas internas, ser gerado um nmero entre 0 e 300}

6.8. RANDOMIZE O procedimento RANDOMIZE ir fazer apenas um pequeno diferencial no uso da funo RANDOM. Toda vez que se utiliza RANDOM, o valor inicial das frmulas o mesmo. Portanto, os valores randmicos sempre sero os mesmos. Para que isto no acontea, basta utilizar o procedimento RANDOMIZE, o mesmo ir fazer com que o valor inicial das frmulas de randomizao seja baseado na hora do sistema, o que sabemos que muda constantemente. Exemplo: randomize; repeat write(random(500):8); delay(50); until keypressed;

6.9. WHEREX A funo WHEREX retornar a posio horizontal (abscissa) do cursor na tela (valor coluna). Exemplo: x := wherex; y := wherey; gotoxy(x+10,y); write(teste);

6.10. WHEREY A funo WHEREY retornar a posio vertical (ordenada) do cursor na tela (valor linha). Exemplo: x := wherex; y := wherey; gotoxy(x,y+1); write(teste);

6.11. EXIT O procedimento EXIT ir fazer com que a execuo do programa saia do procedimento atua e v para o seu chamador. Caso o procedimento atual seja o programa principal, exit terminar a execuo do programa. Exemplo 1: if tecla=#27 then exit; { Pressionou ESC, fim } Exemplo 2: uses crt,graph; var i,driver,modo,X1,X2,Y1,Y2: integer; begin detectGraph(Driver,Modo); initGraph(Driver,Modo,d:\tpascal7\bgi); repeat x1 := random(getMaxX); y1 := random(getMaxY); x2 := random(getMaxX-X1)+X1; y2 := random(getMaxY -Y1)+Y1; setColor(random(15)); rectangle(X1,Y1,X2,Y2); until keypressed; closeGraph; end. Apostila de Turbo Pascal 7.0 38

CAPTULO VII UNITS


Este captulo tem por objetivo orientar o leitor sobre as units disponveis no Turbo Pascal.

1. Definio
As UNITS so rotinas compiladas separadamente do programa principal. O conceito de UNIT foi incorporado ao Turbo Pascal a aprtir da verso 4.0 e as que se encontram disponveis atualmente so:

1.1. System Esta a nica unidade que pode ser utilizada sem ser citada. Nela est contida a maior parte das rotinas padro do Pascal.

1.2. Crt Nesta unidade est contida a maioria das rotinas e variveis de vdeo e de gerao de som, porm, alm destas rotinas esto disponveis algumas constantes e variveis.

1.3. Dos Esta unidade responsvel pela execuo das rotinas que envolvem o sistema operacional - DOS. Com ela torna-se fcil a utilizao da maioria dos procedimentosa e controles de baixo nvel.

1.4. Graph Esta unidade responsvel pelo suporte grfico do Turbo. uma biblioteca grfica com mais de 50 rotinas, para a utilizao de alguns arquivos externos, sendo estes arquivos grficos (.BGI) ou fontes (.CHR). No modo grfico deixamos de ter linhas e colunas e passamos a ter pontos nas coordenadas X e Y, que podem ter diversas combinaes de acordo com o hardaware. Possui uma grande quantidade de rotinas grficas bastante poderosas, tem suporte para diversos tipos de vdeo e bastante rpida.

1.5. Printer Esta unidade tem apenas a funo de definir LST como sendo um arquivo texto, j direcionado para a impressora. Operao que pode ser feita pelo usurio sem muito esforo.

1.6. Overlay Nesta unidade, podemos gerenciar as atividades de overlays de um programa. O processo de overlay nada mais do que se aproveitar uma mesma rea de memria para vrias rotinas diferentes. Com este procedimento podemos diminuir consideravelmente a memria requerida para execuo de um programa. As partes geradas pelo Turbo Pascal como overlay tm extenso .OVR. Em suma, esta unidade permite a gerao de unidades para ocuparem um mesmo espao em memria. S est disponvel a partir da verso 5.0 do Turbo.

Para a utilizao de uma ou mais unidades, necessrio o uso da declarao USES <nome_unidade>, com exceo apenas para a Unit SYSTEM.

Apostila de Turbo Pascal 7.0

39

2. Criando Units
As units foram criadas para facilitar a construo de programas, pois eliminam a necessidade de duplicao de cdigo, uma vez que blocos de comandos usados repetidamente podem ser transformados em subrotinas. Este conceito se aplica muito bem para apenas um algoritmo / programa, mas imagine que voc necessite elaborar dois sistemas: U m para cadastro de clientes de uma loja qualquer e outro para o cadastro de alunos de um colgio. Os dois sistemas sero totalmente diferentes na funo que realizam, mas podero ter sub-rotinas idnticas (genricas) como, por exemplo, sub-rotinas que manipulam a tela, sub-rotinas para programar a impressora, sub-rotinas para armazenar e recuperar informaes no disco, sub-rotinas para gerenciar memria do computador etc. Pelo conhecimento visto at agora, quando da construo destes sistemas, ou outros no futuro, seria necessrio repetir a digitao destas mesmas sub-rotinas tantas vezes quantos forem os sistemas a serem construdos. Atravs do uso de sub-rotinas dentro dos programas, podemos compartilhar blocos de comandos, facilitando assim a construo de um sistema. Mas quando se trata de elaborar vrios sistemas, o uso de sub-rotinas no o bastante, pois precisam tambm compartilhar sub-rotinas genricas entre sistemas diferentes. Pensando nisto, foi criado um novo conceito de programao, onde podemos construir um tipo especial de programa onde so definidos no apenas sub-rotinas, mas tambm variveis, constantes e tipos de dados que podem ser usados no apenas por um programa, mas sim por diversos programas diferentes. A este exemplo de programao deu-se o nome de programao modular e a este programa especial deu-se o nome de mdulo. O Pascal d a este modo o nome de UNIT e a sintaxe para a sua construo a seguinte: UNIT <Nome da Unit>; INTERFACE USES <lista de UNITs importadas> < definio de variveis, constantes e tipos exportados> <cabealho das sub-Rotinas exportadas> IMPLEMENTATION USES <lista de UNITs importadas privativas ao mdulo> <definio de variveis, constantes e tipos internos a UNIT> <sub-Rotinas internas a UNITs> <corpo das sub-Rotinas exportadas> BEGIN <Comandos a serem executados na ativao da Unit> END.

Observaes: 1 - A seo conhecida por INTERFACE define todas as sub-rotinas, variveis, constantes e tipos de dados que so exportados, ou sejam, so visveis em outros programas. 2 - Os tipos de dados, variveis e constantes definidos na seo IMPLEMENTATION sero visveis somente dentro da UNIT, portanto no sendo exportados. 3 - As sub-rotinas definidas na seo IMPLEMENTATION e que no tenham o seu cabealho definido na seo INTERFACE sero internas a UNIT, no sendo desta forma exportadas. 4 - Para usar as sub-rotinas, variveis, constantes e tipos de dados definidos em outras UNITs basta utilizar a palavra reservada USES seguido da relao de nomes das UNITs desejadas.

Apostila de Turbo Pascal 7.0

40

Exemplo: Construir uma UNIT que contenha uma sub-rotina para escrever uma STRING qualquer em uma determinada linha e coluna na tela do computador. UNIT tela; INTERFACE PROCEDURE Escreve_Str( linha, coluna : BYTE; Texto : STRING); IMPLEMENTATION USES CRT; PROCEDURE Escreve_Str( linha, coluna : BYTE; texto : STRING); BEGIN GOTOXY(coluna, linha); WRITE(texto); END; END. Como complementao do exemplo anterior, vamos construir um pequeno programa que use a sub-rotina definida acima: Program Testa_Unit; uses Tela; begin Escreve_Str(10, 10, Teste de Unit); end;

Apostila de Turbo Pascal 7.0

41

CAPTULO VIII A UNIT CRT


Este captulo tem por objetivo orientar o leitor na utilizao da unit CRT do Turbo Pascal.

1. Unit CRT
A unit CRT como j foi dito em captulos anteriores possui rotinas que favorecem as tarefas de manipulao de vdeo e de gerao de som, alm de disponibilizar algumas constantes e variveis. Algumas das principais rotinas desta unit j foram apresentadas no Captulo VI. Vejamos ento algumas outras.

1.1. ASSIGNCRT Este procedimento permite a associao de um arquivo do tipo texto com a console de sada. No caso de vdeo, esta forma de sada ou eventualmente de entrada, possibilita uma maior velocidade em relao s operaes de entrada e/ou sada standards de vdeo. Este procedimento bastante similar ao ASSIGN. Sintaxe: assigncrt(var <arq>: text);

1.2. WINDOW Este procedimento permite que se defina a rea til do vdeo que ser utilizada. O default a partir da coluna 1 e linha 1 at a coluna 80 e linha 25, para modo de 80 colunas, e coluna 1 e linha 1 a coluna 40 e linha 25, para o modo de 40 colunas. As funes e procedimentos utilizados aps este comando, tero como coordenadas as posies definidas pela nova janela. Sintaxe: window(<x1>,<y1>,<x2>,<y2>: byte); onde x1,y1 representam as coordenadas coluna e linha inicial e x2,y2, as coordenadas coluna e linha final. No caso das variveis x e y estarem fora dos parmetros vlidos, o procedimento simplesmente no ser executado e nenhuma mensagem de erro ser exibida.

1.3. HIGHVIDEO Este procedimento seleciona a cor de texto para alta intensidade. Sintaxe: highvideo;

1.4. LOWVIDEO Este procedimento seleciona a cor de texto para baixa intensidade. Sintaxe: low video;

1.5. NORMVIDEO Este procedimento permite que se retorne a mesma cor para o texto, da posio do cursor no momento em que foi carregado o programa. Sintaxe: normvideo; Exemplo: Program vdeo; uses crt; begin textcolor(15); textbackground(0); writeln(Texto em alta intensidade pelo TEXTCOLOR); lowvideo; writeln(Texto em baixa intensidade pelo LOWVIDEO); highvideo; writeln(Texto em alta intensidade pelo HIGHVIDEO); normvideo; writeln(Texto em modo normal NORMVIDEO); readkey; end. Apostila de Turbo Pascal 7.0 42

CAPTULO IX A UNIT DOS


Este captulo tem por objetivo orientar o leitor na utilizao da unit DOS do Turbo Pascal.

1. Unit DOS
No captulo anterior abordamos a unit CRT, que a unit que possui os principais procedimentos de entrada e sada de dados em seus programas. Porm, conheceremos agora alguns procedimentos da unit DOS, a qual se dedica a operaes relacionadas com o sistema operacional do computador hora, data, arquivos, disco, etc.

2. Funes e Procedimentos de Data e Hora


2.1. GETDATE (ano,ms,dia,semana) O procedimento GETDATE ir armazenar nas variveis-parmetros informadas os respectivos dados da data atual do sistema. importante ressaltar que todos os parmetros devem ser declarados como do tipo Word, pois o procedimento exige essa declarao para seu perfeito funcionamento (ver tabela no final da pgina).

2.2. GETTIME(hora,min,s,cent_s) O procedimento GETTIME ir armazenar nas variveis-parmetros informadas, os respectivos dados da hora atual do sistema. importante ressaltar que todos os parmetros devem ser declarados como do tipo Word, pois o procedimento exige essa declarao para seu perfeito funcionamento (ver tabela no final da pgina). Exemplo: uses crt, dos; const dias_semana: array[0..6] of string = (Domingo,Segunda,Tera Quarta,Quinta,Sexta,Sbado); meses: array[0..11] os string = (Janeiro,Fevereiro,Maro,bril,Maio,Junho,Julho, Agosto,Setembro,Outubro,Novembro,Dezembro); var ano, mes, dia, semana, hora, min, s, s100: word; begin clrscr; getdate(ano,mes,dia,semana); writeln(dias_semana[semana],,,dia,,de,meses[mes-1],de,ano); repeat gettime(hora,min,s,s100); {hora, minuto, Segundo e centsimos de segundo} gotoxy(1,20); write(hora,h,min,min,s,s,s100); until keypressed; end. TIPO Shortint Integer Longint Byte Word FAIXA 7 7 -128..127 -(2 ) <= n < (2 ) 15 15 -32768..32767 (2 ) <= n < (2 ) 31 31 -2147483648..2147483647 (2 ) <= n < (2 ) 8 0..255 0 <= n < (2 ) 16 0..65535 0 <= n < (2 ) Tabela 8.1 - Tipos inteiros. SINAL com com com sem sem TAMANHO 8 bits 16 bits 32 bits 8 bits 16 bits

Apostila de Turbo Pascal 7.0

43

importante ressaltar que as faixas cabveis de getdate so: ano (1980..2099), ms (1..12), dia (1..31) e dia da semana (0..6). E as faixas de gettime: hora (0..23), minuto (0..59), segundo (0..59) e centsimos de segundo (0..9).

2.3. SETDATE (ano,mes,dia) O procedimento SETDATE ir determinar qual ser a nova data atual do sistema. Basta informar os valores desejados. Exemplo: setdate(1999,03,01); {data atual 01/03/1999}

2.4. SETTIME (hora,min,s,cent_s) O procedimento SETTIME ir determinar qual ser a nova hora atual do sistema. Basta informar os valores desejados. Exemplo: settime(13,30,0,0); {a hora atual 13:30}

2.5. PACKTIME (VAR <dt>: DATETIME; VAR <ftime>: LONGINT) O procedimento PACKTIME permite compactar data e hora em 4 bytes. A data e a hora devero estar em um registro especial, DATETIME predefinido na UNIT DOS da seguinte forma: datetime = record year,month,day,hour,min,sec: word; end; Este procedimento normalmente utilizado quando da necessidade de atualizar a data e a hora de criao de um arquivo, podendo tambm ser utilizado para outros fins. Exemplo: Program teste_packtime; uses dos; var ftime: longint; dt: datetime; begin with dt do begin write(Digite o dia: ); readln(day); write(Digite o ms: ); readln(month); write(Digite o ano: ); readln(year); write(Digite a hora: ); readln(hour); write(Digite o minuto: ); readln(min); write(Digite o segundo: ); readln(sec); packtime(dt,ftime;) writeln(Data compactada: ,ftime:0); end; readkey; end.

2.6. UNPACKTIME (<ftime>: LONGINT; VAR <dt>: DATETIME) Este procedimento permite descompactar um valor em 4 bytes para o registro DATETIME do procedimento anterior. utilizado normalmente para exibir a data e hora de ltima gravao de um arquivo, podendo ter putros fins tambm. Exemplo: Program teste_unpacktime; uses dos; var ftime: longint; dt: datetime; begin Apostila de Turbo Pascal 7.0 44

with dt do begin write(Digite o dia: ); readln(day); write(Digite o ms: ); readln(month); write(Digite o ano: ); readln(year); write(Digite a hora: ); readln(hour); write(Digite o minuto: ); readln(min); write(Digite o segundo: ); readln(sec); packtime(dt,ftime;) ftime:=ftme+10000000 unpacktime(ftime,dt); write(O novo dia: ,day); write(O novo ms: ,month); write(O novo ano: ,year); write(Digite a hora: ,hour); write(Digite o minuto: ,min); write(Digite o segundo: ,sec); end; readkey; end.

2.7. GETFTIME (VAR <arquivo>; VAR <dh>:LONGINT) Este procedimento retorna ahora e a data da ltima atualizao de um arquivo, que por sua vez, dever ser associado a seu nome externo e estar aberto. O argumento retornado est compactado, ou seja,. Hora e data em uma nica varivel. Exemplo: getftime(f,ftime);

2.8. SETFTIME (VAR <arquivo>; VAR <ftime>:LONGINT) Este procedimento permite estabelecer uma nova data de ltima gravao que dever estar previamente compactada em 4 bytes. Exemplo: setftime(arq,nftime); Observao: importante frisar que as funes F+GETFTIME e SETFTIME no fazem a consistncia das datas e horas atribudas a eles, portanto cabe ao programador fazer a verificao da validade das mesmas.

3. Funes e Procedimentos de Disco


3.1. DISKFREE (drive) A funo DISKFREE retornar a quantidade de bytes que se encontra livre no drive-parmetro especificado. Especifique como parmetro 0 (zero) para o drive padro, 1 (um) para o drive A, 2 (dois) para o drive B, 3 (trs) para o drive C, e assim sucessivamente. Exemplo: writeln(Espao livre no disco C: ,diskfree(3) div (1024*1024),Mbytes); writeln(Espao livre no disco D: ,diskfree(4) div (1024*1024),Mbytes);

3.2. DISKSIZE(drive) A funo DISKSIZE retornar a quantidade de bytes total que o drive-parmetro pode armazenar. Segue as mesmas regras do diskfree. Exemplo: writeln(Espao total no disco default ou padro: ,disksize(0) div 1024,Kbytes);

3.3. GETVERIFY(bol) O procedimento GETVERIFY ir armazenar no parmetro booleano o valor true caso a verificao de escrita no disco esteja ativa. Caso contrrio, armazenar false. Exemplo: getverify(grava); write(Verificao de escrita est: ,grava); Apostila de Turbo Pascal 7.0 45

3.4. SETVERIFY(bol) O procedimento setverify ir determinar a verificao de gravao no disco. Caso o parmetro booleano seja true a verificao de escrita no disco ser ativa. Caso contrrio (false), ser desligada. Exemplo: grava := true; setverify(grava); {verificao ligada}

4. Funes e Procedimentos Diversos


4.1. DOSVERSION A funo DOSVERS ION retornar o nmero da verso do sistema operacional em uso. O valor de retorno do tipo Word, porm o mesmo valor composto de duas partes: uma antes do ponto e outra depois. Para evitar clculos, usamos as funes lo e hi para obtermos ambos os valores separadamente, j que os mesmos esto no formato binrio. Lo obtm a parte baixa do Word (os ltimos oito bits) e hi obtm a parte alta (os primeiros oito bits). Exemplo: ver := dosversion; writeln(Verso do Sistema Operacional: ,lo(ver),.,hi(ver));

4.2. GETCBREAK(bol) O procedimento GETCBREAK ir armazenar no parmetro booleano, o valor true, caso a verificao de Ctrl+Break esteja ativa. Caso contrrio, armazenar false. Estando true significa que o Ctrl+Break ser verificado em todas as chamadas do sistema. Estando false significa que o mesmo s ser verificado nas operaes de entrada/sada, impressora e comunicao entre dispositivos. Exemplo: getcbreak(grava); write(Verificao Ctrl + Break est: ,grava);

4.3. SETCBREAK(bol) O procedimento SETCBREAK ir determinar a verificao de Ctrl+Break. Caso o parmetro booleano seja true, a verificao de Ctrl+Break ser ativa. Caso contrrio (false), ser dsligada. Exemplo: grava := false; setcbreak(grava); {verificao desligada}

4.4. ENVCOUNT A funo ENVCOUNT retornar o nmero de variveis de ambiente existentes no sistema operacional.

4.5. ENVSTR(ind) A funo ENVSTR retornar a string da varivel ambiente e seu contedo, utilizando o ndice-parmetro que ser informado. Exemplo: for i:= 1 to envcount do writeln(envstr(i)); {isto ir escrever na tela todas as variveis ambiente}

4.6. GETENV(str) A funo getenv retornar o contedo da varivel ambiente, utilizando a string-parmetro que ser informado (que o nome da varivel ambiente). Exemplo: writeln(getenv(COMSPEC)); {mostrar C:\WINDOWS\COMMAND.COM}

Apostila de Turbo Pascal 7.0

46

4.7. EXEC A funo EXEC executa um comando passado como parmetro. O programa deve ter seu caminho completo inclusive a extenso do arquivo. Caso seja necessrio passar parmetros, estes devem ser informados como segundo argumento. Sintaxe: exec(caminho,linhadecomando: string);

4.8. DOSEXITCODE Esta funo retorna o cdigo de sada de um subprocesso. Se o resultado retornado for 0, indica um trmino regular, se for 1, indica terminado por ^C, se for 2, houve umerro e caso tenha sido 3, indica trmino de um programa residente. Sintaxe: dosexitcode: word;

4.9. FEXPAND Esta funo retorna uma string, contendo o nome do programa passado como parmetro em sua totalidade. Sintaxe: fexpand(path:PATHSTR): PATHSTR; Observao: o tipo PATHSTR corresponde ao mesmo que string[79].

4.10. FSEARCH Esta funo permite procurar um determinado arquivo em uma lista de diretrios. A lista de diretrios pode ser separada por ponto-e-vrgula (;). Se o arquivo especificado no for encontrado, a funo retornar uma string vazia. A pesquisa feita de qualquer forma, a partir do diretrio corrente. Sintaxe: fsearch(path:PATHSTR;lista:STRING):PATHSTR;

4.11. FSPLIT Este procedimento explode o nome do arquivo, passando como parmetro, em trs partes, o diretrio, o nome do arquivo e a extenso. Sintaxe: fsplit (path: PATHSTR; VAR dir: DIRSTR; VAR nome:NAMESTR; VAR ext: EXTSTR); Observao: Os tipos PATHSTR, DIRSTR, NAMESTR e EXTSTR esto definidos na unit DOS da seguinte forma: TYPE PATHSTR: string[79]; DIRSTR: string[67]; NAMESTR: string[08]; EXTSTR: string[04];

4.12. FINDFIRST Este procedimento procura um determinado arquivo, especificando seu nome e seu atributo, em um diretrio especfico ou no diretrio corrente. So passados como parmetros trs argumentos, o path, o atributo do arquivo e uma varivel predefinida do tipo Searchrec. Os possveis erros so reportados na varivel DOSERROR, que retornar 2 para diretrio no existente e 18 quando no existirem mais arquivos. Sintaxe: findfirst (<caminho>: string; <atributo>: word; var <s>:searchrec);

4.13. FINDNEXT Este procedimento devolve a prxima entrada, de acordo com o nome de arquivo e tambm o atributo utilizado previamente na chamada do procedimento. Os possveis erros so reportados na varivel DOSERROR e esta retornar 18 indicando que no existem mais arquivos. Sintaxe: findnext (var <s>: searchrec);

Apostila de Turbo Pascal 7.0

47

4.14. GETFATTR Este procedimento retorna o atributo de u m determinado arquivo. Estes atributos so estabelecidos pelo sistema operacional. Sintaxe: getfattr (<arq>; VAR <attr>: word);

4.15. SETFATTR Este procedimento permite estabelecer um novo atributo para um arquivo.Os erros possveis so reportados na funo DOSERROR e podem apresentar os seguintes cdigos: 3 (path invlido) e 5 (arquivo protegido). Este procedimento no pode ser utilizado em um arquivo aberto. Sintaxe: setfattr (VAR <arq>; <attr>: word);

4.16. GETINTVEC Este procedimento retorna o endereo de memria de um vetor de interrupo especfico, com o intuito de salv -lo visando uma futura utilizao. Sintaxe: getintvec (<nuint>: byte; VAR <vetor>: POINTER);

4.17. SETINTVEC Este procedimento determina um novo endereo para um vetor de interrupo especfico. O nmero da interrupo pode ser de 0 a 255. Sintaxe: setintvec (<nuint>:BYTE; VAR <vetor>:POINTER);

4.18. SWAPVECTORS Este procedimento permite que sejam salvos todos os vetores de interrupo do sistema. Normalmente utilizado em conjunto com o procedimento EXEC e salva os ponteiros dos vetores de interrupo, evitando assim que uma interrupo tenha seu endereo trocado durante a chamada de um outro programa, no interfirindo assim no programa principal e vice-versa. Sintaxe: swapvectors;

4.19. INTR Este procedimento executa uma interrupo do sistema operacional. Para que possa ser utilizado corretamente, deve-se passar como parmetro o nmero da interrupo e um registrador. Sintaxe: INTR (<intnro>: BYTE; VAR <reg>: REGISTERS);

4.20. MSDOS Este procedimento executa uma chamada na interrupo 21H do sistema operacional. Para tanto, deve ser passado como parmetro o registrador. Sintaxe: MSDOS(VAR <reg>: REGISTERS);

4.21. KEEP Este procedimento permite terminar um programa e mant-lo residente em memria. Para que seja executado com sucesso, deve ser reservada uma rea de memria com o uso da diretiva $M. Sintaxe: KEEP (<saida>: WORD);

Apostila de Turbo Pascal 7.0

48

CAPTULO X A UNIT GRAPH


Este captulo tem por objetivo orientar o leitor na utilizao da unit GRAPH do Turbo Pascal.

1. Unit GRAPH
Esta unidade reponsvel pelo suporte grfico do Turbo Pascal. uma biblioteca grfica com mais de 50 rotinas para a utilizao de alguns arquivos externos como drivers grficos (.BGI) ou fontes de caracteres (.CHR). No modo grfico, deixam de existir linhas e colunas e passam a existir pontos de coordenadas x e y, que por sua vez, podem ter diversas combinaes de acordo com o hardware.

2. Procedimentos Diversos
2.1. DETECTGRAPH Este procedimento permite detectar o hardware e o modo grfico atuais. Estas informaes so retornadas em duas variveis do tipo integer. Tal procedimento muito til quando no se conhece o ambiente grfico. Sintaxe: detectgraph(var <grafdrv>,<grafmod>:integer);

2.2. INITGRAPH Este procedimento faz a inicializao grfica para que sejam possveis todas as operaes grficas. So passados como parmetros o driver, o modo grfico e o path do driver. Sintaxe: initgraph(var <grafdrv>:integer; var <grafmod>: integer; <pathdodrv>:string);

2.3. GETDRIVERNAME Esta funo retorna uma string contendo o nome do driver grfico corrente. Sintaxe: getdrivername;

2.4. GETMODENAME Esta funo retorna uma string referente ao modo grfico passado como parmetro. Sintaxe: getmodename(<nummod>:word):string;

2.5. GETMODERANGE Este procedimento retorna a faixa de valores que podem ser utilizados no modo grfico passado como parmetro. Sintaxe: getmoderange(<grafmod>:integer; var <menor>,<maior>:integer);

2.6. GRAPHRESULT Esta funo retorna o cdigo de erro da ltima operao grfica realizada. Os erros esto predefinidos. Sintaxe: graphresult: integer;

2.7. GETGRAPHMODE Esta funo retorna o valor do modo grfico corrente, o qual pode ser de 0 a 5, dependendo do driver grfico corrente. Sintaxe: getgraphmode: integer;

Apostila de Turbo Pascal 7.0

49

2.8. SETGRAPHMODE Este perocedimento permite estabelecer um novo modod grfico e tambm faz com que a tela seja limpa. Sintaxe: setgraphmode(<mode>:integer);

2.9. GETMAXMODE Esta funo retorna o maior valor que pode ser utilizado para estabelecer o modo grfico. Sintaxe: getmaxmode: integer;

2.10. GRAPHERRORMSG Esta funo retorna a mensagem de erro em string, de acordo com o nmero do erro passado como parmetro. Sintaxe: grapherrormsg(<erro>:integer):string;

2.11. CLOSEGRAPH Este procedimento permite voltar ao modo anterior, ao uso de INITGRAPH, e deve ser utilizado ao trmino de uma sesso grfica, permitindo tambm a liberao de memria alocada para as rotinas grficas. Sintaxe: closegraph;

2.12. ARC Este procedimento permite desenhar um arco. Devem ser passados como parmetros os pontos centrais, neste caso, coordenadas x e y em relao tela como um todo, o raio, o ngulo de incio e o ngulo fim. Caso o ngulo de incio seja zero e o final 360, o grfico ser uma circunferncia. Sintaxe: arc(<x,y>:integer;<anginicio>,<angfim>,<raio>:word);

2.13. GETARCCOORDS Este procedimento permite recuperar informaes a respeito das coordenadas passadas como parmetros no procedimento ARC. Para tanto, deve-se utilizar como parmtero uma varivel do tipo ARCOORDSTYPE. Sintaxe: getarccoords(var <arccoord>: ARCOORDSTYPE);

2.14. BAR Este procedimento permite que seja desenhada uma barra, desde que se passem como parmteros, as coordenadas dos cantos superior esquerdo (x1,y1) e inferior direito (x2,y2). Esta barra ser preenchida com o estilo de preenchimento (fillstyle) e cor correntes. Sintaxe: bar(<x1>,<y1>,<x2>,<y2>:integer);

2.15. BAR3D Este proedimento permite que seja desenhada uma barra em trs dimenses, desde que se passem como parmetros as coordenadas dos cantos superio esquerdo (x1,y1), inferior direito (x2,y2), profundidade e uma varivel booleana, indicando se ser preenchido o topo ou no. Esta barra ser preenchida com o estilo de preenchimento (fill style) e cor correntes. Sintaxe: bar3D(<x1>,<y1>,<x2>,<y2>:integer; prof:word; topo:boolean);

2.16. CIRCLE Este procedimento permite que seja desenhado um crculo com centro nas coordenadas x,y e de acordo com o raio passado como parmetro. Sintaxe: circle(<x>,<y>:integer;<raio>:word);

Apostila de Turbo Pascal 7.0

50

2.17. ELLIPSE Este procedimento permite desenhar uma elipse com centro nas coordenadas x e y; ngulo inicial; ngulo final; raio da coordenada x (horizontal) e y (vertical). Sintaxe: ellipse (<x>,<y>:integer; <angini>,<angfinal>:word;<raiox>,<raioy>:word);

2.18. LINE Este procedimento desenha uma reta que parte de um par de coordenadas x e y iniciais e outro par final. Sintaxe: line(<x1>,<y1>,<x2>,<y2>:integer);

2.19. LINEREL Este procedimento desenha uma reta de acordo com o deslocamento relativo. Sintaxe: linerel(<x>,<y>:integer);

2.20. LINETO Este procedimento permite desenhada uma linha do ponto corrente at as coordenadass passadas como parmetro no procedimento. Sintaxe: lineto(<x>,<y>:integer);

2.21. MOVETO Este procedimento move o ponteiro corrente para as coordenadas indicadas pelo parmetro x. Sintaxe: moveto(<x>,<y>:integer);

2.22. MOVEREL Este procedimento permite a alterao do ponteiro corrente relativamente s coordenadas x e y passadas como parmetro. Sintaxe: moverel(<x>,<y>:integer);

2.23. GETY Esta funo retorna o valor da coordenada y do ponto corrente. Sintaxe: gety:integer;

2.24. GETX Esta funo retorna o valor da coordenada x do ponto corrente. Sintaxe: getx:integer;

2.25. GETMAXX Esta funo retorna a posio mais direita possvel no modo de vdeo e driver correntes, ou seja, resoluo(x). Sintaxe: getmaxx:integer;

2.26. GETMAXY Esta funo retorna a posio mais abaixo possvel no modo de vdeo e driver correntes, ou seja, resoluo(y). Sintaxe: getmaxyx:integer;

2.27. RECTANGLE Este procedimento desenha um retngulo nas posies passadas como parmetros. Estes parmetros so o canto superior esquerdo (x1,y1) e o canto inferior direito (x2,y2). O canto superior esquerdo no pode ser Apostila de Turbo Pascal 7.0 51

menor que (0,0) e o canto inferior direito no pode ultrapassar os valores mximos dos eixos x e y obtidos com GETMAXX e GETMAXY, respectivamente. Sintaxe: rectangle(<x1>,<y1>,<x2>,<y2>:integer);

2.28. DRAWPOLY Este procedimento permite que se desenhe um polgono, utilizando a linha e a cor corrente. So passados como parmetros os nmeros de pontos e uma varivel do tipo POINTTYPE. O procedimento cuida de se posicionar e ligar os pontos atravs de linhas na ordem em que definida e passada como parmetro. Sintaxe: drawpolly(<numpontos>, var <ptdopoligono>: array of pointtype);

2.29. SECTOR Este procedimento desenha e preenche um setor elptico. So passados como parmetros as coordenadas centrais (x,y), ao ngulos inicial e final e os raios dos eixos x e y. Sintaxe: sector(<x>,<y>:integer;<anginicial>,<angfinal>,<raiox>,<raioy>:word);

2.30. FILLPOLY Este procedimento desenha um polgono predefinido, j sendo preenchido com o estlo corrente de fillpattern. Sintaxe: fillpoly(<numpontos>:Word; var <polypontos>: array pointtype);

2.31. SETGRAPHBUFSIZE Este procedimento permite estabelecer uma nova rea de buffer para ser usada na varredura e preenchimento de uma determinada regio. O buffer default de 4Kbytes, suficiente para um desenho de cerca de 650 vrtices. Sintaxe: setgraphbufsize(<buffer>:word);

2.32. FILLELLIPSE Este procedimento desenha uma elipse cheia com o fillstyle corente. Sintaxe: fillellipse(<x>,<y>:integer; <raiox>,<raioy>:word);

2.33. FLOODFILL Este procedimento permite preencher uma rea delimitada com o fillstyle corrente, sendo interrompido quando for encontrada uma linha em branco. Sintaxe: floodfill(<x>,<y>:integer;<borda>:word);

2.34. GETASPECTRATIO Este procedimento retorna a efetiva resoluo da tela grfica para que possa ser efetuada a propoero entre yasp e xasp. Normalmente, utilizado para fazer crculos, arcos, etc. Sintaxe: getaspectratio(var <xasp>,<yasp>:word);

2.35. SETASPECTRATIO Este procedimento permite a troca d o rateio do aspect. utilizado para fazer desenhos que use formas circulares. Sintaxe: s etaspectratio(<xasp>,<yasp>:word);

2.36. GETCOLOR Esta funo retorna a cor corrente utilizada para desenhos, traos, crculos, etc. Sintaxe: getcolor: word;

Apostila de Turbo Pascal 7.0

52

2.37. GETMAXCOLOR Esta funo retorna o maior valor vlido para se determinar uma cor. Se por acaso o valor retornado for 15, indica que pode-se ter 16 cores de 0 at 15, se retornar 1, pode-se ter as cores 0 e 1, e assim sucessivamente. Esta funo utilizada em conjunto com o procedimento setcolor. Sintaxe: getmaxcolor: word;

2.38. SETCOLOR Este procedimento permite que seja estabelecida uma nova cor para uma paleta. Estas cores podem variar de 0 at 15 de acordo com o driver e modo grfico correntes. Sintaxe: setcolor(<cor>:word);

2.39. GETBKCOLOR Esta funo retorna o ndice utilizado pela cor de fundo utilizado pela paleta corrente. Sintaxe: getbkcolor:word;

2.40. SETBKCOLOR Este procedimento permite alterar a cor de fundo para uma paleta. Estas cores podem variar de 0 a 15 de acordo com o modo e o driver grfico atuais. Sintaxe: setbkcolor(<cor>:word);

2.41. GETPALETTE Este procedimento retorna a paleta corente e o seu tamanho. passado como parmetro uma varivel do tipo palletetype. Sintaxe: getpalettetype(var <palette>:palettetype);

2.42. SETPALETTE Este procedimento troca em uma das paletas a sua cor corrente. Sintaxe: setpalette (<numcor>:word;<cor>:shortint);

2.43. GETDEFAULTPALETTE Este procedimento permite que se retorne a definio do registro de paleta tal qual fora inicializado com o procedimento INIGRAPH. Sintaxe: getdefaultpalette(var <palette>:palettetype);

2.44. SETALLPALETTE Este procedimento permite que sejam trocadas todas as cores das paletas de uma nica vez. Sintaxe: setallpalette(var <palette>: palettetype);

2.45. OUTTEXT Este procedimento envia um determinado texto para o dispositivo de vdeo e na posio corrente do ponteiro de vdeo. Este texto ser truncado caso ultrapasse a borda e sempre ser impresso no tipo de texto corrente. Sintaxe: outtext(<texto>:string);

2.46. OUTTEXTXY Este procedimento bastante similar ao procedimento OUTTEXT, com a diferena de que, neste caso, estabelecendo as coordenadas x e y, nas quais dever ser iniciada a escrita do texto. Sintaxe: outtextxy(<x>,<y>:integer,<texto>:string);

Apostila de Turbo Pascal 7.0

53

2.47. GETPALETTESIZE Esta funo retorna o valor do tamanho da paleta corrente de acordo com o nmero de cores desta paleta. Sintaxe: getpalettesize: integer;

2.48. SETRGBPALETTE Este procediment o permite que se altere as entradas das paletas para drivers de videos IBM8514 e VGA. evidente que para que este procedimento seja executado corretamente, deve-se ter presente, alm dos drivers, o hardware. A sigla RGB indica um padro de cores formado por trs cores bsicas (red, green and blue). Sintaxe: setrgbpalette(<cor>,<valorvermelho>,<valorverde>,<valorazul>: integer);

2.49. CLEARDEVICE Este procedimento permite eliminar o contedo do dispositivo de sada de vdeo, colocando o ponteiro corrente nas coordenadas 0,0. O vdeo ser limpo, usando-se a cor de fundo definida no procedimento SETBKCOLOR. Sintaxe: cleardevice;

2.50. SETTEXTJUSTIFY Os procedimentos OUTTEXT e OUTTEXTXY escrevem texto passado como parmetro de acordo com a justificao corrente. A justificao implica em como o texto ser escrito, ou seja, na horizontal esquerda do ponteiro de vdeo corrente, no centro ou direita, e verticalmente, abaixo do ponteiro de vdeo corrente, ao centro ou acima do mesmo. Este procedimento permite alterar tais justificaes atravs de dois valores, um para o parmetro horizontal e outro para o vertical. Sintaxe: settextjustify(<horizontal>,<vertical>:word);

2.51. SETTEXTSTYLE Assim como possvel estabelecer a posio do texto em relao ao ponteiro de vdeo, pode-se tambm determinar o estilo do texto a ser escrito no vdeo. Esta a funo deste procedimento que permite estabelecer a fonte de caracteres (de 0 a 4), a direo em que o texto deve ser escrito (entre 0 e 1) e o tamanho do texto a ser impresso (entre 0 e 4). Sintaxe: settextstyle(<fonte>,<direcao>:word,<tamanho>:word);

2.52. GETTEXTSETTINGS Este procedimentoretorna o estilo de texto corrente, ou seja, fonte, direo, tamanho, justificao horizontal e vertical. Sintaxe: gettextsettings(var <info>:textsettingtype);

2.53. TEXTHEIGHT Esta funo retorna a altura de uma string em pixels, podendo ser utilizada para calcular o ajustamento do espao que a string ir ocupar. Esta funo leva em conta a fonte e o fator de multiplicao utilizado em SETSTEXTSTYLE. Sintaxe: textheight(<texto>:string): word;

2.54. TEXTWIDTH Esta fiuno bastante semelhante anterior. A diferena que nesta o valor retornado o da largura do texto em nmero de pixels. Esta funo tambm leva em conta o tamanho da fonte de caracteres e o fator de multiplicao. Sintaxe: textwidth(<texto>:string):word;

2.55. GETPIXEL Esta funo retorna a cor de um ponto nas coordenadas x e y. Sintaxe: getpixel(<x>,<y>:integer):word;

Apostila de Turbo Pascal 7.0

54

2.56. PUTPIXEL Este procedimento permite a colocao de um ponto nas coordenadas x e y e na cor previamente definida. Sintaxe: putpixel(<x>,<y>:integer;<cor>:word);

2.57. GETLINESETTINGS Este procedimento retorna o estilo de linha corrente que pode ser de 0 a 4, sendo 0 slido, 1 em pontos, 2 centralizado, 3 tracejado e 4 definido pelo usurio. O procedimento tambm retorna o modelo de linha utilizado e ainda a espessura da linha. A varivel passada como parmetro do tipo LINESETTINGSTYPE. Sintaxe: getlinesettings(var <linha>: linesettingstype);

2.58. SETLINESTYLE Este procedimento permite alterar o estilo de linha, seu molde e sua espessura. O molde ser ignorado quando o estilo de linha for diferente de 4 (userbitln) e a espessura poder apenas assumir valores 1 (NORMWIDTH) ou 3 (THICKWIDTH). Quando for utilizado o estilo de linha 4, deve-se estabelecer um valor de 16 bits para o parmetro do modelo PATTERN. Sintaxe: setlinestyle(<estilo>:word;<modelo>:word;<espessura>:word);

2.59. PIESLICE Este procedimento desenha e preenche uma torta ou um pedao de uma torta, com ponto central nas coordenadas x e y, ngulo inicial, ngulo final e raio. Sintaxe: pieslice(<x>,<y>:integer;<angini>,<angfim>,<raio>:word);

2.60. SETFILLPATTERN Este procedimento permite que se defina um novo modelo para preeenchimento de reas usadas nops procedimentos: FILLPOLY, FLOODFILL, BAR, BAR3D E PIESLICE, onde so definidos os moldes e cores para preenchimento. Sintaxe: setfillpattern(<molde>:fillpatterntype;<cor>:word);

2.61. GETFILLPATTERN Este procedimento retorna os parmetros estabelecidos no procedimento SETFILLPATTERN em uma varivel do tipo FILLPATTERNTYPE. Sintaxe: getfillpattern(<molde>);

2.62. SETFILLSTYLE Este procedimento permite alterar o estilo e a cor para preenchimento nos procedimentos FILLPOLY, BAR, BAR3D e PIESLICE. Os possveis estilos variam de 0 at 12. Sintaxe: setfillstyle(<molde>:word,<cor>:word);

2.63. GETFILLSETTINGS Este procedimento retorna os valores na ltima chamada de SETFILLSTYLE. Para tanto deve ser passado como parmetro uma varivel do tipo FILLSETTINGSTYPE. Sintaxe: getfillsettings()var <estilo>:fillsettingstype;

2.64. REGISTERBGIDRIVER Este procedimento retorna um valor menor que zero em caso de erro, ou um nmero do arquivo de driver passando isto para uma alocao de memria. Sintaxe: registerbgidriver(<drv>:pointer):integer;

Apostila de Turbo Pascal 7.0

55

2.65. REGISTERBGIFONT Esta funo retorna um valor negative, caso o arquivo de fonts no tenha sido carregado previamente na memria, ou umnmero interno da fonte e o registro passado para a memria dinmica. Desta forma a fonte carregada do disco para o heap. Sintaxe: registerbgifont(<fonte>:pointer):integer;

2.66. INSTALLUSERDRIVER Esta funo permite que seja instalado um driver grfico gerado pelo usurio. Sintaxe: installuserdriver(<nome>:string;<autodet>:pointer):integer;

2.67. INSTALLUSERFONT Esta funo permite instalar uma nova fonte de caracteres e retorna o valor da nova fonte instalada. Sintaxe: installuserfont(<nomearq>:string):integer;

2.68. SETUSERCHARSIZE Este procedimento permite estabelecer um novo fator para a fonte de caracteres ativa, isto , feito pela seguinte relao: X e fator X, Y e fator Y. Sintaxe: setusercharsize(<multx>,<divx>,<multy>,<divy>:word);

2.69. SETWRITEMODE Este procedimento estabelece como sera o modo desenho de linhas, ou desenhos que se utilizam linhas. Permite dois modos de operao, passando-se o valor COPYPUT equivalente ao valor 0, que coloca em situao de se desenhar uma linha, copiando-se o estilo corrente para o dispositivo de sada. A segunda forma passando-se a constante predefinida XORPUT equivalente ao valor 1, que executa uma operao XOR quando desenhada uma linha, ou seja, se for encontrado um ponto onde deveria ser desenhado um novo ponto, este ser apagado e vice-versa. Caso uma linha seja desenhada duas vezes e o procedimento SETWRITEMODE estiver setado em XORPUT, uma vez esta ser desenhada e outra apagada. Sintaxe: setwritemode(<modo>:integer);

2.70. SETVIEWPORT Este procedimento permite determiner uma janela dentro do vdeo corrente cujas coordenadas forem passadas como parmetro, outro parmetro em relao clipagem, para tal, passado como parmetro uma varivel bboleana. A partir do momento em que for executada esta rotina, os comandos grficos sero relativos s novas coordenadas se clip estiver em true. Caso contrrio, as coordenadas sero absolutas. Aps a execuo deste comando, o ponto corrente ficar nas coordenadas 0,0. Sintaxe: setviewport(<x1>,<y1>,<x2>,<y2>:integer;<moldura>:boolean);

2.71. CLEARVIEWPORT Este procedimento permite limpar apenas o viewport corrente, definido pela rotina SETVIEWPORT. Sintaxe: clearviewport;

2.72. GETVIEWSETTINGS Este procedimento nos retorna os valores do viewport ativo, suas coordenadas de canto superior esquerdo e canto inferior direito e, se a clipagem est ligada ou no. Para executar este procedimento necessrio passar como parmetro uma varivel do tipo VIEWPORTTYPE. Sintaxe: getviewsettings(var <coord>:viewporttype);

Apostila de Turbo Pascal 7.0

56

2.73. GRAPHDEFAULTS Este procedimento permite que sejam retornados aos valores defaults e as coordenadas correntes na posio 0,0. Sintaxe: graphdefaults;

2.74. RESTORECRTMODE Este procedimento permite que se volte para o modo de vdeo anterior ao procedimentoo INITGRAPH. Pode ser utilizado em conjunto com o procedimento SETGRAPHMODE, assim alterando-se modo grfico e modo texto. Sintaxe: restorecrtmode;

2.75. IMAGESIZE Esta funo retorna o nmero de bytes necessrios para armazenar uma rea retangular da tela. Sintaxe: imagesize(<x1>,<y1>,<x2>,<y2>:integer):word;

2.76. GETIMAGE Este procedimento permite que seja salvo uma determinada rea retangular do vdeo. Para tanto devem ser passadas como parmetros, as coordenadas do canto superior esquerdo e do inferior direito alm de uma varivel sem tipo, que dever ser pelo menos 4 vezes maior que a rea definida como regio. Os 2 primeiros bytes desta varivel armazenaro a largura e a altura da regio preestabelecida. Normalmente usa-se um ponteiro para esta v arivel sem tipo. Sintaxe: getimage(<x1>,<y1>,<x2>,<y2>:integer;var <mapa>);

2.77. PUTIMAGE Este procedimento permite retornar uma imagem na tela. So passados como parmetros para esta rotina, as coordenadas do canto superior esquerdo, o mapa da imagem e a forma como esta ser colocada na tela. Esta forma pode ter valores de 0 at 4. Sintaxe: putimage(<x>,<y>:integer;<mapa>;<forma>:word);

2.78. SETACTIVEPAGE Este procedimento permite estabelecer uma nova pgina de vdeo. A partir de ento todos os procedimentos grficos sero executados na nova pgina selecionada, porm s podem ser utilizados com suporte grfico EGA (256K), VGA e HERCULES. Este procedimento usado especialmente em animaes de imagens. Sintaxe: setactivepage(<pag>:word);

2.79. SETVISUALPAGE Este procedimento permite a visualizao de uma nova pgina de vdeo, e assim como no procedimento anterior, s poder ser utilizado com suporte grfico adequado. Sintaxe: setvisualpage(<pag>:word);

Observao: Para maiores informaes sobre como manipular a parte refica do Turbo Pascal, ver Apndice E.

Apostila de Turbo Pascal 7.0

57

CAPTULO XI A UNIT OVERLAY


Este captulo tem por objetivo orientar o leitor na utilizao da unit OVERLAY do Turbo Pascal.

1. Unit OVERLAY
Por meio desta unit possvel gerenciar as atividades de overlay de um programa. O processo chamado de overlay nada mais do que se aproveitar uma mesma rea de memria para vrias rotinas diferentes. Com este procedimento pode-se diminuir consideravelmente a memria requerida para execuo de um programa. As partes geradas pelo Turbo Pascal como overlay tm extenso .OVR e para que esta unidade possa ser executada com correo, deve-se utilizar as diretivas de compilao $O+ e $F+. A primeira permite gerao de cdigo de overlay e a segunda permite as chamadas distantes (FAR CALLS). A posio do programa em que dever ser colocada a rotina que utiliza overlay marcada pela diretiva de compilao {$O nomeunit}. Para uma rotina poder ser carregada na memria em overlay, esta dever ser previ amente compilada como uma unit.

2. Procedimentos Diversos
2.1. OVRINIT Este procedimento permite a inicializao do gerenciador de overlays e tambm abrir um arquivo .OVR. Este arquivo ser procurado no diretrio corrente, e caso esteja rodando em uma verso de sistema operacional, tambm ser pesquisado no PATH especificado no ambiente DOS. Em caso de erro, este ser armazenado na varivel OVRRESULT. Sintaxe: OVRINIT (<nomearq>: STRING);

2.2. OVRINITEMS Este procedimento bastante similar ao procedimento OVRINIT, exceto que neste caso, a rotina ser levada memria expandida. Este procedimento s tem suporte em padro EMSLIMEXTENDEDMEMORYSPECIFICATION, LOTUS/INTEL/MICROSOFT. Sintaxe: OVRINITEMS ;

2.3. OVRGETBUF Esta funo retorna o valor em bytes da memria ocupada pela rotina de overlay. Este valor ajustado automaticamente quando o programa executado. Sintaxe: OVRGETBUF: LONINT;

2.4. OVRSETBUF Este procedimento aloca uma rea de memria maior ou igual memria alocada pelo programa. Em caso de erro de execuo, o programa ter sua continuidade normal, porm o tamanho do buffer de memria no ser trocado. Sintaxe: OVRSETBUF(<tamanho>:LONGINT);

2.5. OVRCLEARBUF Este procedimento libera a memria alocada pelo overlay e no deve nuinca ser chamado de dentro de uma rotina em overlay. Sintaxe: OVRCLEARBUF;

2.6. OVRGETRETRY Esta funo retorna o valor em bytes livres da rea alocada pelo overlay. Sintaxe: OVRGETRETRY: LONGINT:

Apostila de Turbo Pascal 7.0

58

2.7. OVRSETRETRY Este procedimento permite determinar p quanto de memria possvel deixar livre dentro da rea alocada pelo overlay. Sintaxe: OVRSETRETRY(<tamanho>: LONGINT);

Apostila de Turbo Pascal 7.0

59

CAPTULO XII TIPOS DEFINIDOS PELO USURIO


Este captulo tem por objetivo demonstrar ao leitor a criao de tipos de dados especiais, definidos pelo usurio.

1. Tipos de Dados
Os tipos byte, integer, real, boolean e char so pr-definidos em Turbo Pascal e constituem conjunto de valores inteiros, reais, lgicos, caracter. O Turbo Pascal permite a criao de novos tipos alm daqueles citados anteriormente. Um novo tipo criado atravs de uma definio que determina um conjunto de valores associados a um identificador. Uma vez definido, o tipo passa a ser referenciado pelo seu identificador. O novo tipo criado pelo usurio tambm denominado tipo enumerado. Os identificadores que criamos para um tipo enumerado no representam mais nenhum valor, exceto seus prprios. Os tipos enumerados constituem ferramentas extremamente teis na criao de programas limpos e auto-documentados, podendo ser referenciados em qualquer parte do programa.

2. Definio
Um tipo enumerado uma seqncia ordenada de identificadores definidos pelo usurio, que forma um tipo ordinal. A palavra reservada para cria o de tipos enumerados type. Type semana = (segunda, tera, quarta, quinta, sexta, sbado, domingo); Uma das mais importantes caractersticas de um tipo enumerado a ordem na qual os valores so ordenados. Alm de estabelecer os prprios identificadores, a declarao do mesmo define a ordem dos identificadores no tipo.

3. Operaes com Tipos Enumerados


Diversas operaes so vlidas usando os tipos enumerados. Veja o programa exemplo: Exemplo: uses crt; type cores = (preto, azul, vermelho, amarelo, verde, rosa, branco, roxo, lilas); var uma_cor: cores; begin clrscr; uma_cor := roxo; {atribuir um identificador a varivel de tipo} uma_cor := succ(uma_cor); {recebeu lils, o sucessor} uma_cor := pred(uma_cor); {recebeu roxo novamente, o antecessor} uma_cor := succ(azul); {recebeu vermelho, sucessor de azul} if succ(uma_cor)>=lils then uma_cor := preto; writeln(ord(uma_cor)); {escreveu 2, a ordem do vermelho} uma_cor := preto; writeln(ord(uma_cor)); {escreveu 0, a ordem do preto} for uma_cor := preto to rosa do writeln(ord(uma_cor)); {escreveu as posies, do preto ao rosa} end.

Apostila de Turbo Pascal 7.0

60

As variveis de tipos enumerados no podem ser lidas ou escritas. No vlida nenhuma operao aritmtica com os elementos de um tipo enumerado, como somar 1, diminuir 2 ou somar duas constantes ou mais constantes do tipo. Podemos usar as constantes dos tipos enumerados para servir de ndice de vetores / matrizes e tambm no loop for. A ordem do primeiro elemento do tipo tem valor 0.

4. Tipo Derivado Faixa


Um tipo pode ser definido como uma parte de um dado tipo escalar. Esta parte ou faixa define o domnio de um tipo escalar que est associado a um novo tipo, que chamado de tipo escalar. A definio de uma faixa (subrange) indica quais os valores mnimo e mximo que podem ser assumidos. A descrio de uma faixa se faz com a indicao dos seus limites separados por dois pontos (..), onde o limite inferior deve ser menor que o limite superior. Exemplo: uses crt; type semana = (seg, ter, qua, qui, sex, sab, dom): coluna = 1..80; maius = A..Z; d_util = seg..sex; num = -128..130; var letra: maius; dia: d_util; begin clrscr; for letra := J to P do write(letra:2); for dia := seg to sex do case dia of seg: writeln(Segunda); ter: writeln(Tera); qua: writeln(Quarta); qui: writeln(Quinta); other writeln(Sexta); end; readkey; end.

{tipo enumerado} {tipo escalar associado: byte} {tipo escalar associado: char} {tipo escalar associado: semana} {tipo escalar associado: integer}

Exemplo: uses crt; {observe o resultado visual desse programa} var linha: 1..25; coluna: 1..80; cor: 0..15; caracter: char; begin clrscr; repeat linha := random(24)+1; coluna := random(80)+1; cor := random(16); Apostila de Turbo Pascal 7.0 61

caracter := chr(random(256)); gotoxy(coluna,linha); TextColor(cor); write(caracter); until keypressed; end.

Apostila de Turbo Pascal 7.0

62

CAPTULO XIII PROCEDURES


Este captulo tem por objetivo preparar o leitor para a criao de procedures nos seus programas.

1. Procedimentos
O conjunto de sentenas bsicas da linguagem visto nos captulos anteriores adequado para escrever pequenos programas. Porm, algo mais necessrio se desejarmos efetivamente escrever e testar programas importantes. Isto cria a necessidade de algum mtodo de organizar o nosso trabalho de programao, de maneira que: Diferentes partes do programa possam ser independentes, de forma que possam ser escritas e testadas separadamente; Trechos de programas possam ser escritos de forma a serem reusados em diferentes partes do programa; Permita que programas complexos possam ser montados a partir de unidades menores j prontas e testadas.

Esse conjunto de necessidades satisfeito pelas PROCEDURES (procedimentos) em Pascal. Uma procedure definida em uma parte do programa, podendo ser chamada ou invocada em outras posies do mesmo. A execuo da procedure se comporta como se suas instrues fossem copiadas para o ponto de onde foi chamada. Uma procedure tambm chamada de procedimento, subprograma, subrotina ou rotina.

2. Definio
A forma feral para definio de uma procedure : PROCEDURE nome_da_proc(lista de parmetros e tipos); const {constantes locais} type {tipos locais} var {variveis locais} begin {comandos} end;

Nesta representao da sintaxe, nome_da_proc o identificador que criamos como nome da procedure e toda chamada mesma ser feita por esse identificador. As declaraes const, type e var, dentro do bloco da procedure, so opcionais e diferem as constantes, tipos e variveis locais para a rotina. A lista de parmetros e tipos, delimitada pelos parenteses no cabealho da procedure, tambm opcional. Se presente, a lista determina as variveis que recebero os valores de argumentos enviados rotina. O termo parmetro refere-se s variveis listadas nos cabealhos das procedures e o termo argumento refere-se aos valores que realmente so passados para a rotina por uma chamada. As variveis listadas nos cabealhos das procedures tambm so chamadas de parmetros formais, e os valores listados numa chamada rotina, de parmetros reais. Uma lista de parmetros especifica o nmero e o tipo dos valores q ue devem ser passados procedure. Cada nome de varivel, na lista, seguido por um identificador de tipo. Os parmetros, na lista, so separados por ponto e vrgula (;). Essas variveis esto definidas para uso exclusivo dentro da rotina, no estando disponveis em mais nenhuma parte do programa.

Apostila de Turbo Pascal 7.0

63

Exemplo: uses crt; Procedure centra_titulo (tit:string;linha:byte); var tam,posio: byte; begin tam := length(tit); posicao := 40 round(tam/2); gotoxy(posicao,linha); write(tit); end; var tit: string; linha: byte; begin clrscr; write(Entre com a frase: ); write(Diga o nmero da linha: ); centra_titulo(tit,linha); readkey; end.

readln(tit); readln(linha); {chamada procedure}

3. Chamadas a Procedures
Um comando de chamada direciona o Turbo Pascal para executar a procedure e, opcionalmente, enviar valores de argumentos a ela (veja o exemplo acima). A forma geral de chamada : Nome_da_procedure(lista de argumentos); A definio da rotina (os seus comandos) deve estar localizada acima da chamada real rotina. A lista de argumentos, se existir, uma lista dos valores que sero enviados para a rotina. Os argumentos aparecem entre parnteses e separados por vrgulas. A lista de argumentos deve conter o mesmo nmero e tipo de valores, e na mesma ordem que os especificados no cabealho da rotina a ser chamada. No programa anterior, se fizessemos a chamada: centra_titulo(Pascal,13); A string Pascal passada para o parmetro tit; O valor byte 13 passado para o parmetro linha. No momento da chamada da procedure, o programa interrompido naquele ponto e a procedure executada. Aps o trmino de sua execuo, o programa continua no comando seguinte ao chamador da procedure.

A rea de memria usada na execuo de um programa Pascal varia dinamicamente durante sua execuo. Quando o programa principal iniciado, reservado na pilha um espao para as variveis globais. A medida que as procedures so iniciadas, novos espaos na pilha so alocados para armazenar as variveis e os parmetros das subrotinas. Ao terminar uma procedure, seus espaos alocados so automaticamente retirados da pilha.

Apostila de Turbo Pascal 7.0

64

4. Parmetros das Procedures


Existem dois tipos de parmetros em Turbo Pascal: O tipo valor (value). O tipo referncia ou varivel (var). Com parmetros do tipo valor qualquer modificao sofrida pela varivel dentro da procedure no afetar os valores das variveis dentro do programa princiapl, ou seja, apenas sero passados os valores para os parmetros. Um parmetro do tipo var um ponteiro para o endereo a varivel para qual o parmetro referencia, ou seja, tanto a varivel quanto o parmetro apontam para o mesmo endereo de memria. Isto significa que ao modificar o contedo do parmetro na procedure, o contedo da varivel no programa principal tambm se modificar. Veja o exemplo na pgina seguinte: Exemplo: uses crt; Procedure msg(var tit1:string;tit2:string); begin tit1 := tit1 + Adicional; tit2 := tit2 + Adicional; writeln(Na procedure (tit1) como parmetro de referncia: ,tit1); writeln(Na procedure (tit2) como parmetro de referncia: ,tit2); end; {fim da procedure} var tit1, tit2: string; begin clrscr; write(Digite uma mensagem (tit1): ); readln(tit1); write(Digite outra mensagem (tit2): ); readln(tit2); writeln; msg(tit1,tit2); writeln(Aps a procedure (tit1): ,tit1); writeln(Aps a procedure (tit2): ,tit2); readkey; end.

Ao executar o programa listado logo acima, voc perceber a diferena entre um parmetro de referncia e um parmetro de valor. Duas mensagens so digitadas e, na procedure, as duas ganham uma string Adicional. Aps a execuo da procedure, as duas mensagens so listadas na tela. Voc perceber que, a primeira mensagem ficou com o Adicional e a segunda mensagem no. Isso se deve ao fato de que a primeira mensagem foi passada como parmetro de referncia e, por isso, seu valor tambm foi alterado. Ao contrrio da segunda mensagem, que foi passada como valor e, por isso, seu valor continua intacto.

5. Localidade
Como j vimos, todos os tipos de declaraes usadas no programa principal, type, const, var podem tambm ser usadas dentro da rea da procedure. Essas declaraes definem objetos que so locais a esta procedure. Estes esto indefinidos fora de sua rea e, portanto, no podem ser usados fora da procedure. A regio de validade de um identificador chamada de escopo. Em Pascal, escopo de um objeto a procedure onde ele foi definido ou declarado. Se acontecer o caso de dois objetos (um local e outro global) com o mesmo nome, ento a regra que o objeto local ter precedncia sobre o global. Mesmo com os nomes iguais, os endereos das variveis locais e globais so diferentes.

Apostila de Turbo Pascal 7.0

65

Exemplo: uses crt; var c,d: byte; Procedure proc_a; begin writeln(Procedure A); end; Procedure proc_b;

{estas variveis so globais a todo programa}

{aqui, se fosse necessrio, poderia ser chamado proc_b} {o proc_c no pode ser chamado aqui}

Procedure proc_a; Begin Writeln(Procedure A); End; begin writeln (Procedure B); Proc_c; end;
var a,b: byte; begin proc_a; proc_b; end.

{apenas aqui possvel chamar proc_c, pois o} {mesmo local a proc_b}

{estas variveis so locais apenas ao programa principal}

{proc_b chamar proc_c, pois aqui no posvel chamar proc_c}

Se as procedures estiverem paralelas entre si, uma pode chamar a outra (proc_a e proc_b); Se as procedures estiverem aninhadas entre si (uma interna a outra), apenas a externa imediata pode chamar a interna, nenhuma outra (proc_b e proc_c).

Apostila de Turbo Pascal 7.0

66

CAPTULO XIV FUNCTIONS


Este captulo tem por objetivo preparar o leitor para a criao de funes nos seus programas.

1. Funes
A estrutura de uma funo (function) muito similar de uma procedure. A diferena principal que a function explicitamente definida para retornar um valor de um tipo especificado. As diferenas bsicas entre uma function e uma procedure: A function sempre retorna um valor de um tipo especificado; Na definio da function, seu tipo deve ser especificado; O nome da function representa o valor que a mesma retorna; Dentro do corpo da function dever existir um comando de atribuio que identifique o valor exato que a funo ir retornar.

2. Definio
A forma geral para definio de uma function : FUNCTION nome_da_func(lista de parmetros e tipos):tipo_retorno; const {constantes locais} type {tipos locais} var {variveis locais} begin {comandos da function} nome_da_func := valor_retorno; end; As regras para a lista de parmetros so as mesmas das procedures. Observe que o cabealho da function define o tipo da mesma, ou seja, o tipo do valor que a mesma ir retornar. Veja logo abaixo um programa de exemplo de function: Exemplo: uses crt; Function cubo (num: real): real; var result: real; begin result := num * num * num; cubo := result; {comando de retorno da function} end; var num: real; begin clrscr; write(Entre com um nmero: ); write(Seu cubo : , cubo(num)); readkey; end.

readln(num);

Observe no exemplo que a funo cubo foi colocada em um comando de sada. Isto prova que a funo retorna um valor, ou seja, no local onde est escrita aparecer o seu valor de retorno. Para cada funo, o seu valor de retorno ser o resultado de todo o processamento interno da funo.

Apostila de Turbo Pascal 7.0

67

Todas as regras de chamada, parmetros e localidade de functions seguem as mesmas das procedures. A chamada da function no independente como um comando, mas ao invs disso, aparece como parte de um comando maior (clculo ou operao de sada). Geralmente, uma function est relacionada a uma seqncia de aes que conduzem a um nico valor calculado. obrigatrio atribuir a funo a uma varivel, comando de sada ou expresso, nos seus programas.

Exemplo: uses crt; Function minusculo (msg: string): string; var i: byte; temp: string; begin temp:=; for I:=1 to length(msg) do if msg[i] in [#65..#90] then temp := temp + chr(ord(msg[i]+32)) else temp := temp + msg[i]; minusculo := temp; end; var frase: string; begin clrscr; write(Entre com uma frase: ); readln(frase); writeln(A frase em minsculo: ,minsculo(frase)); readkey; end.

{se maisculo, transforma} {caso contrrio, nenhuma alterao} {comando de retorno}

Exemplo: uses crt; Function tan(ngulo: real): real; begin tan := sin(angulo*pi/180)/cos(angulo*pi/180); end; var ang: real; begin clrscr; write(Entre com o valor de um ngulo: ); readln(ang); writeln(Sua tangente : ,tan(ang)); readkey; end.

{comando de retorno}

Apostila de Turbo Pascal 7.0

68

Exemplo: uses crt; Function fatorial(num: integer): real; var temp: real; i: integer; begin temp. := 1; if num>1 then for i:=2 to num do temp := temp *i; fatorial := temp; {comando de retorno} end; var n: real; begin clrscr; write(Entre com um nmero qualquer: ); writeln(Seu fatorial : ,fatorial(n)); readkey; end.

readln(n);

Apostila de Turbo Pascal 7.0

69

CAPTULO XV ARRAYS UNIDIMENSIONAIS


Este captulo tem por objetivo instruir o leitor na utilizao de vetores de uma nica dimenso nos programas.

1. Introduo
O array a forma mais familiar de um tipo estruturado. Um array simplesmente um agregado de componentes do mesmo tipo. Suponha que se deseja ler um conjunto de 150 notas de alunos de uma disciplina e depois coloca-las em ordem e imprimi-las. Se tivssemos que declarar 150 variveis, cada uma com um nome diferente, teramos um problema com o controle do uso das mesmas, sem contar com o trabalho de escrever 150 nomes em diversas reas do programa. A soluo para um caso como este, est em usar um nico nome para todas as 150 notas, como se fosse uma nica varivel. Na realidade, podemos chamar o array de varivel indexada, pois cada elemento ser identificado por um seletor ou ndice. Notas 1 5.0 2 9.3 3 2.1 ... ... 150 2.3 Nomes 1 Joo 2 Lcia 3 urea 4 Lara 5 Ana Idade 1 21 2 35 3 18

Cada ndice representa um endereo na memria. A forma usada para indicar um elemento de um array o nome da varivel junto com o ndice entre colchetes.

Exemplos: nota[10] := nota[5] + nota[100]; nomes[4] := Lara; read(idade[i]); for i:=1 to 150 do readln(notas[i]); {este commando ir ler todas as notas !}

Os arrays se dividem em unidimensionais e multidimensionais. O array unidimensional chamado de vetor e o multidimensional de matriz.

2. Definio e Declarao de um Array Unidimensional


A estrutura do tipo vetor a mais conhecida dos programadores por ser a estrutura mais simples de ser implementada. Suas caractersticas bsicas so: uma estrutura homognea, isto , formada de elementos de mesmo tipo, chamado tipo base. Todos os elementos da estrutura so igualmente acessveis, isto , quer dizer que o tempo e o tipo de procedimento para acessar qualquer um dos elementos do vetor so iguais. Cada elemento componente da estrutura tem um nome prprio, que o nome do vetor seguido do ndice. A declarao de um vetor pode utilizar um tipo definido pelo usurio ou simplesmente a especificao de array para uma varivel (veja s seguir os trs exemplos de declarao):

Apostila de Turbo Pascal 7.0

70

Exemplo: type notas = array[1..150] of real; var nota: notas; Exemplo: nota: array[1..150] of real; Exemplo: const max = 150; type notas = array[1..max] of real; var nota: notas; Exemplo: uses crt; const max = 50; var nomes: array[1..maximo] of string[20]; notas: array[1..maximo] of real; soma, media: real; i: 1..mximo; begin clrscr; soma := 0; for i:=1 to Maximo do begin write(Entre com o nome do aluno: ,i,de ,maximo,: ); readln(nomes[i]); write(Entre com sua nota: ); readln(notas[i]); soma := soma + notas[i]; {acumulador de notas} end; media := soma/Maximo; {media geral da turma} write(Mdia geral da turma: ,media:5:2); readkey; end. Observe que p ara acessar os elementos de um vetor, necessitamos de uma estrutura de repetio, a exemplo for. O ndice do vetor a varivel de controle da estrutura (o contador). Exemplo: uses crt; var prod: array[1..10] of string[30]; {observe neste programa que a falta da} preco: array[1..10] os real; {constante prejudica a alterao da} quant: array[1..10] of byte; {quantidade de produtos a serem lidos. } soma, total, media, s_p: real; {O trabalho muito maior. } i: 1..10; begin clrscr; soma:=0; s_p:=0; for i:=1 to 10 do begin write(Nome do produto: ); readln(prod[i]); write(Seu preo unitrio (R$): ); readln(preco[i]); write(Quantidade (unid): ); readln(quant[i]); total := preco[i]*quant[i]; {total de cada produto} writeln(Total em R$: ,total:8:2); soma := soma + total; {acumulador de total} s_p := s_p + preo[i]; {acumulador de preo unitrio} end; media := s_p/10; {mdia geral de preos} clrscr; Apostila de Turbo Pascal 7.0 71

writeln(O somatrio geral em R$: ,soma:14:2); writeln(Mdia geral de preos em R$: ,media:8:2); writeln(Lista de Produtos com preo acima da mdia); for i:= 1 to 10 do if preco[i]> media then writeln(Nome do produto: ,prod[i], = R$ , preo[i]:8:2); readkey; end.

Cuidado com o trabalho com vetores. Caso o seu limite seja ultrapassado, o programa pode travar e junto com ele o sistema. O Pascal s acusar erro se voc tentar atribuir a um vetor um dado qualquer com ndice fora da faixa escrita no programa. Mas isso no acontecer se a origem do ndice for alguma expresso. Os tipos array em Pascal so estticos, ou seja, o comprimento e as dimenses alocadas so fixas em tempo de compilao e no podem ser redefinidas durante a execuo do programa.

3. Constante Array Unidimensional


No Turbo Pascal podemos definir uma constante array unidimensional da seguinte forma: type apart = array[1..10] of string[3]; const numeros: apart = (101,102,103,104,105,106,107,108,109,110); write(numeros[3]); {escrever 103} Exemplo: uses crt; const meses: array[1..13] of string[3]={Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez,Inv}; var i:1..13; begin clrscr; for i:=1 to 13 do writeln(Ms ,i,: , meses[i]); readkey; end. Exemplo: uses crt; var i,j: byte; num_apt,num_pes: array[1..20] of array[1..3] of string[3]; {vetor de um vetor} soma: integer; begin clrscr; soma := 0; for i:= 1 to 20 do {um vetor de um vetor = uma matriz} begin write(Nmero de apartamento do ,i,andar e bloco , j,: ); readln(num_apt[i,j]); soma := soma + num_pes[i,j]; end; clrscr; writeln(Nmero total de pessoas do edifcio: ,soma); writeln(Mdia de pessoas por apartamento: ,soma/60:3:0); readkey; end. {no prximo captulo ser estudada a estrutura matriz} Apostila de Turbo Pascal 7.0 72

CAPTULO XVI ARRAYS MULTISIMENSIONAIS


Este captulo tem por objetivo instruir o leitor na utilizao de matrizes de duas ou mais dimenses nos programas.

1. Matrizes
Os tipos dos componentes de um array no precisam necessariamente ser inteiros, reais ou outro tipo de dados simples. Na verdade, um array pode conter dados de qualquer tipo, at mesmo outros arrays. Se um vetor contm outro vetor como tipo, ele denominado array multidimensional ou simplesmente matriz. type apart = array[1..10] of array[A..C] of string[40]; var propriet: apart; Cada elemento na vertical de propriet um novo array. O mesmo foi definido com 10 linhas (1..10) e 3 colunas (A..C). A 1 2 3 4 5 6 7 8 9 10 B Luciana Gomes C

Janana Pereira

Ftima de Souza

Para acessar ou gravar dados em qualquer um dos 30 apartamentos do edifcio acima, basta utilizar os dois ndices, linha e coluna: propriet[2,B] := Luciana Gomes; propriet[10,C] := Ftima de Souza; propriet[5,A] := Janana Pereira; O uso de matrizes to comum que o Pascal permite uma forma curta para a definio. type apart = array[1..10,A..C] of string[40]; var propriet: apart;

1.1. Acessando Elementos da Matriz Um elemento pode ser selecionado pela expresso geral matriz[i,j], onde matriz uma varivel do tipo matriz, i o ndice das linhas e o j o ndice das colunas. Considere a matriz a seguir e veja se possveis operaes que podem ser feitas para acessar seus elementos: 1 1 2 3 4 2 10 Mat[1,2]:=10; Readln(mat[3,2]); For i:= 1 to 4 do For j:=1 to 2 Readln(mat[I,j]); Mat[3,1]:=15; readln(mat[4,1]); Mat[4,2]:=0; {atribuio} {leitura individual}

15 0

{usando loops for aninhados possvel} {fazer a leitura de todos os elementos} {da matriz} 73

Apostila de Turbo Pascal 7.0

Exemplo: uses crt; var i,j: byte; mat:array[1..4,1..2] of integer; begin clrscr; for i:= 1 to 4 do {linhas} for j:=1 to 2 do {colunas} readln(mat[I,j]); end.

2. Matriz Constante
Uma matriz constante deve ser definida da seguinte forma: type apart = array[1..5,1..2] of string[3]; const num: apart = ((101,102), (103,104), (105,106), (107,108), (109,110)); ... { 1 linha 2 linha 3 linha 4 linha 5 linha } write(num[3,2]); {106} write(num[1,1]); {101} Exemplo: uses crt; const alunos: array[1..3,101..103] of string[10] = ((Cenira,Joana,Marcia), {primeira linha} (Lourdes,Ngyla,Luciana), {segunda linha} (Patrcia,Marcos,Anglica)); {terceira linha} var i,j: byte; begin clrscr; for i:=1 to 3 do for j:=101 to 103 do writeln(Aluno(a),I, da turma ,j,: ,alunos[i,,j]); {listar por linha} writeln; for j:=101 to 103 do for i:=1 to 3 do writeln(Aluno(a),I, da turma ,j,: ,alunos[i,,j]); {listar por coluna} readkey; end.

3. Aplicaes com Matrizes


A seguir sero descritos programas para desenvolver as seguintes operaes com matrizes na matemtica: a) construo de matrizes; b) soma de matrizes; c) matrizes transpostas.

3.1. Construo de Matrizes Construir a matriz B2x4 tal que bij = i2-j, se i Exemplo: Program construir_matrizes; uses crt; const linhas = 2; Apostila de Turbo Pascal 7.0 74

j ou 5+2j, se i=j.

colunas = 4; type matriz = array[1..linhas,1..colunas] of integer; var b: matriz; i:1..linhas; j: 1..colunas; begin clrscr; for i:=1 to linhas do for j:=1 to colunas do begin gotoxy(j*5,i*2); if (i=j) then B[i,j]:=5+2*j else B[i,j] := I*I-j; end; readkey; end.

O programa ao lado apenas gera a matriz, no listando seu contedo na tela. Para listar, basta usar loops for aninhados.

3.2. Somando Duas Matrizes S podemos somar matrizes de mesmo tipo, ou seja, o nmero de linhas e colunas o mesmo nas duas. Exemplo: Program somar_matrizes; uses crt; const linhas = 4; {constants globais} colunas = 4; type matriz = array[1..linhas,1..colunas] of integer;

{tipo global}

Procedure leia_matriz(var m1:matriz; msg:string; x,y:byte); var i,j: 1..linhas; begin gotoxy(x,y-1); write(msg); {na linha de cima, escreva a mensagem} for i:=1 to linhas do begin for j:=1 to colunas do begin gotoxy(x,y); read(m1[i,j]); inc(x,4); end; dec(x,4*colunas); inc(y); end; end.

Procedure soma(m1,m2: matriz; var soma: matriz); var i,j: 1..linhas; begin for i:=1 to linhas do for j:=1 to colunas do soma[i,j]:=m1[i,j]+m2[i,j]; end.

Apostila de Turbo Pascal 7.0

75

Procedure escreva_matriz(msg:string; m1:matriz; x,y:byte); var i,j: 1..linhas; begin gotoxy(x,y-1); write(msg); {na linha de cima, escreva mensagem} for i:=1 to linhas do begin for j:=1 to colunas do begin gotoxy(x,y); write(m1[i,j]); inc(x,4); end; dec(x,4*colunas); inc(y); end; end. var mat1,mat2,soma: matriz; {variveis locais ao programa principal} begin clrscr; leia_matriz(mat1,Matriz Numero 1,1,2); {comeando na coluna 1, linha 2} leia_matriz(mat2,Matriz Numero 2,40,2); {comeando na coluna 40, linha 2} soma(mat1,mat2,soma); escreva_matriz(Matriz soma,soma,1,12); readkey; end.

3.3. Matrizes Transpostas Matriz transposta toda a matriz onde so trocadas as linhas pelas colunas, ou vice-versa. Exemplo: Program matriz_transposta; uses crt; const linhas=3; colunas=2; type matriz = array[1..linhas,1..colunas] of integer; transp = array[1..colunas,1..linhas] of integer; Procedure leia_matriz(var m1: matriz); var i,j:byte; begin for i:= 1 to linhas do for j:=1 to colunas do begin gotoxy(j*5,2+i*2); read(m1[i,j]); end; end; Procedure transposta(m1: matriz;var t: transp); var i,j:byte; begin for i:= 1 to linhas do for j:=1 to colunas do t[i,j] := m1[i,j]; end; Apostila de Turbo Pascal 7.0 76

Procedure escreva_matriz(m1: transp); var i,j:byte; begin for i:= 1 to linhas do for j:=1 to colunas do begin gotoxy(j*5,12+i*2); read(m1[i,j]); end; end;

var mat: matriz; t: transp; vegin clrscr; writeln(Matriz Transposta); leia_matriz(mat); transposta(mat,t); escreva_matriz(t); readkey; end.

Apostila de Turbo Pascal 7.0

77

CAPTULO XVII TIPOS ESTRUTURADOS - REGISTRO


Este captulo tem por objetivo orientar o leitor na utilizao da estrutura heterognea Record (registro).

1. Introduo
Um vetor de strings pode ser usado para guardar os nomes dos empregados de uma firma. Um vetor de reais pode ser usado para guardar seus respectivos salrios. Entretanto, uma matriz bidimensional no pode ser usada para guardar os nomes e os salrios dos empregados, porque todos os elementos de uma matriz devem ser do mesmo tipo. No entanto, estruturas que usam elementos de tipos diferentes, mas que esto logicamente relacionados entre si, so muito comuns e necessrias em vrias reas. Observe a ficha abaixo:

INSC 121 Integer

NOME Lcia Nunes string

SALRIO 650,00 real

OPTANTE Sim char

Uma estrutura desse tipo definida em Turbo Pascal como um Record. A cada elemento d-se o nome de campo ou componente. Esse conjunto de informaes do empregado dever ser referenciado por um identificador, como por exemplo, ficha. Records correspondem a conjuntos de posies de memria conhecidos por um mesmo nome e individualizados por identificadores associados a cada conjunto de posies. write(ficha.insc); ficha.salario := 650; {ir imprimir o campo insc do registro ficha} {ir armazenar no campo salrio do registro ficha, o valor 650}

2. Declarao
H duas maneiras de se declarar uma varivel Record. Exemplo: type ficha = record insc: integer; nome: string; salario: real; optante: char; end; var func: ficha; Exemplo: var func: record insc: integer; nome: string; salario: real; optante: char; end;

Apostila de Turbo Pascal 7.0

78

Os campos podem pertencer a qualquer tipo padro ou definido pelo usurio, e no existe nenhum limite para o nmero de campos da estrutura Record. O fim da definio est marcado com a palavra reservada End. Aps a definio de tipo, podemos declarar uma ou mais variveis que pertenam ao tipo Record.

Exemplo: type apt = record num: byte; propriet: string[30]; end; var moradores,sindicos: apt;

3. Operaes com tipo Record


Veja o programa abaixo que ilustra as principais operaes com informaes do tipo record. Exemplo: Program uso_record; uses crt; type ficha = record; codigo: integer; nome: string[45]; tel: string[10]; end; var aluno,func:ficha; begin clrscr; write(Cdigo do aluno: ); readln(aluno.codigo); write(Nome do aluno: ); readln(aluno.nome); write(Telefone do aluno: ); readln(aluno.tel); with func do begin write(Cdigo do funcionrio:); readln(codigo); write(Nome do funcionrio:); readln(nome); write(Telefone do funcionrio:); readln(tel); end; if aluno.nome = func.nome then aluno := func {atribuio de toda estrutura numa operao simples} else writeln(Aluno e Funconrios so pessoas diferentes !); readkey; end.

1. 2. 3. 4. 5.

possvel transferir toda a estrutura numa nica operao de atribuio como feito no programa acima. O Turbo Pascal no permite comparao direta de variveis Record, apenas de seus campos. Para comparar dois records, preciso comparar individualmente todos os campos dos records. No possvel ler diretamente variveis Record, preciso ler campo a campo. O comando WITH pode ser usado para simplificar o trabalho com dados Record.

Apostila de Turbo Pascal 7.0

79

4. O comando WITH
O comando WITH permite que os campos de um Record sejam referenciados sem listar toda vez o nome do identificador de varivel Record (e o ponto), como aplicado no programa anterior. Exemplo: with aluno, diretor do begin write(Nome do aluno: ); write(Idade: ); write(CPF do diretor: ); write(Telefone: ); end;

readln(nome); readln(idade); readln(cpf); readln(tel);

{aluno.nome} {aluno.idade} {diretor.cpf} {diretor.tel}

Caso dois records possuam campos em comum, devemos separar cada record com seu with, ou ento especificar o identificador Record para que no haja confuso nos dados: Exemplo: with aluno, diretor do begin write(Nome do aluno: ); write(Idade: ); write(CPF do diretor: ); write(Telefone: ); end; Caso no seja colocado o identificador Record, ser assumido apenas a ltima varivel nome do comando with junto com o ltimo identificador declarado (diretor), no caso ao lado, diretor.nome

readln(aluno.nome); readln(aluno.idade); readln(diretor.cpf); readln(diretor.tel);

{aluno.nome} {aluno.idade} {diretor.cpf} {diretor.tel}

5. Record dentro de Record


Observe o trecho de programa a seguir: type ficha = record codigo: integer; nome: string[45]; ender: Record rua: string[30]; num: Word; bairro: string[20]; end; tel: string[10]; end; var cliente: ficha; begin clrscr; with cliente, cliente.ender do begin write(Cdigo do cliente: ); readln(codigo); write(Nome: ); readln(nome); write(Endereo - Rua: ); readln(rua); write(Nmero: ); readln(num); write(Bairro: ); readln(bairro); write(Telefone: ); readln(tel); end; if cliente.ender.rua = Av. Alberto Torres then {referncia de um Record interno a outro} writeln(Mora no centro); else if cliente.nome = Joao Gomes then {record comum} writeln(Gente boa); readkey; end. Apostila de Turbo Pascal 7.0 80

4.

Observe que utilizamos um record dentro de outro record. Isto cabvel na programao Pascal, bastando apenas que faamos a referncia varivel Record mais externa, depois mais interna e finalmente o identificador de campo. Caso tenhamos dois identificadores Record que possuam campos internos iguais, aconselhvel diferencia-los para que no haja confuso nas operaes (rua1, rua2, ender1, ender2, etc).

5.

6. Constante Record
O Turbo Pascal permite que se defina uma constante tipo Record. Exemplo: type ficha = record codigo: integer; nome: string[45]; end; const fornecedor: ficha = (codigo:4; nome:Lucia Santos); Dentro do parentses, a ordem dos campos deve ser a mesma que aparece na definio do Record e os valores dos campos devem ser do mesmo tipo daqueles definidos na declarao do record. Exemplo: type ficha = record nome: string[45]; ender: record rua: string[30]; num: Word; end; tel: string[10]; end; const aluno: fich = (nome:Maria; ender:(rua:Av. Bambina;num:10); tel:7222222); Observe no trecho acima como fazer quando o Record possui outro Record inteiro.

7. Array de Records
J aprendemos que o tipo de um array pode ser um tipo qualquer, portanto, um Record pode ser um tipo de um array. Veja o trecho de programa abaixo: Exemplo: type ficha = record codigo: integer; nome: string[45]; ender: record rua: string[30]; num: Word; bairro: string[20]; end; tel: string[10]; end; var clientes: array[1..100] of ficha; i: 1..100; begin clrscr; for i:=1 to 100 do Apostila de Turbo Pascal 7.0 81

with cliente[i], cliente[i].ender do begin write(Cdigo do cliente: ); write(Nome: ); write(Endereo - Rua: ); write(Nmero: ); write(Bairro: ); write(Telefone: ); end; readkey; end.

readln(codigo); readln(nome); readln(rua); readln(num); readln(bairro); readln(tel);

8. Record com Variante


Em muitas aplicaes do cotidiano de um programador, so necessrias estruturas flexveis de dados. Uma lista fixa de campos de uma varivel Record, como usamos at agora, pode no satisfazer as necessidades de um determinado conjunto de dados. Felizmente, o Turbo Pascal permite criar uma estrutura que contenha alguns campos que variam de acordo com a situao. Tal estrutura conhecida como Record com variante. Exemplo: Program Record_com_variante; uses crt; var aluno: record codigo: word; nome: string[40]; case tipo: byte of 0: (pai,mae:string[40]); 1: (cpf,ident:string[12]); end; begin clrscr; with aluno do begin write(Cdigo cadastrado: ); write(Nome: ); write(Endereo 1 - Rua: ); write([0] Aluno [1] Funcionrio: ); if tipo = 0 then begin write(Nome do pai: ); write(Nome da me: ); end; else begin write(Identidade: ); write(Num.cpf: ); end; end; readkey; end.

readln(codigo); readln(nome); readln(rua); readln(tipo);

readln(pai); readln(mae);

readln(ident); readln(cpf);

Apostila de Turbo Pascal 7.0

82

O identificador de campo que vem aps a palavra CASE denominado por muitos de campo de etiqueta. Os campos variantes correspondentes a um particular valor do campo etiqueta devem ser colocados entre parnteses. Um campo variante vazio denotado por (). O campo etiqueta pode ser qualquer identificador de tipo escalar. No h um END especial para a parte variante porque esta finalizada pelo END que finaliza o Record inteiro. Portanto, a parte variante de um Record sempre vem no fim do mesmo. Cada identificador de campo de um Record, tenha ou no uma parte variante, deve ser diferente de qualquer tipo de campo naquele Record. Portanto, no possvel tem no mesmo Record dois identificadores de campo iguais.

Apostila de Turbo Pascal 7.0

83

CAPTULO XVIII TURBO DEBBUGER


Este captulo tem por objetivo demonstrar ao leitor aomo depurar um programa por meio do Debbuger do Turbo Pascal..

1. Definio
Um debugger ou um depurador um programa que permite a execuo gradativa e controlada de um programa, mediante comandos do programador pelo teclado, sendo a sua ferramenta mais valiosa, depois do crebro. O Turbo Debugger acompanha o Turbo Pascal, e permite que um programa seja executado uma linha de cada vez.

2. Execuo Linha-a-linha Usando o Debugger


a) Para comear, execute manualmente o programa abaixo e faa um esquema da sua tela de sada.

PROGRAM QuadradoComX; {Mostra na tela um quadrado feito com letras X. Feito por Fulano de Tal, em 11/11/99} uses CRT; begin clrscr; writeln( 'XXXXX' ); writeln( 'X X' ); writeln( 'X X' ); writeln( 'X X' ); writeln( 'XXXXX' ); end. b) Agora digite, compile e execute o programa, comparando a tela obtida com a prevista.

c) Agora vamos executar o programa usando o debugger. Com a janela do programa-fonte ativa, tecle F7. Isto inicia o debugger e a execuo linha-a-linha. Uma barra horizontal surge na tela, posicionada sobre o begin. Essa barra indica qual ser a prxima linha de instrues que ser executada. Tecle F7 novamente. A barra estar sobre o clrscr. A prxima operao a ser efetuada limpar a tela. Qual tela? Bem, a tela do seu programa no est aparecendo; voc est no editor. Para ver a tela de sada do seu programa, tecle Alt-F5. Tudo que o seu programa fizer vai aparecer a. O que voc v agora, antes da execuo da primeira instruo, a tela DOS, contendo o que aconteceu antes de voc entrar no Turbo Pascal ou o resultado do ltimo programa executado. Tecle qualquer coisa para voltar ao programa-fonte.

d) Tecle de novo F7, para executar o primeiro writeln, e novamente Alt-F5. Veja o que houve na tela DOS e tecle algo para retornar.

e) Novamente F7, para executar o prximo writeln. Veja o que apareceu na tela.

f)

Continue teclando F7, at chegar ao end.

Apostila de Turbo Pascal 7.0

84

Observe que a figura foi construda na tela uma linha de cada vez na seguinte seqncia:

XXXXX

XXXXX X X

XXXXX X X X X

XXXXX X X X X X X

XXXXX X X X X X X XXXXX

Usar o debugger no til somente para encontrar erros, mas tambm para voc ver as instrues funcionando e assim aprender mais rapidamente.

Apostila de Turbo Pascal 7.0

85

CAPTULO XIX I/O CHECKING


Este captulo tem por objetivo demonstrar ao leitor o controle dos erros de entrada e sada nos programas.

1. Run-time Error
A expresso run-time errors indica erros em tempo de execuo, sabemos que nenhum programa est livre de receber dados indesejveis dos usurios como, por exemplo, receber um nome de funcionrio em um local onde era para ser digitado o seu salrio. Da mesma forma, se tentarmos abrir um arquivo no disco, se o mesmo no existir, ser gerado um erro em tempo de execuo, o programa ser abortado e sem dvida alguma, o usurio no ir entender nada do que aconteceu. Exemplo: Program teste; uses crt; var num: integer; begin clrscr; {$I-} readln(num); {$I+} writeln(ioresult); readkey; end. Se voc digitar um nmero inteiro qualquer, o programa ir funcionar normalmente e ser impresso na tela 0 (zero), o resultado da operao de I/O (entrada/sada input / output). Mas se, por exemplo, voc digitar seu nome, o programa tambm ir funcionar normalmente, s que o resultado da operao ser 106, que indica Formato Numrico Invlido (Invalid Numeric Format), basta olhar na tabela de erros em tempo de execuo (ver Apndice A). As concluses: EXPRESSO/COMANDO {$I-} (diretiva de checagem de I/O) {$I+} (diretiva de checagem de I/O) Ioresult AO Desliga a checagem de proced. de entrada e sada de dados Liga a checagem de I/O de dados (valor padro) Retorna o cdigo do erro, caso haja, ou retorna 0 (zero), caso a operao seja bem sucedida. (ver tabela pg. 4-5)

Exemplo: uses dos,crt; var f: file of byte; begin {Com ParamStr(1) obtm-se o nome do arquivo direto na linha de comando} Assign(F,ParamStr(1)); {$I-} Reset(F); {$I+} {tenta abrir o arquivo para leitura} if IOResult = 0 then {se no houve erros} writeln(Tamanho de arquivo em bytes: ,FileSize(F)) else writeln(Arquivo no encontrado); end. Apostila de Turbo Pascal 7.0 86

CAPTULO XX O TIPO TEXT - ARQUIVOS


Este captulo tem por objetivo orientar o leitor na manipulao de arquivos-texto nos programas.

1. Introduo
Todas as operaes de entrada e sada so executadas atravs de arquivos. Para simplificar essas operaes o Turbo Pascal abre automaticamente dois arquivos-texto denominamos input e output, no incio de cada execuo do programa. Graas a essas variveis de arquivos predefinidas, a procedure READ aceita, por default, os dados pelo teclado e a procedure WRITE envia os dados para a tela. J vimos em captulos anteriores que a sintaxe da procedure READ Read(disp,var), onde disp um dispositivo qualquer de I/ Como por exemplo, o dispositivo LST um arquivo-texto direcionando a sada para a impressora.

2. Arquivos de Dados
Um arquivo de dados tem a propriedade de ser independente dos programas. separado de qualquer programa e pode ser acessado e usado por muitos programas diferentes. Na maioria dos casos, usamos um nico programa para introduzir as informaes no arquivo de dados e grav-lo em disco. A partir deste momento, podemos ler as informaes daquele arquivo de dados usando muitos programas diferentes, cada um executando uma atividade diferente com o arquivo. Suponha que voc tenha necessidade de criar um arquivo de dados, para guardar os nomes, endereos e telefones de seus amigos. Inicialmente, voc precisar de um programa para introduzir as informaes no arquivo e adicionar novos dados ao mesmo. Um outro programa poder ser criado para listar as informaes do arquivo. Outro permitir voc selecionar um nmero de telefone do arquivo usando o nome do amigo como critrio de seleo. Voc pode criar outro programa para mudar os endereos e os telefones. Outro para imprimir etiquetas contendo as informaes do arquivo. As possibilidades continuam... O arquivo de dados gravado no disco, separadamente dos programas, num lugar especfico, e pode ser acessado por muitos programas diferentes. Cada programa descrito acima, copia as informaes gravadas no disco para memria do computador e esses dados so manuseados em memria de acordo com as necessidades de cada programa. Alternativamente, o programa poder transferir as informaes da memria do computador para serem gravadas no disco.

3. Tipos de Arquivos
O Turbo Pascal admite trs tipos de arquivos: Arquivo Typed (arquivo tipado): pode conter praticamente todos os tipos de dados, menos o tipo FILE. Isto quer dizer que podemos criar um arquivo para guardar reais, arrays, records, mas no podemos criar um arquivo de arquivo. Cada elemento pertencente ao arquivo tipado pode ser acessado diretamente pelo nmero, isto , um registro pode ser acessado imediatamente sem que tenhamos que acessar todos os registros anteriores. Esse tipo de acesso denominado randmico ou direto. Um arquivo tipado um arquivo randmico. Arquivo Text: pertence a um tipo predefinido do Pascal denominado Text. Os arquivos Text so armazenados no disco como linhas de caracteres ASCII e s podem ser acessados de forma seqencial, isto , s podem ser lidos ou escritos do incio para o fim do arquivo. Um arquivo seqencial em disco est projetado para ser lido do incio ao fim, toda vez que for aberto. Em outras palavras, no existe uma forma de pular diretamente de um determinado registro para outro num ponto qualquer do

Apostila de Turbo Pascal 7.0

87

arquivo. Por essa razo, os arquivos seqenciais so melhor usados em aplicativos que executam tarefas sobre todo um conjunto de dados ao invs de execut-las sobre um determinado registro. Arquivo Untyped (sem tipo): pode ser associado a qualquer arquivo de disco, sendo que o tamanho do registro seja de 128 bytes. As operaes de entrada e sada usando um arquivo sem tipo transferem dados diretamente de um arquivo em disco para uma varivel de memria e vice-versa, sem passar pela memria temporria (buffer), o que, alm de economizar espao na memria, tambm torna a operao ligeiramente mais rpida. Seu uso muito limitado. Quando um arquivo aberto apenas para uma operao de remoo ou troca de nome, aconselhvel usar um arquivo sem tipo.

Os

procedimentos para manipulao de qualquer arquivo so: Definir uma varivel de arquivo e associar a varivel ao nome do arquivo no disco. Abrir o arquivo, para leitura ou para escrita ou para ambos. Ler os dados do arquivo ou gravar dados no mesmo. Fechar o arquivo quando o processo terminar.

4. Declarao e Assinalamento de Arquivos-Texto


O Pascal usa a palavra reservada TEXT como identificador padro de arquivos-texto. A sintaxe para definir variveis desse tipo: var arq_alunos: text; arq_func: text[512];

Os arquivos-texto so definidos inicialmente com memria temporria de 128 bytes. Isto quer dizer que o Pascal trabalha com 128 bytes de informaes de cada vez. Esse tamanho de memria temporria adequado para a maioria das aplicaes. Entretanto, no caso de programas que utilizam repetidamente informaes guardadas em disquetes, como o caso de programas de banco de dados, pode ser conveniente aumentar a capacidade de memria temporria. Para estabelecer o tamanho da memria temporria, basta colocar o nmero de bytes desejado entre colchetes depois da palavra TEXT, na declarao da varivel de arquivo (como no exemplo acima). Normalmente, declaramos uma varivel de memria, do mesmo tipo de dados que vo ser gravados ou lidos no arquivo. essa varivel que guarda em memria os contedos dos registros que vo ser lidos do arquivo ou que vo ser gravados no arquivo. Todo o manuseio com os dados feito em memria. O arquivo de dados utilizado apenas para gravar ou ler informaes. Exemplo: type dados = record nome: string[30]; tel: string[10]; end; var arq_alunos: text; registro: dados;

Para utilizarmos uma varivel de arquivo para acessar um arquivo-texto, temos que associar a varivel a um determinado nome de arquivo em disco. Denominamos esse processo de assinalamento. A procedure predefinida que executa esta tarefa ASSIGN. Assign associa o nome da varivel de arquivo a um nome de arquivo em disco. Nunca deve ser usada em arquivos que j estejam em uso. Exemplo: assign (arq_alunos,ALUNOS.DAT); A partir desse comando, toda referncia a arq_alunos no programa ser dirigida ao arquivo no disco chamado alunos.dat. Apostila de Turbo Pascal 7.0 88

Caso um programa tenha mais de uma varivel de arquivo, teremos que assinalar individualmente cada varivel, isto , teremos tantos assign quanto forem as variveis de arquivo. Assinalar uma varivel arquivo criar um buffer especfico para aquela varivel. Um buffer uma parte da memria do computador, com determinada capacidade, que criada para atuar como intermedirio entre o programa e o arquivo de dados no disco. A informao que se encontra no disco, primeiro copiada para buffer, uma determinada quantidade de bytes de cada vez, estando, portanto, disponvel ao programa para manipulao. Do mesmo modo, as informaes, para serem gravadas em disco, so primeiramente acumuladas no buffer. Quando o buffer est cheio, as informaes so copiadas para o disco. ALUNOS.DAT BUFFER MEMRIA Graas aos buffers, os dados so movimentados corretamente, para os arquivos especificados. O default de arquivos que podem ser abertos simultaneamente no Pascal 16. Se voc deseja aumentar o nmero de arquivos que podem permanecer abertos basta usar a diretiva F do compilador. {$F20}. Voc tambm pode alterar o nmero de arquivos abertos ao dar boot no sistema, uando a declarao FILES do arquivo CONFIG.SYS, alm tambm de poder estabelecer o nmero de buffers utilizveis (BUFFERS). Exemplo: {$F20} uses crt; type dados = record nome: string[30]; tel: string[10]; end; var arq_alunos: text; registro: dados; begin clrscr; assign(arq_alunos,ALUNSO.DAT);

5. Abrindo um Arquivo-Texto
Um determinado arquivo-texto pode ser aberto para leitura ou gravao, mas no para ambas operaes ao mesmo tempo. O Turbo Pascal fornece trs procedures diferentes para abertura de um arquivo-texto: a) Rewrite (var de arquivo): cria um novo arquivo e o abre para operaes de escrita. Aps a abertura, podemos usar procedures WRITE e WRITELN para escrever os dados e linhas de texto no arquivo. Caso o nome do arquivo j exista no disco, este procedimento destri o arquivo antigo e cria outro vazio e com o mesmo nome, isto significa que todos os dados do arquivo existente sero perdidos. b) APPEND (var de arquivo): abre um arquivo-texto j existente, de modo que podemos adicionar novos registros no fim do arquivo. Ocorre um erro de I/O se o arquivo no existir no disco. Aps a abertura, podemos usar as procedures WRITE e WRITELN para escrever dados no arquivo. c) RESET(var de arquivo): abre um arquivo j existente para leitura. Aps a abertura do arquivo, podemos usar as procedures READ e READLN para lermos dados e linhas de texto do arquivo. Em contraste com a procedure REWRITE que cria um arquivo novo destruindo o antigo, caso exista, as procedures APPEND e RESET assumem a existncia de um arquivo nomeado no disco. Se o arquivo no puder ser localizado, em ambos os casos, resultaro em erros de I/O em tempo de execuo.

Apostila de Turbo Pascal 7.0

89

Exemplo: uses crt; type dados = record nome: string; tel: string; end; var registro: dados; arq_reg: text; begin clrscr; assign(arq_reg,ALUNOS.DAT); {$I-} reset(arq_reg); {$I+} if IOResult = 0 then write(Arquivo ALUNOS.DAT aberto para leitura); else begin rewrite(arq_reg); write(Arquivo ALUNOS.DAT criado); end; readkey; close(arq_reg); end.

6. Escrevendo Dados num Arquivo-Texto


Veja o programa-exemplo abaixo: uses crt; type dados = record nome: string; tel: string; end; var registro: dados; arq_reg: text; conf: char; begin clrscr; assign(arq_reg,ALUNOS.DAT); {$I-} append(arq_reg); {$I+} if IOResult = 0 then writeln(Arquivo ALUNOS.DAT aberto para leitura); else begin rewrite(arq_reg); write(Arquivo ALUNOS.DAT criado); end; readkey; repeat write(Entre com um nome: ); readln(registro.nome); write(Seu telefone: ); readln(registro.tel); write(Confirma gravao ? <S/N>: ); conf := upcase(readkey); if conf = S then writeln(arq_reg,registro.nome,#32,registro.tel); until conf=N; close(arq_reg); end. Apostila de Turbo Pascal 7.0 90

Observe que o comando WRITELN automaticamente insere ao final da linha um caracter de retorno de carro (#13) e um de alimentao de linha (#10). Podem ser usados como caracteres delimitadores de campos: espao (#32) e tabulao (#9).

7. Fechando um Arquivo-Texto
Para fechar qualquer arquivo aberto, o Pascal dispe da procedure CLOSE, como foi visto nos exemplos anteriores de programas. Notas sobre o comando close: Se vrios arquivos foram abertos simultaneamente, teremos que fech-los individualmente, usando um comando close para cada um. O comando CLOSE fecha o arquivo externo em disco, mas no termina com o assinalamento feito pelo comando ASSIGN. Isto significa que o programa pode usar um comando REWRITE, RESET ou APPEND aps o comando CLOSE se necessrio. CLOSE um comando muito importante, pois usado para manter a integridade e exatido dos arquivos de dados. Relembre que o buffer atua como um intermedirio entre o programa e o arquivo em disco. Quando se executa uma operao de gravao, os dados so enviados primeiramente para o buffer. Quando o buffer est cheio, os dados so gravados em disco. Freqentemente essa operao chamada de atualizao de arquivos em disco.

O que acontece quando o buffer s est parcialmente cheio e no existem mais dados para preench-lo. Se voc est esperando que o buffer semi-cheio simplesmente transfira seu contedo para o disco quando o programa termina a sua e xecuo, voc est enganado. Os dados de um buffer semi-cheio no so necessariamente gravados no arquivo. O comando CLOSE fora o buffer a transferir o seu contedo para o arquivo de disco, mesmo que o buffer no esteja cheio.

8. Lendo Dados de um Arquivo-Texto


Veja o programa-exemplo abaixo: uses crt; type dados = record nome: string; tel: string; end; var registro: dados; arq_reg: text; conf: char; begin clrscr; assign(arq_reg,ALUNOS.DAT); {$I-} reset(arq_reg); {$I+} {tentando abrir para leitura} if IOResult <> 0 then exit; {algum problema, fim} with registro do begin repeat Apostila de Turbo Pascal 7.0 91

readln(arq_reg,nome,tel); {lendo do arquivo} write(nome, ,tel); {listando na tela} until eof(arq_reg); {repita at que o final do arquivo seja atingido} end; close(arq_reg); readkey; end.

Quando o programa est lendo uma seqncia de valores de um arquivo texto, a procedure READ reconhece os caracteres delimitadores usados durante o processo de gravao. O arquivo-texto foi projetado para conter s caracteres ASCII. Mesmo assim, as procedures READ e READLN podem ler apropriadamente valores de dados numricos ou strings. evidente que durante um processo de leitura, no podemos colocar valor de uma varivel string numa varivel numrica. J foi dito que um arquivo-texto um arquivo seqencial, por isso necessrio sabermos quando o fim de arquivo foi atingido. A quantidade de linhas gravadas pode ser controlada pelo programador, atravs de tcnicas, porm, o modo mais prtico para se descobrir o fim do arquivo usado a funo booleana EOF, como foi aplicado no exemplo acima.

A funo EOF retorna true se o ponteiro estiver no final do arquivo. Caso contrrio, a funo retornar false, indicando que o fim do arquivo no foi atingido.

Apostila de Turbo Pascal 7.0

92

APNDICE A ERROS DE COMPILAO


Este apndice apresenta uma relao dos 170 possveis erros de compilao do Turbo Pascal.

ERRO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

DESCRIO Out of memory Identifier expected Unknown identifier Duplicate identifier Syntax error Error in real Constant Error in integer Constant String Constant exceeds line Too many nested files Unexpected end of file Line too long Type identifier expected Too many open files Invalid file name File not found Disk full Invalid file name Too many files Undefined type in pointer def Variable identifier expected Error in type Structure too large Set base type out of range File components may not be files or objects Invalid string length Type mismatch Invalid subrange base type Lower bound > than upper bound Ordinal type expected Integer Constant expected Constant expected Integer or real Constant expected Pointer type identifier expected Invalid function result type Label identifier expected Begin expected End expected Integer expression expected Ordinal expression expected Boolean expression expected Operand types do not match Error in expression Illegal assignment Field identifier expected Object file too large Undefined extern Invalid object file Record Code segment too large Data segment too large Do expected Invalid public definition Invalid extern definition

TRADUO No existe espao em memria Identificador esperado Identificador desconhecido Identificador j existente Erro de sintaxe Erro na constante real Erro na constante inteira Constante string excede a linha Muitos arquivos aninhados Fim de arquivo no esperado Linha muito longa Espera a identificao do tipo Muitos arquivos abertos simultaneamente Nome de arquivo invlido Arquivo no encontrado Disco cheio Diretiva de compilao invlida Excesso de arquivos Ponteiro nunca antes declarado Identificador de varivel esperado Erro de tipo Estrutura muito larga Faixa de valores invlida para a faixa Componentes do arquivo no devem ser arquivos ou objetos Tamanho de string invlido Tipos misturados / incompatvel Faixa de valores invlida Limite inferior > limite superior Tipo escalar esperado Constante inteira esperada Constante esperada Constante inteira ou real esperada Identificador de tipo ponteiro esperado Tipo de resultado da funo invlido Identificador Label esperado Begin esperado End esperado Expresso inteira esperada Expresso ordinal esperada Expresso booleana esperada Operando incompatvel com o operador Erro na expresso Associao ilegal Identificador de campo esperado Arquivo objeto muito grande Extern indefinido Objeto de registro de arquivo invlido Segmento de cdigo muito grande Segmento de dados muito grande Do esperado Definio public invlida Definio extern invlida 93

Apostila de Turbo Pascal 7.0

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 112 113

Too many extern definitions Excesso de definies extern Of expected Of esperado Interface expected Interface esperada Invalid relocatable reference Referncia relocvel invlida Then expected Then esperado To or Downto expected To ou Downto esperado Undefined forward Forward indefinido Too many procedures Excesso de procedures Invalid typecast Tipo de resultado invlido Division by zero Diviso por zero Invalid file type Tipo de arquivo invlido Cannot read or write vars of this type Variveis desse tipo no podem ser lidas / escritas Pointer variable expected Varivel do tipo ponteiro esperada String variable expected Varivel do tipo String esperada String expression expected Expresso string esperada Circular unit reference Referncia circular da unit Unit name mismatch Nome da unit incompatvel Unit version mismatch Verso da unit incompatvel Duplicate unit name Nome da unit duplicada Unit file format error Erro no formato do arquivo unit Implementation expected Implementation esperado Constant and case types dont match Constante e expresso do case incompatveis Record variable expected Varivel do tipo Record esperada Constant out of range Constante fora de faixa File variable expected Varivel de arquivo esperada Pointer expression expected Expresso tipo ponteiro esperada Integer or real expression expected Expresso inteira ou real esperada Label not within current block Label for a do bloco atual Label already defined Label j foi definido Undefined label in stmt part Label no declarado Invalid @@ argument Argumento @@ invlido Unit expected Unit esperado ; expected ; esperado : expected : esperado , expected , esperado ( expected ( esperado ) expected ) esperado = expected = esperado := expected := esperado [ or ( expected [ or ( esperado ] or ) expected ] or ) esperado . Expected . Esperado .. expected .. esperado Too many variables Variveis demais Invalid for control variable Varivel de controle loop for invlida Integer variable expected Varivel do tipo integer esperada Files and procedure types are not allowed here Arquivos e procedimentos no permitidos aqui String length mismatch Comprimento da string incompatvel Tamanho da String incompatvel Erro de ordenao Constante String esperada Varivel Integer ou real esperada Varivel ordinal esperada Erro em INLINE Expresso character esperada Excesso de itens relocados Estouro em operao aritmtica No pode ser utilizado em FOR, WHILE ou REPEAT Estouro da tabela de informao de Debug Constante CASE fora da faixa 94

Apostila de Turbo Pascal 7.0

114 115 116 117 118 119 121 122 123 124 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

Erro na sentena Procedimento de interrupo no pode ser chamado A diretiva de compilao 8087 deve estar ativada Endereo de destino no encontrado Incluso de arquivos no permitida neste ponto Mtodo de hierarquia no pode ser utilizado aqui Qualificao invlda Referncia de varivel invlida Excesso de smbolos Parte de comando muito grande Arquivos devem ter parmetro var Excesso de smbolos condicionais Diretiva condicional em local no apropriado Falta diretiva endif Erro na definio condicional Cabealho incompatvel com definio anterior Erro crtico em disco No possvel avaliar esta expresso Expresso terminada incorretamente Formato especificado invlido Referncia indireta invlida No so permitidas variveis estruturadas neste local No pode avaliar falta da Unit System No pode acessar esta smbolo Operao com ponto flutuante invlida No pode compilar overlays em memria Espera varivel procedure ou function Referncia a procedure ou function invlida No pode tornar esta unit em overlay Excesso de aninhamento Erro em acesso a arquivo Tipo object esperado Objeto local no permitido Virtual esperado Identificador method esperado Virtual constructors no so permitidos Identificador constructor esperado Identificador destructor esperado Um nico Fail dentro de constructors Operao invlida entre operando e operadores Referncia de memria esperada No pode somar ou subtrair em smbolos relocveis Combinao invlida no registro Instrues do 286/287 no habilitadas Referncia a smbolo invlida Erro na gerao do cdigo ASM esperado Mtodo dinmico com ndice duplicado Identificador de resourse duplicado ndice export duplicado ou invlido Procedimento ou funo esperado Smbolo no exportvel Nome de export invlido Cabealho de arquivo executvel muito grande Excesso de segmentos

Apostila de Turbo Pascal 7.0

95

APNDICE B ERROS DE EXECUO


Este apndice apresenta uma relao dos principais erros em tempo de execuo (run-time errors)do Turbo Pascal.

ERRO 1 2 3 4 5 6 12 15 16 17 18 100 101 102 103 104 105 106 150 151 152 154 156 157 158 159 160 161 162 200 201 202 203 204 205 207 208 209 210 211 213 214 215 216

DESCRIO Invalid function number File not found Path not found Too many open files File Access denied Invalid file handle Invalid file Access code Invalid drive number Cannot remove current directory Cannot rename across drives No h mais arquivos Disk read error Disk write error File not assigned File not open File not open for input File not open for output Invalid numeric format Disk is write-protect Erro interno do dispositivo DOS Drive not ready CRC error in data Disk seek error Unknown media type Sector not found Printer out of paper Device write fault Device read fault Hardware failure Division by zero Range check error Stack overflow error Heap overflow error Invalid pointer operation Floating point overflow Invalid floating point operation Overlay manager not installed Overlay file read error Object not initialized Call to abstract method Collection index out of range Collection overflow error Arithmetic overflow error General protection fault

TRADUO Funo numrica invlida Arquivo no encontrado Caminho no encontrado Muitos arquivos abertos Acesso ao arquivo negado Arquivo handle invlido Cdigo de acesso de arquivo invlido Nmero do drive invlido Impossvel remover diretrio atual Impossvel renomear diretrio Erro de leitura do disco Erro de gravao do disco Arquivo no assinalado Arquivo no aberto Arquivo no est aberto para entrada Arquivo no est aberto para sada Formato numrico invlido Disco protegido Drive no pronto para leitura Erro de CRC nos dados Erro de pesquisa no disco Tipo de mdia desconhecida Setor no encontrado Impressora sem papel Falha no dispositivo de escrita Falha no dispositivo de leitura Falha no hardware Diviso por zero Erro de faixa Erro de estouro de pilha Erro de estouro de heap Operao de ponteiro invlida Estouro de ponto flutuante Operao de ponto flutuante invlida Gerenciador de overlay no instalado Erro na leitura de arquivo overlay Objeto no inicializado Chamada a um mtodo abstrato ndice de coleo fora da faixa Erro de estouro da coleo Erro de estouro aritmtico Falha de proteo geral

Apostila de Turbo Pascal 7.0

96

APNDICE C PALAVRAS RESERVADAS


Este apndice apresenta uma relao das palavras reservadas do Turbo Pascal.

Absolute: declara uma varivel em um endereo absoluto de memria. And: permite a operao matemtica AND entre bits, ou lgica entre operandos, sendo verdadeira somente quando ambos forem verdadeiros. Asm: permite acessar a linguagem assembler dentro do programa. Array: utilizado para definir uma tabela. Begin: marca o incio de um bloco. Case : uma expresso que define um seletor de opes. Const: define a rea onde so definidas as constantes do programa. Constructor: uma forma especial de inicializar uma estrutura objeto pelo mtodo virtual. Destructor: uma forma de liberar memria utilizada por uma estrutura objeto. Div: expresso aritmtica que executa uma diviso inteira. Do: uma palavra reservada usada em trs estruturas: WHILE, FOR e WITH. Downto: utilizado em um lao FOR para decrementar o passo. Else : utilizado nos comandos IF e CASE. End: utilizado para terminar um bloco, ou o comando CASE, ou ainda um registro. Export: cria uma lista de procedimento e funes a serem exportados para uma biblioteca DLL. External: indica se um procedimento ou funo ser compilado em separado. File : identifica uma varivel do tipo arquivo, pode ser tipada ou no. For: lao de repetio controlado por variveis. Forward: permite informar ao compilador que uma determinada rotina ser declarada aps a sua chamada. Function: uma rotina do programa que retorna um determinado valor de acordo com o tipo. Goto: desvio incondicional do programa para um determinado pargrafo. If: estrutura de condio. Implementation: define como pblicas algumas rotinas de uma unidade (unit). In: operador lgico de conjunto. Inherited: permite que se use a notao de seu antecessor para um tipo objeto. Inline: permite que se escreva diretamente em cdigo de mquina. Interface: declarao de que aquela rea pblica. Interrupt: declara uma rotina como sendo de interrupo para o compilador. Apostila de Turbo Pascal 7.0 97

Label: declarao de pargrafos (rtulos) utilizados em um programa. Library: inicializa o cabealho de uma biblioteca DLL. Mod: operador aritmtico que retorna o mdulo de uma diviso, o resto. Nil: constante nula do tipo ponteiro pointer, compatvel com qualquer tipo ponteiro. Not: permite a operao matemtica NOT entre bits, invertendo-os, ou lgica, invertendo o resultado. Verdadeiro quando operando falso, e falso quando operando verdadeiro. Object: uma estrutura de dados que pode ter, alm dos campos normais de um registro, tambm procedures e functions. Of: utilizada em conjunto com as declaraes: ARRAY, SET, FILE e o comando CASE. Or: permite a operao matemtica OR entre bits, ou lgica entre operandos, sendo verdadeira quando pelo menos um dos operandos for verdadeiro. Packet: prefixo para tabelas, no tem funo no Turbo. Procedure: a declarao de uma sub-rotina, permitindo que sejam passados parmetros e tem a mesma estrutura de um programa. Program: identifica o cabealho de um programa. Record: define um tipo especial que pode conter diversos campos com tipos diferentes. Repeat: comando que controla um lao de comandos, que ser executado at que a expresso seja verdadeira. Set: permite a construo de conjuntos tipados e com valores ordinais, podendo ter de 0 at 255 valores, de qualquer tipo. Shl: operador aritmtico que permite a rotao n vezes esquerda dos bits de uma varivel numrica x. Shr: operador aritmtico que permite a rotao n vezes direita dos bits de uma varivel numrica x. String: a declarao de uma seqncia de caracteres que pode ter uma quantidade, variando entre 1 e 255. Then: utilizado em conjunto com o comando IF. To: utilizado em conjunto com o comando FOR. Type: declarao dos tipos definidos pelo usurio, podendo ser mencionado no programa. Unit: declarao de unidade que permite a criao de um mdulo do programa, para facilitar a criao de programas muito grandes, ou ainda, na gerao de bibliotecas prprias. Until: utilizado em conjunto com o comando REPEAT. Uses: declarao das unidades, UNIT, utilizadas em um programa ou unidade. Var: rea de declarao de variveis de um programa, unidade ou rotinas. Virtual: repete um determinado bloco enquanto a expresso for verdadeira. With: relaciona as variveis do bloco com as variveis do tipo registro. Xor: permite a operao matemtica XOR entre bits, ou lgica entre operandos, sendo verdadeira quando somente um dos operandos for verdadeiro.

Apostila de Turbo Pascal 7.0

98

APNDICE D TECLAS DE FUNO


Este apndice apresenta uma descrio de todas as teclas de funo do Turbo Pascal.

TECLA F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 ALT-0 ALT-F1 ALT-F3 ALT-F5 ALT-F9 ALT-C ALT-D ALT-E ALT-F ALT-H ALT-O ALT-R ALT-S ALT-W ALT-X CTRL-F1 CTRL-F2 CTRL-F3 CTRL-F4 CTRL-F7 CTRL-F8 CTRL-F9 CTRL-DEL CTRL-L CTRL-INS SHIFT-F1 SHIFT-F5 SHIFT-F6 SHIFT-F10 SHIFT-DEL SHIFT-INS

FUNO Help sensitive. Salva o arquivo corrente no editor. Carrega um arquivo do disco. Executa o programa at a posio do cursor. Zoom, aumenta e diminui a janela ativa. Troca a janela ativa. Executa um programa passo a passo. Executa um programa rotina a rotina. Executa um make no programa. Vai para o Menu. Chama a lista de arquivos carregados pick. Chama o ltimo help. Fecha a janela ativa. Exibe a tela de usurio. Compila o seu programa. Ativa o Menu Compile. Ativa o Menu Debug. Ativa o editor. Ativa o Menu File. Ativa o Menu Help. Ativa o Menu Options. Ativa o Menu Run. Ativa o Menu Search. Ativa o Menu Window. Sair do Turbo para o DOS. Ativa o help, usando como chave a palavra que estiver sobre o cursor. Termina uma seso de debug. Mostra a lista de stack que estiver sendo depurada. Exibe o valor de uma varivel e permite que a mesma tenha seu valor alterado. Adiciona uma expresso na watch window. Troca o breakpoint. Executa o programa que estiver na tela de edio. Remove o texto seleccionado. Repete a ltima troca ou busca de texto. Copia o texto seleccionado para o clipboard. Mostra o ndice do help. Configurvel pelo usurio para tool. Troca a janela ativa. Configurvel pelo usurio para tool. Remove o texto selecionado para o clipboard. Coloca no texto o contedo do clipboard.

Apostila de Turbo Pascal 7.0

99

APNDICE E GRFICOS NOS PASCAL


Este apndice apresenta uma descrio de como se trabalhar com grficos no Turbo Pascal.

1. Introduo
No incio de todos os programas grficos existiro certos passos que devem ser seguidos. Por exemplo, temos que ajustar o hardware de vdeo para o modo grfico. Alm disso, temos de restaurar a tela do computador para o modo normal de exibio no final de todos os programas grficos. Na seo abaixo, veremos os componentes bsicos necessrios em um programa grfico tpico desenvolvido em Pascal.

2. Inicializao da BGI
O primeiro passo que todos os programas grficos devem dar inicializar o hardware grfico. Por hardware entendemos a placa do adaptador de vdeo que deve estar presente no PC. Existem diversas placas grficas diferentes disponveis para o PC, cada qual com uma variedade de modos grficos. A BGI (Borland Graphic Interface) o ferece suporte a muitos destes "modos". Utilizaremos o modo default da rotina de inicializao da BGI, o que por sua vez nos permitir ajustar o adaptador grfico instalado no seu modo de maior resoluo. A procedure da BGI usada para configurar o seu computador no modo grfico chama-se InitGraph e possui a seguinte declarao: procedure InitGraph(var GraphDriver, GraphMode: integer; DriverPath: string); A procedure InitGraph est definida na unidade Graph do Pascal que deve ser includa na seo uses de todos os programas grficos. Este arquivo contm as estruturas de dados, constantes, procedures e funes da BGI. Os dois primeiros parmetros especificados em initgraph identificam a placa de vdeo instalada e o modo grfico a ser utilizado. O terceiro parmetro especifica o path onde se encontram os drivers para grfico do Turbo Pascal. (Existe pelo menos um driver grfico para cada adaptador grfico). Os arquivos dos drivers so os que terminam todos com a extenso .BGI. No prximo exemplo, InitGraph pesquisa o diretrio atual para encontrar os arquivos de drivers: InitGraph (Gdriver, Gmode, ' ');

1.1. Escrita de um Programa Bsico Usando a BGI O programa a seguir provavelmente o menor programa grfico que podemos escrever em Turbo Pascal. Este programa apenas para enfatizar a estrutura bsica de um programa grfico tpico em Pascal. Podemos us-lo como esqueleto para nossos prprios programas grficos. Program SmallestGraphicsProgram; Uses Graph; { unidade grfica do Turbo Pascal } Const Gdriver: integer = Detect; Var Gmode: integer; Begin InitGraph(Gdriver, Gmode, 'c:\bp\bgi'); { Inicializa o modo Grfico } { Coloque os comandos para desenho nesta rea !! } CloseGraph; { Finaliza o Modo Grfico } End.

Apostila de Turbo Pascal 7.0

100

A tabela abaixo demonstra os drivers e suas respectivas resolues Valor CGAC0 CGAC CGAC2 CGAC3 CGAHi MCGAC0 MCGAC1 MCGAC2 MCGAC3 MCGAMed MCGAHi EGAMonoHi HercMonoHi VGALo VGAMed Resoluo 320x200 320x200 320x200 320x200 640x200 320x200 320x200 320x200 320x200 640x200 640x480 640x350 720x348 640x200 640x350 Valor EGALo EGAHi EGA64Lo EGA64Hi ATT400C0 ATT400C1 ATT400C2 ATT400C3 ATT400Med ATT400Hi IBM8514Lo IBM8514Hi PC3270Hi VGAHi Resoluo 640x200 640x350 640x200 640x350 320x200 320x200 320x200 320x200 640x200 640x400 640x480 1024x768 720x350 640x480

1.2. Trabalhando com Coordenadas Nos grficos, acompanhamos as nossas posies usando coordenadas de pixels. Os pixels so pontos muitos pequenos que se v na tela e que podem ser endereados usando um sistema de coordenadas familiar forma por que acessamos as linhas e colunas de uma estrutura de dados bidimensional. O Turbo Pascal apresenta duas funes que obtm o nmero mximo de pixels tanto no eixo x (GetMaxX) quanto no eixo y (GetMaxY).

1.3. Endereamento por linha e coluna da tela Pixel(0,0) Pixel(5,1)

oooooooooooooooooooooooooo oooooooooooooooooo ooooooooooooo

oooooo

(ltima coluna, ltima linha de pixels)

oooo

Apostila de Turbo Pascal 7.0

101

3. Padres de Preenchimento Pr-Definidos


Constante EmptyFill SolidFill LineFill LtSlashFill SlashFill BkSlashFill LtBkSlashFill HatchFill XhatchFill InterleaveFill WideDotFill CloseDotFill Valor 0 1 2 3 4 5 6 7 8 9 10 11 Descrio Preenche com a cor de fundo Preenche completamente com a cor de preenchimento Preenche usando linhas horizontais Preenche usando linhas finas inclinadas Preenche usando linhas espessas inclinadas Preenche usando linhas espessas inclinadas da direita p/ a esquerda Preenche usando linhas finas inclinadas da direita p/ a esquerda Preenche usando um padro hachurado leve Preenche usando um padro xadrez espesso Preenche usando um padro formado por linhas intercaladas Preenche usando pontos largamente espaados Preenche usando pontos bastante prximos

4. Padres de preenchimento pr-definidos

EmptyFill

LtSlashFill

InterleaveFill

InterleaveFill

SolidFill

SlashFill

HatchFill

WideDotFill

LineFill

BkSlashFill

XHatchFill

CloseDotFill

5. Estilos de Linhas
Constante SolidLn DottedLn CenterLn DashedLn UserBitLn NormalWidth Solidln DottedLn CenterLn DashedLn Valor 0 1 2 3 4 ThickWidth

Apostila de Turbo Pascal 7.0

102