Você está na página 1de 47

UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSES CAMPUS FREDERICO WESTPHALEN

DE ENGENHARIAS E COMPUTAO

SUMRIO
PARTE I - CONCEITOS DE LINGUAGENS..........................................................................................................1 1.

DEPARTAMENTO

CINCIA DA

2.

1.1 CLASSIFICAO DAS LINGUAGENS DE PROGRAMAO ....................................................................................2 1.1.1 Linguagens de Alto Nvel Comparadas com Linguagens de Baixo Nvel.............................................. 3 1.2 HISTRICO DAS LINGUAGENS DE PROGRAMAO ............................................................................................3 1.2.1 Linguagens de primeira gerao........................................................................................................... 3 1.2.2 Linguagens de Segunda Gerao .......................................................................................................... 3 1.2.3 Linguagens de Terceira Gerao .......................................................................................................... 4 1.2.4 Linguagens de quarta gerao .............................................................................................................. 4 1.2.5 Linguagens desenvolvidas ..................................................................................................................... 5 1.2.6 Novas direes das linguagens de programao .................................................................................. 5 2.1 ABSTRAO .....................................................................................................................................................2 2.2 ABSTRAO DE DADOS....................................................................................................................................2 2.3 ABSTRAO DE CONTROLE .............................................................................................................................4 2.3.1 Evoluo das Estruturas de Controle a Nvel de Instruo .................................................................. 4 2.3.2 Tratamento de Excees........................................................................................................................ 5 2.4 LINGSTICA DE PROGRAMAO .....................................................................................................................5 2.4.1 Conceitos e Paradigmas........................................................................................................................ 5 2.4.2 Sintaxe e Semntica ............................................................................................................................... 6 2.5 O PROCESSAMENTO DE LINGUAGENS ..............................................................................................................6 2.5.1 Interpretao ......................................................................................................................................... 6 2.5.2 Traduo ............................................................................................................................................... 7 2.6 AMARRAO ...................................................................................................................................................7 2.7 VARIVEIS .......................................................................................................................................................8 2.7.1 O Nome de Uma Varivel...................................................................................................................... 8 2.7.2 O Escopo de uma Varivel .................................................................................................................... 8 2.7.3 O Tempo De Vida De Uma Varivel ..................................................................................................... 8 2.7.4 O Valor De Uma Varivel ..................................................................................................................... 9 2.7.5 O Tipo De Uma Varivel..................................................................................................................... 10 2.8 UNIDADES DE PROGRAMA .............................................................................................................................10 3.1 TIPOS EMBUTIDOS..........................................................................................................................................11 3.2 AGREGADOS DE DADOS .................................................................................................................................12 3.3 TIPOS DEFINIDOS PELO USURIO ...................................................................................................................12 3.4 CONVERSO DE TIPOS ...................................................................................................................................13 3.5 REAS PROBLEMTICAS E EXEMPLOS DE SOLUES ....................................................................................14 3.5.1 Tipagem Forte ..................................................................................................................................... 14 3.5.2 Compatibilidade de Tipos.................................................................................................................... 14 3.5.3 Ponteiros.............................................................................................................................................. 15 LINGUAGEM PASCAL................................................................................................................................. 17
4.1.1.1 4.1.1.2 4.1.1.3 4.1.1.4 4.1.1.5

LINGUAGENS DE PROGRAMAO...........................................................................................................2

EVOLUO DOS CONCEITOS EM LINGUAGEM DE PROGRAMAO...........................................2

Linguagem de Programao I

Cincia da Computao II

3.

TIPOS DE DADOS..........................................................................................................................................11

Prof. Evandro Preuss preuss@uri.br preuss@fw.uri.br http://www.uri.br/~preuss

2 Semestre/2005

PARTE II - LINGUAGEM PASCAL E DELPHI.................................................................................................. 16 4.

4.1 ELEMENTOS DA LINGUAGEM..........................................................................................................................17 4.1.1 Elementos definidos pela linguagem:.................................................................................................. 17


Letras (alfanumricas):.................................................................................................................................... 17 Dgitos (numricos): ....................................................................................................................................... 17 Smbolos Especiais ......................................................................................................................................... 17 Palavras Reservadas ou Palavras Chave.......................................................................................................... 18 Delimitadores.................................................................................................................................................. 18

4.1.2

4.2 TIPOS DE DADOS ............................................................................................................................................19 4.2.1 Tipos predefinidos pela linguagem...................................................................................................... 19


4.2.1.1 4.2.1.2 4.2.1.3 4.2.1.4 4.2.2.1 4.2.2.2 Tipos Inteiros .................................................................................................................................................. 20 Tipos de Nmeros Reais ................................................................................................................................. 20 Caracteres e Strings......................................................................................................................................... 20 Valores Booleanos .......................................................................................................................................... 22 Tipo enumerado discreto................................................................................................................................. 22 Tipo enumerado contnuo ............................................................................................................................... 23

4.1.2.1 4.1.2.2 4.1.2.3

Elementos definidos pelo Usurio ....................................................................................................... 18

Identificadores................................................................................................................................................. 18 Comentrios .................................................................................................................................................... 19 Endentao...................................................................................................................................................... 19

7.

7.1 PROCEDIMENTOS ...........................................................................................................................................41 7.2 FUNES........................................................................................................................................................42 7.3 PARMETROS .................................................................................................................................................42 7.3.1 Passagem de parmetros..................................................................................................................... 42 7.3.2 Argumentos passados a programas..................................................................................................... 44 7.4 RECURSIVIDADE .............................................................................................................................................45 8.1 8.2 8.3 8.4 8.5 8.6 PROCEDIMENTOS E FUNES DAS UNIDADES PADRO................................................................46 MANIPULAO DE STRINGS E CONVERSO ....................................................................................................46 MANIPULAO NUMRICA ............................................................................................................................46 MANIPULAO DE DIRETRIOS......................................................................................................................47 UNIT CRT ......................................................................................................................................................48 FUNES COM ORDINAIS ...............................................................................................................................49 UNIT DOS......................................................................................................................................................49 VETORES UNIDIMENSIONAIS E MULTIDIMENSIONAIS (MATRIZES)..................................................................53 ESTRUTURAS..................................................................................................................................................54 CONJUNTOS - SET ..........................................................................................................................................57
7.3.1.1 7.3.1.2 Passagem de parmetros por valor .................................................................................................................. 42 Passagem de parmetros por referncia........................................................................................................... 43

FUNES E PROCEDIMENTOS ................................................................................................................41

4.2.2

Tipos definidos pelo usurio................................................................................................................ 22

8.

5.

4.3 CONSTANTES E VARIVEIS.............................................................................................................................23 4.3.1 Constantes ........................................................................................................................................... 23 4.3.2 Variveis.............................................................................................................................................. 23 4.4 OPERADORES .................................................................................................................................................24 4.4.1 Operadores aritmticos ....................................................................................................................... 24 4.4.2 Operadores de atribuio.................................................................................................................... 24 4.4.3 Operadores relacionais ....................................................................................................................... 24 4.4.4 Operadores lgicos.............................................................................................................................. 25 4.4.5 Operadores sobre strings .................................................................................................................... 25 4.4.6 Operadores sobre conjuntos................................................................................................................ 26 5.1 IDENTIFICAO DO PROGRAMA ......................................................................................................................27 5.2 BLOCO DE DECLARAES ..............................................................................................................................27 5.2.1 Parte de Declaraes de Rtulos: ....................................................................................................... 27 5.2.2 Parte de Declaraes de Constantes:.................................................................................................. 27 5.2.3 Parte de Declaraes de Tipos: .......................................................................................................... 27 5.2.4 Parte de Declaraes de Variveis: .................................................................................................... 27 5.2.5 Parte de Declaraes de Subprogramas:............................................................................................ 28 5.3 BLOCO DE COMANDOS ...................................................................................................................................28 6.1 COMANDOS SIMPLES ......................................................................................................................................29 6.1.1 Comandos de Entrada e Sada ............................................................................................................ 29
6.1.1.1 Read e Readln ............................................................................................................................................... 29 6.1.1.1.1 AS FUNES EOLN e EOF............................................................................................................... 30 6.1.1.2 Write e Writeln................................................................................................................................................ 30 6.1.1.3 Readkey........................................................................................................................................................... 31 6.1.2.1 6.1.2.2 6.1.2.3 6.1.2.4 6.1.2.5 6.1.2.6 6.1.3.1 6.1.3.2 6.1.3.3 6.1.3.4 6.1.3.5 6.1.3.6

9.

ESTRUTURA DO PROGRAMA PASCAL .................................................................................................. 27

10.

9.1 9.2 9.3

TIPOS ESTRUTURADOS..............................................................................................................................53

6.

COMANDOS....................................................................................................................................................29

6.1.2

Comandos de Desvio Incondicional .................................................................................................... 32

6.1.3

Outros comandos simples .................................................................................................................... 33

GOTO ............................................................................................................................................................. 32 EXIT ............................................................................................................................................................... 32 BREAK........................................................................................................................................................... 32 CONTINUE .................................................................................................................................................... 32 RUNERROR................................................................................................................................................... 33 HALT.............................................................................................................................................................. 33 Clrscr............................................................................................................................................................... 33 GotoXY........................................................................................................................................................... 34 Delay............................................................................................................................................................... 34 CHR ................................................................................................................................................................ 34 ORD................................................................................................................................................................ 34 Upcase............................................................................................................................................................. 34

11.

10.1 AMBIENTE DE DESENVOLVIMENTO DO DELPHI .........................................................................................59 10.1.1 Menu de Opes .................................................................................................................................. 59 10.1.2 Barra de Ferramentas ......................................................................................................................... 59 10.1.3 Paleta de Componentes ....................................................................................................................... 60 10.1.4 O Object Inspector............................................................................................................................... 60 10.1.5 Estruturas de Arquivos do Projeto ...................................................................................................... 60 10.1.6 Configurando as Opes de um Projeto.............................................................................................. 60 10.2 COMPONENTES ..........................................................................................................................................60 10.2.1 Opes da Paleta de Componentes ..................................................................................................... 61 10.2.2 Propriedades ....................................................................................................................................... 61 10.2.3 Eventos ................................................................................................................................................ 63 10.2.4 Mtodos ............................................................................................................................................... 64 10.3 PRINCIPAIS COMPONENTES........................................................................................................................65 10.4 CAIXAS DE DILOGO SIMPLES ....................................................................................................................69 10.5 DICAS ........................................................................................................................................................72 10.6 FUNES DE MANIPULAO DE STRINGS, NMEROS E DATAS .................................................................72 BIBLIOGRAFIA..............................................................................................................................................74

CONCEITOS BSICOS DO AMBIENTE DELPHI ...................................................................................59

APNDICE A - EXERCCIOS................................................................................................................................75 APNDICE B - AMBIENTE DO TURBO PASCAL.............................................................................................82 APNDICE C - MENSAGENS DE ERRO DO TURBO PASCAL......................................................................84

6.2 ESTRUTURAS DE CONTROLE ..........................................................................................................................35 6.2.1 Seqncia............................................................................................................................................. 35 6.2.2 Comandos condicionais....................................................................................................................... 35 6.2.3
6.2.2.1 6.2.2.2 6.2.3.1 6.2.3.2

Comandos de Repetio ...................................................................................................................... 37

IF..................................................................................................................................................................... 35 Comando de Seleo mltipla: CASE............................................................................................................. 36 For................................................................................................................................................................... 37 While e Repeat Until....................................................................................................................................... 38

1. LINGUAGENS DE PROGRAMAO

Linguagens de programao so usadas para descrever algoritmos; isto , seqncias de passos que levam soluo de um problema. Uma linguagem de programao precisa suportar a definio de aes e prover meios para especificar operaes bsicas de computao, alm de permitir que os usurios especifiquem como estes passos devem ser seqenciados para resolver um problema. Uma linguagem de programao pode ser considerada como sendo uma notao que pode ser usada para especificar algoritmos com preciso.

1.1 Classificao das Linguagens de Programao

As linguagens de programao podem ser agrupadas em dois grandes grupos: linguagens de baixo nvel e linguagens de alto nvel.

As linguagens de baixo nvel so restritas a linguagem de mquina e tem uma forte relao entre as operaes implementadas pela linguagem e as operaes implementadas pelo hardware. As linguagens de alto nvel por outro lado, aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos. Cada declarao numa linguagem de alto nvel equivale a vrias declaraes numa linguagem de baixo nvel.

PARTE I - CONCEITOS DE LINGUAGENS

A vantagem principal das linguagens de alto nvel a abstrao . Isto o processo em que as propriedades essenciais requeridas para a soluo do problema so extradas enquanto esconde os detalhes da implementao da soluo adotada pelo programador. Com o nvel de abstrao aumentado, o programador pode concentrar-se mais na soluo do problema ao invs de preocupar-se como o hardware vai tratar do problema. No incio da computao os programadores eram obrigados a programar usando linguagem de mquina, que nada mais do que seqncias de dgitos binrios (0s e 1s). Por exemplo a instruo incremente o valor no acumulador deveria ser representado como:
10100100 A4

ou na melhor hiptese, escrito sob a forma de um nmero hexadecimal claro que esta representao tinha muitas desvantagens:

N H uma grande probabilidade de erro em todos os estgios do processo de programao.

N A programao mesmo sendo com algoritmos simples resulta em longos programas, o que dificulta o processo de validao e deteco de erros.

Algumas das desvantagens podem ser superadas fazendo com que o computador seja o responsvel pelo estgio de traduo. O programa ainda escrito em termos de operaes bsicas de mquina, mas a traduo em cdigo binrio feita pelo computador. O programa que faz essa traduo chamado de assembler . At mesmo o mais simples dos assemblers modernos pode reconhecer endereamentos simblicos e mnemnicos representado operaes de mquina. Assim, por exemplo, o programador precisa somente escrever: para especificar uma instruo para adicionar o contedo de localizao ival para o acumulador. O assembler ento faz a traduo para a string equivalente de 0s e 1s. O assembler tambm trata do problema de clculo de endereo, usando nomes em formato de texto para enderear os dados. A conseqncia desta automao de traduo que os programas em linguagem Assembly so muito mais fceis de escrever e depurar que programas em linguagem de mquina.
ADD ival

N O clculo de endereos de memria devem ser feitos manualmente, com um rduo trabalho e uma grande probabilidade de erros.

1.1.1 Linguagens de Alto Nvel Comparadas com Linguagens de Baixo Nvel

As linguagens de alto nvel podem oferecer muito mais vantagens que as linguagens de baixo nvel. A principal motivao para o uso de linguagens de alto nvel que os problemas podem ser solucionados muito mais rapidamente e com muito mais facilidade, pois apresenta um considervel numero de tipos de dados definidos, alm das facilidades da programao estruturada. Os programas em linguagem de alto nvel so muito mais fceis de serem desenvolvidos, entendidos e depurados por diversas razes: N Elas so mais provveis de serem auto-documentadas. N A estrutura do programa pode ser desenvolvida para refletir a estrutura do problema original. N Nomes significativos podem ser escolhidos para variveis e subprogramas. N A soluo do problema no necessita ser obscurecida pelo nvel de detalhes necessrios em um programa em linguagem de baixo nvel. N O programa em linguagem de alto nvel normalmente fcil de seguir e entender cada passo da execuo. N O compilador, nas linguagens de alto nvel, normalmente prov facilidades para a depurao, como visualizao dos valores das variveis, dos registradores e da pilha. Alm disso o compilador pode incluir instrues na gerao de cdigo para detectar erros em tempo de execuo, como overflow numricos e violao de limites de vetores e matrizes.

programao multi-usurio, sistemas de execuo em tempo real e desenvolvimento de gerenciadores de base de dados.

As linguagens Fortran, Cobol, Algol e algumas extenses como Basic, foram os representantes dessa segunda gerao. Fortran uma linguagem ainda muito utilizada na rea de engenharia e pela comunidade cientfica. Cobol uma linguagem que foi aceita e ainda continua em uso para aplicaes comerciais. Algol foi o precursor de muitas linguagens de terceira gerao, por oferecer ricamente estruturas de controle e tipos de dados. Basic foi uma linguagem originalmente criada para o aprendizado e teve seu uso bastante reduzido j na dcada de 70. 1.2.3 Linguagens de Terceira Gerao

As linguagens de terceira gerao tambm chamadas de linguagens de programao modernas ou estruturadas, so caracterizadas pela grande capacidade procedural e estrutural de seus dados foram desenvolvidas de 1974 a 1986. As linguagens de terceira gerao tiveram como principais caractersticas a possibilidade de criar sistemas distribudos, incorporar recursos mais inteligentes, e exigir um hardware menos robusto. Podem ser divididas em duas grandes categorias: linguagens de propsito geral e linguagens especializadas. As linguagens de propsito geral foram desenvolvidas baseadas principalmente na linguagem Algol e servem para uma infinidade de aplicaes envolvendo desde a rea cientfica, at a rea comercial. As linguagens C, Pascal, PL/1 e Modula-2 so as principais linguagens desta categoria, sendo que as duas primeiras continuam bastante usadas atualmente.

N A utilizao de linguagens de baixo nvel indicada para funes que precisam implementar instrues de mquina especficas que no so suportadas por linguagens de alto nvel, embora a grande maioria das linguagens de alto nvel apresentam uma biblioteca que permite implementar instrues de baixo nvel diretamente em seus programas. N A grande eficincia e o reduzido tamanho dos programas desenvolvidos em linguagens de baixo nvel so as principais vantagens dessas linguagens.

1.2 Histrico das Linguagens de Programao

As linguagens especializadas so caracterizadas pela forma sinttica no usual com que foram desenvolvidas para uma aplicao distinta. Centenas de linguagens especializadas esto em uso atualmente. Dentre as linguagens que encontram aplicaes na rea de engenharia de software podemos destacar a linguagem Lisp desenvolvida especialmente para manipular smbolos e listas, Prolog desenvolvida para tratar e representar conhecimentos,. Smalltalk criada para representar os dados em forma de objetos, sendo a primeira a ser puramente orientada a objetos, APL desenvolvida para manipular vetores, e a linguagem Forth desenvolvida para desenvolver softwares para microprocessadores. 1.2.4 Linguagens de quarta gerao A quarta gerao das linguagens de programao foram desenvolvidas a partir de 1986 e teve como caractersticas principais a gerao de sistemas especialistas, o desenvolvimento de inteligncia artificial e a possibilidade de execuo dos programas em paralelo.

Existem centenas de linguagens de programao, desenvolvidas desde o incio da computao. Essas linguagens foram agrupadas de acordo com suas e caractersticas e poca em que foram desenvolvidas em 4 geraes: 1.2.1 Linguagens de primeira gerao A primeira gerao de linguagens remonta aos dias da codificao em linguagem de mquina, surgidas com o incio da computao na dcada de 50, especificamente de 1950 a 1962. A Linguagem de mquina e Assembly representam esta primeira gerao das linguagens de programao.

No decorrer da histria temos percebido uma evoluo para uma abstrao maior na gerao de programas, usando linguagens de mais alto nvel. A primeira gerao de linguagens de programao trabalhavam com um reduzido conjunto de instrues a nvel de mquina. A segunda e terceira gerao de linguagens de programao foram desenvolvidas num nvel que representam os programas computacionais, distinta e independentemente da arquitetura do processador, mas com completa descrio detalhada dos procedimentos algortmicos do programa. Com o passar do tempo, as linguagens de quarta gerao foram desenvolvidas com um nvel de abstrao ainda mais alto.

Essas linguagens totalmente dependentes da mquina, exibem o mais baixo nvel de abstrao que uma linguagem pode ser representada. Essas linguagens somente devem ser usadas quando as linguagens de mais alto nvel no satisfizerem as necessidades ou no forem suportadas. 1.2.2 Linguagens de Segunda Gerao A segunda gerao de linguagens de programao foi desenvolvida de 1962 a 1974 e serviu de base para o desenvolvimento das modernas linguagens de programao.

As linguagens de quarta gerao, conhecidas tambm como linguagens artificiais contm uma sintaxe distinta para representao de estruturas de controle e dos dados. Essas linguagens por combinarem caractersticas procedurais e no procedurais, representam estas estruturas com um alto nvel de abstrao, eliminando a necessidade de especificar algoritmicamente esses detalhes. As linguagens de quarta gerao podem ser classificadas em trs categorias: linguagens de consulta, geradoras de programas e outras linguagens (4GL). As linguagens de consulta foram desenvolvidas para manipular bases de dados, permitindo o gerenciamento de um grande nmero de informaes armazenados em arquivos.

As caratersticas marcantes das linguagens de segunda gerao foram o amplo uso com grande familiaridade e aceitao no mercado e a grande quantidade de bibliotecas de software, permitiram a 3

As linguagens geradoras de programas representam uma sofisticada classe das linguagens 4GL. Permitem ao usurio ou programador criar facilmente programas complexos em linguagens de terceira gerao, utilizando 4

bem menos declaraes e comandos. Estas linguagens possuem um nvel bem mais alto que as de terceira gerao. Enquadradas como outras linguagens de quarta gerao temos as linguagens usadas em sistemas de apoio deciso, linguagens utilizadas para modelagem de sistemas, linguagens de prototipao, e linguagens de especificao formal que produzem cdigo de mquina. 1.2.5 Linguagens desenvolvidas

2. EVOLUO DOS CONCEITOS EM LINGUAGEM DE PROGRAMAO


2.1 Abstrao

No decorrer da histria da computao centenas de linguagens foram desenvolvidas. J em 1972 haviam mais de 200 linguagens desenvolvidas, sendo que a maioria era para objetivos especficos ou acadmicos, sendo que dessas apenas 12 podem ser consideradas como importantes e significativas. 1957 - FORTRAN 1958 - ALGOL 1960 - LISP 1960 - COBOL 1962 - APL 1962 - SIMULA 1964 - BASIC 1964 - PL/1 1966 - ISWIM 1970 - Prolog Relao das linguagens de programao com o ano em que foram desenvolvidas: 1972 - C 1975 - Pascal 1975 - Scheme 1977 - OPS5 1978 - CSP 1978 - FP 1980 - dBase II 1983 - Smalltalk-80 1983 - Ada 1983 - Parlog 1984 - Standard ML 1986 - C++ 1986 - CLP(R) 1986 - Eiffel 1988 - CLOS 1988 - Mathematica 1988 - Oberon 1990 - Haskell 1995 - Java

Para substituir um procedimento manual, os analistas de sistemas precisam reproduzir seu comportamento em um programa de computador. Os programas podem ento ser vistos como modelos destes procedimentos manuais.

Como qualquer modelo, um programa de computador uma abstrao da realidade. Abstrao o processo de identificar as qualidades ou propriedades importantes do que est sendo modelado. Usando o modelo abstrato, pode-se concentrar unicamente nas qualidades ou propriedades relevantes e ignorar as irrelevantes. O que relevante depende da finalidade para a qual a abstrao est sendo projetada. Por exemplo, uma pessoa aprendendo a dirigir pode representar um carro simplesmente por quatro propriedades: os pedais do acelerador, do freio e da embreagem e o volante de direo. O engenheiro projetando o carro usaria um modelo que tambm mostra a relao entre os pedais e o motor. Para a abstrao do motorista o motor uma propriedade irrelevante, para o engenheiro, crucial. A abstrao permeia toda a programao. Em particular, apresenta uma dupla relao com as linguagens de programao. Por um lado, as linguagens de programao so as ferramentas com as quais os programadores podem implementar os modelos abstratos. Por outro lado, as prprias linguagens de programao so abstraes do processador onde o modelo implementado.

1.2.6 Novas direes das linguagens de programao

As novas direes das linguagens de programao, especialmente das linguagens de quarta gerao a sua aplicao com metodologias orientadas a objetos. Essas linguagens so baseadas nos conceitos de objetos, que agrupam comandos de programao com dados em objetos que podem ser usados o tempo todo durante a execuo do programa, o que muito til em ambientes de execuo paralela.

Outra tendncia dos ambientes de desenvolvimento de programas fornecer alm das linguagens de programao, um ambiente de gerao automtica de cdigo, onde o programador especifica atravs de ferramentas visuais as caractersticas do programa e a ferramenta se encarrega de gerar a codificao na linguagem especfica. Estas ferramentas so muito difundidas na programao para Windows, e so tambm chamados de RAD (Desenvolvimento Rpido de Aplicativos). A nova gerao das linguagens de programao, que j chamada por muitas pessoas de quinta gerao, baseada em mtodos de consulta e utilizam comandos escritos em linguagens naturais, permitindo uma fcil comunicao com o computador.

As primeiras linguagens de programao no reconheciam o papel crucial que a abstrao desempenha na programao. Por exemplo, no princpio da dcada de 50, o nico mecanismo de abstrao fornecido pelas linguagens Assembler, em relao s linguagens de mquina, eram os nomes simblicos. O programador podia empregar termos relativamente auto-explicativos para nomear cdigos de operaes e tambm nomear simbolicamente posies de memria. assim o programador podia se abstrair da representao dos programas na mquina, especialmente da identidade das posies de memria e da representao especfica em termos de bits dos cdigos de operao.

As contribuies desta facilidade para a legibilidade e modificabilidade dos programas so bastante conhecidas. A enorme quantidade de detalhes que devem ser observados na programao em linguagem de mquina automaticamente efetuada pelo compilador, fazendo com que a programao fique mais simples, menos trabalhosa e menos propensa a erros. Subprogramas e macros tambm foram introduzidas pelas linguagens de montagem como um meio do programador nomear uma atividade descrita por um grupo de aes e consider-la como uma nica ao. Subprogramas so ferramentas teis para a programao metdica, pois so mecanismos para construir abstraes. Um subprograma a implementao de uma abstrao, enquanto que a chamada do subprograma representa o uso da abstrao. Quando escreve um subprograma, o programador considera como ele funciona. Depois, quando o subprograma chamado, o programador pode ignorar como e se concentrar no que ele faz. Isto outro exemplo do uso de abstrao em programao. O subprograma pode ser encarado como uma extenso da linguagem de programao por uma nova operao. Quando usa a operao, o programador se abstrai da particular implementao. A mquina vista como um processador especial de propsito especfico, cujo conjunto de instrues contm a nova operao. As linguagens de alto nvel possuem um conjunto rico de mecanismos para definir abstraes de dados e abstraes de controle. As abstraes de dados modelam os dados manipulados pelos programas. Abstraes de controle modelam computaes combinando aes elementares em formas de complexidade arbitrria.

2.2 Abstrao de Dados

As linguagens a nvel de mquina encaram os dados armazenados como uma seqncia de bits, que podem ser manipulados pelas instrues da mquina. O conjunto de instrues inclui deslocamentos, operaes lgicas, aritmtica de ponto fixo e vrias outras operaes. 5 2

