Você está na página 1de 11

000000000000000000000000000000000000000000000000000000000000000000000a506c007b400b40080001230000000000000000000000000000 27 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005902000000 78ca1bcaecfb56a7bfa1f88633cf367ef5fe4f9b19f16abd559ae627344fca59af3e7f3e4c387fbc77fe6b2123133316bc944d6f503caacf4cecd850347bea353 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf 000ffffdfdfdfffffffbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb O Pascal uma linguagem surgida a partir de um projeto experimental

l do professor Niklaus Wirth, da Escola

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal

2. FUNDAMENTOS DO OBJECT PASCAL

Politcnica de Zurique (a mesma escola onde Einstein estudou). O nome da linguagem uma homenagem ao filsofo francs Blaise Pascal, que inventou uma mquina de calcular mecnica. A descrio formal do Pascal foi publicada em 1971. O Pascal nasceu dentro do conceito de programao estruturada, muito discutida na Europa durante os anos 60 e hoje difundido pelo mundo e incorporado em todas as linguagens modernas (C, C++, Java, Visual Basic, etc.). A idia principal do Pascal a ordem, administrada atravs de um conceito de dados baseado em tipos, requerendo declaraes explcitas de todas as variveis e controles do programa. Parte da popularidade do Pascal se deve ao compilador Turbo Pascal, da Borland, lanado em 1985. A linguagem usada no Delphi o sucessor do Turbo Pascal, conhecido como Object Pascal.

2.1. INSTRUES CONDICIONAIS


2.1.1. INSTRUES IF
Este o tipo mais bsico de instruo condicional e pode ser usada para executar um trecho de programa caso uma condio for satisfeita (if then), ou, mais genericamente, para escolher entre duas instrues (if-thenelse). A sintaxe geral da instruo if a seguinte: if condio then [bloco de instrues 1] else [bloco de instrues 2]; Note que no deve haver ponto-e-vrgula aps o primeiro bloco de instrues. Isto ocorre porque a instruo ifthen-else deve ser lida como uma linha inteira. Como teste, inicie um novo projeto e acrescente duas CheckBoxes e trs Botes de Comando no formulrio, conforme a Figura 2.1 a seguir. No necessrio mudar os nomes ou legendas dos componentes. Dando um duplo clique no primeiro boto e escreva o seguinte cdigo: procedure TForm1.Button1Click(Sender: TObject); begin {instruo if simples} if CheckBox1.checked then ShowMessage ('CheckBox1 est selecionada ') end;

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


28 Este um if simples. Durante a execuo, se voc clicar sobre o boto 1, e se CheckBox1 estiver selecionada, um aviso ser emitido. Mas nada acontece caso CheckBox1 no esteja selecionada. Para contornar este Figura 2.2 Teste do Case problema, escreva o seguinte cdigo no evento click do boto 2: procedure TForm1.Button2Click(Sender: TObject); begin {instruo if-else} if CheckBox1.checked then ShowMessage ('CheckBox1 est selecionada') else ShowMessage ('CheckBox1 no est selecionada ') end; Agora um aviso continuar a ser emitido caso CheckBox1 esteja selecionada. Caso contrrio (else), um aviso ser emitido com a mensagem de que CheckBox1 no est selecionada. Voc capaz de imaginar o que aconteceria se as duas caixas estivessem selecionadas? Neste caso, apenas o primeiro bloco ser executado. Como o programa verifica que a primeira condio verdadeira, ento a segunda, dentro da lgica do if-then-else, no tem importncia. Assim, a mensagem recebida seria apenas a de que CheckBox1 est selecionada. Para testar ambas as condies, escreva o cdigo a seguir no boto 3: procedure TForm1.Button3Click(Sender: TObject); begin if CheckBox1.checked and CheckBox2.checked then ShowMessage('Ambas as caixas esto selecionadas') end; Note que usamos o operador booleano and para compor uma condio de duas partes, que s ser verdadeira se ambas as caixas estiverem selecionadas.

2.1.2. INSTRUO CASE