Um primeiro passo na direo de abstrao de dado foi dado por FORTRAN, COBOL e ALGOL 60. Nessas linguagens, a informao armazenada em determinadas posies de memria vista, no como uma seqncia de bits, mas sim como um valor inteiro, um real, um valor lgico, ou alguma outra coisa. A deciso sobre quais abstraes de dados incluir em uma linguagem de programao foi ditada principalmente pelas mquinas para as quais a linguagem era destinada e pelo espectro de aplicaes que a linguagem cobrisse. Como resultado, nenhuma linguagem acaba sendo apropriada para todas as aplicaes, j que o programador fica limitado pelo poder expressivo do conjunto fixo de abstraes fornecidas pela linguagem. Algumas linguagens tentaram agrupar todas as abstraes de outras linguagens, porm, muitas caractersticas da linguagem ligadas a dados acabam sendo difceis de dominar e freqentemente inseguras.

O conceito de tipo abstrato de dados vem do princpio mais geral de esconder informao: um trecho de programa implementando um tipo abstrato de dados um exemplo de mdulo que esconde informao. Tipos abstratos de dados escondem detalhes de representao e direcionam o acesso aos objetos abstratos por meio de procedimentos. A representao est protegida contra qualquer tentativa de manipul-la diretamente. Uma troca da implementao de um tipo abstrato de dados fica restrita ao trecho de programa que descreve a implementao e no afeta o resto do programa.

2.3 Abstrao De Controle

O caminho seguido pelas linguagens para contornar esse problema foi desenvolver linguagens mais genricas, no oferecendo um conjunto exaustivo de abstraes embutidas, mas sim provendo mecanismos flexveis e fceis de usar pelos quais o programador pode definir novas abstraes. Tal enfoque se encaixa naturalmente em uma metodologia de projeto baseada no reconhecimento de abstraes.

Existem semelhanas entre os tipos definidos pelo usurio e os tipos embutidos das linguagens. Como exemplo podemos considerar o tipo embutido (pr-definido) inteiro (integer) e o tipo pilha, que um vetor onde so armazenadas as informaes e uma varivel de controle para informar onde est o topo, e conseqentemente, informar quantos elementos tem na pilha, onde ser inserido o prximo e qual elemento deve ser retirado. Ambos possuem um conjunto de operaes associado, sendo as operaes aritmticas e de comparao para inteiro , e operaes inserir e retirar elementos da pilha.

Estruturas de controle descrevem a ordem em que instrues ou grupos de instrues (unidades de programa) devem ser executadas. Assim como as facilidades de abstrao de dados, mecanismos de abstrao de controle podem determinar a adequao de uma linguagem a determinada rea de aplicao. As estruturas de controle podem ser classificadas em estruturas de controle a nvel de instruo, isto , aquelas que so usadas para ordenar a ativao de instrues individuais e estruturas de controle a nvel de unidades, ou seja, as que so empregadas para ordenar a ativao de unidades de programas. 2.3.1 Evoluo das Estruturas de Controle a Nvel de Instruo As mquinas convencionais fornecem dois mecanismos bem simples para governar o fluxo do controle sobre instrues individuais: seqencializao e desvio. Seqencializao implementada incrementando-se automaticamente o contador de programa aps executar cada instruo. Este mecanismo permite que instrues armazenadas em posies consecutivas de memrias sejam buscadas e executadas uma aps a outra. O contador de programa tambm pode ser explicitamente alterado por instrues de desvio a fim de se conseguir a transferncia do controle para uma posio especificada em vez da prxima na seqncia.

Em um aspecto importante, contudo, tipos embutidos e tipos definidos pelo usurio se diferenciam. Tipos embutidos escondem do programador a representao subjacente que no pode ser manipulada diretamente. Por exemplo, o programador no pode ter acesso a um bit especfico da seqncia de bits que representa um inteiro . Os procedimentos inserir e retirar, por outro lado, no so as nicas maneiras de manipular uma pilha. O programador pode operar diretamente sobre os componentes de objetos do tipo pilha, no sendo forado a chamar as operaes definidas para este novo tipo. Por exemplo, este comando em Pascal: seria uma operao legal, mas provavelmente indesejvel, pois modifica o nmero de elementos da pilha.
topo := 9;

Em outras palavras, no h nenhuma distino dentro da linguagem entre dois nveis de abstrao: o nvel em que se pode usar pilha como novo objeto e o nvel que implementa pilha em termos de abstraes de nveis inferiores. Ao mesmo tempo o programador pode encarar cursos como objetos abstratos manipulveis pelas operaes inserir e retirar, e tambm como agregaes de dados cujos componentes podem ser acessados e modificados individualmente. Essa confuso entre nveis de abstrao, pode levar produo de programas que sejam difceis de ler, alm de reduzir a modificabilidade dos mesmos. Por exemplo, supondo que decidimos trocar a representao de tabelas para uma estrutura de lista seqencial ou para uma rvore binria. Esta troca no est localizada nas declaraes dos dados e nas operaes concretas. necessrio tambm examinar todos os acessos diretos representao dos dados, que podem estar espalhados por todo o programa. Concluindo, para definir novos tipos de dados em um programa, gostaramos deter mecanismos na linguagem que permitam: b) Esconder a representao do novo tipo das unidade que usam este tipo. a) A associao de uma representao s operaes concretas em uma unidade apropriada da linguagem, que implemente os novos tipos; Os tipos definidos pelo usurio que satisfaam as duas propriedades so chamados Tipos Abstratos de Dados. Em outras palavras, podemos dizer que um tipo abstrato de dados um tipo que definido pela sua estrutura e pelas suas operaes. A propriedade a faz com que a verso final do programa reflita as abstraes encontradas durante o projeto do programa. A estrutura resultante do programa fica auto-explicativa. A propriedade b se garante a distino entre os nveis de abstrao e favorece a modificabilidade do programa.

Em linguagens de montagem, instrues que devem ser executadas consecutivamente so escritas uma aps a outra. Um desvio representado por uma instruo de jump. Por exemplo, repetir N vezes um certo conjunto de instrues requer inicializar, modificar e testar um valor de contador (em geral armazenado em um registrador), como no esquema abaixo (muitas mquinas fornecem a possibilidade de modificar, testar e desviar atravs de uma nica instruo):
set registrador to N; malha: if registrador = 0 then jump to depois; < corpo da malha >; restaure o valor do registrador e decremente-o de um; jump to malha; depois: ...

Estruturas de controle a nvel de mquina so difceis de usar e causadoras de erros. Os programas resultantes so difceis de ler e de manter, pais essas estruturas no so naturais para pessoas. Seres humanos organizam seus processos computacionais segundo certos padres fixos, como repetio ou seleo dentre alternativas diferentes. Por exemplo, uma maneira mais natural de descrever o programa acima seria: Estruturas de controle orientadas para o usurio tm sido incorporadas s linguagens de programao de alto nvel a fim de facilitar a programao e promover um melhor estilo de programao. Porm, a maioria das linguagens de alto nvel ainda retm o desvio, sob a forma de instrues goto, e, portanto, tambm suportam um estilo de programao de baixo nvel. As instrues goto so uma fonte de obscuridade em programao. A controvrsia do goto do incio da dcada de 70, contudo, no forneceu uma soluo definitiva para o problema de que estruturas de controle devem sei includas em uma linguagem de programao. No obstante, existe consenso geral de que instrues goto devem ser usadas somente como uma tcnica para sintetizar estruturas de controle legtimas se a linguagem no inclui estas estruturas de controle.
faa o seguinte N vezes < corpo da malha >

2.3.2 Tratamento de Excees

Os eventos, ou condies que uma unidade de programa encontra durante sua execuo, podem ser classificados como usuais ou excepcionais. Exemplos de condies excepcionais incluem os seguintes: um programa descobre que alguns valores de parmetros podem causar a execuo de uma diviso ilegal por zero; um alocador de memria fica sem memria para alocar; um erro de protocolo detectado durante a recepo de uma mensagem em uma linha de transmisso. A fim de aumentar a legibilidade do programa e indicar as hipteses feitas pelo programador sobre os eventos esperados e inesperados, desejvel ser possvel dividir o programa em vrias unidades. Algumas unidades tratam os eventos usuais, podendo detectar a ocorrncia de condies anmalas ou excepcionais (chamadas excees). A ocorrncia de uma exceo transfere implicitamente o controle para uma unidade apropriada, chamada um tratador de exceo, que trata do processamento da exceo. Um subprograma que pode causar uma exceo pode ser codificado introduzindo-se um parmetro adicional de retorno (por exemplo, um inteiro) denotando um cdigo de exceo (por exemplo, 0 = processamento normal, 1 = exceo nmero um, etc.). A unidade que chama este subprograma deve explicitamente testar o c6digo de exceo aps cada chamada e ento transferir o controle ao tratador de exceo apropriado se necessrio.

podem ser solucionados por qualquer computador. Linguagem natural tambm no pode ser implementvel porque ela pode ser imprecisa e tende a ser ambgua.

Na prtica uma linguagem de programao precisa ser capaz de aceitar uma eficiente implementao. As linguagens Pascal, C e Fortran oferecem programas com implementao mais eficiente, ao passo que a linguagem Prolog oferece uma menor eficincia. 2.4.2 Sintaxe e Semntica Toda linguagem tem sintaxe e semntica:

A sintaxe de uma linguagem de programao se refere forma do programa, como as expresses, comandos e declaraes so concatenados para formar programas. Ela define a seqncia de caracteres que podem produzir um programa. Assim, esta definio requer uma declarao de um conjunto de caracteres que podem ser usados em um programa vlido, junto com um conjunto de regras que apresentam os caminhos possveis em que estes caracteres podem ser agrupados. A semntica de uma linguagem de programao se refere ao significado dos programas e comandos, como eles se comportam quando so executados em um computador. A especificao semntica de uma linguagem de programao uma tarefa muito mais rdua que a definio sinttica, embora sejam usados mtodos formais para esta atividade.

2.4 Lingstica de Programao

As primeiras linguagens de programao de alto nvel foram desenvolvidas durante a dcada de 50. Desde ento, linguagens de programao tem sido uma fascinante e produtiva rea de estudo.

O estudo de linguagens de programao tambm chamado de lingstica de programao em analogia lingstica natural, que o estudo das linguagens naturais. Essa analogia devido ao fato de que tanto as linguagens de programao como as linguagens naturais possuem sintaxe (forma) e semntica (significado). As linguagens de programao no podem ser comparadas com a linguagem natural em termos de sua abrangncia, expressividade ou delicadeza. Por outro lado, a linguagem natural nada mais do que um grupo de pessoas falam e escrevem, assim a lingstica natural restrita anlise de linguagens existentes; enquanto que as linguagens de programao so especificamente desenvolvidas para serem implementadas em computadores. A lingstica de programao tem portanto diversos aspectos, que sero comentados a seguir: 2.4.1 Conceitos e Paradigmas

A sintaxe da linguagem influencia como os programas so escritos pelo programador, lidos por outros programadores e analisado pelo computador. A semntica da linguagem determina como o programa composto pelo programador, entendido por outros programadores e interpretado pelo computador. A sintaxe importante, pois necessrio que um programa esteja com os comandos corretamente escritos, mas a semntica mais importante ainda, pois no basta ter um programa sem erros de sintaxe, mas com os comandos combinados de maneira correta.

2.5 O Processamento De Linguagens

As linguagens de alto nvel so as linguagens que possuem uma certa independncia da mquina, pois no so desenvolvidas utilizando instrues especificas do processador (linguagem de mquina), mas um conjunto de comandos que so transformados em linguagens de mquina.

Toda linguagem de programao um artifcio, que foi especificamente desenvolvido. Algumas linguagens foram desenvolvidas por uma nica pessoa, como o caso da linguagem Pascal. Outras foram desenvolvidas por um grande grupo de pessoas, como por exemplo a linguagem Ada e PL/1. A experincia demonstra que linguagens desenvolvidas por uma nica pessoa, ou grupos pequenos, tendem a ser mais compactas e coerentes que linguagens desenvolvidas por grandes grupos. A linguagem precisa ser universal. Isto , todo problema precisa ter uma soluo que pode ser programada na linguagem, se o problema pode ser solucionado como um todo por um computador. Isto pode parecer um requisito muito forte, mas at mesmo uma linguagem bem pequena pode satisfazer esse requisito. Qualquer linguagem em que ns podemos definir funes recursivas podem ser consideradas universal. Por outro lado, uma linguagem que no tem recurso nem iterao, no uma linguagem universal. As linguagens de programao precisam tambm ser razovel e natural na forma de resolverem os problemas, embora uma linguagem que manipule somente tipos numricos pode ser razovel para resolver problemas matemticos, pode no ser nada natural para resolver problemas de aplicaes comerciais ou de inteligncia artificial. Uma linguagem de programao para ser digna do nome, precisa satisfazer certos requisitos:

As linguagem de programao so implementadas por compilao de programas em linguagem de mquina, por interpretao das mesmas, ou por alguma combinao de compilao e interpretao . Qualquer sistema para processamento de programas executando-os ou preparando-os para a execuo chamado processador de linguagem . Processadores de linguagem incluem compiladores, interpretadores, e ferramentas auxiliares como editores dirigidos sintaxe.

Embora seja teoricamente possvel a construo de computadores especiais, capazes de executar programas escritos em uma linguagem de programao qualquer, os computadores existentes hoje em dia so capazes de executar somente programas em uma linguagem de nvel baixo, a linguagem de mquina. Linguagens de mquina so projetadas em funo da rapidez de execuo de programas, do custo de sua implementao e da flexibilidade com que permitem a construo de programas de nvel mais alto. Por outro lado, linguagens de programao so freqentemente projetadas em funo da facilidade na construo e da confiabilidade de programas. Um problema bsico, ento, como uma linguagem de nvel mais alto pode ser implementada em um computador cuja linguagem de mquina bastante diferente, e de nvel bem mais baixo. Existem basicamente duas alternativas para esta implementao: interpretao e traduo. 2.5.1 Interpretao

Outro requisito fundamental que a linguagem de programao precisa ser implementvel em um computador. Isto , deve ser possvel executar cada programa bem definido e implementado com a linguagem. Notaes matemticas no so implementveis, porque na sua formulao possvel formular problemas que no 5

Nesta soluo, as aes indicadas pelos comandos da linguagem so diretamente executadas. Em geral existe para executar cada ao possvel um subprograma (escrito na linguagem de mquina do computador hospedeiro). Assim, a interpretao de um programa feita pela chamada daqueles subprogramas, em uma seqncia apropriada.

Mais precisamente, um interpretador um programa que executa repetidamente a seguinte seqncia: 1. Obter o prximo comando do programa. 2. Determinar que aes devem ser executadas. 3. Executar estas aes.

atributos de uma entidade precisam ser especificados antes que a mesma seja processada. A especificao da natureza exata dos atributos de uma entidade se d o nome de amarrao. Para cada entidade, a informao sobre esta amarrao guardada em um descritor.

1. Obter a prxima instruo (aquela cujo endereo especificado no indicador de instrues da mquina). 2. Deslocar o indicador de instrues (obtendo o endereo da prxima instruo a ser executada). 3. Decodificar a instruo. 4. Executar a instruo. Esta semelhana mostra que a interpretao pode ser encarada como a simulao, em um computador hospedeiro, de uma mquina especial cuja linguagem de mquina a linguagem de nvel mais alto. 2.5.2 Traduo

Esta seqncia bastante semelhante quela executada por computadores tradicionais, a saber:

O conceito de amarrao central na definio da semntica de linguagens de programao. Linguagens de programao diferem no nmero de entidades que podem tratar, no nmero de atributos amarrados a entidades e no momento em que a amarrao ocorre (tempo de amarrao). Em particular, uma amarrao esttica se estabelecida antes da execuo do programa e no pode ser mudada depois; dinmica se estabelecida em tempo de execuo e pode ser mudada, de acordo com regras especificadas pela linguagem. Os conceitos de amarrao e tempo de amarrao so teis no entendimento de muitos aspectos semnticos de linguagens de programao.

2.7 Variveis

Nesta soluo, programas escritos em linguagem de alto nvel so traduzidos para verses equivalentes em linguagem de mquina, antes de serem executados. Esta traduo feita em vrios passos. Por exemplo, subprogramas podem ser inicialmente traduzidos para cdigo Assembly, este pode depois ser traduzido para cdigo relocvel (objeto), em linguagem de mquina; em seguida, unidades em cdigo relocvel (objeto) podem ser ligadas em uma nica unidade relocvel (um nico cdigo objeto); e, finalmente, o programa inteiro carregado na memria principal, como cdigo executvel de mquina. Os tradutores usados em cada um destes passos tem nomes especiais: compilador, montador, ligador ( linker) e carregador, respectivamente.

Computadores convencionais se baseiam no conceito de uma memria principal que consiste em clulas elementares, cada qual identificada por um endereo. O contedo de uma clula contm seu valor. O valor de uma clula pode ser lido e/ou modificado. Esta modificao feita pela substituio de um valor por outro. Alm disso, circuitos internos permitem o acesso a uma clula de cada vez. Com poucas excees, linguagens de programao podem ser consideradas como abstraes, em nveis diferentes, do comportamento destes computadores convencionais. Em particular, o conceito de varivel introduzido como uma abstrao de clulas de memria, e o conceito de comando de atribuio como uma abstrao destrutiva destas clulas. Uma varivel caracterizada por um nome e quatro atributos bsicos: escopo, tempo de vida, valor e tipo. 2.7.1 O Nome de Uma Varivel

Em alguns casos, a mquina onde a traduo feita (a mquina hospedeira) diferente daquela onde o cdigo gerado executado (a mquina objetivo). Neste caso o processo chamado traduo cruzada. Tradutores cruzados so a nica opo de traduo quando a mquina objetivo muito pequena para conter o tradutor. A interpretao pura e a traduo pura so dois extremos. Na prtica, muitas linguagens so implementadas por uma combinao destas tcnicas. Um programa pode ser traduzido para um cdigo intermedirio, que ento interpretado. Este cdigo intermedirio pode ser simplesmente uma representao formatada do programa-fonte, de onde foi removida informao irrelevante (como comentrios e espaos) e onde os componentes de cada comando esto armazenados em formato fixo, de maneira a simplificar a decodificao de instrues que se segue. Neste caso, a soluo basicamente interpretativa. Alternativamente, o cdigo intermedirio poderia ser o cdigo de mquina (de baixo nvel) de uma mquina virtual que seria depois interpretada por programas. Esta soluo, que depende mais fortemente de traduo, pode ser adotada na gerao de cdigo porttil, isto , cdigo mais facilmente transfervel para outras mquinas do que cdigo em linguagem de mquina. Em uma soluo puramente interpretativa, a execuo de um comando pode requerer um processo de decodificao bastante complicado, para determinar as operaes a serem executadas e seus operandos. Na maioria dos casos, a mesma decodificao executada cada vez que o comando encontrado. Conseqentemente, se o comando aparece em um trecho de programa executado com freqncia (por exemplo, em uma repetio interna), a decodificao idntica afeta sensivelmente a rapidez de execuo do programa. Por outro lado, na traduo pura, o cdigo de mquina gerado para cada comando de alto nvel. Neste caso o tradutor decodifica cada comando somente uma vez. Os componentes usados com freqncia so ento decodificados, na sua representao em linguagem de mquina, vrias vezes; como isto feito eficientemente por circuitos internos, a traduo pura pode economizar tempo de execuo em comparao interpretao pura.

O nome de uma varivel usado para identificar e fazer referncia varivel. uma caracterstica bsica na maioria das linguagens de programao, embora algumas linguagens permitem o uso de variveis sem nome. 2.7.2 O Escopo de uma Varivel O escopo de uma varivel o trecho de programa onde a varivel conhecida e pode assim ser usada Uma varivel visvel dentro do seu escopo, e invisvel fora dele. A amarrao de variveis a escopos pode ser feita esttica ou dinamicamente. A amarrao esttica a escopo define o escopo de uma varivel a partir da estrutura lxica de um programa, isto , cada referncia a uma varivel estaticamente amarrada a uma declarao (implcita ou explcita) desta varivel. A maioria das linguagens adotam regras estticas de amarrao a escopo.

Na amarrao dinmica a escopo, o escopo de uma varivel definido em funo da execuo do programa. Tipicamente, o efeito da declarao de uma varivel se estende sobre todas as instrues executadas a seguir, at que uma nova declarao para uma varivel com o mesmo nome seja encontrada. APL, LISP e SNOBOL4 so exemplos de linguagens com amarrao dinmica a escopo.

Regras de escopo dinmicas so fceis de implementar, mas apresentam desvantagens dos pontos de vista da disciplina de programao e eficincia de implementao. Programas so difceis de ler, j que a identificao da declarao a qual uma varivel est amarrada depende da seqncia de instrues executadas, no podendo, em geral, ser determinada por uma leitura do programa. 2.7.3 O Tempo De Vida De Uma Varivel O tempo de vida de uma varivel o intervalo de tempo durante o qual uma rea da memria est amarrada a uma varivel. Esta rea usada para guardar o valor da varivel.

2.6 Amarrao

Programas envolvem entidades, como variveis, subprogramas, comandos, e assim por diante. Estas entidades tm certas propriedades, chamadas atributos. Por exemplo, uma varivel tem um nome, um tipo, uma rea de memria onde seu valor guardado; um subprograma tem um nome, parmetros (formais) de certos tipos, convenes para a correspondncia entre parmetros e argumentos; um comando tem aes a ele associadas. Os

A ao que adquire reas de memria para variveis chamado alocao. Em algumas linguagens, a alocao realizada antes da execuo do programa ( alocao esttica ). Em outras linguagens, ela feita em tempo de execuo ( alocao dinmica ); ou devido a um pedido explcito do programador, atravs de comando de alocao ou criao, ou automaticamente, quando da entrada no escopo da varivel. 8

bloco.

Uma varivel local aquela que declarada dentro de um bloco, para uso exclusivamente dentro desse

2.7.5 O Tipo De Uma Varivel

Uma varivel global aquela que declarada no bloco principal do programa, e que pode ser usada em qualquer parte do programa. Quando existe uma varivel local com o mesmo nome que a varivel global, a varivel local tem preferncia na sua chamada. 2.7.4 O Valor De Uma Varivel O valor de uma varivel representado, de forma codificada, na rea de memria amarrada varivel. Este cdigo interpretado de acordo com o tipo da varivel.

O tipo de uma varivel pode ser considerado como uma especificao da classe de valores que podem ser associados varivel, bem como das operaes que podem ser usadas para criar, acessar e modificar estes valores.

Quando a linguagem definida, o nome de um tipo em geral amarrado a uma certa classe de valores e a um conjunto de operaes. Por exemplo, o tipo boolean amarrado aos valores verdadeiro e falso e s operaes and, or e not. Quando a linguagem implementada, os valores e operaes so amarrados a certas representaes internas. Por exemplo, verdadeiro pode ser amarrado string 001, falso pode ser amarrado string 000. As operaes and, or e not podem ser implementadas atravs do uso de instrues de mquina, adequadas a operaes manipulando aquelas cadeias de dgitos. Existem linguagens que permitem a programadores a criao de novos tipos, por meio de declaraes de tipo. Por exemplo, em Pascal pode-se escrever
type t = array [1 .. 10] of boolean

Em algumas linguagens de programao, o valor de uma varivel pode ser uma referncia (ponteiro) para uma rea de memria onde armazenado um valor. Nestas linguagens, essas reas de dados podem se tomar acessvel atravs de uma cadeia de referncias (caminhos de acesso) de tamanho arbitrrio. Duas variveis compartilham uma rea de dados se ambas tem caminhos de acesso para a rea de dados. A modificao de uma rea de dados compartilhada, feita atravs de um caminho de acesso (ponteiro) qualquer, imediatamente conhecida por todos os outros caminhos de acesso. Compartilhar reas de dados uma tcnica usada para economizar memria, mas pode levar a programas difceis de ler e de entender, j que o valor das variveis pode ser modificado mesmo quando elas no so mencionadas.

Esta declarao estabelece, em tempo de traduo, uma amarrao entre o nome de tipo t e sua implementao. Como uma conseqncia desta amarrao, o tipo t herda todas as operaes da estrutura de dados usada na sua representao (o agregado homogneo); assim se torna possvel ler e modificar cada componente de um objeto do tipo t, por meio de indexao no agregado.

A amarrao entre uma varivel e o valor armazenado na rea de memria correspondente , em geral, dinmica, j que este valor pode ser modificado por operaes de atribuio. Uma atribuio como b:= a causa o armazenamento de uma cpia do valor de a na rea de memria amarrada a b. Algumas linguagens, entretanto, permitem o congelamento da amarrao entre uma varivel e seu valor, quando a amarrao estabelecida. A entidade resultante uma constante simblica definida pelo programador. Por exemplo, em Pascal se pode escrever:
const pi = 3.1416

2.8 Unidades De Programa

Linguagens de programao permitem que programas sejam compostos de unidades. Estas unidades podem ser desenvolvidas at certo ponto independentemente e podem algumas vezes ser traduzidas em separado e combinadas depois da traduo. As variveis declaradas dentro de uma unidade so locais unidade. Uma unidade pode ser ativada durante a execuo do programa. Subprogramas em linguagens Assembler, unidades (Unit) em Pascal, bibliotecas em C (stdio.h, conio.h) so alguns exemplos conhecidos de unidades de programa. A representao de uma unidade de programa durante sua execuo chamada ativao de unidade. A ativao de uma unidade consiste em um segmento de cdigo e um registro de ativao. O segmento de cdigo, cujo contedo fixo durante a execuo, contm as instrues da unidade. O contedo do registro de ativao pode variar. Este registro contm toda a informao necessria execuo da unidade, incluindo, entre outras coisas, as reas de dados associados s variveis locais de uma ativao da unidade. A posio relativa de uma rea de dados no registro de ativao chamada deslocamento. Para acessar uma rea de dados, o processador pode usar o endereo inicial do registro de ativao que contm a rea de dados e o deslocamento correspondente. Uma unidade no uma parte autocontida, completamente independente do resto do programa. Se a unidade um subprograma, ento ela pode ser ativada por uma chamada de subprograma existente em outra unidade, que recupera o controle depois da execuo do subprograma chamado. Desta forma, o endereo de retorno (que pode variar de chamada para chamada) um dado importante, que precisa ser guardado no registro de ativao durante a execuo da chamada de um subprograma. Alm disso, unidades podem fazer referncia a variveis no declaradas localmente, se as regras de escopo da linguagem permitirem. Variveis no locais, que podem ser referenciadas por uma unidade so chamadas globais unidade.

e em ALGOL 68

real pi =3.1416

e ento usar pi em expresses como

circunferncia := 2 * pi * raio

A varivel pi est amarrada ao valor 3,1416, e este valor no pode ser modificado, isto , o tradutor acusa um erro se existe atribuio a pi.

Uma pergunta sutil, relativa amarrao de uma varivel a seu valor, a seguinte: qual o valor de uma varivel imediatamente aps a criao da varivel? H vrias respostas possveis. Infelizmente, muitas vezes a soluo adotada no especificada na definio da linguagem, e o problema ento resolvido de maneiras diferentes em diferentes implementaes. Este fato dificulta provas de correo de programas, j que a correo pode depender da implementao. Alm disso, transportar um programa aparentemente correto para uma instalao diferente pode produzir erros imprevisveis ou resultados inesperados.

Uma soluo bvia e freqentemente adotada consiste em se ignorar este problema. Neste caso, o valor (conjunto de bits) encontrado na rea de memria associada varivel considerada o valor inicial da varivel. Outra soluo usar uma estratgia de inicializao fornecida pelo sistema: por exemplo, inteiros tem valor inicial zero, strings tem como valor inicial o espao em branco, e assim por diante. Ainda outra soluo consiste em considerar como indefinido o valor de uma varivel ainda no inicializada, proibindo os acessos para leitura at que um valor seja atribudo varivel. Esta soluo, sem dvida, a mais limpa, pode ser implementada de vrias maneiras. O nico problema poderia ser o custo associado verificao, em tempo de execuo, de que um valor no inicializado no seja usado no programa. 9 10

3. TIPOS DE DADOS

estaticamente testada como correta (digamos i e j so ambas reais) e ainda assim pode necessitar de um teste em tempo de execuo se quisermos detectar uma diviso por zero. H linguagens em que alguns smbolos de operaes podem ser usados para representar um grande nmero de operaes. Por exemplo, o sinal + pode representar tanto soma de reais como de inteiros. Em uma linguagem com testes estticos de tipos a operao de mquina a ser invocada para executar A + B pode ser escolhida pelo tradutor, pois os tipos dos operadores so conhecidos. Isto torna a implementao mais eficiente do que a de uma linguagem com testes dinmicos de tipos como APL, na qual necessrio levar em conta os tipos nos descritores em tempo de execuo. Uma operao cujo significado depende dos seus operadores chamada sobrecarregada ou genrica. A operao + sobrecarregada porque definida tanto para inteiros como para reais (e implementada por diferentes instrues de mquina na representao subjacente). Um uso de sobrecarga pode contribuir para a simplicidade e facilidade de uso de uma linguagem de programao. Por exemplo, usar dois smbolos diferentes para soma de inteiros e de reais tornaria a programao mais complicada. Porm, o uso excessivo de sobrecarga pode gerar programas difceis de entender porque um nico nome denota entidades completamente diferentes. Em alguns casos, o programador pode explicitamente associar ao tipo uma especificao da preciso relativa da representao. Por exemplo, FORTRAN permite ao usurio escolher entre preciso simples ou dupla para nmeros em ponto flutuante. ALGOL 68 permite que se especifique a preciso (relativa) desejada por declaraes como long real, long long real (para valores em ponto flutuante) e long int, long long int (para valores em ponto fixo). A preciso de tipos de dados numricos tambm pode ser controlada em Ada. A especificao da preciso pode ser encarada tanto como uma diretiva de otimizao de espao para o tradutor quanto como um pedido ao tradutor para inserir testes em tempo de execuo para monitorar os valores das variveis. Este teste fornece ao programador um auxlio efetivo para determinar se o programa est correto. Os programas com especificaes de preciso so mais facilmente adaptveis a outras instalaes com comprimentos de palavra da memria diferentes porque as alteraes no programa fonte esto localizadas nas declaraes. 4. Controle de preciso 3. Desambiguao de operadores pode ser feita em tempo de traduo

Programas de computador podem ser encarados como funes que devem ser aplicadas a certos dados de entrada a fim de produzir determinados resultados desejados. Em linguagens de programao convencionais essa funo avaliada atravs de uma seqncia de passos que produzem dados intermedirios, os quais so armazenados em variveis do programa. Existem diferenas bsicas de uma linguagem para outra quanto s espcies de dados que usam, as espcies de operaes disponveis sobre os dados e maneira como os dados podem ser estruturados e usados.

As linguagens de programao usualmente provem um conjunto fixo, embutido, de tipos de dados elementares bem como mecanismos para estruturar tipos de dados mais complexos a partir dos elementares. Embora nem todas as linguagens tratam os dados da mesma maneira, vamos nos concentrar em linguagens que estabeleam uma ligao esttica entre uma varivel e seu tipo.

3.1 Tipos Embutidos

As linguagens de programao fornecem um conjunto fixo de tipos embutidos que reflete, na maioria dos casos, o comportamento da mquina. A nvel de linguagem de programao o conceito de tipo embutido aparece como uma maneira de identificar o comportamento abstrato de um conjunto de objetos com um conjunto comum de operaes. Assim, os inteiros podem ser encarados como o conjunto de valores ... -2, -1, 0, 1, 2, ... que podem ser manipulados pelos operadores familiares +, , * e /. O tradutor para a linguagem de programao associa a esta viso abstrata uma implementao concreta. Por exemplo, a implementao mapeia o objeto abstrato 25 em uma certa seqncia de bits, por exemplo 00000000 00011001. Analogamente, a soma de dois inteiros associada com a soma em ponto fixo da mquina.

Podemos dizer que tipos embutidos introduzem quatro propriedades teis. A primeira destas propriedades vale tanto para linguagens com tipos estticos coma para as com tipos dinmicos, enquanto as outras trs valem s para linguagens com tipos estticos. O programador no tem acesso seqncia de bits subjacente que representa um valor de certo tipo. Tal seqncia de bits alterada como resultado da aplicao das operaes, mas a alterao visvel ao programador como um novo valor do tipo embutido e no como uma nova seqncia de "bits. A invisibilidade da representao subjacente tem os dois efeitos benficos seguintes. N Estilo de Programao : A abstrao fornecida pela linguagem aumenta a legibilidade do programa por proteger a representao dos objetos de manipulao indisciplinada. Isso contrasta com a mquina convencional subjacente, a qual no exige proteo: qualquer objeto encarado como uma seqncia de bits interpretada, podendo ser manipulada pelo conjunto de instrues da mquina. Por exemplo, uma posio contendo uma instruo pode ser somada com uma contendo uma seqncia de caracteres ou mesmo com outra instruo. 1. Invisibilidade da representao subjacente.

3.2 Agregados De Dados

As linguagens de programao permitem que o programador especifique agregaes de dados elementares e, por sua vez, agregaes de agregados. Um exemplo bem familiar o construtor array, que constri agregados de elementos de tipos homogneos. Um objeto agregado tem um nico nome. A manipulao pode ser feita em um nico componente elementar de cada vez, tendo-se acesso a cada componente por uma operao de seleo apropriada. Em muitas linguagens tambm possvel atribuir valores e comparar agregados inteiros.

N Modificabilidade: As implementaes das abstraes podem ser mudadas sem afetar os programas que fazem uso destas abstraes. Como conseqncia, a portabilidade dos programas tambm melhorada, isto , os programas podem ser transportados para mquinas que usem representaes internas diferentes para os dados.

3.3 Tipos Definidos Pelo Usurio

Os mecanismos vistos anteriormente permitem que o programador defina objetos de informao complexos como agregados de itens elementares. Um exemplo de declarao de varivel estruturada em Pascal :
var a: record x: integer; y: array [1 .. 10] of char; end;

As linguagens de programao fornecem instrues para ler e escrever valores dos tipos embutidos. A maioria das linguagens tambm fornece mecanismos para dar formato sada. As mquinas efetuam a entrada/sada interagindo com os dispositivos perifricos de maneira complicada e dependente da mquina. As linguagens de alto nvel escondem estas complicaes e os recursos fsicos envolvidos na entrada/sada da mquina (registradores, canais etc.) Se exigida a declarao de variveis, operaes ilegais sobre uma varivel podem ser detectadas pelo tradutor, isto , a proteo das variveis pode ser obtida em tempo de traduo. Porm, os testes estticos de tipos no esgotam todos os testes que podem ser feitos com um programa. Por exemplo, a expresso i / j pode ter sido 2. Uso correto de variveis pode ser testado em tempo de traduo

O tipo da varivel a no tem nome explicito, mas descrito em termos de sua representao (um produto cartesiano tendo como um de seus campos um mapeamento finito).

11

Vrias linguagens de programao modernas, como ALGOL 68, Pascal e Ada, tambm fornecem um meio para definir um novo nome de tipo. O programador pode definir tipos de dados renomeando tipos existentes ou agregando alguns tipos elementares ou definidos pelo usurio via algum dos mecanismos analisados anteriormente. A noo de tipo usada nessas linguagens em um contexto limitado, apenas para captar um mecanismo uniforme de acesso aos componentes de objetos estruturados. Uma declarao de tipo define uma

12

estrutura de dados prottipo que pode ser instanciado declarando-se tantas variveis desse tipo quantas forem necessrias. Por exemplo, em Pascal pode-se declarar o seguinte tipo produto cartesiano:
type complexo = record raio: real; angulo: real; end;

Dada a operao: a op b, o operando com um tipo mais abaixo na hierarquia convertido ao tipo do outro operando antes da execuo de op. Essas noes elaboradas de coero em ALGOL 68 podem ser criticadas com base no fato de levarem a programas bastante obscuros. Converses automticas enfraquecem a capacidade do tradutor de testar os tipos do programa, pois superpem ao tipo declarado de uma varivel as transformaes automticas implcitas. Em geral, quanto mais o tradutor pode fazer implicitamente, tanto menos servio de teste de erros ele pode fornecer, porque o compilador pode tomar erros reais como pedidos implcitos de converses.

COMPLEX > DOUBLE PRECISION > REAL > INTEGER.

Todas as variveis do tipo complexo so compostas de dois campos: raio e o ngulo, para guardar o valor absoluto e o argumento de um nmero complexo. A declarao: instancia trs variveis complexas chamadas c1, c2 e c3. 1. Legibilidade
var c1, c2, c3: complexo;

3.5 reas Problemticas e Exemplos De Solues

As vantagens bsicas de fornecer meios de dar nomes explcitos a tipos so:

A escolha apropriada dos nomes dos tipos novos pode melhorar a legibilidade dos programas. O processo de refinamentos sucessivos que leva definio de uma classe de dados refletido na estrutura hierrquica das definies dos tipos. Por exemplo, aps a declarao acima de complexo, poderia se declarar os seguintes tipos:
voltagem = complexo; tabela_de_voltagens = array [1 .. 10] of voltagem;

As linguagens de programao so importantes no por si prprias, mas apenas como ferramentas que auxiliam na produo de programas e sistemas. Ns temos interesse no nas caractersticas que tornam uma linguagem mais "esperta ou elaborada do que outra, mas sim em como estas caractersticas podem suportar a produo de programas e sistemas com boas qualidades globais. 3.5.1 Tipagem Forte Um importante efeito da introduo de tipos a possibilidade de testes estticos de tipos. Os programas resultantes tm maior chance de estarem corretos, e tambm de ser mais eficientes, porque no necessrio ter descritores em tempo de execuo nem efetuar testes sobre eles. Uma linguagem dita fortemente tipada se permite que todos os testes de tipos sejam efetuados estaticamente. Examinando Pascal e ALGOL 68 podemos concluir que Pascal no fortemente tipada, ao contrrio de ALGOL 68, pelas seguintes razes: 1. Em Pascal, subintervalos no podem ser testados estaticamente. Por exemplo, em a: = b + c, onde as variveis so todas declaradas como pertencentes ao subintervalo 1 .. 10, no possvel determinar se o valor de a + b pertence ao tipo subintervalo; isto s pode ser feito em tempo de execuo. J que o tipo dos ndices de um vetor 4 parte do tipo do vetor. 2. No possvel testar estaticamente o emprego correto dos registros com variantes de Pascal (registros seletivos ou unies), e testes em tempo de execuo so raramente efetuados por causa do severo impacto na eficincia da execuo. Portanto, registros com variveis fornecem, um furo que permite ao programador da fugir da estrutura de tipos da linguagem. Em contraste, a unio de ALGOL 68 completamente segura, sendo que a sintaxe da linguagem tal que qualquer acesso errado pode ser acusado em tempo de compilao.

Estas declaraes mostram bastante explicitamente que variveis do tipo tabela_de_voltagens podem representar as voltagens em um espao de 10 pontos, sendo que uma voltagem representada por um nmero complexo. Uma alterao nas estruturas de dados que representam variveis de um dado tipo requer modificao apenas na declarao do tipo e no nas declaraes de todas as variveis, ou seja, fica localizada em pequenas pores do programa. Porm, pode ainda ser necessrio modificar as instrues do programa que manipulam variveis cujo tipo foi alterado. A definio de uma estrutura de dados prottipo complicada escrita uma s vez e ento usada quantas vezes forem necessrias para declarar variveis. Isto reduz a quantidade de codificao necessria para copiar a mesma definio para cada varivel e diminui a possibilidade de erros por distrao. A possibilidade de definir novos tipos permite que o programador estenda a aplicao de uma ferramenta de validao simples, porm efetiva, que seja teste de tipos, da classe limitada de tipos embutidos a qualquer classe de tipos definidos pelo usurio. A quantidade de testes de tipo que pode ser feita depende da noo de compatibilidade (ou equivalncia) de tipos especificada pela linguagem. O mecanismo de teste de tipos trata dois tipos compatveis como sendo o mesmo tipo. 4. Teste de Consistncia 3. Fatorao 2. Modificabilidade

3. No h regras de compatibilidade de tipos rigorosamente especificadas na linguagem Pascal, enquanto ALGOL 68 se esfora em definir a noo de compatibilidade precisamente. Em conseqncia, o teste de tipos de Pascal est freqentemente baseado em fundao insegura e seus efeitos podem variar em diferentes implementaes. 3.5.2 Compatibilidade de Tipos As regras de compatibilidade devem dar uma especificao exata de como o mecanismo de testes de tipos deve ser aplicado. Por exemplo, podemos observar as seguintes declaraes em Pascal:
type t = array [1 .. var a, b : array [1 c : array [1 .. d : t; e, f : record a b end; 20] of integer; .. 20] of integer; 20] of integer;

3.4 Converso De Tipos

Geralmente necessrio converter um va1or de um tipo em um valor de outro, como por exemplo, quando queremos somar a varivel inteira v constante real 3.753. Na maior parte das linguagens essa converso implcita. Por exemplo, a avaliao da soma acima em geral implica uma converso de v, de inteiro para real, e, ento, a execuo da soma em ponto flutuante. A converso implcita tornada explcita pelo tradutor, que gera cdigo para a converso baseado no tipo dos operadores e na hierarquia de tipos da linguagem. Por exemplo, a hierarquia de FORTRAN : 13

: integer; : t;

1. Equivalncia de nomes . Duas variveis possuem tipos compatveis se tm o mesmo nome de tipo, definido pelo usurio ou primitivo, ou se aparecem na mesma declarao. Assim, a e b, bem como e e f tem tipos

Nas declaraes do exemplo anterior possvel definir as duas noes de compatibilidade de tipos:

14

compatveis, como tm d, e.b e f.b, mas no a e c. O termo equivalncia de nomes reflete o fato de que duas variveis que no so declaradas juntas tm tipos compatveis s se seu nome de tipo o mesmo. 2. Equivalncia estrutural. Duas variveis tm tipos compatveis se possuem a mesma estrutura. Segundo esta definio, nomes de tipos definidos pelo usurio so usados s como uma abreviatura da estrutura que representam e no introduzem qualquer caracterstica semntica nova. Se verificar a equivalncia estrutural, os nomes dos tipos definidos pelo usurio so substitudos pelas suas definies. Este processo repetido at no sobrarem mais nomes de tipos definidos pelo usurio. Os tiyos so ento considerados estruturalmente equivalentes se tm exatamente a mesma descrio. No exemplo acima a, b, c, d, e.b e f.b tm tipos compativeis. A compatibilidade de tipos definida em ALGOL 68 via equivalncia estrutural. Pascal, por outro lado, no especifica a noo adotada de compatibilidade de tipos e, assim, deixa esta importante questo para ser decidida pela implementao. Uma consequncia infeliz que um programa aceito por um compilador pode vir a ser rejeitado por outro se as regras de compatibilidade de tipos das duas implementaes diferem.

Na maioria dos casos a implementao Pascal original usava equivalncia estrutural. A escolha de equivalncia de nomes teria tornado ilegal, por exemplo, atribuir um valor inteiro a uma varivel que especificada como um subintervalo dos inteiros, a no ser que converses apropriadas sejam definidas pela linguagem. Equivalncia de nomes utilizada para a passagem de parmetros.

Equivalncia de nomes se aproxima mais do que equivalncia estrutural ao conceito de tipos abstratos de dados. O fato de se ter propriedades em comum pode ser especificado pelo emprego do mesmo nome de tipo, o que melhora a legibilidade do programa, alm de que a equivalncia de nomes mais fcil de implementar. Ambas as noes, contudo, podem ser encaradas como principalmente sintticas e no semnticas. Do ponto de vista semntico, o que deveria ser expresso a noo de comportamento idntico, requerendo mecanismos de linguagem que suportem a definio de tipos abstratos de dados. 3.5.3 Ponteiros

PARTE II - LINGUAGEM PASCAL E DELPHI

Ponteiro comearam a ser criticados em meados da dcada de 1970. Assim como gotos irrestritos alargam o contexto a partir do qual uma instruo rotulada pode ser executada, ponteiros irrestritos alargam o contexto a partir do qual se pode ter acesso a um dado. Ponteiros compreendem a ferramenta bsica fornecida para se representar dados definidos recursivamente. Como um mecanismo de linguagem de baixo nvel, contudo, podem ser usados para outros propsitos alm dos originalmente pretendidos. Podem tornar os programas menos compreensveis e, freqentemente, inseguros principalmente porque em algumas linguagens o uso de ponteiros pode levar a srias violaes de tipo, pois os ponteiros podem no ser qualificados pelo tipo de dado que pode apontar, como por exemplo, em PL/I e Pascal os ponteiros so declarados simplesmente como ponteiros, ao invs de ponteiros para um certo tipo de dado, como o caso da linguagem C.

15

16

4. LINGUAGEM PASCAL

O Pascal uma linguagem de programao de alto nvel e de fins genricos, derivada do Algol-60. As suas instrues so formadas por expresses do tipo algbrico e por algumas palavras inglesas, tais como BEGIN, END, READ, WRITE, IF THEN, REPEAT, WHILE, DO, etc. Neste aspecto o Pascal assemelha-se a muitas outras linguagens de alto nvel. Contudo, o Pascal contm ainda alguns aspectos nicos, que foram especificamente concebidos para estimular o uso de uma programao estruturada - um mtodo ordenado e disciplinado, do qual resultam programas claros, eficientes e sem erros. A designao de Pascal foi atribuda em homenagem ao brilhante cientista e matemtico francs, Blaise Pascal (1623-1662), que dentre outros feitos se destaca a inveno da primeira calculadora mecnica. A linguagem Pascal foi originalmente desenvolvida no incio dos anos 70 por Nicklaus Wirth, na Universidade Tcnica de Zurique, Sua. O objetivo original foi o de desenvolver uma linguagem disciplinada de alto nvel para ensinar programao estruturada. Esta linguagem desenvolvida por Wirth conhecida como Pascal Padro. Nos Estados Unidos, foi definido conjuntamente um padro oficial para a linguagem, pelo American National Standarts Institute (ANSI) e pelo Institute of Electrical and Electronics Engineers (IEEE). Este padro oficial conhecido como ANSI Pascal. Em 1983 a Borland International comeou a comercializar um compilador Pascal relativamente barato, designado por Turbo Pascal , para ser usado em computadores pessoais.

4.1.1.4 Palavras Reservadas ou Palavras Chave

<> := ( ) { ou (* } ou *) ; '

comparao: diferente atribuio parnteses incio de comentrio final de comentrio separador demarcador de strings ou caracteres

Palavras Reservadas so smbolos que possuem significado definido na linguagem, no podendo ser redefinidos ou usado como nome de identificador. Absolute case downto file goto inline mod or record shr type var and const else for if interface nil packed repeat string unit while array div end forward implementation interrupt not procedure set then until with begin do external function in label of program shl to uses xor

4.1 Elementos da Linguagem

Normalmente uma linguagem de programao possui dois tipos de elementos: os elementos definidos pela linguagem e os elementos definidos pelo prprio usurio: 4.1.1 Elementos definidos pela linguagem: 4.1.1.1 Letras (alfanumricas): A at Z a at z 0 at 9

A linguagem Pascal tem ainda alguns identificadores predefinidos pela linguagem conhecidos como Identificadores Padro. Podem ser constantes, tipos, variveis ou subprogramas (procedimentos ou funes) e podem ser escritos tanto em minsculo como em maisculo: abs eof ln read sin true arqtan eoln maxint readln sqr trunc boolean exp odd real sqrt write char false ord reset str writeln chr input output rewrite succ cos integer pred run text

4.1.1.2 Dgitos (numricos): 4.1.1.3 Smbolos Especiais

Todas as linguagens possuem smbolos especiais que so diferentes em cada linguagem, mas que tem a mesma finalidade: Smbolo + * / = > < >= <= Significado

4.1.1.5 Delimitadores

Os elementos da linguagem (identificadores, nmeros e smbolos especiais) devem ser separados por pelo menos um dos seguintes delimitadores: branco, final de linha ou comentrio. 4.1.2 Elementos definidos pelo Usurio 4.1.2.1 Identificadores Um identificador um smbolo definido pelo usurio que pode ser um rtulo (label), uma constante, um tipo, uma varivel, um nome de programa ou subprograma (procedimento ou funo). Os identificadores normalmente devem comear com um caractere alfabtico e no pode conter espaos em branco.

adio subtrao multiplicao diviso comparao: igualdade comparao: maior que comparao: menor que comparao: maior ou igual comparao: menor ou igual

17

18

O nmero mximo de caracteres que podem formar o identificador varia de compilador para compilador. No PASCAL padro somente os 8 primeiros caracteres so vlidos; no TURBO PASCAL pode-se usar identificadores de at 127 caracteres sendo todos significativos e no h distino entre maisculas e minsculas. 4.1.2.2 Comentrios Os comentrios no tem funo nenhuma para o compilador e serve apenas para aumentar a legibilidade e clareza do programa. Um comentrio iniciado por { ou (* e encerrado por } ou *). 4.1.2.3 Endentao

-9.2 x 10 a 9.2 x 10 8 bytes (4 palavras) os caracteres da tabela ASCII 1 byte TRUE ou FALSE 1 byte tipo estruturado composto por quantidade de caracteres x 1 byte um conjunto de elementos tipo char * os tipos assinalados somente podem ser utilizados em mquinas com co-processador matemtico (8087, 80287, 80387, 80487) ou com chip processador 80486 DX ou superior.
18 18

comp * char boolean string

A endentao tambm no tem nenhuma funo para o compilador e serve para tornar a listagem do programa mais clara dando hierarquia e estrutura ao programa.

4.2 Tipos de Dados

Por economia, convenincia, eficincia e preciso, o Turbo Pascal fornece uma ampla variedade de tipos inteiros e de nmeros reais. Devemos ter uma especial ateno para decidir qual o tipo apropriado para uma determinada aplicao. Algumas vezes, a validade dos resultados nmericos de um programa depende da escolha correta dos tipos de dados numricos. Em geral, devemos analisar cuidadosamente as caracteristicas dos tipos de dados que decidiremos usar. 4.2.1.1 Tipos Inteiros O Turbo Pascal oferece cinco tipos inteiros: INTEGER, WORD, LONGINT, SHORTINT e BYTE. Este tipos fornecem faixas amplas de valores de nmeros inteiros. Quanto mais ampla a faixa, maior a memria necessria para os valores de um determinado tipo: os valores em LONGINT necessitam de quatro bytes; valores em INTEGER e WORD necessitam de dois bytes, e os valores em SHORTINT e BYTE necessitam de um byte cada. Um inteiro no possui parte decimal, e sempre perfeitamente preciso dentro da sua faixa. Aqui esto as faixas dos cinco tipos inteiros: 4.2.1.2 Tipos de Nmeros Reais Um nmero real pode conter dgitos tanto antes como depois do ponto decimal, e pode estar sujeito aos limites da preciso limitada. Este tipo tambm conhecido como ponto flutuante, pois o Turbo Pascal armazena os nmeros reais em duas partes distintas: os dgitos significativos (algumas vezes chamados de mantissa) e o expoente, que indica a posio correta do ponto decimal. Se o equipamento no possuir um co-processador aritmtico e for um micro com processador 486 Sx ou inferior s estar disponvel o tipo REAL. Caso contrrio e se a opo Numeric processing estiver ajustada para 80x87, existiro quatro tipos numricos adicionais: COMP e trs tipos reais -SINGLE, DOUBLE e EXTENDED - que oferecem uma variedade de faixas e precises para as aplicaes em nmeros reais. Com a opo Emulation no seu estado default On (ligada), o Turbo Pascal emula as opera5es do 8087 se o chip no estiver presente no seu sistema. Se a opo Emulation estiver Off (desligada), uma aplicao em nmero real no ser executada sem o chip de co-processamento numrico. 4.2.1.3 Caracteres e Strings Um caractere uma letra, dgito, pontuao, ou outro elemento do conjunto de caracteres do IBM PC. Na memria do computador, cada caractere realmente armazenado como um cdigo de um nico byte inteiro, de O a 255. Este cdigo definido como ASCII (American Standard Code for Information Interchange), define o conjunto de caracteres disponveis, providenciando um equivalente numrico para cada um dos 256 caracteres.

Um Tipo de Dado define o conjunto de valores que uma varivel pode assumir e as operaes que podem ser feitas sobre ela. Toda varivel em um programa deve ser associada a um e somente um tipo de dado. Esta associao feita quando a varivel declarada na parte de declarao de variveis do programa. Uma vez declarada uma varivel de qualquer tipo, poderemos utilizar um comando de atribuio, tambm chamado de operador de atribuio , para armazenar um valor na varivel. 4.2.1 Tipos predefinidos pela linguagem Os programas em Pascal podem trabalhar com dados expressos como valores literais (tal como a string Qualquer Coisa ou o nmero 5) ou como valores representados simbolicamente por identificadores (tais como as constantes e variveis). Sem considerar como o valor do dado est expresso, voc deve tomar cuidado para distinguir os diversos tipos de dados que o Turbo Pascal reconhece. A mistura de tipos de dados de modo no apropriado resulta em erros em tempo de compilao. O Turbo Pascal tem diversas categorias de tipos de dados padro, dos quais os mais comumente usados so: N Tipos numricos inteiros N Tipos de nmeros reais N Tipo Booleano tipo shortint byte integer word longint real single * double * extended *