Se a quantidade de condies a serem verificadas for muito grande, o uso da instruo if poder acarretar em cdigos muito complexos. Neste caso melhor usar a instruo Case, que seleciona um valor dentro de uma lista de possveis valores ou intervalos de valores. Uma das limitaes da instruo Case do Pascal que estes valores devem ser de tipo ordinal, ou seja, no possvel testar literais ou nmeros reais, por exemplo. Para testar o Case, salve o projeto anterior e inicie um novo, inserindo uma caixa de edio e dois botes, conforme a Figura 2.2 abaixo.

No evento click do boto 1, escreva o seguinte cdigo: procedure TForm1.Button1Click(Sender: TObject);

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


29 var Numero: integer; begin Numero := StrToInt(edit1.text); case Numero of 1: Showmessage ('Voc digitou 1'); 2: Showmessage ('Voc digitou 2'); 3: Showmessage ('Voc digitou 3'); 4: Showmessage ('Voc digitou 4'); 5: Showmessage ('Voc digitou 5'); 6: Showmessage ('Voc digitou 6'); 7: Showmessage ('Voc digitou 7'); 8: Showmessage ('Voc digitou 8'); 9: Showmessage ('voc digitou 9'); 10: Showmessage ('voc digitou 10'); else Showmessage ('Voc digitou um nmero maior que 10'); end; end;

Note que devemos converter a propriedade text da caixa de edio, que um string, para um valor inteiro, pois no podemos testar text diretamente. Isto feito com a funo StrToInt. Podemos usar o Case tambm para testar intervalos de valores. Por exemplo, escreva o seguinte trecho no evento click do boto 2:

procedure TForm1.Button2Click(Sender: TObject); var Numero: integer; begin Numero := StrToInt(edit1.text); case Numero of 1..10: Showmessage ('Voc digitou um nmero entre 1 e 10'); 11..20: Showmessage ('Voc digitou um nmero entre 11 e 20'); 21..30: Showmessage ('Voc digitou um nmero entre 21 e 30'); 31..40: Showmessage ('Voc digitou um nmero entre 31 e 40'); 41..50: Showmessage ('Voc digitou um nmero entre 41 e 50'); else Showmessage ('Voc digitou um nmero maior do que 50'); end; end;

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


30

2.2. INSTRUES DE LAO


2.2.1. LAO FOR
A instruo for do Pascal semelhante de outras linguagens, mas no muito flexvel. No possvel estabelecer incrementos diferentes de um, embora seja possvel contar para cima e para baixo. Por exemplo, inicie um novo projeto, adicione dois botes no formulrio, e escreva o seguinte cdigo no evento click do primeiro: procedure TForm1.Button1Click(Sender: TObject); var I: integer; begin for I:=1 to 10 do ShowMessage(IntToStr(I)); end; Estamos usando a funo IntToStr para converter o nmero inteiro I para um string, pois a funo ShowMessage s exibe strings. Clicando-se sobre o boto 1 em tempo de execuo aparece uma caixa de mensagens que vai exibindo nmeros de 1 a 10. O cdigo abaixo pode ser inserido no segundo boto e exibir nmeros no sentido decrescente, isto , de 10 a 1. procedure TForm1.Button2Click(Sender: TObject); var I: integer; begin for I:= 10 downto 1 do ShowMessage(IntToStr(I)); end;

2.2.2. INSTRUES WHILE E REPEAT


A diferena entre os laos while-do e repeat-until que o cdigo da instruo repeat sempre executado ao menos uma vez. Voc pode entender essa diferena escrevendo os cdigos a seguir nos botes do projeto anterior: procedure TForm1.Button1Click(Sender: TObject); var I: integer; begin I:=0; while I < 10 do begin ShowMessage(IntToStr(I));

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


31 I:= I+1;

end; end;