N Tipos de caractere e string

intervalo de representao -128 a 127 0 a 255 -32.768 a 32.767 0 a 65.535 -2.147.483.648 a 2.147.483.647 39 38 2.9 x 10 a 1.7 x 10 45 38 1.5 x 10 a 3.4 x 10 324 308 5.0 x 10 a 1.7 x 10 4951 4932 1.9 x 10 a 1.1 x 10

tamanho 1 byte 1 byte 2 bytes (1 palavra) 2 bytes (1 palavra) 4 bytes (2 palavras) 6 bytes (3 palavras) 4 bytes (2 palavras) 8 bytes (4 palavras) 10 bytes (5 palavras)

A maior parte da primeira metade de cdigo ASCII - nmeros de O a 127 - usada como padro por todos os computadores pessoais. Ela fornece os cdigos para as letras maisculas de A a Z (65 a 90); as letras minsculas de a a z (97 a122); os dgitos de O a 9(48 a 57); os sinais de pontuao, caracteres de controle e assim por diante. A segunda metade do cdigo ASCII, 128 a 255, fornece caracteres nopadro que so freqentemente implementados de modo diferente por diferentes marcas de computadores. No IBM PC e compatveis, esses cdigos fornecem uma variedade de caracteres teis, incluindo letras de lnguas estrangeiras; smbolos tcnicos, matemticos e cientficos; e um conjunto de 19 20

caracteres grficos que podem ser combinados para criar molduras, padres, imagens e sombreados para a tela no modo texto.

data[5] fornece o quinto caractere da string armazenada na varivel data.

O identificador padro CHAR define no Turbo Pascal as variveis do tipo caractere. Por exemplo, a declarao VAR, a seguir, define uma varivel CHAR chamada opcao_menu: VAR

Uma varivel do tipo char tem seu valor correspondente na tabela ASCII (American Standart Code for Information Interchange) atravs da funo: ord( x ) Para transformar o valor da tabela ASCII no seu caracter correspondente, usa-se a funo: chr( x ) ou o valor correspondente precedido do sinal #. #65 ou chr(65) corresponde ao A. 4.2.1.4 Valores Booleanos

opcao_menu: CHAR;

Uma string uma seqncia de caracteres. O comprimento de uma string igual ao nmero de caracteres que ela contm. No Turbo Pascal, o comprimento mximo de uma string de 255 caracteres; o menor comprimento de string possvel de 0 caracteres. Uma string que no possua caracteres chamada de null ou vazia. A palavra reservada STRING define uma varivel string. Por exemplo, o comando VAR, a seguir, define uma string chamada nome_cliente:
VAR

Esta varivel pode armazenar exatamente um caractere por vez.

nome_cliente: STRING;

O comprimento mximo de uma varivel declarada simplesmente como STRING de 255 caracteres. Entretanto, voc pode especificar um comprimento mximo menor para uma varivel string, usando a seguinte notao: VAR Nome_da_Varivel: STRING[ComprimentoMximo] ;

Um valor Booleano pode ser tanto TRUE (verdadeiro) como FALSE (falso). (Os valores Booleanos so assim chamados em homenagem ao matemtico Ingls do sculo dezenove George Boole, tambm conhecido como valor lgico ). O identificador padro BOOLEAN define uma varivel deste tipo, como neste exemplo:
VAR Trabalho_Entregue: BOOLEAN;

O Turbo Pascal fornece um conjunto de operaes lgicas e relacionais, que produzem expresses que resultam em valores de TRUE ou FALSE.

Por exemplo, a declarao a seguir define uma string cujo o comprimento mximo de 8 caracteres:
VAR

4.2.2 Tipos definidos pelo usurio

data: STRING[8];

Os tipos definidos pelo usurio so aqueles que usam um grupo de tipos predefinidos ou um subgrupo de algum tipo. Este tipo chamado de tipo enumerado de dados e representa uma escolha dentre um pequeno nmero de alternativas. 4.2.2.1 Tipo enumerado discreto Em Pascal temos o comando TYPE para definir o tipo de dados que queremos: TYPE tpdias = (segunda, tera, quarta, quinta, sexta, sbado, domingo); VAR diasem: tpdias; ... diasem:= segunda;

Devemos sempre lembrar que o comprimento real da string armazenada numa varivel do tipo STRING dinmico, ou seja, a string pode ter qualquer comprimento at o mximo especificado. A funo embutida LENGTH fornece o comprimento dinmico atual de uma varivel string. Finalmente, voc pode utilizar a notao a seguir para acessar um nico caractere de uma posio especificada dentro de uma varivel string: Nome_da_Varivel [ Posio do Caractere ] Por exemplo, a expresso: 21

if (diasem = tera) then ...

22

4.2.2.2 Tipo enumerado contnuo

O tipo enumerado contnuo pode ser definido como um intervalo de um tipo enumerado discreto j definido ou de um tipo padro. TYPE tpdias = (segunda, tera, quarta, quinta, sexta, sbado, domingo); TYPE tpfimsem = sbado..domingo; TYPE tpdiautil = segunda..sexta; VAR fimsem: tpfimsem; ... fimsem:= sbado; if (fimsem = domingo) then ...

VAR nome1, nome2, ... , nomen : tipo ; Ex:


Var nome: string[50]; salario: real; filhos: integer; sexo: char;

4.4 Operadores

4.4.1 Operadores aritmticos + * / DIV MOD soma subtrao multiplicao diviso diviso truncada resto da diviso

4.3 Constantes e Variveis


4.3.1 Constantes Constantes so valores declarados no incio do programa e que no se alteram na execuo do programa.

Muitas vezes conveniente associar um dado simples, tal como um valor numrico ou uma cadeia a um identificador no incio do programa, proporcionando assim um nome ao elemento de informao. O identificador designado de constante se o elemento da informao no se altera em nenhuma parte do programa.

Uma constante deve sempre ser definida antes de aparecer numa instruo de Pascal. Esta definio tem duas finalidades estabelece que o identificador uma constante e associa um elemento de informao constante. O tipo da constante ser implicitamente determinado pelo elemento de informao. Ex:

Os operadores aritmticos so utilizados para compor expresses, que podem ser formadas por nmeros, constantes, variveis, etc. 4.4.2 Operadores de atribuio Um operador de atribuio serve para atribuir um valor a uma varivel. Em Pascal temos o operador de atribuio: A sintaxe de um comando de atribuio : Para executar este comando, o Pascal avalia a expresso localizada no lado direito do sinal de igual e armazena o valor resultante na varivel esquerda. O nome da varivel aparece sempre sozinho, no lado esquerdo do sinal de igual deste comando. 4.4.3 Operadores relacionais > < >= <= = <> Os operadores relacionais so operadores binrios que devolvem os valores lgicos verdadeiro e falso. maior que menor que maior ou igual menor ou igual igual diferente NomedaVarivel := expresso; :=

CONST nome = Enxuga Gelo SA.; tempo = 200;

4.3.2 Variveis

Todas as variveis devem ser declaradas (definidas) antes de serem usadas. As variveis devem ser declaradas no incio de cada funo, procedimento ou incio do programa. No podem ocorrer declaraes de variveis aps a primeira sentena executvel de uma rotina. Uma declarao de varivel consiste do nome da varivel seguido do nome do tipo. As variveis podem ser globais ou locais.

Um identificador cujo valor pode ser alterado durante a execuo do programa denominado varivel .

Variveis globais so declaradas fora de qualquer funo, valem em qualquer ponto do programa, so inicializadas com zero automaticamente e uma nica vez, so armazenadas na memria.

Variveis locais so declaradas dentro das funes, existem apenas enquanto a funo na qual foi declarada est ativa. Dentro de funes variveis locais com mesmo nome de variveis globais tem preferncia, no so inicializadas automaticamente, ou seja, deve-se informar um valor inicial, so alocadas na pilha ("stack"). Os parmetros das funes so tratados como se fossem variveis locais, so inicializados com o valor passado na chamada, so declarados na lista de parmetros, so passados por valor, somente tipos escalares de dados podem ser parmetros.

Podemos usar estas operaes com dois valores do mesmo tipo. Por exemplo, digamos que a varivel inteira escolha contenha o valor 7. A primeira das expresses a seguir fornece um valor falso, e a segunda um valor verdadeiro: escolha <= 5 escolha > 5

23

24

Com valores string, os operadores relacionais comparam os valores ASCII dos caracteres correspondentes em cada string. Uma string dita "menor que" outra se os caracteres correspondentes tiverem os nmeros de cdigos ASCII menores. Por exemplo, todas as expresses a seguir so verdadeiras: turbo > TURBO ABC < EFG 'Pascal < Pascal compiler

Este exemplo, em particular, combina cinco strings: trs variveis string e dois valores literais de string. O resultado se torna o valor de retorno da funo TimeString O Turbo Pascal tambm possui uma funo embutida, chamada CONCAT, que fornece uma forma alternativa para concatenaes. CONCAT toma uma srie de strings como a sua lista de argumentos, e retoma com a concatenao de todas as strings; por exemplo, o comando a seguir equivalente ao do exemplo de TimeString
Exemplos

Observe que as letras minsculas tm cdigos ASCII maiores do que os das letras maisculas. Observe tambm que o comprimento da string se torna o fator determinante na comparao de duas strings, quando os caracteres existentes na string menor so os mesmos que os caracteres correspondentes na string maior. Neste caso, a string maior dita "maior que" a menor. O Turbo Pascal nos fornece alguma liberdade na comparao de valores que no precisam ser necessariamente do mesmo tipo. Podemos comparar nmeros inteiros com reais na mesma expresso. Tambm podemos comparar valores do tipo CHAR e STRING. 4.4.4 Operadores lgicos and or not xor shl shr

Os operadores lgicos ou booleanos so usados para combinar expresses relacionais. Tambm devolvem como resultado valores lgicos verdadeiro ou falso. e ou no ou exclusivo shift esquerda a nvel de bits shift direita a nvel de bits

Alm de CONCAT, o Turbo Pascal possui uma til biblioteca de procedures e funes embutidas que executam diversas operaes de strings que sero vistas no item 6.1: 4.4.6 Operadores sobre conjuntos
Exemplo

program exemplo_concat; uses crt; var S1, S2, S3: string; begin S1 := Turbo Pascal ; S2 := timo!; S3 := Concat(S1, S2); TimeString := CONCAT (hourStr, ., minuteStr, ,ampm) ; writeln(TimeString, S3); end.

No Pascal existe o operador IN que avalia verdadeiro se um operando pertencer a um conjunto.


PROGRAM exemplo_in; USES crt; VAR opcao: char; BEGIN CLRSCR; WRITELN('Escolha o seu time: [G] Grmio [I] Inter'); REPEAT opcao:=READKEY; UNTIL opcao IN ['G','g','I','i']; WRITELN('A opo escolhida foi ', opcao); END.

Uma expresso relacional ou lgica retornar false para o valor lgico falso e true para o valor lgico verdade.

Fornecendo dois valores ou expresses lgicas, representadas por expresso1 e expresso2, podemos descrever as quatro operaes lgicas a seguir:

expresso1 AND expresso2 verdadeiro somente se ambas, expresso1 e expresso2, forem verdadeiras. Se uma for falsa, ou se ambas forem falsas, a operao AND tambm ser falsa. expresso1 OR expresso2 verdadeiro se tanto a expresso1 como a expresso2 forem verdadeiras. As operaes OR s resultam em valores falsos se ambas, expresso1 e expresso2, forem falsas. expresso1 XOR expresso2 verdadeiro somente se a expresso1 e a expresso2 tiverem valores opostos. Se a expresso1 e a expresso2 tiverem o mesmno valor - ambas verdadeiras ou ambas falsas - a operao XOR fornece um valor falso. NOT expresso1 avalia verdadeiro se expresso1 for falsa; de modo contrrio, a expresso NOT resultar em falso, se expresso1 for verdadeira. No podemos confundir estas operaes lgicas com as operaes de bit a bit do Turbo Pascal. As seis operaes de bit a bit executam comparaes a nvel de bit, trabaIhando sobre operandos do tipo INTEGER, ao contrrio, as operaes lgicas sempre trabalham sobre valores de tipos Booleanos. Quatro das operaes de bit a bit tm os mesmos nomes que as operaes lgicas: NOT, AND, OR, XOR. As outras duas so SHL e SHR. 4.4.5 Operadores sobre strings Concatenao uma operao de string que combina duas strings. O smbolo para concatenao o sinal de mais (+), como nos comandos de atribuiao a seguir, da procedure TimeString
TimeString := hourStr+ . + minuteStr + + ampm

25

26

5. ESTRUTURA DO PROGRAMA PASCAL

A declarao das variveis iniciada pela palavra reservada VAR, seguida de um ou mais identificadores, separados por vrgula, um tipo um ponto e vrgula: VAR < ident1> , ... , <identn> : <tipo> ; 5.2.5 Parte de Declaraes de Subprogramas: Nesta parte so declarados e implementados os subprogramas (funes e procedimentos) e devem estar declarados e implementados antes da sua chamada em qualquer parte do programa principal ou de subprogramas.

Normalmente um programa Pascal possui trs partes distintas: Identificao do programa, Bloco de declaraes e Bloco de comandos.

5.1 Identificao do programa

A identificao ou cabealho do programa em Pascal d um nome ao programa. a primeira linha do programa. PROGRAM <identificao>;

5.3 Bloco de Comandos

5.2 Bloco de Declaraes

O Bloco de Comandos a ltima parte que compe um programa em Pascal e especifica as aes a serem executadas sobre os objetos definidos no Bloco de Declaraes. O Bloco de Comandos tambm conhecido como programa principal e iniciado pela palavra reservada BEGIN seguida de por uma seqncia de comandos e finalizada pela palavra reservada END seguida um ponto.

Todo identificador definido pelo usurio em um programa deve ser declarado antes de ser referenciado (usado), caso contrrio o compilador acusar um erro na fase de compilao por desconhecer o identificador. O Bloco de Declaraes define todos os identificadores utilizados pelo Bloco de Comandos, sendo todos opcionais. Quando o Bloco de Delaraes existir sempre estar antes do Bloco de Comandos. Em Pascal o Bloco de Declaraes formado por cinco partes: 5.2.1 Parte de Declaraes de Rtulos:

Rtulos (labels) existem para possibilitar o uso do comando de desvio incondicional GOTO. Este comando comando gera a desestruturao do programa e no aconselhado seu uso. LABEL <rotulo1>, ... , <rotulon>; 5.2.2 Parte de Declaraes de Constantes: Define os identificadores que tero valores constantes durante toda a execuo do programa, podendo ser nmeros, seqncias de caracteres (strings) ou mesmo outras constantes.

A declarao de constantes inicia pela palavra reservada CONST, seguida po uma seqncia de: identificador, um sinal de igual, o valor da constante e um ponto e vrgula: CONST <identificador> = <valor> 5.2.3 Parte de Declaraes de Tipos: Serve para o programadore criar seus prprios tipos de dados.

A declarao dos tipos iniciadas pela palavra reservada TYPE, seguida de um ou mais identificadores separados por vrgula, um sinal de igual, um tipo e um ponto e vrgula: TYPE <tipoident1> , ... , <tipoidentn> = <tipo> ; 5.2.4 Parte de Declaraes de Variveis: Quando declaramos uma varivel temos que definir, alm do nome, seu tipo. O tipo especifica os valores que podero ser atribudos a esta varivel. O tipo pode ser algum dos tipos predefinidos pela linguagem ou um tipo definido pelo usurio.

27

28

6. COMANDOS
6.1 Comandos Simples

A preveno contra este tipo de erro de entrada uma interessante tarefa de programao.

6.1.1.1.1 AS FUNES EOLN e EOF

Os comandos simples ou no estruturados, caracterizam-se por no possurem outros comandos relacionados. 6.1.1 Comandos de Entrada e Sada Como as outras linguagens de programao de microcomputadores, o Turbo Pascal possui uma tremenda capacidade de programao interativa. Um programa interativo pega informaes das entradas do usurio para o computador, e depois responde apropriadamente s entradas, colocando informaes na tela ou enviando para a impressora. A linguagem Pascal tem definido os comandos de entrada e sada na prpria linguagem. 6.1.1.1 Read e Readln teclado:

O Pascal possui duas funes padro, eoln e eof, que so muito teis quando se lem dados. A primeira delas, eoln, devolve o valor booleano true se uma designao de fim de linha for detectada na linha que comeou a ser lida. De outro modo devolve um valor false.

O valor de eoln automaticamente passado para false todas as vezes que uma nova linha de entrada de dados for comeada, informando que a nova linha no esteja vazia, isto , garantindo que a nova linha tenha pelo menos um dado). Deste modo, esta funo permite-nos ler um nmero qualquer de dados de qualquer linha, lendo dados da mesma linha at que eoln se torne um valor verdadeiro ( true). Podemos ento repetir este procedimento para a linha seguinte de dados, e assim sucessivamente. A funo eof usada para detectar o fim dum arquivo de dados em disco. Esta funo devolve o valor booleano true quando a designao de fim de arquivo for detectada; caso contrrio devolve o valor false. 6.1.1.2 Write e Writeln

Na sua forma mais simples, a procedure embutida READLN aceita um valor de entrada a partir do READLN (NomedaVarivel)

Na sua forma mais simples, o comando WRITELN exibe uma linha de informao na tela. A procedure WRITE tambm envia dados para a tela, mas mantm a posio final do cursor, permitindo que um comando WRITE ou WRITELN subseqente possa exibir informaes adicionais na mesma linha da tela. WRITE e WRITELN, tomam uma lista de argumentos de dados na forma de constantes, variveis, ou expresses, separados por vrgulas. Considere este exemplo:
Exemplo PROGRAM ExemploWrite USES Crt VAR itens, Precounit: INTEGER;

Este comando espera que o usurio entre com o dado, e depois armazena a resposta do usurio na varivel especificada. A entrada do usurio deve se corresponder com o tipo de dado da varivel identificada no comando READLN. Quando o usurio terminar de digitar o valor de entrada e pressionar a tecla Enter, o valor ser armazenado na varivel, e a tarefa do comando READLN se completa. Num programa interativo, um comando READLN normalmente usado precedido por um comando WRITE ou WRITELN, que coloca na tela uma mensagem apropriada. A mensagem geralmente informa ao usurio o tipo de informao que o programa espera como entrada. Por exemplo:
WRITE (Nome do usurio: ); READLN (Nome);

READLN tambm lhe permite aceitar mais de um valor de entrada por vez. Podemos incluir uma lista de variveis como argumento do comando READLN: READLN (NomedaVarivel1, Nomeda Varivel2, NomedaVarivel3,...) Esta forma do comando READLN no , geralmente, muito til para entradas pelo teclado. Um programa exerce um controle mais cuidadoso e harmonioso sobre o processo de entrada, se cada valor de entrada for tomado e aceito por comandos READLN individuais.

Esta seqncia coloca uma mensagem na tela e espera que o usurio entre com o nome do usurio.

BEGIN itens:= 200; Precounit:=35; WRITE (O preo de ,itens); WRITELN ( unidades ,itens * Precounit); END.

Este programa exibe uma linha com quatro valores de dados na tela: um valor literal string, o valor de uma varivel numrica, um segundo valor string e o resultado de uma expresso aritmtica. A tela de sada resultante :
O preo de 200 unidades 7000

Observe que, neste exemplo, os comandos WRITE e WRITELN exibem todos os quatro valores de dados numa nica linha de sada - as duas constantes string, o valor armazenado na varivel itens e o resultado da expresso itens* Precounit. O dispositivo default de sada para os comandos WRITE e WRITELN a tela. Quando queremos enviar a sada para algum outro dispositivo, devemos especificar um nome de arquivo como primeiro argumento do comando WRITE ou WRITELN. Por exemplo, a unidade PRINTER define um arquivo chamado LST e associa este arquivo ao dispositivo LPT1 do DOS. Portanto, podemos utilizar LST para enviar dados para impressora a partir dos comandos WRITE e WRITELN. Para fazer isso, devemos incluir o comando USES, a seguir, no topo do programa: USES PRINTER;

O comando READ l um valor de dado de uma linha de entrada e mantm a posio do cursor ou ponteiro de arquivo, de modo que um comando READ ou READLN subsequente possa ler dados adicionais da mesma linha. Este comando , geralmente, mais importante em programas de manipulao de arquivos do que em programas que lem dados do teclado.

A procedure READLN provoca problemas inoportunos em alguns programas interativos. O problema surge quando um programa espera por um valor numrico e o usurio entra inadvertidamente com uma seqiincia de caracteres que o Turbo Pascal no pode ler como um nmero. Quando isto acontece, a execuo do programa termina com um erro em tempo de execuo.

Quando especificamos subsequentemente LST como primeiro argumento de uma chamada procedure WRITE ou WRITELN, a sada ser enviada para a impressora, ao invs da tela: 30

29

Exemplo Program ExemploPrinter; USES CRT, PRINTER; VAR itens, Precounit: INTEGER; BEGIN itens:= 200; Precounit:=35; WRITE (LST,O preo de ,itens); WRITELN (LST, unidades ,itens * Precounit); END.

6.1.2 Comandos de Desvio Incondicional 6.1.2.1 GOTO Este Comando de desvio incondicional altera a seqncia normal de execuo em um bloco de comandos, transferindo o processamento para um ponto no programa fonte marcado com o rtulo especificado no comando GOTO.
Exemplo Program exemplo_label; uses crt; label ini, fim, gre, int; var opcao: char;

Para produzir uma linha de saida em branco na tela, inclua o comando WRITELN sozinho, sem uma lista de valores de dados. Por exemplo, esta sequncia resulta em duas linhas de saida, com uma linha em branco entre elas:
WRITELN (Comando 1); WRITELN; WRITELN (Comando 2);

Este exemplo imprime a linha de informao sobre o preo das unidades.

O comando WRITELN suporta notaes especiais de formato para o controle da exibio de dados numricos. Podemos especificar a largura da saida e o nmero de casas decimais: Nesta notao, largura e CasasDecimais so valores inteiros literais. No exemplo a seguir, o comando WRITELN justifica direita um valor numrico dentro de um campo de saida de dez espaos e exibe duas casas decimais:
Exemplo PROGRAM ExemploCasasDecimaisEmNumerosReais; USES Crt; Var ValorDeSaida: REAL; BEGIN ValorDeSaida:=18.766; WRITELN (ValorDeSaida: 10:2); END.

WRITELN (valor : largura : CasasDecimais)

begin ini: clrscr; writeln('Escolha o seu time: [G] Gremio [I] Inter'); opcao:=readkey; if upcase(opcao)='G' then goto gre; if upcase(opcao)='I' then goto int; goto ini; gre: writeln('Ok, Gremista!'); goto fim; int: writeln('Muito bem, Colorado!'); goto fim; fim: readkey; end.

Devemos evitar sempre que possvel o uso de comandos desse tipo. 6.1.2.2 EXIT Este procedimento faz com que o programa termine o bloco que est sendo executado. Se esse bloco for o programa principal, Exit o faz terminar. Se o bloco corrente aninhado, Exit faz com que o prximo bloco mais externo continue na instruo imediatamente aps a que passou o controle ao bloco aninhado. Se o bloco corrente uma procedure ou funo, Exit provoca a chamada do bloco para continuar na instruo aps o ponto em que ele foi chamado. Sua sintaxe : EXIT;

Se desejarmos incluir um caractere apstrofo como parte do valor string de saida, devemos incluir uma seqncia de dois apstrofos no argumento string correspondente. Por exemplo, o comando WRITELN: Isto resulta na exibio da linha a seguir: 6.1.1.3 Readkey
WRITELN (Pascals input and output procedures.) Pascals input and output procedures.

O valor de saida deste programa 18.77. Observe que a segunda casa decimal foi arredondada. Para saidas inteiras, voc pode omitir o especificador CasasDecimais. O Turbo Pascal no possui nenhum comando equivalente ao comando PRINT USING do BASIC (o qual produz saidas formatadas em dlares e centavos); entretanto, voc pode escrever facilmente a sua prpria funo que simule este comando.

6.1.2.3 BREAK

Este procedimento faz com que o programa termine o bloco que est sendo executado. Somente pode ser usado no interior de laos for, while ou repeat.. Sua sintaxe : BREAK

O comando READKEY l um caracter do teclado e associa a uma varivel do tipo char: varivel_char := readkey;

6.1.2.4 CONTINUE Sua sintaxe :

Este procedimento faz com que o processamento de uma iterao num loop for, while ou repeat seja interrompido e continue com a prxima iterao. CONTINUE 32

31

Exemplo: program exemplos; uses crt; var i: integer;

6.1.3.2 GotoXY

Este procedimento permite posicionar o cursor em um ponto qualquer da tela, referenciado pelos eixos X e Y (coluna e linha), antes de um comando de entrada ou sada. Sua sintaxe : GotoXY (<coluna>, <linha>: byte)

begin clrscr; writeln('testando o break'); for i:= 1 to 10 do begin if i=5 then break; writeln(i); end; readkey; writeln('testando o continue'); for i:= 1 to 10 do begin if i=5 then continue; writeln(i); end; readkey; writeln('testando o exit'); for i:= 1 to 10 do begin if i=5 then exit; writeln(i); end; writeln('Esta frase nao sera exibida!'); readkey; end.

6.1.3.3 Delay

Este procedimento permite fazer uma pausa programada por um determinado intervalo de tempo, antes de ser executado o prximo comando. Sua sintaxe : Delay ( <milissegundos>: byte)

6.1.3.4 CHR

Esta funo retorna o caractere ASCII correspondente ao valor do parmetro passado. Sua sintaxe : CHR(<n>: byte):char;

6.1.3.5 ORD

Esta funo retorna a posio ordinal do parmetro passado. Sua sintaxe : ORD(<x>): longint;

6.1.2.5 RUNERROR

6.1.3.6 Upcase

Este procedimento causa o trmino do programa no local onde estiver sendo executado, gerando um erro de execuo com o mesmo valor passado como parmetro. Caso o parmetro seja omitido, o valor de erro de execuo ser zero. Sua sintaxe : Runerror ([<valor>]: byte);

Esta funo retorna o caractere contido no parmetro em maisculo. Sua sintaxe : Upcase(<ch>:char): char;