procedure TForm1.Button2Click(Sender: TObject); var I: integer; begin I:=0; repeat ShowMessage(IntToStr(I)); I:=I+1; until I>10; end; Rode o programa e veja o que acontece. Algumas observaes so importantes. Primeiro, voc mesmo precisa providenciar o incremento da varivel contadora I, e esta varivel no precisa ser inteira. Segundo, a instruo while-do exige que o bloco de instrues a ser controlado fique entre um begin e um end, o que no acontece na instruo repeat-until.

2.3. VARIVEIS
A linguagem Pascal fortemente baseada em tipos de dados. O tipo de uma varivel determina os valores que esta varivel pode ter e as operaes que podem ser executadas com ela. Tambm necessrio que todas as variveis sejam declaradas antes de ser usadas, o que feito por meio da palavra-chave var. Esta declarao pode ser feita em uma unidade, em uma procedure ou para declarar variveis globais, tendo o seguinte aspecto: var Numero: Integer; Fechado: Boolean;

Uma tentativa de realizar uma operao com tipos de dados diferentes resulta em um erro de compilao. Isto aconteceria se tentssemos, por exemplo, somar Numero e Fechado. Constantes podem ser declaradas de forma semelhante, com auxlio da palavra-chave const: const

Pi = 3.141592; Nome = Alvaro;

Note que no usamos, aqui, o sinal de atribuio :=, e sim o sinal de igualdade convencional.

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


32

O Object Pascal apresenta vrios tipos de dados construdos internamente, denominados tipos pr-definidos. Tambm possvel construir outros tipos a partir dos pr-definidos. A Tabela 2.1 a seguir apresenta os tipos de dados pr-definidos. Tabela 2.1 - Tipos de dados pr-definidos do Object Pascal CATEGORIA Inteiros TIPO DE DADO ShorInt SmallInt LongInt Integer Byte Word Single Double Extended Currency Comp Real VARIAO -128 a 127 -32768 a 32767 -2147483647 a 2147483647 -2147483647 a 2147483647 0 a 255 0 a 65535 1.5 x10-45 a 3.4x1038 5.0x10-324 a 1.7x10308 3.4x10-4932 a 1.1x104932 -922337203675477.5808 922337203685477.5807 -263 a 263 2.0x10-39 a 1.7x1038 TAMANHO 1 byte 2 bytes 4 bytes 4 bytes 1 byte 2 bytes 4 bytes 8 bytes 10 bytes a 8 bytes 8 bytes 6 bytes OBSERVAES

No Delphi este tipo idntico ao LongInt.

Reais

7-8 dgitos 15-16 dgitos 19-20 dgitos 19-20 dgitos 19-20 dgitos 11-12 dgitos. Use este tipo apenas para compatibilidade com verses anteriores do Pascal

Booleano Character

Boolean AnsiChar WideChar Char ShortString AnsiString String Variant

True ou false Caracteres ANSI Caracteres Unicode Caracteres ANSI At 255 caracteres Virtualmente sem limite Virtualmente sem limite

1 byte

1 byte

No Delphi este tipo idntico ao AnsiChar

String

Variant

Em geral, idntico ao AnsiString Pode conter qualquer tipo de dados

Como o Object Pascal uma linguagem fortemente estruturada, voc no poder realizar operaes entre variveis de tipos diferentes. Ser necessrio, ento, convert-las para o tipo adequado antes de realizar a operao. A Tabela 2.2 a seguir mostra as funes de converso mais utilizadas. Tabela 2.2 - Funes de converso de tipos mais utilizadas FUNO Chr Round DESCRIO Converte um nmero ordinal em um caractere ANSI Converte um real em um inteiro, arredondando a parte decimal

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


33 Trunc Int IntToStr StrToInt StrToIntDef Val Str FloatToDecimal FloatToStr StrToFolat Converte um real em um inteiro, truncando a parte decimal Retorna a parte inteira de um argumento de ponto flutuante Converte um nmero em um string Converte um string em um inteiro, levantando uma exceo (erro) caso o string no represente um inteiro vlido Converte um string em um inteiro, usando um valor padro se o string no estiver correto Converte um string em um nmero (rotina includa para compatibilidade com o Turbo Pascal) Converte um string em um nmero, usando parmetros de formatao (rotina includa para compatibilidade com o Turbo Pascal) Converte um valor de ponto flutuante em um registro (record) incluindo sua representao decimal (expoente, dgitos, sinal) Converte um valor de ponto flutuante para sua representao string usando formatao padro Converte um string e, um valor de ponto flutuante