6.1.2.6 HALT

Exemplo program exemplos; uses crt;

Este procedimento causa o trmino do programa no local onde estiver sendo executado, gerando um erro de execuo com o mesmo valor passado como parmetro. Caso o parmetro seja omitido, o valor de erro de execuo ser zero. O valor do erro pode ser tratado em arquivos de lote do DOS (Batch) .BAT com a opo ERRORLEVEL. Sua sintaxe : Halt( [<valor>]: word);

6.1.3 Outros comandos simples 6.1.3.1 Clrscr Este procedimento limpa a tela e coloca o cursor no canto superior esquerdo da tela. a contrao das palavras CLeaR SCReen. 33

var x: char; begin clrscr; writeln('Digite uma letra minuscula: '); x:=readkey; writeln('A letra digitada : ',x); writeln('O seu valor na tabela ASCII : ', ord(x)); writeln('A letra maiuscula : ',upcase(x)); writeln('O seu valor na tabela ASCII : ', ord(upcase(x))); writeln('O caracter 65 da tabela ASCII : ',chr(65)); writeln('O caracter 75 da tabela ASCII : ',#75); readkey; end.

34

6.2 Estruturas de Controle


6.2.1 Seqncia Seqncia finita de instrues so agrupamentos de comandos, onde cada comando executado um aps o outro e sem desvios. Em Pascal a seqncia delimitada pelas palavras reservadas BEGIN no incio e END no final e seus comando so separados pelo delimitador ; (ponto e vrgula). 6.2.2 Comandos condicionais 6.2.2.1 IF O comando if usado para executar um segmento de cdigo condicionalmente. IF condio THEN ELSE { comandos que sero executados se a condio for TRUE} { comandos que sero executados se a condio for FALSE}

As estruturas IF podem estar aninhadas. Em outras palavras, toda uma estrutura de deciso, completa com as clusulas IF e ELSE, pode aparecer dentro de uma clusula IF ou ELSE de uma outra estrutura. O aninhamento de estruturas IF pode resultar em seqncias de deciso complexas e poderosas. 6.2.2.2 Comando de Seleo mltipla: CASE Quando se deseja testar uma varivel ou uma expresso em relao a diversos valores usamos o comando de seleo mltipla.

Como a estrutura IF, o comando CASE divide uma sequncia de possiveis aes em sees de cdigo individuais. Para a execuo de um determinado comando CASE, somente uma dessas sees ser selecionada para execuo. A seleo est baseada numa srie de testes de comparao, sendo todos executados sobre um valor desejado. A forma geral da estrutura CASE a seguinte: CASE seleo OF ValordeCaso1:

{comando ou comandos executados se a

Durante uma execuo, o Pascal comea por avaliar a condio da clusula IF. Esta condio deve resultar num valor do tipo Booleano, embora possa tomar uma variedade de formas - ela pode ser uma expresso de qualquer combinao de operadores lgicos ou relacionais, ou simplesmente uma varivel BOOLEAN.

ValordeCaso2: ...

seleo se corresponder com ValordeCaso1 } {comando ou comandos executados se a seleo se corresponder com ValordeCaso2 }

Se a condio for TRUE, o comando ou comandos localizados entre o IF e ELSE so executados e a execuo pula a clusula ELSE. Alternativamente, se a expresso for FALSE, a execuo desviada diretamente para o comando ou comandos localizados aps a clusula ELSE. IF condio THEN BEGIN END

Observe a estrutura deste comando IF. Ambas as clusulas, IF e ELSE, so seguidas de blocos BEGIN/END, que delimitam grupos de comandos. O formato geral desta estrutura :

{comando ou comandos executados se nenhum dos casos anteriores prod uzir uma correspondncia } END;

ELSE

A estrutura de deciso CASE consiste nos seguintes elementos:

{comandos da clusula IF} ELSE

Uma seqncia de ValoresdeCaso a ser comparada com a seleo, cada qual seguida de um ou mais comandos, que sero executados se a seleo se corresponder com o ValordeCaso Um comando ELSE opcional, que fornece um comando ou grupo de comandos a serem executados somente se no tiver ocorrido nenhuma correspondncia com os ValoresdeCaso anteriores Um marcador END, que identifica o fim da estrutura CASE.

Uma clusula CASE OF, que fornece a expresso de seleo desejada

BEGIN END;

{comandos da clusula ELSE}

Devemos tomar cuidado para no esquecer dos marcadores BEGIN e END nos comandos compostos de vrias estruturas IF. Alm disso, no devemos colocar um ponto-e-virgula entre o END e o ELSE numa estrutura IF. O Pascal interpretar essa marcao incorreta como o fim do comando IF e a clusula ELSE, a seguir, resultar num erro em tempo de compilao. Levando em conta que a clusula ELSE opcional, a forma mais simples da estrutura IF a seguinte: IF condio THEN
{comando ou comandos executados se (if) a condio for TRUE (verdadeira)}

Para executar a deciso expressa nessa estrutura, o Pascal comea por avaliar a expresso de seleo na clusula CASE OF. Esse valor deve pertencer a um tipo ordinal que tenha uma faixa entre -32.768 e 32.767. At aqui, estudamos cinco tipos de dados que correspondem a este critrio: CHAR, BOOLEAN, BYTE, SHORTINT e INTEGER.

A seleo se torna o alvo das comparaes com todos os ValoresdeCaso subseqentes. Numa execuo, o Pascal avalia cada compara, seleciona o primeiro ValordeCaso que se corresponde com a seleo e executa o comando ou comandos localizados entre esse ValordeCaso e o prximo. No ser executado mais nenhum outro comando. Se nenhuma das comparaes com os ValoresdeCaso produzir uma correspondncia com a seleo, ser executada a clusula ELSE. ELSE uma clusula opcional no comando CASE; se ELSE no estiver presente, e se nenhum ValordeCaso for selecionado, o comando CASE no resultar em nenhuma ao. O valor de seleo na clusula CASE OF pode aparecer como uma varivel ou expresso, desde que o resultado final seja um valor ordinal.

Neste caso, o programa executa o comando ou comandos localizados aps a clusula IF somente se a condio for verdadeira. Se ela for falsa, o comando IF no ter nenhuma ao. 35

36

6.2.3 Comandos de Repetio

Exemplo Program ExemploCase; Uses Crt; Var Ch: char; begin Ch := readkey; case Ch of 'A'..'Z', 'a'..'z': WriteLn('Letra'); '0'..'9': WriteLn('Dgito'); '+', '-', '*', '/': WriteLn('Operador'); #13: Writeln(Enter); #27: Writeln(Esc); : Writeln(Espao); else WriteLn('Caractere Especial'); end; end.

No devemos utilizar uma declarao de varivel global para definir a varivel de controle. Cada varivel de controle num determinado programa deve ser declarada dentro da rotina que realmente contm o loop. Esta prtica evita qualquer possibilidade de interferncia entre diferentes variveis de controle definidas num determinado programa. Embora a varivel de controle de um loop FOR pertena tipicamente a um dos tipos inteiros, o Pascal Ihe permite realmente utilizar outros tipos ordinais para controlar o loop, incluindo o tipo CHAR e o enumerado.
Exemplo: Program ExemploFor; Uses Crt; Var i, j: integer; begin for i:= 1 to 10 do begin writeln(Tabuada do ,i); for j:= 1 to 10 do begin writeln(i, x , j , = , i*j); end; end; end.

Os comandos de repetio so caracterizados por permitir que uma seqncia de comandos seja executada um nmero repetido de vezes. 6.2.3.1 For O loop FOR , talvez, a estrutura de repetio mais familiar e comumente usada. e utilizado para executar uma seqncia de comandos repetidamente e com um nmero conhecido de vezes. A representao geral da sintaxe da estrutra : FOR VardeControle := Valorlnicial TO ValorFinal DO comando; FOR VardeControle := Valorlnicial TO ValorFinal DO BEGIN END;

6.2.3.2 While e Repeat Until

Se o bloco do loop possui comandos mltiplos, o formato geral ser o seguinte:

Diferentemente do loop FOR, os loops WHILE e REPEAT UNTIL dependem de uma condio expressa para determinar a durao do processo de repetio. Existem tambm algumas diferenas importantes entre estes dois tipos de loops:

Num loop WHILE, colocamos a condio no incio do loop, e as iteraes continuam enquanto a condio seja TRUE (verdadeira). Tendo em vista que a condio avaliada sempre antes de cada iterao, um loop WHILE resulta em nenhuma iterao se a condio for FALSE (falsa) logo no principio. Num loop REPEAT UNTIL, a condio vai para o fim do loop, e o processo de repetio continua at que a condio se torne TRUE (verdadeira). Tendo em vista que a condio avaliada aps cada iterao, um loop REPEAT UNTIL sempre executa pelo menos uma iterao. Esta variedade de escolhas nos permite expressar os loops numa forma que se adapte a uma aplicao em particular. A sintaxe do loop WHILE : WHILE condio DO comando; WHILE condio DO BEGIN END;

(comandos executados para cada iterao do loop } O comando FOR identifica uma varivel de controle (VardeControle) para o loop, e indica a faixa de valores (Valorlnicial TO [at] ValorFinal) que a varivel receber e o Valorlnicial e o ValorFinal devem ser compatveis com esse tipo. Aqui est um esboo da execuo do loop: 1. No incio da execuo, a varivel de controle recebe o valor do Valorlnicial, e a primeira iterao executada. 2. Antes de cada iterao subseqente, a varivel de controle recebe o prximo valor da faixa de Valorlnicial .. ValorFinal. 3. O loop termina aps a iterao correspondente ao ValorFinal.

Se o bloco do loop possuir comandos mltiplos, a forma geral a seguinte:

Num loop FOR que use a clusula TO, o valor ordinal do Valorlnicial deve ser menor que o valor ordinal do ValorFinal, caso contrrio o loop no ter ao nenhuma. Alternativamente, podemos usar a palavra reservada DOWNTO para projetar um loop FOR que seja decrementado dentro de uma faixa ordinal: Neste caso, o valor de Valorlnicial deve ser maior que o de ValorFinal. Antes de cada iterao subseqente, a varivel de controle recebe o prximo valor mais baixo da faixa. A varivel de controle do loop FOR possui um status especial. Nenhum comando dentro do loop deve tentar modificar o valor dessa varivel; se fizer isso, estar interferindo com o processo normal de contagem que o Pascal dirige automaticamente durante a repetio, podendo causar resultados imprevisveis. Entretanto, um comando que esteja dentro do loop pode acessar o valor da varivel de contagem para qualquer propsito. FOR VardeControle := Valorlnicial DOWNTO ValorFinal DO comando;

{comandos que sero executados uma vez em cada iterao do loop}

A condio uma expresso que o Turbo Pascal pode avaliar como TRUE (verdadeira) ou FALSE (falsa). A repetio continua enquanto a condio for TRUE. Normalmente, em algum ponto, a ao dentro do loop altera a condio para FALSE e o loop termina. A Estrutura do Loop REPEAT UNTIL : REPEAT 38

37

{comandos que sero executados uma vez UNTIL condio a cada iterao do loop}

Esta estrutura de loop sempre realiza uma iterao antes da condio ser avaliada pela primeira vez, e continua as suas iteraes at que a condio se tome TRUE; a repetio termina quando a condio se tornar TRUE. Os comandos mltiplos dentro de um loop REPEAT UNTIL no necessitam de marcadores BEGIN e END. As palavras reservadas REPEAT e UNTIL servem como delimitadores para os comandos dentro do loop.

repeat clrscr; write(1 - Imprimir); write(2 - Excluir); write(9 - Sair); case op of 1: imprimir; 2: excluir; end; until op = 9 end.

Alguns programadores so cautelosos no uso dg estruturas de loop que executam automaticamente a primeira iterao antes de avaliar a condio de controle. Esses programadores podem preferir utilizar os loops WHILE, ao invs dos loops REPEAT UNTIL, na maioria dos programas de repetio. Fora isso, o REPEAT UNTIL vantajoso, desde que reservemos o seu uso para situaes nas quais sempre desejemos que seja executada pelo menos uma iterao.
Exemplo Program ExemploWhile uses crt; Var op: char; procedure imprimir; begin ... end; procedure excluir; begin ... end;

Begin op := 0; while op <> 9 do begin clrscr; write(1 - Imprimir); write(2 - Excluir); write(9 - Sair); case op of 1: imprimir; 2: excluir; end; end; end. Program ExemploRepeat uses crt; Var op: char; procedure imprimir; begin ... end; procedure excluir; begin ... end; Begin

39

40

7. FUNES E PROCEDIMENTOS

Para facilitar a construo de grandes programas, utiliza-se o mtodo de modularizao, que consiste na diviso do programa em pequenas etapas, que so os mdulos ou subprogramas.

7.2 Funes

O primeiro mdulo ou subprograma, por onde comea a execuo do programa recebe o nome de programa principal, e as outras so os subprogramas, que so executados sempre que ocorre uma chamada dos mesmos, atravs da especificao dos seus nomes. A diviso de um programa em subprogramas particularmente vantajosa quando uma mesma seqncia de comandos deve ser repetida vrias vezes no programa, o que permite a confeco de um nico subprograma, que pode ser freqentemente solicitado e executado para valores diferentes de seus parmetros. Na linguagem Pascal temos dois tipos de subprogramas: procedimentos e funes.

Uma funo (FUNCTION) devolve ao programa que a ativou apenas um valor, calculado por ela mesma e alocado na varivel que define o nome da FUNCTION.

Em Pascal as funes podem ser vistas como um procedimento que retorna um nico valor.

Para transferir o controle para uma FUNCTION no basta mencionar seu nome, como no caso de PROCEDURES. Sua solicitao caracterizada por um comando de atribuio de valor. Em uma function deve-se declarar seu tipo, que coincide com o tipo de valor por ela calculado (integer, real, char, byte, boolean ou string).
Exemplo: PROGRAM FUNCAO; USES CRT; VAR pr, imp: REAL;

Outra importncia da modularizao que ela permite que diferentes programadores trabalhem simultaneamente na soluo de um mesmo problema, atravs da codificao separada dos diferentes mdulos.

7.1 Procedimentos

Um procedimento (PROCEDURE) um tipo de subprograma que se assemelha em muito com um programa em Pascal. Possui um cabealho de identificao com o nome do procedimento, uma lista opcional de parmetros de comunicao, um bloco de declaraes e um bloco de comandos. Um procedimento na realidade um programa com vida prpria, com suas variveis locais, mas que, para ser processado, tem que ser solicitado pelo programa principal ou por outro procedimento. Um procedimento pode acessar todas as variveis globais, desde que no esteja redefinidas dentro do procedimento. Se uma varivel for redefinida, criada uma nova varivel local, sem ter nenhuma relao com a varivel global (que deixa de ser visvel dentro do subprograma). Os procedimentos devem ser declarados antes de serem chamadas, porm em alguns casos, temos a necessidade de declarar uma rotina aps sua chamada e nesse caso, devemos utilizar a declarao FORWARD.
Exemplo: program tic_tac; uses crt; var o : integer;

FUNCTION calc_imposto(preco: REAL):REAL; BEGIN calc_imposto = preco * 0.17; END; BEGIN READLN(pr); imp = calc_imposto(pr); WRITELN('Preo: ',pr,' Imposto: ',imp); END.

7.3 Parmetros

Parmetros so todas as variveis ou valores passados para um subprograma. Tambm so chamados de argumentos. 7.3.1 Passagem de parmetros Quando a varivel que se quer trabalhar no visvel dentro do subprograma ela deve ser passada como parmetro. H duas formas de se passar uma ou mais variveis: por valor ou por referncia. 7.3.1.1 Passagem de parmetros por valor Declarao:

procedure tic(VAR m: integer); FORWARD; procedure tac(VAR n: integer); begin writeln('Tac'); n:= n - 1; if n > 0 then tic(n); end; procedure tic; begin writeln(' tac(m); end; begin clrscr; o:= 10; tac(o); readkey; end. Tic');

Quando uma varivel passada por valor para um prodedimento, seu valor original no alterado pelo subprograma. procedure <nome>(<variveis>:<tipo>);

Exemplo Program PorValor; Uses CRT;

var a, b, c: real;

41

procedure aumento(x, y, z: real); begin

42

x:= x * 1.1; y:= y * 1.2; z:= z * 1.3; writeln('No procedimento: '); writeln(x:0:2); writeln(y:0:2); writeln(z:0:2); end;

Program DiversosParametros; Uses CRT; var a, b, c: real; nome: string;

begin a:= 100; b:= 200; c:= 300; aumento(a, b, c); writeln('No programa principal: '); writeln(a:0:2); writeln(b:0:2); writeln(c:0:2); readkey; end.

procedure aumento(var x: real; y: real; var z: real; nomelocal: string); begin x:= x * 1.1; y:= y * 1.2; z:= z * 1.3; writeln(nomelocal); writeln(x:0:2); writeln(y:0:2); writeln(z:0:2); end; begin clrscr; a:= 100; b:= 200; c:= 300; nome:='No procedimento:'; aumento(a, b, c, nome); nome:='No programa principal:'; writeln(nome); writeln(a:0:2); writeln(b:0:2); writeln(c:0:2); readkey; end.

7.3.1.2 Passagem de parmetros por referncia Declarao:

Quando uma varivel passada por referncia para um prodedimento, seu valor original alterado na execuo do subprograma. procedure <nome>(var <variveis>:<tipo>);

Observe que o que caracteriza uma passagem de parmetro por referncia a declarao das variveis recebidas como argumento do tipo VAR.
Exemplo Program PorReferencia; Uses CRT; var a, b, c: real; procedure aumento(var x, y, z: real); begin x:= x * 1.1; y:= y * 1.2; z:= z * 1.3; writeln('No procedimento: '); writeln(x:0:2); writeln(y:0:2); writeln(z:0:2); end; begin a:= 100; b:= 200; c:= 300; aumento(a, b, c); writeln('No programa principal: '); writeln(a:0:2); writeln(b:0:2); writeln(c:0:2); readkey; end. Exemplo

7.3.2 Argumentos passados a programas

Nomalmente as linguagens de programao permitem que o programa receba parmetros passados na linha de comando no momento da sua ativao. Assim, quando usamos o comando format a: ou scan a: passamos o argumento a: para o programa. Os argumentos passados aos programas em Pascal so verificados atravs de dois comandos (variveis que esto armazenados os parmentros): PARAMCOUNT: PARAMSTR:

armazena o nmero de argumentos passados na linha de comando. Paramcount igual a zero indica que no h argumentos na linha de comando. armazena as strings de argumentos da linha de comando. ParamStr(1) o primeiro argumento.

Pode-se ainda mesclar os argumentos, com diversos tipos e formas de passagem dos mesmos. 43

Exemplo: program parametros; uses crt; var I: integer; begin if ParamCount = 0 then begin Writeln('Este programa no tem argumentos!'); exit; end; for I := 1 to ParamCount do Writeln('O ',I,' parmetro : ',ParamStr(I)); end.

44

7.4 Recursividade

Um subprograma recursivo aquele que chama a si prprio. Pode ser executado vrias vezes para valores diferentes de seus parmetros. A recorrncia ou recursividade pode ser facilmente compreendida quando na prtica surge a necessidade de se definir alguma coisa em funo dela mesma. FAT(N) = N * FAT(N - 1). Sabe-se, por exemplo, que o fatorial de um nmero N pode ser obtido multiplicando-o pelo fatorial de seu predecessor N - 1, ou seja, para N positivo tem-se que: Esse e outros tipos de recorrncia so tratados internamente pela mquina atravs do uso de pilhas. Assim sendo, cada vez que o subprograma chama a si prprio, mais informaes so colocadas na pilha. O retorno se verifica pelo processo inverso, quando os resultados calculados vo sendo retirados da pilha. Exemplo de um programa recursivo que calcula o fatorial de um nmero:
PROGRAM RECURSIVO; uses CRT; var num: integer;

8. PROCEDIMENTOS E FUNES DAS UNIDADES PADRO


8.1 Manipulao de Strings e Converso
Length (s : String ) : Integer; retorna a quantidade de caracteres contidos em uma string Delete (VAR s : String ; indice, contador : Integer ); retira um ou mais caracteres de uma determinada string Insert (fonte : String ; VAR destino : String ); Insere uma substring em uma posio preestabelecida.

Concat (s1, [s2 .. sn] : String ) : String; retorna uma string que a unio de todas as strings passadas como parmetro Copy (s : String ; indice, contador : Integer ) : String ; retorna uma substring de uma string passada como parmetro Pos (pesq : String ; objeto : String) : byte; retorna a posio que uma substring ocupa dentro de uma string passada como parmetro. Val (fonte : String ; Var destino, Var erro : Integer ); Converte uma string para valor numrico e retorna o cdigo de erro. Str (valor [:tamanho [:decimais]]; VAR destino : String ); Converte uma varivel numrica em string.

function fatorial(n: integer): longint; begin if n=0 then fatorial:=1 else fatorial := n * fatorial(n-1); end;

begin write('Numero: '); readln(num); writeln('Fatorial de ',num,': ',fatorial(num)); readln; end.

8.2 Manipulao Numrica


ABS (x) : Tipo; Retorna o valor absoluto de uma expresso

ARCTAN (x : Real ) : Real ; Retorna o arco de tangente do argumento utilizado

COS (r : Real ) : Real ; Retorna o valor do co-seno de um argumento passado como parmetro. DEC (VAR x [; n ]: Longint) Decrementa uma varivel numrica inteira em uma ou mais unidade s EXP (r : Real ) : Real ; Retorna o valor exponencial FRAC (r : Real ) : Real ; Retorna a parte fracionria

HI ( r ): byte; Retorna a parte alta de uma constante numrica

INC (VAR x [; n ]: Longint) Incrementa uma varivel numrica inteira em uma ou mais unidades INT (r : Real ) : Real ; Retorna o valor inteiro de uma varivel do tipo real 45 LN (r : Real ) : Real ;

46

LO ( r ) : byte; Retorna a parte baixa de uma constante numrica PI : Real ; ODD (n : Longint ) : Boolean; Retorna um valor verdadeiro se o argumento for par Retorna o valor de PI

Retorna o logaritmo natural

Remove um subdiretrio

8.4 Unit CRT

ASSIGNCRT (VAR arq : TEXT); Associa um arquivo do tipo texto com a console para a sada. KEYPRESSED : Boolean; Retorna verdadeiro se for pressionada uma tecla WINDOW (x1, y1, x2, y2 : Byte); Define uma rea de trabalho no vdeo CLREOL ; WHEREX : byte ; Retorna a coordenada X do cursor WHEREY : byte ; Retorna a coordenada Y do cursor DELLINE ; INSLINE ;

RANDOM (n : Word) : (inteiro ou real) Retorna um nmero aleatrio que pode variar de 0 a 1, ou por um limite passado como parmetro. RANDOMIZE ; Permite gerar uma nova semente para gerao de nmeros aleatrios. ROUND (r : Real ) : Longint ; Retorna um nmero real convertido em inteiro e arredondado. SIN (r : Real ) : Real ; Retorna o valor do seno SQRT (r : Real ) : Real ; Retorna a raiz quadrada SQR ( r : (numrico)) : numrico; Retorna o parmetro elevado ao quadrado. SWAP ( i : (qualquer_inteiro) ) : (o mesmo tipo do parmetro) Inverte o valor em sua ordem TRUNC (r : Real ) : Longint; Retorna um valor inteiro truncado nas casas decimais YX = EXP ( LN ( Y ) * X ) = LN ( X ) / LN ( 10 ) Nem todas as funes que necessitamos esto prontas e s vezes necessrio utilizar uma frmula equivalente: = EXP ( LN ( Y ) * ( 1 / X ))

Limpa todos os caracteres da linha, a partir da posio do cursor

Elimina a linha em que est o cursor Insere uma linha onde est o cursor

TEXTCOLOR (cor : Byte) Seleciona a cor de texto:

LOG (x)

0 - BLACK - PRETO 8 - DARKGRAY - CINZA ESCURO 1 - BLUE- AZUL 9 - LIGHTBLUE - AZUL CLARO 2 - GREEN -VERDE 10 - LIGHTGREEN - VERDE CLARO 3 - CYAN - CIANO 11 - LIGHTCYAN - CIANO CLARO 4 - RED -VERMELHO 12 - LIGHTRED - VERMELHO CLARO 5 - MAGENTA - MAGENTA 13 - LIGHTMAGENTA - MAGENTA CLARO 6 - BROWN - MARROM 14 - YELLOW - AMARELO 7 - LIGHTGRAY - CINZA CLARO 15 - WHITE - BRANCO Deve-se somar 128 ao nmero da cor para o texto ficar piscante (BLINK). TEXTBACKGROUND (cor : Byte) Seleciona a cor de fundo: 0 - PRETO 1 - AZUL 2 - VERDE 3 - CIANO 4 - VERMELHO 5 - MAGENTA 6 - MARROM 7 - CINZA CLARO

8.3 Manipulao de Diretrios


MKDIR (s : String ) Cria um subdiretrio 0 - Unidade corrente 1 - Unidade A 2 - Unidade B 3 - Unidade C GETDIR (drive : byte; VAR s : String ); Retorna o diretrio corrente da unidade passada como parmetro:

CHDIR (s : String ) Muda o subdiretrio corrente para o especificado RMDIR ( s : String ) 47

HIGHVIDEO ; Seleciona a cor de texto para alta intensidade NORMVIDEO ;

LOWVIDEO ; Seleciona a cor de texto para baixa intensidade 48

TEXTMODE (modo) Seleciona o modo de texto:

Retorna a cor de texto ao normal

ENVSTR (indice : Integer ) : String ; Retorna a string do ambiente DOS correspondente ao ndice.

0 - 40x25 Adaptador colorido - Branco/Preto 1 - 40x25 Adaptador colorido - Colorido 2 - 80x25 Adaptador colorido - Branco/Preto 3 - 80x25 Adaptador colorido - Colorido (default) 7 - 80x25 Adaptador monocromtico em Branco/Preto 256 - Para EGA/VGA 43 ou 50 linhas

GETENV (ambiente : String ) : String ; Retorna o contedo da string passada como parmetro relativa ao ambiente DOS.
Exemplo Program ExecutaProgrDos; {$M $4000,0,0 } { 16K stack, no heap } uses Dos; var ProgramName, CmdLine: string; begin Write('Programa para executar: '); ReadLn(ProgramName); Write('Argumento a ser passado para ',ProgramName, ': '); ReadLn(CmdLine); WriteLn('Executando...'); SwapVectors; Exec(ProgramName, CmdLine); SwapVectors; WriteLn('...voltando da Execuo'); if DosError <> 0 then { Error? } WriteLn('DOS error #', DosError) else WriteLn('Exec com sucesso. ', 'Codigo de Saida do Processo de execuo = ', DosExitCode); end.

EXEC (caminho, linhadecomando : String ); Executa um comando passado como parmetro. Deve ser usado em conjunto com SWAPVECTORS.

SOUND (hz : Word); Dispara o alto-falante interno a uma freqncia especificada. Freqncia em Hertz das notas: 500 D D# 530 561 R R# 595 F# 707 SOL# 794 L# 891

630 MI

667 F

749 SOL

841 L

944 SI

1000 D

D# 1059

1122 R

R# 1189

1260 MI

1335 F

F# 1414

1498 SOL

SOL# 1587

1682 L

L# 1782

1888 SI

NOSOUND ; Desativa a gerao de som causada pelo procedimento SOUND.

DOSEXITCODE : Word ; Retorna o cdigo de sada de um processo

8.5 Funes com Ordinais

FEXPAND ( path: PATHSTR) : PATHSTR; Retorna uma string contendo o nome de programa passado como parmetro em sua totalidade. FSEARCH ( path: PATHSTR; lista : String ) : PATHSTR; Procura um determinado arquivo em uma lista de diretrios FSPLIT (path: PATHSTR; VAR dir: DIRSTR; VAR nome: NAMESTR; VAR ext: EXTSTR); Explode o nome do arquivo passando como parmetro, em trs partes o diretrio, o nome do arquivo e a extenso. FINDFIRST (caminho : String ; atributo : Word ; VAR s : SEARCHREC); Procura um determinado arquivo, especificando seu nome e seu atributo FINDNEXT (VAR s : SEARCHREC); Devolve a prxima entrada, aps FINDFIRST. GETCBREAK (VAR break : Boolean); Retorna o estado da checagem de CTRL-BREAK. SETCBREAK (break : Boolean); Altera o estado da checagem de CTRL-BREAK. GETVERIFY (VAR v: Boolean); Retorna o estado do flag de verificao do Sistema Operacional SETVERIFY (v : Boolean); Altera o estado do flag de verificao do Sistema Operacional 49 GETDATE (VAR ano, mes, dia, dia_semana : Word ); Retorna a data corrente do sistema operacional

PRED (varivel) Retorna o predecessor do argumento passado SUCC (varivel) Retorna o sucessor do argumento passado

8.6 Unit DOS


DOSVERSION : Word ; Retona a verso do sistema. A parte baixa retorna a verso e a parte baixa a atualizao DISKFREE (drive : Byte) : Longint; Retorna o nmero de bytes livres no drive. DISKSIZE (drive : Byte ) : Longint ; Retorna o total de bytes da unidade de disco

ENVCOUNT : Integer ; Retorna o nmero de strings contidas no ambiente DOS

50

SETDATE (ano, mes, dia : Word ); Altera a data do sistema operacional

GETTIME (VAR hora, min, seg, cen : Word ); Retorna a hora do sistema operacional SETTIME (hora, min, seg, cen : Word ); Altera a hora do sistema operacional PACKTIME (VAR data : DATETIME; VAR ftime : Longint ); Compacta data e hora em 4 bytes. A hora e a data devero estar em um registro DATETIME predefinido na Unit DOS: DATETIME = record year, month, day, hour, min, sec : Word ; END;

KEEP (saida : Word ); Termina um programa e mantm residente na memria.

UNPACKTIME (ftime : Longint ; VAR data :DATETIME); Descompacta um valor de 4 bytes para o registro DATETIME. GETFTIME (VAR arquivo, VAR dh : Longint ); Retorna a hora e a data da ltima atualizao de um arquivo. GETFATTR (arquivo; VAR atrib : Word ); Retorna o atributo de um determinado arquivo: READONLY HIDDEN SYSFILE VOLUMEID DIRECTORY ARQUIVE ANYFILE = $01; (somente leitura) = $02; (escondido) = $04; (arquivo de sistema) = $08; (nome de volume) = $10; (diretrio) = $20; (arquivo) = $3F; (sem definio) SETFTIME (VAR arquivo, VAR dh : Longint ); Estabelece uma nova data e hora de ltima gravao em um arquivo.

Exemplo de um programa que causa um click cada vez que uma tecla pressionada: Program ExemploKeep; {$M $800,0,0 } { 2K stack, no heap } uses Crt, Dos; var KbdIntVec : Procedure; {$F+} procedure Keyclick; interrupt; begin if Port[$60] < $80 then begin Sound(5000); Delay(1); Nosound; end; inline ($9C); KbdIntVec; end; {$F-} begin GetIntVec($9,@KbdIntVec); SetIntVec($9,Addr(Keyclick)); Keep(0); end.

SETFATTR (VAR arquivo; atrib : Word ); Estabelece um novo atributo para um arquivo

GETINTVEC (nuint : Byte ; VAR vetor : pointer); Retorna o endereo de memria de um vetor de interrupo especfico SWAPVECTORS ; Permite que sejam salvos todos os vetores de interrupo do sistema.

SETINTVEC (nuint : Byte ; VAR vetor : pointer); Determina um novo endereo de memria de um vetor de interrupo especfico INTR (intnro : Byte ; VAR reg : REGISTERS); Permite executar uma interrupo do sistema operacional. Deve-se passar como parmetro o nmero da interrupo e um registro dos registradores, predefinido na Unid DOS: REGISTERS = RECORD case integer of 0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, FLAGS : Word ); 1: (AL, AH, BL, BH, CL, CH, DL, DH : Byte ); END;

MSDOS (VAR reg : REGISTERS); Executa uma chamada na interrupo 21H do sistema operacional.

51

52

9. TIPOS ESTRUTURADOS

Ex:

Os tipos estruturados diferem do tipo simples pelo fato de poderem agregar mais de um componente (informao). Cada componente de um tipo estruturado pode ser uma varivel de um tipo simples ou estruturado. A linguagem Pascal agrupa os tipos estruturados de acordo com os tipos de componentes que podem agregar: os Tipos Estruturados Homogneos, que s podem agregar componentes do mesmo tipo e os Heterogneos, que podem agregar tipos diferentes. Como Tipo Heterogneo o Pascal nos oferece o Registro (RECORD).

Notas: Array[1..40,1..3] of integer; const

Uma matriz pode ser declarada e inicializada declarando-se no bloco de constantes: num1: array [1..5] of integer = (2,4,6,8,10); num2: array [1..2,1..5] of integer = ((10,20,30,40,50),(15,25,35,45,55));

Como Tipos Homognetos, o Pascal nos oferece os Vetores (ARRAY), os Arquivos (FILE) e o Conjunto (SET).

9.1 Vetores Unidimensionais e Multidimensionais (Matrizes)


A palavra ARRAY define a construo de matrizes e a definio de matrizes talvez seja uma das estruturas de dados mais conhecidas. Estas podem ter um nmero fixo de elementos definidos por uma faixa de ndices e esta faixa pode ter mais de um nvel. Quando a faixa possui um nico nvel (linha), costumamos chamar de vetor e quando possui mais de um nvel ou linha, chamamos de matriz. Um vetor uma matriz de uma nica linha. Uma matriz possui quatro propriedades bsicas: a) Os itens de dados individuais na matriz so chamados de elementos. c) Todos os elementos so armazenados contiguamente na memria do computador, e em linguagem C o ndice do primento elemento sempre ser zero. Como todos os elementos so do mesmo tamanho, no podemos definir matrizes usando uma mistura de tipos de dados, pois a localizao de um elemento feita com base no endereo do primeiro elemento mais o deslocamento proporcional ao ndice. d) O nome da matriz um valor constante que representa o endereo do primeiro elemento na matriz. b) Todos os elementos devem ser do mesmo tipo de dados.

Observe que no se pode usar uma varivel na definio da matriz para dimensionar o seu tamanho, pois o compilador precisa alocar a memria necessria no momento da compilao.
Exemplo: Program Arrays; Uses CRT;

Var Vetor: array[1..10] of integer; Matriz: array[1..5,1..10] of integer; i, j:integer;

As matrizes podem ser unidimensionais quando o acesso a um de seus elementos feito atravs de um nico ndice, tambm conhecida como vetores em Pascal, ou multidimensionais quando possuem mais que uma dimenso, sendo necessrio mais de um ndice para acessar um de seus elementos. <nomeVetor> : ARRAY [<lim_inf> .. <lim_sup>] of <TipoComponente> Ex: Alunos: Array[1..40] of integer;

Uma matriz unidimensional ou vetor em Pascal definido com o uso da palavra reservada array, seguida de seus limites inferior e superior entre colchetes, da palavra reservada of e do tipo de componente do vetor.

Uma matriz multidimensional pode ser comparada a uma tabela de duas ou mais dimenses, sendo necessrios tantos ndices quantas forem as dimenses.

Uma matriz multidimensional em Pascal definida tambm com o uso da palavra reservada array, seguida de seus limites inferior e superior para cada dimenso, separada por vrgulas, entre colchetes, da palavra reservada of e do tipo de componente do vetor. <nomeVetor> : ARRAY [<lim_inf> .. <lim_sup>,<lim_inf> .. <lim_sup>, <lim_inf> .. <lim_sup>] of <TipoComponente>

9.2 Estruturas

begin clrscr; Writeln('Lendo Valores do Vetor: '); for i:= 1 to 10 do begin write('Elemento ',i,': '); readln(Vetor[i]); end; Writeln('Lendo Valores da Matriz: '); for i:= 1 to 5 do begin for j:= 1 to 10 do begin write('Elemento [', i, ',' , j, ']: '); readln(Matriz[i,j]); end; end; Writeln('Escrevendo Valores do Vetor: '); for i:= 1 to 10 do begin writeln('Elemento ',i,': ',Vetor[i]); end; Writeln('Escrevendo Valores da Matriz: '); for i:= 1 to 5 do begin for j:= 1 to 10 do begin writeln('Elemento [', i, ',' , j, ']: ',Matriz[i,j]); end; end; readln; end.

A declarao RECORD permite-nos definir um registro: <identificador> = RECORD <campo1> : tipo;

53

54

<campo2> : tipo; ... END; <campon> : tipo;

REGISTRO um grupo de informaes relativas a uma mesma entidade. Estas informaes podem ter caractersticas diferentes, como em um R.G., onde temos diversos campos com nome, nome do pai, nome da me, nmero do registro, etc. O registro tem uma particularidade em relao a uma matriz, enquanto em uma matriz podemos ter vrios elementos de um nico tipo, no registro podemos ter elementos com tipos diferentes. A definio de um registro no Turbo Pascal s pode ser feita na rea de tipos (TYPE) e assim sendo, quando definimos um registro, na verdade, estamos criando um tipo novo. Para podermos utilizar este tipo, temos que declar-lo na rea de variveis (VAR), j a manipulao dos campos de um arquivo deve ser feita atravs da referncia do nome do registro e o nome do campo unidos por um ponto ( .).
Exemplos : TYPE registro = RECORD nome : STRING[30]; ende : STRING[25]; fone : STRING[8]; idade : BYTE; END; tela END; = RECORD atributo : BYTE; caracter : CHAR;

writeln(un.N:0:6); end else begin write('Digite uma string: '); readln(un.S); writeln(un.nome); writeln(un.S); end; readkey; end.

Neste tipo de registro, temos a possibilidade de variar a estrutura. dependendo da condio encontrada no decorrer do programa para um campo-sinal previamente declarado como tipo escalar, esta estrutura de seleo chamada de unio discriminada, cabendo desta forma ao programador manter vlida. Exemplo de referncia de um campo do registro :
PROGRAM teste_reg; TYPE

registro = RECORD nome :STRING[30]; ende :STRING[25]; fone :STRING[8]; idade :BYTE; END; VAR reg : registro;

Podemos ainda ter uma estrutura de registro seletivo :


Exemplo: Program ExemploRegistroSeletivo; uses crt; type Classe uniao = record Nome: string[30]; case campo: Classe of Num: (N: real); Str: (S: string); end; = (Num, Str);

var un: uniao; op: char;