Alm dos tipos pr-definidos, o Object Pascal emprega a idia de tipos de dados definidos pelo usurio, que foi introduzida pela primeira vez no Pascal, no estando presente nas linguagens anteriores. Os programadores podem definir seus prprios tipos de dados por meio de construtores de tipos, tais como subintervalos (subranges), matrizes (arrays), registros (records), enumeraes, ponteiros e conjuntos. A seguir, discutiremos brevemente cada um destes tipos.

2.3.1. TIPOS ENUMERADOS


Este tipo permite que voc crie uma lista organizada de itens. Para usar um tipo voc deve antes declar-lo com a palavra reservada type. Por exemplo, um tipo enumerado que descreve os dias da semana pode ser declarado da seguinte maneira:

implementation {$R *.DFM} type Semana = (Segunda, Tera, Quarta, Quinta, Sexta, Sbado, Domingo);

Espaos em branco no so permitidos dentro de um elemento. Uma vez declarado um tipo, voc deve declarar uma varivel pertencente a este tipo. No usamos o tipo diretamente, mas sim uma varivel deste tipo. Por exemplo, vamos supor que queiramos construir um programa que fornea o nome da pessoa escalada para um planto semanal. Poderamos declarar uma varivel Plantao da seguinte forma: var Plantao : Semana;

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


34

Para atribuir valores varivel Plantao escreva simplesmente: Plantao := Segunda; Plantao := Tera; etc.

2.3.2. TIPOS SUBRANGE


O tipo subrange (subintervalo) permite que voc defina um intervalo vlido de respostas que um usurio pode inserir em um programa, tal como o nmero de horas trabalhadas em um ms, a faixa de idade dos membros de um clube, etc. Um subintervalo pode conter os seguintes tipos: boolean, char, integer e tipos enumerados. A declarao de um tipo subintervalo similar quela de um tipo enumerado: type Salario_faixa1 = 500 .. 1000;

Note que usamos dois pontos para separar os limites do suintervalo, e no vrgulas. Isto permite que o compilador identifique o tipo como um subintervalo e no um tipo enumerado. A seguir, devemos declarar uma varivel como pertencente ao tipo declarado anteriormente: var Salario_Ana : Salario_faixa1;

Quando um programa usando subintervalos executado, e se um valor atribudo a um tipo subintervalo estiver fora do intervalo, o programa gerar um erro de tempo de execuo. Veremos mais tarde como capturar este erro de modo a avisar ao usurio que ele deve entrar novamente com os dados, sem que o programa seja abortado. Para que o teste de intervalo seja executado, voc deve antes incluir a diretiva de compilao {$R+} no programa, da seguinte forma: procedure Tform1.ButtonClick (Sender : Tobject); {$R+} type Salario_faixa1 = 500 .. 1000;

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


35 var

Salario_Ana : Salario_faixa1;

2.3.3. TIPOS ARRAY


Arrays so matrizes, isto , colees ordenadas de elementos de um mesmo tipo de dados, que faz uso de um ndice para dar acesso aos itens da coleo. Como array j um tipo, basta declarar uma varivel como array, da seguinte forma: var Dia_da_semana: array [1..7] of string; Dia_do_ms: array [1..31] of integer;

Note que separamos os valores mnimo e mximo de um array por dois pontos. Os arrays declarados acima so unidimensionais, isto , seus elementos podem ser dispostos formando uma nica linha. Para atribuir valores a um array proceda da seguinte forma: begin Dia_da_semana Dia_da_semana Dia_da_semana Dia_da_semana Dia_da_semana Dia_da_semana Dia_da_semana [1] [2] [3] [4] [5] [6] [7] := := := := := := := Domingo; Segunda-feira; Tera-feira; Quarta-feira; Quinta-feira; Sexta-feira; Sbado;