BEGIN reg.nome := Roberto; reg.ende := Rua Annima, 0; reg.fone := 999-9999; reg.idade:= 30; writeln(Nome: , reg.nome); writeln(Endereo: , reg.ende); writeln(Fone: , reg.fone); writeln(Idade: , reg.idade); write(Nome: ); readln(reg.nome); write(Endereo: readln(reg.ende); write(Fone: readln(reg.fone); write(Idade: readln(reg.idade); writeln(Nome: , reg.nome); writeln(Endereo: , reg.ende); writeln(Fone: , reg.fone); writeln(Idade: , reg.idade); END.

begin clrscr; write('Nome: '); readln(un.nome); writeln('O que voce quer armazenar: [N] Numero - [S] - String?'); op:=readkey; if upcase(op)='N' then begin write('Digite um numero: '); readln(un.N); writeln(un.nome);

Pode-se tambm armazenar os registros em memria, atravs do uso de vetores ou matrizes de estrutras.
Exemplo: Program ExemploRegistroSeletivo; uses crt; type cadastro = record codigo: integer; nome: string[30];

55

56

var cad: Array [1..10] of cadastro; i: integer;

rg: string[15]; end;

car := ['s','S','n','N'];

Permite a unio entre conjuntos: +

begin clrscr; for i:= 1 to 10 do begin write('Codigo: '); readln(cad[i].codigo); write('Nome: '); readln(cad[i].nome); write('RG: '); readln(cad[i].rg); end; clrscr; for i:= 1 to 10 do begin writeln(cad[i].codigo, ' - ', cad[i].nome, ' - ', cad[i].rg); end; readkey; end.

dig := [1,2,3,4,5] + [2,4,6,8,10]; {resulta [1,2,3,4,5,6,8,10]} vog := ['a','u'] - ['a','e','i','o']; {resulta ['u']} car := ['s','S','n','N'] * ['s','S']; {resulta nos elementos comuns entre ambos ['s','S']}

Diferena entre conjuntos: -

Interseco entre conjuntos: *

E ainda relao entre conjuntos: =


if conj1 = conj2 {verdadeiro se todos elementos forem idnticos}

<> <= >= IN

9.3 Conjuntos - Set

if conj1 <> conj2 {verdadeiro se pelo menos um elemento pertencer a ambos os conjuntos} if conj1 <= conj2 {verdadeiro se todos elementos de conj1 estiverem contidos em conj2} if conj1 >= conj2 {verdadeiro se todos elementos de conj2 estiverem contidos em conj1} if conj1 IN conj2 {verdadeiro se conj1 for um elemento de conj2}

SET OF permite a definio de tipos conjuntos, que podem ser referenciados e manipulados como qualquer operao de conjunto disponivel em matemtica : <identificador> = SET OF <tipo>;

TYPE carac = SET OF CHAR; digitos = SET OF 0..9; vogal = SET OF ('A','E','I','O','U','a','e','i','o','u');

a manipulao dos conjuntos depende da declarao deste tipo na rea de variveis:


VAR car : carac; dig : digitos; vog : vogal;

a construo de um conjunto feita a partir de um construtor '[' ']' e o contedo : [1, 3, 7, 11, 13] {conjunto dos numeros inteiros 1,3,7,11,13} [] {conjunto vazio}

['A' .. 'Z', 'a' .. 'z'] {conjunto das letras de 'A' a 'Z' minsculas e maisculas }

As operaes com conjuntos so similares s operaes de conjuntos em matemtica. Atribuio de valores para conjuntos: := 57 58

10. CONCEITOS BSICOS DO AMBIENTE DELPHI

10.1.3 Paleta de Componentes

As caractersticas bsicas da programao orientada a objetos se resume em Classes. Cada classe um tipo de dado definido por voc, cada uma delas contm mtodos com funes e procedures. Cada objeto pertence a uma classe e cada componente um objeto, que contm propriedades, mtodos e eventos. A propriedade (property) funciona como se fosse os parmetros do objeto, como: cor, ttulo, texto, alinhamento, tamanho, posio e outros. Algumas propriedades podem e/ou devem ser modificadas em tempo de projeto, outras so propriedades apenas de leitura, ou seja, s retornam caractersticas especficas sobre o objeto atual no momento solicitado. Os mtodos (methods) so os comandos de execuo do objeto, executando uma determinada operao disponvel no mesmo. Alguns exemplos de mtodos so: executar, focalizar, localizar. Os eventos (events) so as reaes de determinado objeto, toda operao ou modificao neste executa um evento. Atravs dos eventos disponveis podemos controlar vrios outros objetos.

Nesta paleta voc ter vrias pginas de componentes divididos em grupos de determinadas finalidades, como: botes, caixas de textos, acessos a bancos de dados e outros. 10.1.4 O Object Inspector projeto. Contm todas as propriedades e eventos de cada componente que podem ser modificadas em tempo de

Para controlar as propriedades e eventos de cada componentes, voc precisa colocar o componente desejado no formulrio clicando-o na paleta e em seguida inser-lo. Aps, com o componente selecionado, mova o cursor do mouse para o Object Inspector e mude as propriedades desejadas. Para colocar um cdigo para ser executado em algum evento do componente, clique abaixo do Object Inspector a pgina Events e d um duplo clique no evento desejado.

10.1 Ambiente de Desenvolvimento do Delphi

O aspecto geral do ambiente dividido em menu, barra de ferramentas e paleta de componentes, como visto na figura abaixo. Tambm como padro do ambiente acompanha o Object Inspector que ser muito utilizado em toda aplicao em desenvolvimento.

Se houver alguma propriedade com o sinal de + (mais), significa que h sub-propriedades includas nesta. Para visualizar basta clicar duas vezes nesta propriedade para aparecerem as suas propriedades internas. Alm do smbolo (+) tambm pode ser encontrado o smbolo [...] (trs pontos), significa que contm uma janela de dilogo, como: fontes, tens de listas, etc.

Nota

Para todo componente voc pode utilizar o boto direito do mouse para acessar um menu Pop-up com opes que podem ser utilizadas em um ou mais componentes ao mesmo tempo (para marcar mais de um componente ao mesmo tempo mantenha a tecla SHlFT Pressionada e d um clique com o boto esquerdo nos componentes que deseja marcar.

10.1.5 Estruturas de Arquivos do Projeto .EXE .DPR .PAS .DFW .RES

O Delphi utiliza vrios arquivos para cada projeto: Arquivo principal do projeto, que

Nome do arquivo executvel da aplicao, o padro ser o nome do projeto. Arquivo de estrutura binria respectivo a cada formulrio criado.

armazena e chama todas as Units a ele relacionadas.

Arquivo onde est escrito todo o cdigo fonte de funes, eventos e outros.

.OPT

Arquivo de recurso do projeto, armazena cones e outros recursos do projeto.

.DSK .DCU

Arquivo que armazena as opes criadas para o objeto no ambiente do Delphi. Gerado aps a compilao do projeto, significa o .PAS compilado.

Arquivo que contm as opes de configurao do ambiente do Delphi, como compilador e outros.

10.1.6 Configurando as Opes de um Projeto

Para cada projeto exitem diversos parmetros de configurao do mesmo. Para acess-las, clique no menu Options e em seguida Project. 10.1.1 Menu de Opes

A barra de menus est disponvel para abrir e gravar arquivos de projetos, compilar, executar, configurar e outros. 10.1.2 Barra de Ferramentas Contm os botes para movimentar-se rapidamente entre os formulrios, arquivos de projeto, abrir e gravar arquivos, adicionar e remover mdulos do projeto e executar a aplicao.

10.2 Componentes

Os componentes so os objetos que faro com que voc crie suas janelas, com dados desejados e solicitao de informaes ao usurio da aplicao. So diversos os componentes disponveis para voc criar suas aplicaes. Veja a seguir como dividida a paleta de cornponentes:

59

60

DragMode Enabled Font

A maioria dos con- Determina o comportamento arrastar-e-soltar do troles controle como componente inicial para uma operao de arrastar

10.2.1 Opes da Paleta de Componentes Standard Additional DataAccess Dialogs System DataControls

Contm os componentes bsicos mais utilizados pelas aplicaes.

Todos os controles e Determina se o controle est ativo ou inativo (ou alguns outros compo- acinzentado) nentes Todos os controles Todos os controles Determina a fonte do texto exibido dentro do componente O manipulador da janela usado pelo sistema; o cdigo do windows para o componente

Contm os componentes adicionais que nem sempre so necessrios, mas auxiliam em detalhes. Contm os componentes que controlam todo o acesso aos bancos de dados. Contm os componentes para visualizar os dados dos bancos de dados, so todos ligados aos componentes da pgina DataAccess. Contm os componentes que controlam todo o sistema do projeto.

Handle Height HelpContext Hint Left Name Owner Parent ParentColor ParentCtl3D ParentFont ParentShowHint PopupMenu ShowHint Showing

Contm os componentes que voc est acostumado a ver no ambiente Windows, como as Caixas de Dilogos de abrir, gravar, imprimir, etc.

Todos os controles e O tamanho vertical do controle alguns outros componentes

10.2.2 Propriedades so:

Todos os controles e os Um nmero contextual usado para chamar a ajuda componentes da caixa contextual automaticamente de dilogo Todos os controles Todos os controles

A propriedade de um componente a situao ou configurao do mesmo. As principais propriedades

A string usada para exibir dicas instantneas para o controle A coordenada horizontal do canto superior esquerdo do componente

Propriedade Align BoundsRect Caption

Disponvel para

Todos os controles Todos os controles Todos os controles

Descrio

Determina como o controle alinhado em sua rea de controle de origem Indica o retngulo demarcador do controle A legenda do controle

Todos os componentes O nome nico do componente, o qual pode ser usado no cdigo-fonte Todos os componentes Indica o componente proprietrio Todos os controles Muitos objetos componentes Indica o controle de origem (pai)

ComponentCount Todos os componentes O nmero de componentes possudos pelo atual ComponentIndex Components Controls Color Ctrl3D Cursor DragCursor ControlCount

Todos os componentes Indica o posio do componente na lista de componentes de proprietrio Todos os componentes Uma matriz dos componentes possudos pelo atual Todos os controles Todos os controles Muitos objetos componentes O nmero de controles que so filhos do atual Uma matriz dos contoles que so filhos do atual

A maioria dos compo- Determinase o componente deve utilizar su prpria nentes propriedade Ctrl3D ou a do componente-pai Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Determina se o componente deve usar sua prpria propriedade Font ou a do componente de origem (pai) Determina se o componente deve usar sua prpria propriedade ShowHint ou a do componente de origem (pai) Indica o menu suspenso a ser usado quando o usurio der um clique sobre o controle com o boto esquerdo do mouse Determina se as dicas esto ativadas Determina se o controle est sendo mostrado atualmente na tela, ou seja, se est visvel, quando seu controle de origem (pai) mostrado

e Determina se o componente deve utilizar sua prpria propriedade Color ou a do componente-pai

e Indica a cor da superfcie, do fundo, ou a cor atual

A maioria dos compo- Determina se o controle tem uma aprncia tridimensional nentes Todos os controles

A maioria dos con- O cursor usado para indicar que o controle aceita ser troles arrastado

O cursor usado quando o ponteiro do mouse est sobre o controle

TabOrder

Todos os controles Determina a origem de tabulao deste controle (exceto Form)

61

62

TabStop Tag Top Visible Width


10.2.3 Eventos

Todos os controles Determina se o usurio pode tabular para este controle (exceto Form) Todos os controles

OnMouseDow OnMouseMove OnMouseUp OnStartDrag

Muitos controles Muitos controles Muitos controles Muitos controles

Todos os componentes Uma long integer disponvel para armazenar dados personalizados

Ocorre quando o usurio pressiona um dos botes do mouse e geralmente enviado ao componente sob o cursor do mouse Ocorre quando o usurio move o mouse sobre um componente Ocorre quando o usurio solta um dos botes do mouse

Todos os controles e Determina se o controle visvel (veja tambm a alguns outros compo- propriedade Showing) nentes Todos os controles e O tamanho horizontal do controle alguns outros componentes

A coordenada vertical do canto superior esquerdo do componente

Ocorre quando o usurio inicia o arrasto; enviado para o componente que inicia a operao de arrastar

10.2.4 Mtodos

Mtodos so procedures ou funes embutidas nos componentes e formulrios, previamente definidas pelo Delphi, que podem serem chamados para se executar a ao correspondente. A maioria deles formada por procedimentos, os quais executam de fato uma ao em vez de lerem ou escreverem um valor. Existem alguns mtodos disponveis em todos os componentes, outros mtodos que so compartilhados somente pelos controles (componentes visuais) e assim por diante. A tabela abaixo, lista alguns mtodos de componentes comuns.

O evento um acontecimento sobre um determinado componente. Cada operao executada em um componente pode gerar um evento, por exemplo quando voc clica em um boto gera um evento OnClick. Os eventos so gerados pelo sistema como resposta chamada de algum mtodo ou a modificao de uma determinada propriedade. Os principais eventos so:

Evento

OnChange OnClick OnDblClick OnDragDrop OnDragOver OnEndDrag OnEnter OnExit OnKeyDown OnKeyPress OnKeyUp

Disponvel para

Muitos objetos componentes Muitos controles Muitos controles Muitos controles Muitos controles Muitos controles

e Ocorre quando o 0bjeto (ou seu contedo) muda Ocorre quando se d um clique com o boto esquerdo do mouse sobre o componente

Descrio

Mtodo

BeginDrag CanFocus

Disponvel para

BringToFont ClientToScreen Create Destroy Dragging EndDrag Focused Free FindComponent

Todos os controles Todos os controles Todos os controles Todos os controles Todos os ajanelados

Descrio

Inicia o arrasto manual

Coloca o componente na frente de todos os outros Determina se o controle pode receber o foco Traduz coordenadas de tela

Ocorre quando o usurio d um clique duplo com o mouse sobre o componente Ocorre quando uma operao de arrastar termina sobre o componente Ocorre quando o usurio est arrastando sobre o componente Ocorre quando a ao de arrastar encerrada e enviada ao componente que iniciou a operao de arrastar

ContainsControl

controles Determina se certo controle contido pelo atual e Cria uma nova instncia e Destri a instncia (se voc tiver usado Create para criar o objecto, melhor usar o mtodo Free em vez de Destroy) Indica se os controles esto sendo arrastados Termina manualmente o arrasto

Todos os objetos componentes Todos os objetos componentes Todos os controles Todos os controles Todos os ajanelados Todos os componentes

Todos os controles Ocorre quando o componente ativado, ou seja, quando o ajanelados componente recebe o foco Todos os controles Ocorre quando o componente perde o foco ajanelados Muitos controles Muitos controles Muitos controles

Ocorre quando o usurio pressiona uma tecla do teclado e enviado ao componente que detm o foco Ocorre quando o usurio pressiona uma tecla e enviado ao componente que detm o foco Ocorre quando ousurio solta uma tecla e enviado ao componente de detm o foco

controles Determina se o controle tem o foco

Retorna o componente na propriedade da matriz Components que tenha determinado nome

GetTextBuf

Todos os objetos e Apaga a instncia e a memria associada (os componentes (no su- formulrios devem usar, em vez disso, o mtodo geridos para os for- Release) mulrios) Todos os controles Todos os controles Recupera o texto ou a legenda do controle Retorna a extenso do texto ou da legenda do controle

63

GetTextLen

64

HandleAllocate HandleNeeded Hide

Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os controles Todos os componentes Todos os componentes

Retorna True se o manipulador do controle existir Cria um manipulador se ele ainda no existir Torna o controle no-visvel

Este componente usado para mostrar ao usurio uma caixa para que ele possa marcar ou desmarcar; com um texto que acompanha esta caixa. Para juntar vrios componentes em um form, coloque-s dentro de um TScrollBox. TPanel, TGroupBox ou A principal propriedade deste componente a Checked, que indica se o CheckBox est marcado ou desmarcado. Tipicamente, este controle mostra dois tipos de escolha (True ou False). Mas podemos configurar para que ele mostre trs estados diferentes. Para isto colocamos a propriedade AllowGrayed para True e passamos a ler o estado do componente pela propriedade State, que pode assumir um dos trs valores seguintes: cbUnchecked, cbGrayed, cbChecked. RadioButton Este componente usado para apresentar um conjunto de opes mutuamente exclusivas para o usurio (ou seja, o usurio s pode selecionar um das opes do conjunto). ListBox Este componente mostra um lista de itens e permitir que o usurio selecione um ou mais itens GroupBox

InsertComponent InsertControl Invalidate ScaleBy RemoveComponent ScreenToClient ScrollBy SendToBack SetBounds SetFocus Show

Adiciona um novo elemento lista de componentes possudos Fora um redesenho do controle

Adiciona um novo elemento lista de controles que so filhos do atual Remove um componente da lista de componentes Gradua o controle em determinada porcentagem Traduz coordenadas de tela Rola o contedo do controle

Coloca o componente atrs de todos os outros

Muda de posio e o tamanho do controle (mais rpido do que acessar as propriedades relacionadas uma a uma) Coloca o foco de entrada no controle Torna o controle visvel Define o texto ou legenda do controle Redesenha imediatamente o controle, mas apenas se uma operao de redesenho tiver sido solicitada (ou seja, aps um achamada ao mtodo Invalidate)

desta lista.

SetTextBuf Update

MainMenu

Este usado para agrupar componentes que se relacionam, com botes de rdio por exemplo.

Este componente permite a fcil construo de menus. Aps sua colocao no form, basta executar um duplo-click que aparecer o MenuDesigner , colocando na propriedade Caption o contedo do item de menu. Voc pode clicar e arrastar os itens do menu para rearranj-los em seu projeto. No necessrio rodar o projeto para ver os resultados o menu est sempre visvel na janela de formulrio, com a aparncia que ter durante a execuo do programa.

10.3 Principais Componentes


Label

Os componentes da paleta Standard so os bsicos de todo o ambiente Delphi, que sero utilizados constantemente para diversas utilidades. Este componente mostra um texto em um determinada rea. utilizado normalmente para rotular um outro componente. Edit Este componente utilizado para que o usurio possa entrar informaes. Este componente permite a entrada ou visualizao em mltiplas linhas. Este componente utilizado para que o usurio possa iniciar uma ao. 65

Para se criar sub-menus, clique com o boto direito do mouse no item que voc deseja criar o sub-menu, e escolha a opo Create Submenu (Ctrl+Right) ; o processo de construo igual ao descrito acima. No h limite para os nveis de sub-menu.

Pode-se deletar menus selecionan-dos, e pressinando a tec la Del; e inserir menus clicando-se na tecla Insert - estas operaes so igualmente possveis atravs do acionamento de speedmenu do MenuDesigner (acessa-se o speedmenu, clicando-se o boto direito do mouse sob o MenuDesigner ). Nota Colocando um & antes de uma letra do menu (capitulao), ela aparece sublinhada. O usurio pode selecionar a opo do menu apenas pressionando a letra quando o menu estiver aberto. Regras para capitulao: 1 primeira letra; 2 se houver duas letras iniciais iguais, pega-se a primeira consoante; se houver a primeira consoante igual; pega-se o Segunda consoante e assim procede-se at esgortar-se as consoantes; 3 caso os pasos 1 e 2 se esgotarem, pega-se a primeira vogal e assim sucessivamente; 4 se no for possvel capitular as opes, pode-se diferencia-las com o acrsccimo de caracteres extras ou optar-se por no capitul-las

Memo

Button

CheckBox

Este componente mostra um lista de escolher, pode-se dar entrada no item de escolha.

ComboBox

opes

para

usurio 66

Este componente mostra um lista de itens e permitir que o usurio selecione um ou mais itens desta lista. Permite a exibio de um conjunto de botes de rdio que representam opes mutuamente exclusivas. RadioGroup

ListBox

Edit

Button

Para acessar o ndice do componente selecionado utilize: <nome do componente> .ItemIndex Ex.:

RadioButton

showmessage (Selecionada a + IntToStr(RadioGroup1.ItemIndex) + Opo.); showmessage (Selecionada a + IntToStr(ComboBox1.ItemIndex) + Opo.); showmessage (Selecionada a + IntToStr(ListBox1.ItemIndex) + Opo.);

CheckBox

Para acessar o texto do componente selecionado utilize:

<nome do componente> .Items[ <nome do componente> .ItemIndex ]

showmessage (Opo escolhida: + ListBox1.Items[ListBox1.ItemIndex]); showmessage (Opo escolhida: + ComboBox1.Text);

showmessage (Opo escolhida: + RadioGruop1.Items[RadioGroup1.ItemIndex]); showmessage (Opo escolhida: + ComboBox1.Items[ComboBox1.ItemIndex]);

Memo

Dica

Para aceitar somente nmeros em campos Edit e ComboBox, Inserir o cdigo abaixo no evento OnKeyPress do controle de edio:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin
if ((key<'0') or (key>'9')) and (key<>#8) and (key<>#13) then begin Messagebeep(0); key:=#0; end;

ListBox

end;

ComboBox

Enabled Font Maxlength Name PasswordChar ReadOnly Text Caption Enabled Font Name Text Caption Checked Enabled Font Name Caption Checked Enabled Font Name State Enabled Font Lines Maxlength Name ReadOnly ScrollBars Enabled Font Items MultiSelect Name Sorted
Enabled Font ItemIndex Items Name Sorted

Setfocus

Setfocus

Setfocus

Setfocus

Clear Lines.Add Lines.Count Setfocus Clear Items.Add Items.Count Setfocus


Clear Items.Add Items.Delete Items.Count

Componente Application Form Label

Resumo dos componentes com as principais propriedades e mtodos:


Propriedades Initialize; CreateForm Run; Terminate Close Show Showmodal Mtodos

ListBox

Text

Setfocus

Caption Enabled Font Name

RadioGroup

Enabled Font ItemIndex Items MultiSelect Name

Clear Items.Add Items.Delete Items.Count

Sorted

Setfocus

Enabled Font ItemIndex Items

Name 67

Items.Add Items.Delete Items.Count

Setfocus

68

10.4 Caixas de dilogo simples

Existem algumas funes que permitem mostrar uma mensagem rapidamente em uma caixa de dilogo. So elas: ShowMessage, MessageDlg e MessageBox .

Esta funo permite colocar uma caixa de dilogo contendo um boto de OK e uma mensagem. No podemos colocar outros botes nem mudar o ttulo, que sempre o nome do programa.
showmessage(Coloque sua mensagem aqui!);

ShowMessage

mrYes mrOk mrRetry mrNo mrCancel mrIgnore mrAll

Boto de Yes foi pressionado Boto de OK foi pressionado Boto de Retry foi pressionado Boto de No foi pressionado Boto de Cancel foi pressionado Boto de Ignore foi pressionado Boto de All foi pressionado

O cdigo: MessageDlg(No curta drogas, seja gremista,mtInformation,[mbOk],0); - gera a caixa:

Esta funo exige uma cadeia string com a mensagem, um tipo ( TMsgDlgType ), um conjunto de botes (TMsgDlgButtons) e um inteiro para usarmos em auxilio on-line ( se quisermos ). MessageDlg retorna um valor dependendo do boto pressionado. Sintaxe: MessageDlg(<Mensagem da caixa>,<Icones>,<Botes>,<Auxilio>); <Icones>: icone que ser mostrado no interior da caixa. Valor mtWarning mtError mtInformation mtConfirmation mtCustom Valor mbYes mbNo mbOK mbCancel mbHelp mbAbort mbRetry mbIgnore mbAll mbYesNoCancel mbOkCancel mbAbortRetryIgnore Significado Ponto de exclamao amarelo Sinal de X vermelho Balo com i azul Ponto de interrogao Nome do executvel na barra superior Significado Boto com Yes Boto com No Boto com OK Boto com Cancel Boto com Help Boto com Abort Boto com Retry Boto com Ignore Boto com All Botes com Yes,No,Cancel Botes com OK,Cancel Botes com Abort,Retry,Ignore

MessageDlg

Como foi mencionado acima, a funo MessageDlg retorna um valor correspondente ao boto pressionado. Como mostra o cdigo a seguir:
if MessageDlg('Torcedor Colorado?',mtConfirmation,[mbYes,mbNo],0) = mrNo then ShowMessage('Voc legal!') else ShowMessage('Mas voc corajoso!);

<Mensagem da caixa>: string que ser mostrado no interior da caixa.

<Botes>: botes que a caixa conter.

Note que o valor de retorno de MessageDlg comparado a mrNo. Tendo como resultado outra caixa de dilogo. MessageDlg no permite que se atribuam valores arbitrrios ao ttulo.

Esta permite que atribuam valores arbitrrios ao ttulo e as mensagens. Existem dois tipos de MessageBox : um da API ( MessageBox ) e um do Delphi ( Application.MessageBox ). Ambos permitem que se atribuam valores tanto ao recheio como para o ttulo; tambm permitem que se acrescentem constantes MB_xxx para mudar o aspecto da caixa de dilogo. Sintaxe: MessageBox retorna um valor dependendo do boto pressionado.

MessageBox

MessageBox(<Mensagem da caixa>,<Titulo>,Constantes MB_xxx); <Mensagem da caixa>: string que ser mostrado no interior da caixa. <Titulo>: string que ser mostrado no titulo da caixa.

<Auxilio>: nmero para ajuda on-line. Valor mrNone mrAbort

Esta funo pode retornar valores dependendo do pressionamento dos botes. Significado Nenhum boto foi pressionado Boto de Abort foi pressionado

ser:

<Constantes MB_xxx>: concatenao de constantes que mudaro o aspecto da caixa. Podem Significado A caixa de dilogo conter trs botes: Anular, Repetir e Ignorar A caixa de dilogo ser modal.

69

Valor MB_ABORTRETRYIGNORE MB_APPLMODAL

70

MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 MB_DEFBUTTON4 MB_HELP MB_ICONASTERISK MB_ICONERROR MB_ICONEXCLAMATION MB_ICONHAND MB_ICONINFORMATION MB_ICONQUESTION MB_ICONSTOP MB_ICONWARNING MB_OK MB_OKCANCEL MB_RETRYCANCEL MB_YESNO MB_YESNOCANCEL

O primeiro boto da caixa de dilogo fica como default O segundo boto da caixa de dilogo fica como default O terceiro boto da caixa de dilogo fica como default O quarto boto da caixa de dilogo fica como default adicionado um boto de Ajuda na caixa de dilogo, quando for pressionado ou a tecla F1 gerado o evento de Help, vlido somente para Windows 95, Mostra um i azul, minsculo dentro de um balo (MB_ICONINFORMATION ) Mostra um X banco, dentro de um circulo vermelho, o mesmo que MB_ICONHAND , somente para windowes 95. Mostra um ponto de exclamao, dentro de um tringulo amarelo O mesmo que MB_ICONSTOP O mesmo que MB_ICONASTERIX Mostra um ponto de interrogao dentro de um balo O mesmo que MB_ICONERROR O mesmo quer MB_ICONEXCLAMATION, vlido somente para windows 95. A caixa de dilogo conter um boto de OK A caixa de dilogo conter os botes de OK e Cancelar A caixa de dilogo conter botes de Repetir e Cancelar A caixa de dilogo conter botes de Sim e No A caixa de dilogo conter botes de Sim, No e Cancelar

10.5 Dicas
Dica

Para saltar de um campo para outro usando a tecla ENTER, Inserir o cdigo abaixo no evento OnKeyPress do controle de edio de cada componente:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin SelectNext(Sender as TWinControl, True, True); key:=#0; end; end;

Para saltar de um campo para outro usando a tecla ENTER de todos os componentes, Inserir o cdigo abaixo no evento OnKeyPress do Formulrio:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin key:=#0; PostMessage( handle, WM_KEYDOWN, VK_TAB, 1); end; end;

Esta funo pode retornar valores dependendo do pressionamento dos botes. Valor IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES Valor numrico 3 2 5 7 1 4 6 Significado O usrio pressionou o boto de Anular O usrio pressionou o boto de Cancelar O usrio pressionou o boto de Ignorar O usrio pressionou o boto de No O usrio pressionou o boto de OK O usrio pressionou o boto de Repetir O usrio pressionou o boto de Sim

Atribua true propriedade KeyPreview do Formulrio. Esta rotina no funcionar em formulrios que tenham TMemo ou TDBMemo. Estes componentes precisam da tecla ENTER para gerar novas linhas. Em formulrios assim, a rotina pode ser usada, desde que seja inserido no evento OnEnter do componente Memo o cdigo:
procedure TForm1.Memo1Enter(Sender: TObject); begin Form1.KeyPreview:=false; end;

e no envento OnExit o cdigo

procedure TForm1.Memo1Exit(Sender: TObject); begin Form1.KeyPreview:=true; end;

Exemplo: O cdigo abaixo:

10.6 Funes de Manipulao de Strings, Nmeros e Datas


Funo Date DateToStr DecodeDate DecodeTime Now FloatToStr Descrio retorna a data corrente converte um valor data em string. Separa a data em dia, ms, ano Separa a hora em hora, minutos, segundos, centsimos Retorna a data e hora do sistema converte um nmero float numa string. formata um nmero float e retorna uma string. (#,##.00,10000,2) = 10.000,24 Exemplo

Application.MessageBox('A terra azul - tricolor','Confirmao', MB_APPLMODAL+MB_ICONWARNING+MB_YESNOCANCEL);

Todos os componentes de entrada de dados utilizam a propriedade text que string. Para manipulao de nmeros necessrio uma converso do formato.
Edit.text := 'Hoje ' + DateToStr(Date);

Ter como resultado a seguinte caixa de dilogo:

DecodeDate(Date, ano, mes, dia); DecodeTime(Now, Hora, Min, Seg, cent); Edit1.text:=FloatToStr(x) formatfloat ('#,##.00', strtofloat(Edit1.text))

FormatFloat
71

72

IntToStr

StrToIntDef Str

StrToDate StrToFloat StrToInt StrToTime Time TimeToStr Val

converte um nmero inteiro numa string. converte uma string num nmero inteiro e atribui um valor padro em caso de erro transforma um nmero em string com nmero de casas pr-definido converte uma string em data. converte uma string num nmero float. converte uma string num nmero inteiro converte uma string em hora retorna a hora corrente. converte a hora corrente em string. Transforma uma string num nmero e permite analisar o sucesso desta transformao

Edit1.Text := IntToStr(x);

x := StrToIntDef(Edit1.text, 0); Str(X:0:2, S); CData := StrToDate(Edit1.Text); x:= StrToFloat(edit1.text); i:= x:= StrToInt(edit1.text); ATime := StrToTime(Edit1.Text); Edit1.text := 'A hora ' + TimeToStr(Time) var I, erro: Integer; begin Val(Edit1.Text, I, erro); if erro <> 0 then begin Showmessage('Erro); end;

11. BIBLIOGRAFIA
CORMEN, Thomas H. & LEISERSON, Charles E. & RIVEST, Ronald L. Introduction to Algorithms. New York. McGraw-Hill, 1990. FARRER, Harry et alli Algoritmos Estruturados. Rio de Janeiro. Editora Guanabara Koogan S.A, 1989. 252p. GOTTFRIED, Byron S. Programao em Pascal. Lisboa. McGraw Hill, 1994. 567p.

MANZANO, Jos Augusto N. G. & OLIVEIRA, Jayr Figueiredo. Algoritmos: Lgica Para Desenvolvimento de Programao. So Paulo. rica, 1996. 270p. MECLER, Ian & MAIA, Luiz Paulo. Programao e Lgica com Turbo Pascal. Rio de Janeiro, Campus, 1989. 223p. ORTH, Afonso Incio. Algoritmos. Porto Alegre. Editora Pallotti, 1985. 130p. SALIBA, Walter Lus Caram. Tcnicas de Programao: Uma Abordagem Estrutura. So Paulo. Makron, McGraw-Hill, 1992. 141p. GOTTFRIED, Byron S. Programao em Pascal. Lisboa. McGraw Hill, 1994. 567p. GRILLO, Maria Clia Arruda. Turbo Pascal 5.0 e 5.5. Rio de Janeiro, LTC - Livros Tcnicos e Cientficos, 1990. 396p.

GUEZZI, Carlo & JAZAYERY, Mehdi. Conceitos de Linguagem de Programao. Rio de Janeiro, Campus, 1985. 306 p.HERGERT, Douglas. Dominando o Turbo Pascal 5. Rio de Janeiro. Editora Cincia Moderna, 1989. 550p. MACLENNAN, Bruce J. Principles of Programming Languages. Orlando, Florida, Harcourt Brace Jovanovih Publishers. 1987.568p. OSIER, Dan. Aprenda em 21 dias Delphi 2. Rio de Janeiro. Campus, 1997. 840p. RINALDI, Roberto. Turbo Pascal: verso 5.5. So Paulo. rica, 1990. 411p. MECLER, Ian & MAIA, Luiz Paulo. Programao e Lgica com Turbo Pascal. Rio de Janeiro, Campus, 1989. 223p. PALMER, Scott D. Guia do Programador Turbo Pascal for Windows. Rio de Janeiro, Ed. Cincia Moderna Ltda, 1992. 470p. RINALDI, Roberto, Turbo Pascal 7.0: comandos e funes. So Paulo, rica, 1993. 525p.

WATT, David A. Programming Language Concepts and Paradigms. Englewood Clifs, NJ, Prentice Hall, 1990. 535 p.

73

74

APNDICE A - EXERCCIOS
1. 2. 3. Escreva um algoritmo/programa em Pascal para ler, calcular e escrever a mdia aritmtica entre dois nmeros.

Escreva um algoritmo/programa em Pascal para ler um nmero positivo qualquer, calcular e escrever o quadrado e a raiz quadrada do mesmo.

Escrever um algoritmo/programa em Pascal que leia 3 valores: a, b, c e calcule e escreva a mdia aritmtica, harmnica e geomtrica correspondente. a + b + c Calcular a mdia aritmtica pela frmula: 3 Calcular a mdia harmnica pela frmula: 3____ 1 + 1 + 1 a b c

12. Escrever um algoritmo/programa em Pascal que l a hora de incio de um jogo e a hora do final do jogo (considerando apenas horas inteiras) e calcula a durao do jogo em horas, sabendo-se que o tempo mximo de durao do jogo de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 13. Escrever um algoritmo/programa em Pascal que l o nmero de um funcionrio, o nmero de horas por ele trabalhadas, o valor que recebe por hora, o nmero de filhos com idade inferior a 14 anos, a idade, o tempo de servio do funcionrio e o valor do salrio famlia por filho. Calcular o salrio bruto, o desconto do INSS (8,5% do salrio bruto) e o salrio famlia. Calcular o IR (Imposto de Renda) como segue: Se Salrio Bruto > 1.500,00 ento IR = 15% do SB Se Salrio Bruto > 500,00 e SB <= 1.500,00 ento IR = 8% do SB Se salrio Bruto <= 500,00 ento IR = 0 Calcular o adicional conforme especificado: Se idade superior a 40 anos ADIC = 2% do SB Se tempo de servio superior a 15 anos ADIC = 3.5% do SB Se tempo de servio < 15 anos mas superior a 5 anos e idade maior do que 30 anos ento ADIC = 1,5% do SB. Calcular o salrio lquido. Escrever o nmero do funcionrio, salrio bruta, total dos descontos, adicional e salrio lquido. 14. Escrever um algoritmo/programa em Pascal que l o nmero de identificao e as 3 notas obtidas por um aluno nas 3 verificaes e a mdia dos exerccios que fazem parte da avaliao. Para cada aluno, calcular a mdia de aproveitamento, usando a frmula: MA = Nl + N2 x 2 + N3 x 3 + ME 7

Se a > b + c no formam tringulo algum. Se a2 = b2 + c2 formam um tringulo retngulo. Se a2 > b2 + c2 formam um tringulo obtusngulo. Se a2 < b2 + c2 formam um tringulo acutngulo. Se forem todos iguais formam um tringulo equiltero. Se a = b ou b = c ou a = c ento formam um tringulo issceles

4. 5. 6.

Calcular a mdia geomtrica pela frmula:

Escrever um algoritmo/programa em Pascal que l o nmero de um funcionrio, seu nmero de horas trabalhadas, o valor que recebe por hora, e o nmero de filhos com idade menor do que 14 anos e calcula o salrio deste funcionrio. Escrever um algoritmo/programa em Pascal que l o nmero de um vendedor, o seu salrio-fixo, o tota1 de vendas por ele efetuadas e o percentual que ganha sobre o total de vendas. Calcular o salrio tota1 do vendedor. Escrever nmero do vendedor e o salrio total. Escrever um algoritmo/programa em Pascal que l 3 valores a, b, c que so lados de um tringulo e calcule a rea deste tringulo. onde s = semi-permetro

3 a. b. c

s(s
a)( s
b)(s
c)

7.

8. 9.

Uma revendedora de carros usados paga a seus funcionrios vendedores, um salrio fixo por ms, mais uma comisso tambm fixa para cada carro vendido e mais 5% do valor das vendas por ele efetuadas. Escrever um algoritmo/programa em Pascal que l o nmero do vendedor, o nmero de carros por ele vendidos, o valor tota1 de suas vendas, o salrio fixo e o valor que recebe por carro vendido e calcula o salrio mensal do vendedor, escrevendo-o juntamente com o seu nmero de identificao. Escrever um algoritmo/programa em Pascal que l 3 valores a, b, c, e escreva os 3 valores em ordem crescente. Escrever um algoritmo/programa em Pascal que l um conjunto de 4 valores i, a, b, c, onde i um valor inteiro e positivo e a, b, c, so quaisquer valores reais e os escreva. A seguir: Se i = 1 escrever os 3 valores a, b, c em ordem crescente. Se i = 2 escrever os 3 valores a, b, c em ordem decrescente. Se i = 3 escrever os 3 valores de forma que o maior valor entre a, b, c fica entre os outros 2.

A atribuio de conceitos obedece tabela abaixo:

10. Escrever um algoritmo/programa em Pascal que l o nmero de um vendedor de uma empresa, seu salrio fixo e o total de vendas por ele efetuadas. Cada vendedor recebe um salrio fixo, mais uma comisso proporcional s vendas por ele efetuadas. A comisso de 3% sobre o total de vendas at $ 1.000,00 e 5% sobre o que ultrapassa este valor. Escrever o nmero do vendedor, o total de suas vendas, seu salrio fixo e seu salrio total.

15. A empresa Enxuga Gelo SA decidiu conceder um aumento de salrios a seus funcionrios de acordo com a tabela abaixo: Salrio Atual 0 - 400,00 400,01 - 700,00 700,01 - 1.000,00 1.000,01 - 1.800,00 1.800,01 - 2.500,00 acima de 2.500,00 ndice De Aumento 15% 12% 10% 7% 4% sem aumento

Mdia de Aproveitamento Conceito >= 9.0 A >= 7.5 e < 9.0 B >= 6.0 e < 7.5 C >= 4.0 e < 6.0 D < 4.0 E O algoritmo/programa em Pascal deve escrever o nmero do aluno, suas notas, a mdia dos exerccios, a mdia de aproveitamento, o conceito correspondente e a mensagem: "APROVADO" se o conceito for A, B, ou C e "REPROVADO" se conceito for D ou E.

11. Escrever um algoritmo/programa em Pascal que l 3 comprimentos de lados a, b, c e os ordena em ordem decrescente, de modo que o a represente o maior dos 3 lados lidos. Determine, a seguir, o tipo de tringulo que estes 3 lados formam, com base nos seguintes casos escrevendo sempre os valores lidos e uma mensagem adequada:

75

Escrever um algoritmo/programa em Pascal que l, para cada funcionrio, o seu nmero e o seu salrio atual 76

16. Escrever um algoritmo/programa em Pascal que l a hora de incio de um jogo e a hora de trmino do jogo, ambas subdivididas em 2 valores distintos, a saber: horas e minutos. Calcular e escrever a durao do jogo, tambm em horas e minutos, considerando que o tempo mximo de durao de um jogo de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 17. Escrever um algoritmo/programa em Pascal que l 5 valores para a, um de cada vez, e conta quantos destes valores so negativos, escrevendo esta informao. 18. Escrever um algoritmo/programa em Pascal que escreve os nmeros pares entre 100 e 200. 19. Escrever um algoritmo/programa em Pascal que escreve a soma dos nmeros entre 0 e 100.

e escreve o numero do funcionrio, seu salrio atua1, o percentual de seu aumento e o valor do salrio corrigido.

35. Escrever um algoritmo/programa em Pascal que l 5 pares de valores a, b, todos inteiros e positivos, um par de cada vez, e com a < b, e escreve os inteiros pares de a at b, incluindo o a e b se forem pares. 36. A srie de Fibonacci tem como dados os 2 primeiros termos da srie que so respectivamente 0 e 1. A partir deles, os demais termos so construdos pela seguinte regra:

20. Escrever um algoritmo/programa em Pascal que escreve a soma dos nmeros pares entre 0 e 100.

37. Escrever um algoritmo/programa em Pascal que l um nmero no determinado de conjuntos de valores, cada um formado pelo nmero de um aluno e suas 3 notas. Calcular, para cada aluno, a mdia ponderada com pesos respectivos de 4 para a maior nota e 3 paras as outras duas. Escrever o nmero do aluno, suas 3 notas, a mdia calculada e uma mensagem " aprovado" se nota >= 5 ou "reprovado" para nota < 5.

n n-1 n-2 Escrever um algoritmo/programa em Pascal que gera os 10 primeiros termos da Srie de Fibonacci e calcula e escreve a soma destes termos.

t =t

+t

21. Escrever um algoritmo/programa em Pascal que escreve a soma dos nmeros mltiplos de 7 entre 100 e 200. 22. Escrever um algoritmo/programa em Pascal que escreve a soma dos nmeros que no so mltiplos de 13 entre 100 e 200. 24. Escrever um algoritmo/programa em Pascal semelhante ao anterior que calcula as mdias aritmticas de cada intervalo e as escreve, juntamente com o nmero de valores de cada intervalo. 25. Escrever um algoritmo/programa em Pascal que l um nmero e calcula e escreve quantos divisores ele possui. 26. Escrever um algoritmo/programa em Pascal que l um nmero e calcula e escreve o seu fatorial. 23. Escrever um algoritmo/programa em Pascal que l 20 valores, um de cada vez, e conta quantos deles esto em cada um dos intervalos [0, 25], (25, 50], (50, 75], (75, 100], escrevendo esta informao

38. Escrever um algoritmo/programa em Pascal que l, para cada vendedor de uma empresa, o seu nmero de identificao, seu salrio fixo e o total de vendas em reais por ele efetuadas. Cada vendedor recebe um salrio fixo e uma comisso proporcional s vendas por ele efetuadas. A comisso de 3% sobre o total de vendas at $ 1.000,00 e 5% sobre o que ultrapassa este valor. Escrever, para cada vendedor, o seu nmero de identificao, o tota1 de suas vendas, seu salrio fixo e seu salrio total. 39. Escrever um algoritmo/programa em Pascal que l 5 conjuntos de 2 valores, o primeiro representando o nmero de um aluno e o segundo representando a sua altura em centmetros. Encontrar o aluno mais alto e o mais baixo e escrever seus nmeros, suas alturas e uma mensagem dizendo se o mais alto ou o mais baixo. 40. Escrever um algoritmo/programa em Pascal que gera e escreve os 5 primeiros nmeros perfeitos. Um nmero perfeito aquele que igual a soma dos seus divisores. (Ex.: 6 = l + 2 + 3; 28 = 1 + 2 + 4 + 7 + 14 etc.). 42. Escrever um algoritmo/programa em Pascal que gera os nmeros de 1000 a 1999 e escreve aqueles que divididos por 11 do um resto igual a 5.

27. Escrever um algoritmo/programa em Pascal que l um nmero e escreva se ele " primo" ou "no primo" 28. Escrever um algoritmo/programa em Pascal que escreve os nmeros mltiplos de 7 entre 100 e 200, bem como a soma destes nmeros. 29. Escrever um algoritmo/programa em Pascal que l um nmero no conhecido de valores, um de cada vez, e conta quantos deles esto em cada um dos intervalos [0, 50], (50, 100], (100,200]. O programa deve encerrar quando for informado um valor fora dos intervalos. 30. Escrever um algoritmo/programa em Pascal que l um nmero no determinado de valores para m, todos inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui e escrever esta informao. Se m for mpar e menor do que 12 calcular e escrever o fatorial de m. Se m for mpar e maior ou igua1 a 12 calcular e escrever a soma dos inteiros de l at m.

41. Escrever um algoritmo/programa em Pascal que l 50 valores, um de cada vez, e encontra e escreve o maior deles. 43. Escrever um algoritmo/programa em Pascal que l um valor N e calcula e escreve os 20 primeiros termos da srie: 1 + 1/x2 + 1/x3 + 1/x4 + ... 44. Escrever um algoritmo/programa em Pascal que calcula e escreve o produto dos nmeros primos entre 92 e 1478. 45. Escrever um algoritmo/programa em Pascal que l N, inteiro e positivo e calcula e escreve o termo de ordem N da sucesso abaixo: ordem: 1 2 3 4 5 6 7 8 ... sucesso: 1 0 5 6 11 12 17 18 ...

31. Escrever um algoritmo/programa em Pascal que l um nmero no determinados de valores a, todos inteiros e positivos, um de cada vez, e calcule e escreva a mdia aritmtica dos valores lidos, a quantidade de valores pares, a quantidade de valores impares, a percentagem de valores pares e a percentagem de valores mpares. 32. Escrever um algoritmo/programa em Pascal que escreve os nmeros primos entre 100 e 200, bem como a soma destes nmeros. 34. Escrever um algoritmo/programa em Pascal que l 10 valores para n, um de cada vez, todos inteiros e positivos, e para cada n lido, escreva a tabuada de 1 at n de n. 1 x n = n 2 x n = 2n ... n x n = n2 33. Escrever um algoritmo/programa em Pascal que l 5 conjuntos de 4 valores a, b, c, d, um conjunto por vez e os escreve assim como foram lidos. Em seguida, ordene-os em ordem decrescente e escreva-os novamente.

46. Supondo que a populao de um pas A seja da ordem de 90.000.000 de habitantes com uma taxa anual de crescimento de 3,1% e que a populao de um pas B seja de 200.000.000 de habitantes com uma taxa anua1 de crescimento de 1,5%, escrever um algoritmo/programa em Pascal que calcula quantos anos sero necessrios para que a populao do pas A ultrapasse a do pas B, mantidas as taxas atuais de crescimento. 47. Escrever um algoritmo/programa em Pascal que l um vetor V[6] e o escreve. Conte, a seguir quantos valores de V so negativos e escreva esta informao. 48. Escrever um algoritmo/programa em Pascal que l um vetor X(100) e o escreve. Substitua, a seguir, todos os valores nulos de X por 1 e escreva novamente o vetor x 49. Escrever um algoritmo/programa em Pascal que l um vetor C[50] e o escreve. Encontre, a seguir, o maior elemento de C e o escreva. 50. Escrever um algoritmo/programa em Pascal que l um vetor N[80] e o escreve. Encontre, a seguir, o menor elemento e a sua posio no vetor N e escreva: o menor elemento de n = , M, e a sua posio = , P.

77

78

51. Escrever um a1goritmo que l um vetor A[15] e o escreve. Ordene, a seguir os elementos de A em ordem crescente e escreva novamente A. 52. Escrever um algoritmo/programa em Pascal que l um vetor N[20] e o escreve. Troque, a seguir, o 1 elemento com o ltimo, o 2 com o penltimo, etc., at o 10 com o 11 e escreva o vetor N assim modificado. 54. Escrever um algoritmo/programa em Pascal que l um vetor N[20] e o escreve. Troque, a seguir, o 1 elemento com 11, o 2 com o 12, etc., at o 10 com o 20 e escreva o vetor assim modificado.

1.

Escrever um algoritmo/programa em Pascal que l uma matriz M(6,6) e calcula as somas das partes hachuriadas.

53. Escrever um algoritmo/programa em Pascal que l um vetor K(20) e o escreve. Troque, a seguir, os elementos de ordem mpar com os de ordem par imediatamente seguintes e escreva o vetor k modificado. 55. Escrever um algoritmo/programa em Pascal que l um vetor G[20] (gabarito) e a seguir l um nmero no determinado de nmeros de alunos e vetores R[20] (resposta), um nmero e um vetor R de cada vez. O nmero representa o nmero de um aluno e o vetor R representa o conjunto de respostas daquele aluno. Para cada aluno calcular o n de acertos e ca1cular a nota. nota = nmero de acertos * 0.5 Escrever o n do aluno, sua nota e a mensagem " aprovado" se tiver nota maior ou igual a 5 ou " reprovado" se a nota for menor do que 5. 56. Escrever um algoritmo/programa em Pascal que l 2 vetores K[10] e N[10] e os escreve. Crie, a seguir, um vetor M que seja a diferena entre K e N (M = K - N) e escreva o vetor M. 57. Escrever um algoritmo/programa em Pascal que l um vetor G[13] que o Gabarito de um teste da loteria esportiva, contendo os valores 1 (coluna 1), 2(coluna 2), e 3(coluna do meio). Ler, a seguir, para cada apostador, o n de seu carto e um vetor Resposta R[13]. Verificar para cada apostador o n de acertos e escrever o n do apostador e seu nmero de acertos. Se tiver 13 acertos, acrescentar a mensagem: "ganhador, parabns!". Escrever a matriz M e as somas calculadas

2.

3. 4. 5. 6.

Escrever um algoritmo/programa em Pascal que l uma matriz M(10,10) e a escreve. Troque, a seguir: a linha 2 com a linha 8. a coluna 4 com a coluna 10 a diagonal principal com a secundria a linha 5 com a coluna 10 Escreva a matriz assim modificada.

Escrever um algoritmo/programa em Pascal que l uma matriz M(6,6) e um valor A e multiplica a matriz M pelo valor A e coloca os valores da matriz multiplicados por A em um vetor de V(36) e escreve no final o vetor V. Escrever um algoritmo/programa em Pascal que l uma matriz M(5,5) e cria 2 vetores SL(5), SC(5) que contenham respectivamente as somas das linhas e das colunas de M. Escrever a matriz e os vetores criados. Escrever um algoritmo/programa em Pascal que l uma matriz A(12,13) e divida todos os 13 elementos de cada uma das 12 linhas de A pelo valor do maior elemento em mdulo daquela linha. Escrever a matriz A lida e a matriz A modificada.

58. Escrever um algoritmo/programa em Pascal que l, um vetor V[20] e o escreve. Compacte, a seguir, o vetor Y, retirando dele todos os valores nulos ou negativos e escreva o vetor compactado. 60. Escreva um algoritmo/programa em Pascal que l um conjunto de 30 valores e os coloca em 2 vetores conforme forem pares ou impares. O tamanho dos vetores de 5 posies. Se algum vetor estiver cheio, escreve-lo. Terminada a leitura escrever o contedo dos 2 vetores. Cada vetor pode ser preenchido tantas vezes quantas for necessrio.

59. Escrever um algoritmo/programa em Pascal que l um vetor V(20) e o escreve. Retire, a seguir, os elementos em duplicata, compactando o vetor Y, e escrevendo o vetor compactado.

7.

Escrever um algoritmo/programa em Pascal que l uma matriz A(8,8) sem elementos duplicados e a escreve. Ler, a seguir, um n no determinado de valores N e verifique para cada N lido se o valor de N est ou no na matriz A. Se estiver, encerrar a pesquisa escrevendo o valor e a mensagem: " Foi encontrado na posio:", caso contrrio escrever o valor e a mensagem: O valor no est na matriz A. Na teoria de Sistemas define-se como elemento mnimax de uma matriz, o menor elemento da linha em que se encontra o maior elemento da matriz. Escrever um algoritmo/programa em Pascal que l uma matriz A(10,10) e determina o elemento mnimax desta matriz, escrevendo a matriz A e a posio do elemento mnimax.

61. Escrever um algoritmo/programa em Pascal que l o 1 termo e a razo de uma progresso aritmtica e gera os vinte termos seguintes desta progresso, armazenando-os em 2 vetores de 10 elementos cada, no 1 os termos de ordem mpar de gerao e no 2 os de ordem par de gerao. Escreva a seguir os 2 vetores de forma que os termos apaream na ordem em que foram gerados. 62. Escrever um algoritmo/programa em Pascal que gera os 10 primeiros nmeros primos acima de 100 e os armazena em um vetor X(10) escrevendo, no final, o vetor X. 63. Escreva um algoritmo/programa em Pascal que l uma matriz M(5,5) e calcula as somas: a) da linha 4 de M b) da coluna 2 de M c) da diagonal principal d) da diagonal secundria e) de todos os elementos da matriz Escreva estas somas e a matriz.

8. 9.

Escrever um algoritmo/programa em Pascal que l uma matriz N(15,5) e a escreve. Verifique, a seguir, quais os elementos de M que esto repetidos e quantas vezes cada um deles est repetido. Escrever cada elemento repetido com uma mensagem dizendo a quantidade de vezes que aparece M. Escrever um subalgoritmo/programa em Pascal TROCA (x, y, z, p) que troca entre si os contedos de: x e y, se p = 1 y e z, se p = 2 x e z, se p = 3.

10. Escrever um algoritmo/programa em Pascal que l um vetor Y(30) e o escreve. Conte a seguir, quantos valores iguais a A esto neste vetor e escreva esta informao. Crie a seguir um vetor X contendo todos os elementos de V diferentes de A e escreva este vetor compactado de V. Utilize subalgoritmo/subprograma para ler e escrever vetores, bem como, para contar o nmero de valores A e para criar o vetor X. 11. Uma matriz quadrada dita simtrica se para todo i e j, o elemento (i, j) sempre igual ao elemento (j,i). Escrever um subalgoritmo/subprograma que verifica se uma matriz ou no simtrica. 12. Logo aps o surgimento dos computadores, os mesmos foram usados principalmente para clculos cientficos. Como seu aparecimento se deu em pleno perodo de guerras, um dos primeiros clculos foi o da trajetria de projteis. Se um projtil atirado com uma velocidade inicial V(m/s) a um ngulo de inclinao T(radianos), sua

79

80

13. Escrever um subalgoritmo/subprograma em Pascal que recebe um vetor que pode ter elementos em duplicata e altera o vetor recebido, substituindo os elementos repetidos por 0, retornando o vetor modificado e o nmero de modificaes feitas. Obs.: Substituir por 0 s a segunda ocorrncia dos valores repetidos. 14. Escrever um algoritmo/programa em Pascal que l 2 vetores x e y e chama um subalgoritmo/subprograma em Pascal para calcular o produto de X por Y. 15. Um quadrado mgico de ordem n (sendo n um nmero impar) um arranjo de nmeros de 1 a n em uma matriz quadrada de tal modo que a soma de cada linha, coluna e diagonal a mesma.
15 16 22 3 9 8 14 20 21 2 1 7 13 19 25 24 5 6 12 18 17 23 4 10 11

posio no plano vertica1 x, j, no tempo t(segundos) calculado pelas frmulas: x = (V cos T)t j = (V sen T)t - 1/2 gt 2 onde 0 < T < 5/2 g = 9,8 m/s2 Escrever um subalgoritmo/subprograma que recebe T e Y e lista as coordenadas x, j em intervalos de 0.1s para um tiro particular, terminando quando o projti1 atingir o solo.

APNDICE B - AMBIENTE DO TURBO PASCAL


1 - Entre no diretrio do Turbo Pascal 2 - Ative o compilador (digite Turbo) 3 - Observe os principais menus

Passos:

FILE

New Open Save Save as Save all Change dir Print Dos shell Quit Undo Redo Cut Copy Paste Clear Show Clipboard

cria uma janela de edio vazia permite carregar textos j gravados grava o contedo da janela corrente pergunta o nome do arquivo antes de gravar grava o contedo de todas as janelas permite trocar o diretorio de trabalho imprime o contedo da janela ativa permite acesso ao DOS encerra o programa Desfaz o ltimo comando de edio Refaz uma operao desfeita pela opo Undo Remove o texto selecionado transferindo-o para a rea de transferncia Copia o texto selecionado para a rea de transferncia Copia o texto da rea de transferncia para a posio corrente do cursor Remove o texto selecionado Exibe o contedo que est na rea de transferncia

A figura mostra um quadrado mgico de ordem 5. A regra para ger-lo relativamente fcil de observar: Comece com o 1 no meio da primeira linha, ento siga para cima e para a esquerda diagonalmente (quando sair do quadrado suponha que os lados superior e inferior esto unidos ou que os lados da direita e da esquerda esto unidos, conforme for o caso) em cada quadrado que passar coloque o valor do quadrado anterior mais 1 (um), quando atingir um quadrado j ocupado, desa um quadrado e continue seguindo a diagonal at ter preenchido todos os quadrados. Escrever um programa em Pascal que l 5 nmeros impares, um de cada vez, e gere e escreva para o nmero lido, o seu quadrado mgico.

EDIT

Experimente usar o depurador:


N N N N N

Digitando <CTRL>+<F3> exibido o status da pilha do sistema; Digitando <CTRL>+<F4> obtm-se uma janela onde possvel consultar o valor das variveis; Digitando <ALT>+<F5> voc tem acesso "tela real" do seu programa Refaa alguns exerccios, se possvel utilizando uma funo para cada um dos tens solicitados - Use variveis locais em cada uma das funes - Digite-o, teste-o e execute-o.

A tecla <F8> permite que voc execute o programa passo a passo;

SEARCH

Execute os programas passo a passo, porm, utilizando a janela de "watch" para observar o valor das variveis: ative a janela de watch" com a opo "watch" do menu "WINDOW', insira variveis na janela com a tecla <ins>; remova variveis da janela com a tecla <del>; Procure observar o escopo das variveis a medida que voc percorre as funes - Para fazer o depurador "entrar nas funes use a tecla <F7> ao invs de <F8>.

RUN

Find Procura no programa uma seqncia de caracteres Replace Substitui uma determinada seqncia de caracteres por outra Search Again Permite que seja repetido o ltimo comando de busca ou de troca Go to line number Desloca o cursor para uma determinada linha do programa Show last compiler error Mostra o ltimo erro de compilao Find eror permite que se procure no programa pelo endereo mostrado quando ocorre um ero de execuo do programa Find procedure permite a procura de um procedimento durante a depurao de um programa Run Step over permite executar o programa que est sendo editado executa um programa rotina por rotina, se for um comando simples executa a linha, se for um subprograma, executa-o na sua totalidade executa um programa linha a linha, inclusive nos subprogramas, permitindo a sua depurao permite a interrupo da execuo de um programa e liberao da memria quando se est depurando o mesmo Permite que sejam passados parmetros no ambiente, de maneira similar aos parmetros da linha de comando compila o programa que est ativo na janela do ambiente

Trace Into

Program reset Parameters

COMPILE
81

Compile

82

Make

Buid a program Destination Primary file

Information

gera o programa executvel, linkando o cdigo objeto com os demais cdigos externos recompila o programa e todos os que a ele estiverem ligados determina se o programa dever ser compilado em memria ou em disco - Se for escolhido disco, ser gerado o arquivo .EXE com o mesmo nome do arquivo que estiver sendo compilado permite determinar qual ser o arquivo principal, no caso de compilao de programas compostos por mais de um programa fonte abre uma janela que mostra as informaes do ltimo programa compilado coloca ou retira um ponto de exame, onde o programa ir parar durante a execuo abre uma janela onde so mostradas as seqncias de chamadas de rotinas, exibindo seus nomes e valores passados como parmetros abre uma janela com o contedo dos registradores permite que coloquemos uma janela de vigia watches como ativa, onde podemos acompanhar as variveis do programa que est sendo executado permite que seja aberta uma janela onde poder ser exibida a tela de sada, somente no modo texto permite que seja exibida a tela do usurio, durante a depurao avalia expresses, constantes ou variveis permite a incluso de expresses na janela vigia permite a incluso de um ponto de parada quando for executado o programa

APNDICE C - MENSAGENS DE ERRO DO TURBO PASCAL


1 - No existe espao em memria 2 - Identificador esperado 3 - Identificador desconhecido 4 - Identificador j existente 5 - Erro de sintaxe 6 - Erro na constante real 7 - Erro na constante integer 8 - Constante string excede a linha 9 - Excesso de arquivos aninhados 10 - Fim de arquivo no esperado 11 - Linha muito longa 12 - Espera a identificao do tipo 13 - Muitos arquivos abertos simultaneamente 14 - Nome de arquivo invlido 15 - Arquivo no encontrado 16 - Disco cheio 17 - Diretiva de compilao invlida 18 - Excesso de arquivos 19 - Ponteiro nunca antes declarado 20 - Identificador de varivel esperada 21 - Erro de tipo 22 - Estrutura muito larga 23 - Faixa de valores invlida para a faixa 24 - Componentes definidos em outro arquivo ou objeto 25 - Tamanho de string invlido 26 - Tipo incompatvel 27 - Faixa de valores invlida 28 - Limite inferior maior que o superior 29 - Tipo escalar esperado 30 - Constante inteira esperada 31 - Constante esperada 32 - Constante real ou inteira esperada 33 - Ponteiro esperado 34 - Tipo do resultado da funo invlido 35 - Espera um Label 36 - Espera BEGIN 37 - Espera END 38 - Espera expresso Integer 39 - Espera expresso Qrdinal 40 - Espera EXPRESSO Boolean 41 - Operando incompativel com operador 42 - Erro na expresso 43 - Associao ilegal 44 - Identificador de campo esperado 45 - Arquivo objeto muito grande 46 - EXTERN indefinido 47 - Registro invlido no objeto 48 - Segmento de cdigo muito grande 49 - Segmento de dados muito largo 50 - Espera DO Erros de Compilao 51 - Definio de PUBLIC invlida 52 - Definio de EXTRN invlida 53 - Excesso de definies em EXTRN 54 - Espera OF 55 - Espera INTERFACE 56 - Referncia relocvel invlida 57 - Espera THEN 58 - Espera TO ou DOWNTO 59 - Forward indefinido 60 - Excesso de procedures 61 - Typecast indefinido 62 - Diviso por zero 63 - Tipo de arquivo invlido 64 - Tipo de varivel no pode ser usado em READ ou WRITE 65 - Varivel ponteiro esperada 66 - Varivel String esperada 67 - Expresso String esperada 68 - Referncia Circular em unit 69 - Nome de Unit incompatvel 70 - Verso da Unit incompativel 71 - Nome de unit duplicado 72 - Erro no formato da Unit 73 - Implementation esperada 74 - Tipos incompatveis em CASE 75 - Varivel registro esperada 76 - Constante fora da faixa 77 - Varivel de arquivo esperada 78 - Expresso de ponteiro esperada 79 - Expresso Integer ou Real esperada 80 - Label no est no bloco corrente 81 - Label definida anteriormente 82 - Label indefinida 83 - Argumento @@ invlido 84 - UNIT esperada 85 - ; esperado 86 - : esperado 87 - , esperado 88 - "(" esperado 89 - ) esperado 90 - = esperado 91 - := esperado 92 - [ ou ( - esperado 93 - ] ou -) esperado 94 - - esperado 95 - - - esperado 96 - Excesso de variveis 97 - Varivel de controle do FOR invlida 98 - Varivel Integer esperada 99 - Arquivo ou procedimento no permitido neste ponto

DEBUG

Breakpoint Call Stack Register Watch Output

User screen Evaluate/Modify Add Watch Add breakpoint

83

84

100 - Tamanho da String incompativel 101 - Erro de ordenao 102 - Constante String esperado 103 - Varivel Integer ou real esperada 104 - Varivel Ordinal esperada 105 - Erro em INLINE 106 - Expresso Character esperada 107 - Excesso de itens relocados 108 - Estouro em operao aritmtica 109 - No pode ser utilizado em FOR, WHILE ou REPEAT 110 - Tabela de informao de Debug estourou 112 - Constante CASE fora da faixa 113 - Erro na sentena 114 - Procedimento de interrupo no pode ser chamado 116 - A diretiva de compilao 8087 deve estar ativada 117 - Endereo do destino no encontrado 118 - Incluso de arquivos no permitida neste ponto 119 - Mtodo de hierarquia no pode ser utilizado aqui 121 - Qualificao invlida 122 - Referncia de varivel invlida 123 - Excesso de simblicos 124 - Parte de comando muito grande 126 - Arquivos devem ter parmetro VAR 127 - Excesso de simblicos condicionais 128 - Diretiva condicional em local no apropriado 129 - Falta diretiva ENDIF 130 - Erro na definio condicional 131 - Cabealho incompativel com definio anterior 132 - Erro crtico em disco 133 - No possvel avaliar esta expresso 134 - Expresso terminada incorretamente 135 - Formato especificado invlido 12345612 15 16 17 Nmero de funo invlido Arquivo no encontrado Path no encontrado Muitos arquivos abertos simultanemente Erro de acesso a arquivo Handle do arquivo invlido Cdigo de acesso de arquivo invlido Nmero de drive invlido Diretrio atual no pode ser removido No pode haver renomeao de arquivos entre discos No h mais arquivos Erro de leitura em disco Erro de gravao em disco Arquivo no assinalado Arquivo fechado Erros de Execuo

136 - Referncia indireta invlida 137 - No so permitidas variveis estruturadas neste local 138 - No pode avaliar falta Unit System 139 - No pode acessar este simblico 140 - Qperao com ponto flutuante invlida 141 - No pode compilar Overlays em memria 142 - Espera varivel Procedure ou Function 143 - Referncia a Procedure ou Function invlida 144 - No pode tornar esta Unit em Overlay 145 - Excesso de aninhamento 146 - Erro em acesso a arquivo 147 - Tipo Object esperado 148 - Objeto Local no permitido 149 - Virtual esperado 150 - Identificador Method esperado 151 - Virtual constructors no so permitidos 152 - Identificador Constructor esperado 153 - Identificador Destructor esperado 154 - Um nico Fail dentro de constructors 155 - Operao invlida entre operando e operadores 156 - Refercia de memria esperada 157 - No pode somar ou subtrair em simblicos relocveis 158 - Combinao invlida no registro 159 - Instrues do 286/287 no habilitadas 160 - Referncia a simblico invlida 161 - Erro na gerao do cdigo 162 - ASM esperado 163 - Mtodo dinmico com ndice duplicado 164 - Identificador de "resourse" duplicado 165 - ndice "export"duplicado ou invlido 166 - Procedimento ou funo esperada 167 - Smbolo no exportvel 168 - Nome de "export" duplicado 169 - Cabealho de arquivo executvel muito grande 170 - Excesso de segmentos 104 105 106 150 151 152 154 156 157 158 159 160 161 162 200 201 Arquivo no foi aberto para input Arquivo no foi aberto para output Formato numrico invlido Disco protegido Erro intemo do dispositivo do DOS Drive no est pronto Erro na CRC Erro de posicionamento em disco Erro de tipo de disco Setor no encontrado Impressora sem papel Falta dispositivo de saida Falta dispositivo de leitura Falta de equipamento Diviso por zero Erro na checagem da faixa

202 203 204 205 206 207 208 209 -

Estouro na pilha de Stack Estouro Heap de memria Operao invlida com ponteiro Estouro em operao com ponto flutuante Erro de underflow Operao invlida com ponto flutuante Gerenciador de Overlay no instalado Erro de leitura em um arquivo Overlay

210 211 212 213 214 215 216 -

Objeto no inicializado Chamada em um mtodo abstrato Erro no registro Stream ndice da Collection fora de faixa Estouro no objeto Collection" Erro de estouro em operao aritmtica Falta proteo geral

18 100 101 102 103 -

Você também pode gostar