end;

Para armazenar valores de um array em outra varivel, podemos escrever: var begin end; Dia := Dia_da_semana [1];

Dia : string;

e assim por diante. A declarao de arrays multidimensionais semelhante de arrays unidimensionais. Por exemplo, para declarar um array a ser usado como uma tabela 30x30, escrevemos:

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


36

var Bi_array: array [1..30,1..30] of currency;

Note que os elementos de um array podem pertencer a qualquer tipo de dados pr-definido ou definido pelo usurio. Os elementos de um array podem ser at mesmo outro array, mas por enquanto ficamos por aqui.

2.3.4. TIPOS RECORD (REGISTRO)


O tipo de dados Record provavelmente o mais verstil disposio, pois pode conter tipos de dados heterogneos. Por exemplo, a folha de pagamento de uma empresa conter dados do tipo string (nome, endereo, etc), dados do tipo currency (salrio), dados do tipo TDateTime (data de contratao) e assim por diante. No poderamos usar um array, pois este tipo s pode conter dados de um mesmo tipo. O tipo Record resolve o problema e, mais uma vez, devemos declarar o tipo de dados antes de us-lo: type

end; var begin

Folha_Pgto = Record Nome: String; Data_Cont : TDateTime; Salario: currency; Folha_Abril: Folha_Pgto; Folha_Abril.Nome := Ana Paula Magalhes; Folha_Abril.Data_Cont := 10/02/1998; Folha_Abril.Salrio := 2200;

end;

Note que voc deve usar um ponto para separar o nome do Record do nome do campo a que voc est se referindo. O Object Pascal, e vrias linguagens modernas fornecem uma maneira mais fcil de executar esta operao, usando a instruo With: begin With Folha_Abril do begin Nome := Ana Paula Magalhes; Data_Cont := 10/02/1998; Salrio := 2200; end;

end;

Anotaes:

Alvaro Augusto de Almeida

DELPHI 4.0 Captulo 2: Fundamentos do Object Pascal


37 Aqui, o primeiro end da instruo With. A documentao do Object Pascal sugere que voc use With quando for possvel, pois isto diminui o tempo de execuo. Os tipos Record tambm podem conter arrays e so bastante usados quando se requer bancos de dados simples. Veremos que o Delphi permite a implementao de estruturas de dados bastante complexas, usando bancos de dados Dbase, Paradox, Access, etc. Contudo, vez por outra no necessria toda esta sofisticao e conveniente optar pelos tipos Record. Alm disso, nesses casos simples no ser necessrio instalar os drivers de bancos de dados.

COFFEE BREAK: O LADO CMICO DA INFORMTICA 10 Possveis usos para um PC falecido


Quando aquele seu antigo PC entrar em coma profundo e irreversvel, em decorrncia de falncia mltipla dos rgos internos, voc dever se preparar para o fim certo que se aproxima. Mas no se desespere! Aqui vo algumas dicas para implementar uma possvel nova encarnao para o seu venervel companheiro: 1. Remova o ventilador e use-o para amenizar as (poucas) ondas de calor em Curitiba; 2. Use o HD para praticar frisbi; 3. Remova todos os chips, dobre ou corte os terminais, e use-os para colocar debaixo dos ps de mesas e cadeiras bambas; 4. Aproveite todos os fios para consertar culos que perderam parafusos; 5. O dissipador de calor de um Pentium pode ser usado como acessrio de massageadores, se voc tiver um; 6. Desmonte as placas de fiao impressa e use os capacitores, resistores, etc como decorao de rvores de Natal; 7. O alto-falante pode ser facilmente adaptado em seu rdio. Estaes AM ficaro bem melhor; 8. O tubo de raios catdicos pode ser usado como bia na piscina ou na praia; 9. Os cabos de fora podem ser usados como cinto ou suspensrios; 10. Remova todos os parafusos e use-os para fabricar um chocalho para o carnaval.

Anotaes:

Alvaro Augusto de Almeida