102
Página anterior Próxima página Pascal - Guia Rápido Anúncios Pascal - Visão geral Pascal é uma linguagem de alto nível de uso geral que foi originalmente desenvolvida por Niklaus Wirth no início dos anos 70. Foi desenvolvido para ensinar programação como disciplina sistemática e desenvolver programas confiáveis e eficientes. Pascal é uma linguagem baseada em Algol e inclui muitas construções de Algol. O Algol 60 é um subconjunto do Pascal. Pascal oferece vários tipos de dados e estruturas de programação. É fácil entender e manter os programas Pascal. Pascal cresceu em popularidade na arena de ensino e acadêmica por várias razões: Fácil de aprender. Linguagem estruturada. Produz programas transparentes, eficientes e confiáveis. Pode ser compilado em uma variedade de plataformas de computador. Pascal tem os seguintes recursos - Pascal é uma linguagem fortemente tipada. Oferece ampla verificação de erros. Ele oferece vários tipos de dados, como matrizes, registros, arquivos e conjuntos. Oferece uma variedade de estruturas de programação. Suporta programação estruturada através de funções e procedimentos. Suporta programação orientada a objetos. A linguagem Pascal foi nomeada por Blaise Pascal, matemático francês e pioneiro no desenvolvimento de computadores. Niklaus Wirth concluiu o desenvolvimento da linguagem de programação Pascal original em 1970. Recursos do idioma Pascal Fatos sobre Pascal

Guia rápido de Pascal

Embed Size (px)

Citation preview

Page 1: Guia rápido de Pascal

Página anterior Próxima página

Pascal - Guia RápidoAnúncios

Pascal - Visão geralPascal é uma linguagem de alto nível de uso geral que foi originalmente desenvolvidapor Niklaus Wirth no início dos anos 70. Foi desenvolvido para ensinar programaçãocomo disciplina sistemática e desenvolver programas confiáveis e eficientes.

Pascal é uma linguagem baseada em Algol e inclui muitas construções de Algol. O Algol60 é um subconjunto do Pascal. Pascal oferece vários tipos de dados e estruturas deprogramação. É fácil entender e manter os programas Pascal.

Pascal cresceu em popularidade na arena de ensino e acadêmica por várias razões:

Fácil de aprender.

Linguagem estruturada.

Produz programas transparentes, eficientes e confiáveis.

Pode ser compilado em uma variedade de plataformas de computador.

Pascal tem os seguintes recursos -

Pascal é uma linguagem fortemente tipada.

Oferece ampla verificação de erros.

Ele oferece vários tipos de dados, como matrizes, registros, arquivos e conjuntos.

Oferece uma variedade de estruturas de programação.

Suporta programação estruturada através de funções e procedimentos.

Suporta programação orientada a objetos.

A linguagem Pascal foi nomeada por Blaise Pascal, matemático francês epioneiro no desenvolvimento de computadores.

Niklaus Wirth concluiu o desenvolvimento da linguagem de programação Pascaloriginal em 1970.

Recursos do idioma Pascal

Fatos sobre Pascal

Page 2: Guia rápido de Pascal

Pascal baseia-se no estilo estruturado em bloco da linguagem de programaçãoAlgol.

Pascal foi desenvolvido como uma linguagem adequada para o ensino deprogramação como uma disciplina sistemática, cujas implementações poderiamser confiáveis e eficientes.

O padrão ISO 7185 Pascal foi originalmente publicado em 1983.

Pascal foi a principal linguagem de alto nível usada para desenvolvimento naApple Lisa e nos primeiros anos do Mac.

Em 1986, a Apple Computer lançou a primeira implementação do Object Pascal,e em 1993, o Comitê de Padrões Pascal publicou uma Extensão Orientada aObjetos para Pascal.

O Pascal permite que os programadores definam tipos de dados estruturados complexose construam estruturas de dados dinâmicas e recursivas, como listas, árvores egráficos. O Pascal oferece recursos como registros, enumerações, sub-intervalos,variáveis alocadas dinamicamente com ponteiros e conjuntos associados.

Pascal permite definições de procedimentos aninhados para qualquer nível deprofundidade. Isso realmente fornece um ótimo ambiente de programação paraaprender programação como uma disciplina sistemática baseada nos conceitosfundamentais.

Entre as implementações mais surpreendentes de Pascal estão -

Skype

Comando total

TeX

Macromedia Captivate

Apple Lisa

Vários jogos para PC

Sistemas Embarcados

Pascal - Ambiente ConfiguradoExistem vários compiladores e intérpretes Pascal disponíveis para uso geral. Entre estessão -

Turbo Pascal - fornece um IDE e um compilador para executar programasPascal em CP / M, CP / M-86, DOS, Windows e Macintosh.

Delphi - fornece compiladores para executar o Object Pascal e gera códigonativo para sistemas operacionais Windows de 32 e 64 bits, além de Mac OS X e

Por que usar o Pascal?

Page 3: Guia rápido de Pascal

iOS de 32 bits. A Embarcadero está planejando criar suporte para o sistemaoperacional Linux e Android.

Free Pascal - é um compilador gratuito para executar programas Pascal eObject Pascal. O compilador Free Pascal é um compilador Pascal Turbo Pascal eDelphi compatível com 32 e 64 bits para Linux, Windows, OS / 2, FreeBSD, MacOS X, DOS e várias outras plataformas.

Turbo51 - É um compilador gratuito do Pascal para a família demicrocontroladores 8051, com a sintaxe do Turbo Pascal 7.

Oxygene - É um compilador Object Pascal para as plataformas .NET e Mono.

GNU Pascal (GPC) - É um compilador Pascal composto por um front-end parao GNU Compiler Collection.

Nós estaremos usando o Free Pascal nesses tutoriais. Você pode baixar Free Pascal parao seu sistema operacional a partir do link: Download Free Pascal

A distribuição Linux do Free Pascal vem em três formas -

uma versão tar.gz , também disponível como arquivos separados.

uma versão .rpm (Red Hat Package Manager).

uma versão .deb (Debian).

Código de instalação para a versão .rpm ::

rpm -i fpc-X.Y.Z-N.ARCH.rpm

Onde XYZ é o número da versão do arquivo .rpm e ARCH é uma das arquiteturassuportadas (i386, x86_64, etc.).

Código de instalação para a versão Debian (como o Ubuntu) -

dpkg -i fpc-XXX.deb

Onde XXX é o número da versão do arquivo .deb.

Para detalhes, leia: Free Pascal Installation Guide

Se você usa o Mac OS X, a maneira mais fácil de usar o Free Pascal é baixar o ambientede desenvolvimento Xcode do site da Apple e seguir as instruções de instalaçãosimples. Uma vez que você tenha a configuração do Xcode, você poderá usar ocompilador Free Pascal.

Instalando o Free Pascal no Linux

Instalando o Free Pascal no Mac

Instalando o Free Pascal no Windows

Page 4: Guia rápido de Pascal

No Windows, você fará o download do instalador do Windows, setup.exe. Este é umprograma de instalação normal. Você precisa seguir os seguintes passos para instalação-

Selecione um diretório.

Selecione partes do pacote que você deseja instalar.

Opcionalmente, escolha associar as extensões .pp ou .pas ao IDE Free Pascal.

Para detalhes, leia: Free Pascal Installation Guide

Isso será usado para digitar seu programa. Exemplos de alguns editores incluem oWindows Notepad, o comando OS Edit, Brief, Epsilon, EMACS e vim ou vi.

O nome e a versão do editor de texto podem variar em diferentes sistemasoperacionais. Por exemplo, o Bloco de Notas será usado no Windows e o vim ou o vipoderão ser usados tanto no Windows quanto no Linux ou UNIX.

Os arquivos criados com o editor são chamados de arquivos de origem e contêm ocódigo-fonte do programa. Os arquivos de origem para programas Pascal geralmentesão nomeados com a extensão .pas .

Antes de iniciar sua programação, certifique-se de ter um editor de texto no lugar evocê tem experiência suficiente para escrever um programa de computador, salvá-lo emum arquivo, compilá-lo e, finalmente, executá-lo.

Pascal - Estruturas de ProgramaAntes de estudar blocos básicos de construção da linguagem de programação Pascal,vamos dar uma olhada na estrutura mínima do programa Pascal, para que possamostomá-la como referência nos próximos capítulos.

Um programa Pascal consiste basicamente das seguintes partes -

Nome do programa

Usa o comando

Declarações de tipo

Declarações constantes

Declarações de Variáveis

Declarações de funções

Declarações de procedimentos

Bloco de programa principal

Editor de texto

Estrutura do Programa Pascal

Page 5: Guia rápido de Pascal

Declarações e Expressões dentro de cada bloco

Comentários

Todo programa pascal geralmente tem uma declaração de cabeçalho, uma declaração euma parte de execução estritamente nessa ordem. O seguinte formato mostra a sintaxebásica de um programa Pascal -

program {name of the program} uses {comma delimited names of libraries you use} const {global constant declaration block} var {global variable declaration block} function {function declarations, if any} { local variables } begin ... end; procedure { procedure declarations, if any} { local variables } begin ... end; begin { main program block starts} ... end. { the end of main program block }

A seguir, um simples código pascal que imprime as palavras "Hello, World!" -

program HelloWorld; uses crt; (* Here the main program block starts *) begin writeln('Hello, World!'); readkey; end.

Isto irá produzir resultado seguinte -

Hello, World!

Vamos olhar várias partes do programa acima -

A primeira linha do programa HelloWorld; indica o nome do programa.

A segunda linha do programa usa crt; é um comando pré-processador, que dizao compilador para incluir a unidade crt antes de ir para a compilação real.

As próximas linhas incluídas nas instruções begin e end são o bloco principal doprograma. Cada bloco em Pascal é fechado dentro de um começar a declaraçãoe um final comunicado. No entanto, a instrução final indicando o final do

Exemplo de Pascal Hello World

Demonstração ao vivo

Page 6: Guia rápido de Pascal

programa principal é seguida por um ponto final (.) Em vez de ponto-e-vírgula(;).

A começar declaração do bloco principal do programa é o lugar onde aexecução do programa começa.

As linhas dentro de (* ... *) serão ignoradas pelo compilador e colocadas paraadicionar um comentário no programa.

A instrução writeln ('Hello, World!'); usa a função writeln disponível emPascal, que faz com que a mensagem "Hello, World!" para ser exibido na tela.

A instrução readkey; permite que a exibição pause até que o usuário pressioneuma tecla. Faz parte da unidade crt. Uma unidade é como uma biblioteca emPascal.

O último final da declaração . termina seu programa.

Abra um editor de texto e adicione o código acima mencionado.

Salve o arquivo como hello.pas

Abra um prompt de comando e vá para o diretório em que você salvou oarquivo.

Digite fpc hello.pas no prompt de comando e pressione enter para compilar seucódigo.

Se não houver erros no seu código, o prompt de comando o levará para apróxima linha e gerará o arquivo executável hello e o arquivo objeto hello.o .

Agora, digite hello no prompt de comando para executar seu programa.

Você poderá ver "Hello World" impresso na tela e o programa aguardará atévocê pressionar qualquer tecla.

$ fpc hello.pas Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64 Copyright (c) 1993-2011 by Florian Klaempfl and others Target OS: Linux for x86-64 Compiling hello.pas Linking hello 8 lines compiled, 0.1 sec $ ./hello Hello, World!

Certifique-se de que o compilador pascal gratuito fpc esteja em seu caminho e quevocê o esteja executando no diretório que contém o arquivo de origem hello.pas.

Pascal - sintaxe básica

Compile e execute o programa Pascal

Page 7: Guia rápido de Pascal

Você viu uma estrutura básica do programa pascal, então será fácil entender outrosblocos básicos da linguagem de programação pascal.

Uma definição de variável é colocada em um bloco que começa com uma palavra-chavevar , seguida pelas definições das variáveis, como segue:

var A_Variable, B_Variable ... : Variable_Type;

As variáveis Pascal são declaradas fora do corpo do código da função, o que significaque elas não são declaradas nos pares inicial e final , mas são declaradas após adefinição do procedimento / função e antes da palavra-chave begin . Para variáveis globais, elas são definidas após o cabeçalho do programa.

Em Pascal, um procedimento é um conjunto de instruções a serem executadas, semvalor de retorno e uma função é um procedimento com um valor de retorno. Adefinição de função / procedimentos será a seguinte -

Function Func_Name(params...) : Return_Value; Procedure Proc_Name(params...);

Os comentários de múltiplas linhas são colocados entre chaves e asteriscos como {* ...*}. Pascal permite comentário de linha única entre colchetes {...}.

{* This is a multi-line comments and it will span multiple lines. *} { This is a single line comment in pascal }

Pascal é um caso de linguagem não sensível, o que significa que você pode escreversuas variáveis, funções e procedimentos em ambos os casos. Como as variáveis A_Variable, a_variable e A_VARIABLE têm o mesmo significado em Pascal.

Programas Pascal são feitos de declarações. Cada declaração especifica um trabalhodefinido do programa. Esses trabalhos podem ser declaração, atribuição, leitura dedados, gravação de dados, tomada de decisões lógicas, transferência de controle defluxo de programa, etc.

Por exemplo -

Variáveis

Funções / Procedimentos

Comentários

Caso de sensibilidade

Declarações Pascal

Page 8: Guia rápido de Pascal

readln (a, b, c); s := (a + b + c)/2.0; area := sqrt(s * (s - a)*(s-b)*(s-c)); writeln(area);

As instruções em Pascal são projetadas com algumas palavras Pascal específicas,chamadas de palavras reservadas. Por exemplo, as palavras, programa, entrada, saída,var, real, begin, readline, writeline e end são todas palavras reservadas.

A seguir, uma lista de palavras reservadas disponíveis em Pascal.

e array início caso const

div Faz até outro fim

Arquivo para função vamos para E se

em rótulo mod nada não

do ou embalado procedimento programa

registro repetir conjunto então para

tipo até var enquanto com

O conjunto de caracteres Pascal consiste em -

Todas as letras maiúsculas (AZ)

Todas as letras minúsculas (az)

Todos os dígitos (0-9)

Símbolos especiais - + * /: =,. . () [] = {} `espaço em branco

As entidades em um programa Pascal como variáveis e constantes, tipos, funções,procedimentos e registros, etc., possuem um nome ou identificador. Um identificador éuma seqüência de letras e dígitos, começando com uma letra. Símbolos especiais eespaços em branco não devem ser usados em um identificador.

Pascal - tipos de dadosTipos de dados de uma entidade indicam o significado, restrições, valores possíveis,operações, funções e modo de armazenamento associado a ela.

Tipos inteiros, reais, booleanos e de caracteres são referidos como tipos de dadospadrão. Os tipos de dados podem ser categorizados como escalar, ponteiro e tipos dedados estruturados. Exemplos de tipos de dados escalares são integer, real, Boolean,

Palavras Reservadas em Pascal

Conjunto de caracteres e identificadores em Pascal

Page 9: Guia rápido de Pascal

character, subrange e enumerados. Tipos de dados estruturados são feitos dos tiposescalares; por exemplo, matrizes, registros, arquivos e conjuntos. Discutiremos os tiposde dados do ponteiro posteriormente.

Os tipos de dados Pascal podem ser resumidos como abaixo no diagrama a seguir -

A declaração de tipo é usada para declarar o tipo de dados de um identificador. Sintaxeda declaração de tipo é -

type-identifier-1, type-identfier-2 = type-specifier;

Por exemplo, a seguinte declaração define as variáveis dia e idade como tipo inteiro,sim e verdadeiro como tipo booleano, nome e cidade como tipo de string, taxas edespesas como tipo real.

type days, age = integer; yes, true = boolean; name, city = string; fees, expenses = real;

A tabela a seguir fornece detalhes sobre tipos inteiros padrão com seus tamanhos dearmazenamento e intervalos de valores usados no Object Pascal -

Tipos de dados pascal

Declarações de tipo

Tipos inteiros

Page 10: Guia rápido de Pascal

Tipo Mínimo Máximo Formato

Inteiro -2147483648 2147483647 assinado de 32 bits

Cardeal 0 4294967295 sem assinatura de 32 bits

Shortint -128 127 assinado de 8 bits

Smallint -32768 32767 assinado de 16 bits

Longint -2147483648 2147483647 assinado de 32 bits

Int64 -2 ^ 63 2 ^ 63 - 1 assinado de 64 bits

Byte 0 255 sem assinatura de 8 bits

Palavra 0 65535 16 bits não assinados

Longword 0 4294967295 sem assinatura de 32 bits

O uso de constantes torna um programa mais legível e ajuda a manter quantidadesespeciais em um local no início do programa. Pascal permite constantes numéricas,lógicas, de string e caracteres . Constantes podem ser declaradas na parte dedeclaração do programa, especificando a declaração const .

A sintaxe da declaração de tipo constante é a seguinte -

const Identifier = contant_value;

A seguir, alguns exemplos de declarações constantes -

VELOCITY_LIGHT = 3.0E=10; PIE = 3.141592; NAME = 'Stuart Little'; CHOICE = yes; OPERATOR = '+';

Todas as declarações constantes devem ser dadas antes da declaração da variável.

Tipos de dados enumerados são tipos de dados definidos pelo usuário. Eles permitemque os valores sejam especificados em uma lista. Somente operadores de atribuição eoperadores relacionais são permitidos no tipo de dados enumerados. Tipos de dadosenumerados podem ser declarados da seguinte maneira -

type enum-identifier = (item1, item2, item3, ... )

Constantes

Tipos enumerados

Page 11: Guia rápido de Pascal

A seguir estão alguns exemplos de declarações de tipo enumeradas -

type SUMMER = (April, May, June, July, September); COLORS = (Red, Green, Blue, Yellow, Magenta, Cyan, Black, White); TRANSPORT = (Bus, Train, Airplane, Ship);

A ordem em que os itens são listados no domínio de um tipo enumerado define a ordemdos itens. Por exemplo, no tipo enumerado SUMMER, abril vem antes de maio, maiovem antes de junho e assim por diante. O domínio de identificadores de tipoenumerados não pode consistir em constantes numéricas ou de caractere.

Os tipos de subintervalo permitem que uma variável assuma valores que estão dentrode um determinado intervalo. Por exemplo, se a idade dos eleitores deve ficar entre 18e 100 anos, uma variável chamada idade pode ser declarada como -

var age: 18 ... 100;

Vamos ver a declaração de variáveis em detalhes na próxima seção. Você também podedefinir um tipo de subrange usando a declaração de tipo. A sintaxe para declarar umtipo de subintervalo é a seguinte -

type subrange-identifier = lower-limit ... upper-limit;

A seguir, alguns exemplos de declarações de tipo de subfreio -

const P = 18; Q = 90; type Number = 1 ... 100; Value = P ... Q;

Os tipos de subintervalo podem ser criados a partir de um subconjunto de um tipoenumerado já definido. Por exemplo -

type months = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Summer = Apr ... Aug; Winter = Oct ... Dec;

Pascal - tipos de variáveisUma variável nada mais é do que um nome dado a uma área de armazenamento quenossos programas podem manipular. Cada variável em Pascal possui um tipo específico,que determina o tamanho e o layout da memória da variável; o intervalo de valores quepodem ser armazenados nessa memória; e o conjunto de operações que podem seraplicadas à variável.

Tipos Subrange

Page 12: Guia rápido de Pascal

O nome de uma variável pode ser composto de letras, dígitos e o caractere desublinhado. Deve começar com uma letra ou um sublinhado. Pascal não faz distinçãoentre maiúsculas e minúsculas, portanto letras maiúsculas e minúsculas significam omesmo aqui. Com base nos tipos básicos explicados no capítulo anterior, haverá osseguintes tipos básicos de variáveis -

Sr.Não

Tipo e Descrição

1Personagem

Normalmente, um único octeto (um byte). Este é um tipo inteiro.

2Inteiro

O tamanho mais natural do inteiro para a máquina.

3Real

Um valor de ponto flutuante de precisão única.

4

boleano

Especifica valores lógicos verdadeiros ou falsos. Este também é um tipointeiro.

5Enumerado

Especifica uma lista definida pelo usuário.

6Sub-escala

Representa variáveis, cujos valores estão dentro de um intervalo.

7Corda

Armazena uma matriz de caracteres.

A linguagem de programação Pascal também permite definir vários outros tipos devariáveis, as quais abordaremos em capítulos subseqüentes como Ponteiro, Matriz,Registros, Conjuntos e Arquivos, etc. Para este capítulo, vamos estudar apenas os tiposbásicos de variáveis.

Variáveis Básicas em Pascal

Declaração de Variáveis em Pascal

Page 13: Guia rápido de Pascal

Todas as variáveis devem ser declaradas antes de usá-las no programa Pascal. Todas asdeclarações de variáveis são seguidas pela palavra-chave var . Uma declaraçãoespecifica uma lista de variáveis, seguida por dois pontos (:) e o tipo. Sintaxe dadeclaração de variável é -

var variable_list : type;

Aqui, tipo deve ser um tipo de dado Pascal válido, incluindo caractere, inteiro, real,booleano, ou qualquer tipo de dado definido pelo usuário, etc., e variable_list podeconsistir em um ou mais nomes de identificadores separados por vírgulas. Algumasdeclarações de variáveis válidas são mostradas aqui -

var age, weekdays : integer; taxrate, net_income: real; choice, isready: boolean; initials, grade: char; name, surname : string;

No tutorial anterior, discutimos que o Pascal permite declarar um tipo. Um tipo pode seridentificado por um nome ou identificador. Esse tipo pode ser usado para definirvariáveis desse tipo. Por exemplo,

type days, age = integer; yes, true = boolean; name, city = string; fees, expenses = real;

Agora, os tipos assim definidos podem ser usados em declarações de variáveis -

var weekdays, holidays : days; choice: yes; student_name, emp_name : name; capital: city; cost: expenses;

Por favor, note a diferença entre declaração de tipo e declaração var . A declaração detipo indica a categoria ou classe dos tipos, como integer, real, etc., enquanto aespecificação da variável indica o tipo de valores que uma variável pode assumir. Vocêpode comparar a declaração de tipo em Pascal com typedef em C. O mais importante éque o nome da variável se refere à localização da memória onde o valor da variávelserá armazenado. Isso não é assim com a declaração de tipo.

As variáveis recebem um valor com dois pontos e o sinal de igual, seguido por umaexpressão constante. A forma geral de atribuir um valor é -

variable_name := value;

Inicialização Variável em Pascal

Page 14: Guia rápido de Pascal

Por padrão, variáveis em Pascal não são inicializadas com zero. Eles podem contervalores de lixo. Portanto, é uma prática melhor inicializar variáveis em um programa.Variáveis podem ser inicializadas (atribuídas a um valor inicial) em sua declaração. Ainicialização é seguida pela palavra-chave var e a sintaxe da inicialização é a seguinte -

var variable_name : type = value;

Alguns exemplos são -

age: integer = 15; taxrate: real = 0.5; grade: char = 'A'; name: string = 'John Smith';

Vejamos um exemplo, que faz uso de vários tipos de variáveis discutidas até agora -

program Greetings; const message = ' Welcome to the world of Pascal '; type name = string; var firstname, surname: name; begin writeln('Please enter your first name: '); readln(firstname); writeln('Please enter your surname: '); readln(surname); writeln; writeln(message, ' ', firstname, ' ', surname); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Please enter your first name:

John

Please enter your surname:

Smith

Welcome to the world of Pascal John Smith

Você viu como usar tipos de variáveis simples, como inteiro, real e booleano. Agora,vamos ver variáveis do tipo enumerado, que podem ser definidas como -

var var1, var2, ... : enum-identifier;

Quando você declarar um tipo enumerado, você pode declarar variáveis desse tipo. Porexemplo,

Demonstração ao vivo

Variáveis enumeradas

Page 15: Guia rápido de Pascal

O exemplo a seguir ilustra o conceito -

program exEnumeration; type beverage = (coffee, tea, milk, water, coke, limejuice); var drink:beverage; begin writeln('Which drink do you want?'); drink := limejuice; writeln('You can drink ', drink); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Which drink do you want?

You can drink limejuice

As variáveis de subintervalo são declaradas como -

var subrange-name : lowerlim ... uperlim;

Exemplos de variáveis subrange são -

var marks: 1 ... 100; grade: 'A' ... 'E'; age: 1 ... 25;

O programa a seguir ilustra o conceito -

program exSubrange; var marks: 1 .. 100; grade: 'A' .. 'E'; begin writeln( 'Enter your marks(1 - 100): '); readln(marks); writeln( 'Enter your grade(A - E): '); readln(grade); writeln('Marks: ' , marks, ' Grade: ', grade); end.

type months = (January, February, March, April, May, June, July, August, September, October, NovembVar m: months; ... M := January;

Demonstração ao vivo

Variáveis Subrange

Demonstração ao vivo

Page 16: Guia rápido de Pascal

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter your marks(1 - 100):

100

Enter your grade(A - E):

A

Marks: 100 Grade: A

Pascal - ConstantesUma constante é uma entidade que permanece inalterada durante a execução doprograma. Pascal permite que apenas constantes dos seguintes tipos sejam declaradas-

Tipos ordinais

Definir tipos

Tipos de ponteiro (mas o único valor permitido é Nil).

Tipos reais

Caracteres

Corda

A sintaxe para declarar constantes é a seguinte -

const identifier = constant_value;

A tabela a seguir fornece exemplos de algumas declarações de constante válidas -

Constante do tipo real

Sr.Não

Tipo Constante e Exemplos

1Constante do tipo Ordinal (Integer)

valid_age = 21;

2Definir constante de tipo

Vogais = conjunto de (A, E, I, O, U);

3Constante do tipo ponteiro

P = NIL;

4 e = 2,7182818;

Constantes declarantes

Page 17: Guia rápido de Pascal

velocity_light = 3,0E + 10;

5Constante de tipo de caractere

Operador = '+';

6Constante do tipo de cadeia

presidente = 'Johnny Depp';

O exemplo a seguir ilustra o conceito -

program const_circle (input,output); const PI = 3.141592654; var r, d, c : real; {variable declaration: radius, dia, circumference} begin writeln('Enter the radius of the circle'); readln(r); d := 2 * r; c := PI * d; writeln('The circumference of the circle is ',c:7:2); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter the radius of the circle

23

The circumference of the circle is 144.51

Observe a formatação na declaração de saída do programa. A variável c deve serformatada com o número total de dígitos 7 e 2 dígitos após o sinal decimal. Pascalpermite tal formatação de saída com as variáveis numéricas.

Pascal - OperadoresUm operador é um símbolo que informa ao compilador para executar manipulaçõesmatemáticas ou lógicas específicas. Pascal permite os seguintes tipos de operadores -

Operadores aritméticos

Operadores relacionais

Operadores booleanos

Operadores de bits

Definir operadores

Operadores de cordas

Page 18: Guia rápido de Pascal

Vamos discutir os operadores aritméticos, relacionais, booleanos e bit um por um.Vamos discutir os operadores de set e as operações de string mais tarde.

A tabela a seguir mostra todos os operadores aritméticos suportados pelo Pascal.Suponha que a variável A detenha 10 e a variável B detenha 20, então -

Mostrar exemplos

Operador Descrição Exemplo

+ Adiciona dois operandos A + B dará 30

- Subtrai o segundo operando do primeiro A - B vai dar -10

* Multiplica os dois operandos A * B dará 200

/ Divide o numerador pelo denominador B / A vai dar 2

%Operador de módulo e resto depois de uma

divisão inteira B% A dará 0

A tabela a seguir mostra todos os operadores relacionais suportados pelo Pascal.Suponha que a variável A detenha 10 e a variável B detenha 20, então -

Mostrar exemplos

Operador Descrição Exemplo

=Verifica se os valores de dois operandos são iguaisou não, se sim, a condição se torna verdadeira. (A = B) não é verdade.

<>Verifica se os valores dos dois operandos são iguaisou não, se os valores não são iguais, então acondição se torna verdadeira.

(A <> B) é verdade.

>Verifica se o valor do operando esquerdo é maiorque o valor do operando direito, se sim, a condiçãose torna verdadeira.

(A> B) não é verdade.

<Verifica se o valor do operando à esquerda é menorque o valor do operando à direita, se sim, acondição se torna verdadeira.

(A <B) é verdade.

> =Verifica se o valor do operando esquerdo é maiorou igual ao valor do operando direito, se sim, acondição se torna verdadeira.

(A> = B) não éverdade.

<= Verifica se o valor do operando esquerdo é menor (A <= B) é verdade.

Operadores aritméticos

Operadores Relacionais

Page 19: Guia rápido de Pascal

ou igual ao valor do operando direito, se sim, acondição se torna verdadeira.

A tabela a seguir mostra todos os operadores booleanos suportados pela linguagemPascal. Todos esses operadores trabalham com operandos booleanos e produzemresultados booleanos. Assuma que a variável A é verdadeira e a variável B é falsa,então -

Mostrar exemplos

Operador Descrição Exemplo

eChamado booleano AND operator. Se ambos osoperandos forem verdadeiros, a condição setornará verdadeira.

(A e B) é falso.

e depois

É semelhante ao operador AND, no entanto,garante a ordem na qual o compilador avalia aexpressão lógica. Da esquerda para a direita e osoperandos da direita são avaliados apenas quandonecessário.

(A e depois B) é falso.

ouChamado Booleano OU Operador. Se algum dosdois operandos for verdadeiro, a condição setornará verdadeira.

(A ou B) é verdade.

se não

É semelhante ao OR booleano, no entanto, garantea ordem na qual o compilador avalia a expressãológica. Da esquerda para a direita e os operandosda direita são avaliados apenas quando necessário.

(A ou mais B) éverdade.

não

Chamado Boolean NOT Operator. Usado parainverter o estado lógico de seu operando. Se umacondição for verdadeira, o operador Lógico NOTtornará falsa.

não (A e B) é verdade.

Operadores bit a bit trabalham em bits e executam a operação bit a bit. Todos essesoperadores trabalham em operandos inteiros e produzem resultados inteiros. A tabelade verdade para bit a bit e (&), bit a bit ou (|) e bit a bit não (~) são as seguintes -

p q p & q p | q ~ p ~ q

0 0 0 0 1 1

0 1 0 1 1 0

Operadores booleanos

Operadores de Bit

Page 20: Guia rápido de Pascal

1 1 1 1 0 0

1 0 0 1 0 1

Assuma se A = 60; e B = 13; agora em formato binário eles serão os seguintes -

A = 0011 1100

B = 0000 1101

-----------------

A & B = 0000 1100

A ^ B = 0011 0001

~ A = 1100 0011

Os operadores Bitwise suportados pelo Pascal estão listados na tabela a seguir.Suponha que a variável A detenha 60 e a variável B detenha 13, então:

Mostrar exemplos

Operador Descrição Exemplo

EBinary AND Operator copia um pouco para oresultado, se existir em ambos os operandos.

(A & B) vai dar 12, que é0000 1100

|Operador binário OR copia um bit se existir em umdos operandos.

(A | B) vai dar 61, que é0011 1101

!Operador binário OR copia um bit se existir em umdos operandos. É o mesmo que | operador.

(A! B) vai dar 61, que é0011 1101

~Binary Ones Complement Operator é unário e tem oefeito de 'flipping' bits.

(~ A) dará -61, que é1100 0011 no formulário

de complemento de 2devido a um número

binário assinado.

<< <<Operador Shift Esquerdo. O valor dos operandosesquerdos é movido para a esquerda pelo númerode bits especificado pelo operando direito.

Um << 2 dará 240, queé 1111 0000

>>

Operador de deslocamento à direita binário. O valordos operandos esquerdos é movido para a direitapelo número de bits especificado pelo operandodireito.

A >> 2 dará 15, que é0000 1111

Por favor, note que diferentes implementações de Pascal diferem em operadores bit abit. Free Pascal, o compilador que usamos aqui, no entanto, suporta os seguintesoperadores bitwise -

Page 21: Guia rápido de Pascal

Operadores Operações

não Bit a bit NÃO

e Bit a bit E

ou Bit a bit OU

xor Exclusivo bit a bit OU

shl Troca de bit a bit à esquerda

shr Bitwise desloque para a direita

<< << Troca de bit a bit à esquerda

>> Bitwise desloque para a direita

A precedência do operador determina o agrupamento de termos em uma expressão.Isso afeta como uma expressão é avaliada. Certos operadores têm precedência maisalta que outros; por exemplo, o operador de multiplicação tem precedência mais altaque o operador de adição.

Por exemplo, x = 7 + 3 * 2; aqui, x é atribuído 13, não 20 porque o operador * temprecedência mais alta que +, então ele primeiro é multiplicado com 3 * 2 e, emseguida, adiciona 7.

Aqui, os operadores com a maior precedência aparecem na parte superior da tabela, eaqueles com os mais baixos aparecem na parte inferior. Dentro de uma expressão, osoperadores de precedência mais alta serão avaliados primeiro.

Mostrar exemplos

Operador Precedência

~ não, Maior

*, /, div, mod e &

|,!, +, - ou

=, <>, <, <=,>,> =, em

ou então, e então Menor

Pascal - Tomada de DecisãoAs estruturas de tomada de decisão exigem que o programador especifique uma oumais condições a serem avaliadas ou testadas pelo programa, juntamente com uma

Precedência dos operadores em Pascal

Page 22: Guia rápido de Pascal

declaração ou instruções a serem executadas se a condição for determinada comoverdadeira e, opcionalmente, outras instruções a serem executadas se a condição estádeterminado a ser falso.

A seguir está a forma geral de uma estrutura de tomada de decisão típica encontradana maioria das linguagens de programação -

A linguagem de programação Pascal fornece os seguintes tipos de declarações detomada de decisão. Clique nos links a seguir para verificar seus detalhes.

Sr.Não

Declaração & Descrição

1

se - então declaraçãoUma declaração if - then consiste em uma expressão booleana seguida deuma ou mais instruções.

2

Declaração if-then-elseUma declaração if - then pode ser seguida por uma instrução else opcional, que é executada quando a expressão booleana é falsa.

3

aninhado se instruçõesVocê pode usar um caso ou else if declaração dentro de outro se ou else ifdeclaração (s).

4

declaração de casoUma declaração de caso permite que uma variável seja testada quanto àigualdade em relação a uma lista de valores.

5 declaração case-else

Page 23: Guia rápido de Pascal

É semelhante à declaração if-then-else . Aqui, um outro termo segue adeclaração do caso .

6declarações de caso aninhadoVocê pode usar uma instrução de caso dentro de outra instrução de caso .

Pascal - LoopsPode haver uma situação, quando você precisa executar um bloco de código váriasvezes. Em geral, as instruções são executadas seqüencialmente: a primeira instruçãoem uma função é executada primeiro, seguida pela segunda e assim por diante.

As linguagens de programação fornecem várias estruturas de controle que permitemcaminhos de execução mais complicados.

Uma instrução de loop nos permite executar uma instrução ou grupo de instruçõesvárias vezes e seguir é a forma geral de uma instrução de loop na maioria daslinguagens de programação -

A linguagem de programação Pascal fornece os seguintes tipos de construções de looppara lidar com os requisitos de loop. Clique nos links a seguir para verificar seusdetalhes.

Sr.Não

Tipo de loop e descrição

1

loop while-doRepete uma instrução ou grupo de instruções enquanto uma determinadacondição é verdadeira. Ele testa a condição antes de executar o corpo do loop.

2 loop for-do

Page 24: Guia rápido de Pascal

Executa uma seqüência de instruções várias vezes e abrevia o código quegerencia a variável de loop.

3

loop repetir-atéComo uma declaração while, exceto que testa a condição no final do corpo doloop.

4

loops aninhadosVocê pode usar um ou mais loop dentro de qualquer outro enquanto, por ourepetir até loop.

As instruções de controle de loop alteram a execução de sua sequência normal. Quandoa execução deixa um escopo, todos os objetos automáticos que foram criados nesseescopo são destruídos.

Pascal suporta as seguintes declarações de controle. Clique nos links a seguir paraverificar seus detalhes.

Sr.Não

Declaração de controle e descrição

1

declaração de quebraEncerra o loop ou a instrução case e transfere a execução para a instruçãoimediatamente após o loop ou a instrução case.

2

continuar instruçãoFaz com que o loop pule o restante de seu corpo e repita imediatamente suacondição antes de reiterar.

3

declaração gotoTransfere o controle para a instrução rotulada. Embora não seja aconselhávelusar a instrução goto no seu programa.

Pascal - Funções

Um subprograma é uma unidade / módulo de programa que executa uma tarefaespecífica. Esses subprogramas são combinados para formar programas maiores. Isso ébasicamente chamado de "design modular". Um subprograma pode ser invocado porum subprograma / programa, que é chamado de programa de chamada.

Declarações de controle de loop

Subprogramas

Page 25: Guia rápido de Pascal

Pascal fornece dois tipos de subprogramas -

Funções - esses subprogramas retornam um único valor.

Procedimentos - esses subprogramas não retornam um valor diretamente.

Uma função é um grupo de instruções que juntas executam uma tarefa. Todoprograma Pascal tem pelo menos uma função, que é o próprio programa, e todos osprogramas mais triviais podem definir funções adicionais.

Uma declaração de função informa ao compilador sobre o nome de uma função, tipode retorno e parâmetros. Uma definição de função fornece o corpo real da função.

A biblioteca padrão do Pascal fornece inúmeras funções internas que seu programapode chamar. Por exemplo, a função AppendStr () acrescenta duas strings, a funçãoNew () aloca dinamicamente memória para variáveis e muitas outras funções.

Em Pascal, uma função é definida usando a palavra-chave function. A forma geral deuma definição de função é a seguinte -

function name(argument(s): type1; argument(s): type2; ...): function_type; local declarations; begin ... < statements > ... name:= expression; end;

Uma definição de função em Pascal consiste em um cabeçalho de função ,declarações locais e um corpo de função . O cabeçalho da função consiste na funçãode palavra-chave e um nome dado à função. Aqui estão todas as partes de uma função-

Argumentos - O (s) argumento (s) estabelecem a ligação entre o programa dechamada e os identificadores de função e também chamados de parâmetrosformais. Um parâmetro é como um marcador de posição. Quando uma função échamada, você passa um valor para o parâmetro. Este valor é referido comoparâmetro ou argumento real. A lista de parâmetros refere-se ao tipo, ordem enúmero de parâmetros de uma função. O uso de tais parâmetros formais éopcional. Esses parâmetros podem ter tipo de dados padrão, tipo de dadosdefinidos pelo usuário ou tipo de dados de subintervalo.

A lista de parâmetros formais que aparece na declaração da função pode servariáveis simples ou subscritas, matrizes ou variáveis estruturadas ousubprogramas.

Funções

Definindo uma Função

Page 26: Guia rápido de Pascal

Tipo de retorno - Todas as funções devem retornar um valor, portanto, todasas funções devem receber um tipo. O tipo de função é o tipo de dados dovalor que a função retorna. Pode ser um escalar padrão ou um tipo de sub-escala definido pelo usuário, mas não pode ser do tipo estruturado.

Declarações locais - As declarações locais referem-se às declarações derótulos, constantes, variáveis, funções e procedimentos, que são aplicáveis apenas ao corpo da função.

Corpo da Função - O corpo da função contém uma coleção de instruções quedefinem o que a função faz. Deve sempre estar entre as palavras reservadascomeçar e terminar. É a parte de uma função onde todos os cálculos são feitos.Deve haver uma declaração de atribuição do tipo - nome: = expressão; nocorpo da função que atribui um valor ao nome da função. Este valor é retornadocomo e quando a função é executada. A última declaração no corpo deve seruma declaração final.

A seguir, um exemplo mostrando como definir uma função no pascal -

(* function returning the max between two numbers *) function max(num1, num2: integer): integer; var (* local variable declaration *) result: integer; begin if (num1 > num2) then result := num1 else result := num2; max := result; end;

Uma declaração de função informa ao compilador sobre um nome de função e comochamar a função. O corpo real da função pode ser definido separadamente.

Uma declaração de função tem as seguintes partes -

function name(argument(s): type1; argument(s): type2; ...): function_type;

Para a função acima definida max (), segue a declaração da função -

function max(num1, num2: integer): integer;

A declaração de função é necessária quando você define uma função em um arquivo deorigem e chama essa função em outro arquivo. Nesse caso, você deve declarar a funçãona parte superior do arquivo que está chamando a função.

Declarações de Função

Page 27: Guia rápido de Pascal

Ao criar uma função, você define o que a função precisa fazer. Para usar uma função,você terá que chamar essa função para executar a tarefa definida. Quando umprograma chama uma função, o controle de programa é transferido para a funçãochamada. Uma função chamada realiza uma tarefa definida, e quando sua declaraçãode retorno é executada ou quando a última instrução final é alcançada, ela retorna ocontrole de programa de volta ao programa principal.

Para chamar uma função, basta passar os parâmetros necessários junto com o nome dafunção e, se a função retornar um valor, você poderá armazenar o valor retornado. Aseguir, um exemplo simples para mostrar o uso -

program exFunction; var a, b, ret : integer; (*function definition *) function max(num1, num2: integer): integer; var (* local variable declaration *) result: integer; begin if (num1 > num2) then result := num1 else result := num2; max := result; end; begin a := 100; b := 200; (* calling a function to get max value *) ret := max(a, b); writeln( 'Max value is : ', ret ); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Max value is : 200

Pascal - ProcedimentosProcedimentos são subprogramas que, em vez de retornar um único valor, permitemobter um grupo de resultados.

Em Pascal, um procedimento é definido usando a palavra-chave do procedimento . Aforma geral de uma definição de procedimento é a seguinte -

Chamando uma Função

Demonstração ao vivo

Definindo um Procedimento

Page 28: Guia rápido de Pascal

procedure name(argument(s): type1, argument(s): type 2, ... ); < local declarations > begin < procedure body > end;

Uma definição de procedimento em Pascal consiste em um cabeçalho , declaraçõeslocais e um corpo do procedimento. O cabeçalho do procedimento consiste noprocedimento de palavra-chave e no nome dado ao procedimento. Aqui estão todasas partes de um procedimento -

Argumentos - O (s) argumento (s) estabelecem a ligação entre o programa dechamada e os identificadores de procedimento e também chamados deparâmetros formais. Regras para argumentos em procedimentos são asmesmas que para as funções.

Declarações locais - As declarações locais referem-se às declarações derótulos, constantes, variáveis, funções e procedimentos, que são aplicáveis apenas ao corpo do procedimento.

Corpo do Procedimento - O corpo do procedimento contém uma coleção deinstruções que definem o que o procedimento faz. Deve sempre estar entre aspalavras reservadas começar e terminar. É a parte de um procedimento em quetodos os cálculos são feitos.

A seguir está o código-fonte de um procedimento chamado findMin () . Esteprocedimento usa 4 parâmetros x, y, z e m e armazena o mínimo entre as trêsprimeiras variáveis na variável denominada m. A variável m é passada por referência(discutiremos a passagem de argumentos por referência um pouco mais tarde) -

procedure findMin(x, y, z: integer; var m: integer); (* Finds the minimum of the 3 values *) begin if x < y then m := x else m := y; if z <m then m := z; end; { end of procedure findMin }

Uma declaração de procedimento informa ao compilador sobre um nome deprocedimento e como chamar o procedimento. O corpo real do procedimento pode serdefinido separadamente.

Uma declaração de procedimento tem a seguinte sintaxe -

procedure name(argument(s): type1, argument(s): type 2, ... );

Declarações de Procedimentos

Page 29: Guia rápido de Pascal

Por favor, note que o nome do procedimento não está associado a nenhum tipo .Para o procedimento acima definido findMin () , segue a declaração -

procedure findMin(x, y, z: integer; var m: integer);

Ao criar um procedimento, você fornece uma definição do que o procedimento devefazer. Para usar o procedimento, você precisará chamar esse procedimento paraexecutar a tarefa definida. Quando um programa chama um procedimento, o controlede programa é transferido para o procedimento chamado. Um procedimento chamadoexecuta a tarefa definida e, quando sua última instrução final é atingida, retorna ocontrole de volta ao programa de chamada.

Para chamar um procedimento, basta passar os parâmetros necessários junto com onome do procedimento, conforme mostrado abaixo -

program exProcedure; var a, b, c, min: integer; procedure findMin(x, y, z: integer; var m: integer); (* Finds the minimum of the 3 values *) begin if x < y then m:= x else m:= y; if z < m then m:= z; end; { end of procedure findMin } begin writeln(' Enter three numbers: '); readln( a, b, c); findMin(a, b, c, min); (* Procedure call *) writeln(' Minimum: ', min); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter three numbers:

89 45 67

Minimum: 45

Vimos que um programa ou subprograma pode chamar outro subprograma. Quando umsubprograma chama a si mesmo, ele é chamado de chamada recursiva e o processo éconhecido como recursão.

Chamando um Procedimento

Subprogramas Recursivos

Page 30: Guia rápido de Pascal

Para ilustrar o conceito, vamos calcular o fatorial de um número. Fatorial de um númeron é definido como -

n! = n*(n-1)! = n*(n-1)*(n-2)! ... = n*(n-1)*(n-2)*(n-3)... 1

O programa a seguir calcula o fatorial de um determinado número, chamando-serecursivamente.

program exRecursion; var num, f: integer; function fact(x: integer): integer; (* calculates factorial of x - x! *) begin if x=0 then fact := 1 else fact := x * fact(x-1); (* recursive call *) end; { end of function fact} begin writeln(' Enter a number: '); readln(num); f := fact(num); writeln(' Factorial ', num, ' is: ' , f); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter a number:

5

Factorial 5 is: 120

A seguir, outro exemplo, que gera a Série Fibonacci para um determinado númerousando uma função recursiva -

program recursiveFibonacci; var i: integer; function fibonacci(n: integer): integer; begin if n=1 then fibonacci := 0 else if n=2 then fibonacci := 1 else fibonacci := fibonacci(n-1) + fibonacci(n-2); end; begin for i:= 1 to 10 do

Demonstração ao vivo

Page 31: Guia rápido de Pascal

write(fibonacci (i), ' '); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

0 1 1 2 3 5 8 13 21 34

Se um subprograma ( função ou procedimento ) for usar argumentos, ele devedeclarar variáveis que aceitam os valores dos argumentos. Essas variáveis sãochamadas de parâmetros formais do subprograma.

Os parâmetros formais se comportam como outras variáveis locais dentro dosubprograma e são criados após a entrada no subprograma e destruídos na saída.

Ao chamar um subprograma, existem duas maneiras pelas quais os argumentos podemser passados para o subprograma -

Sr.Não

Tipo de chamada e descrição

1

Ligue por valorEste método copia o valor real de um argumento no parâmetro formal dosubprograma. Nesse caso, as alterações feitas no parâmetro dentro dosubprograma não afetam o argumento.

2

Ligue por referênciaEste método copia o endereço de um argumento no parâmetro formal. Dentrodo subprograma, o endereço é usado para acessar o argumento real usado nachamada. Isso significa que as alterações feitas no parâmetro afetam oargumento.

Por padrão, o Pascal usa a chamada por valor para passar argumentos. Em geral, issosignifica que o código dentro de um subprograma não pode alterar os argumentosusados para chamar o subprograma. O programa de exemplo que usamos no capítulo'Pascal - Funções' chamou a função chamada max () usando chamada por valor .

Considerando que, o programa de exemplo fornecido aqui ( exProcedure ) chama oprocedimento findMin () usando chamada por referência .

Pascal - Escopo VariávelUm escopo em qualquer programação é uma região do programa em que uma variáveldefinida pode ter sua existência e além dessa variável não pode ser acessada. Existemtrês lugares, onde as variáveis podem ser declaradas na linguagem de programaçãoPascal -

Argumentos de um subprograma

Page 32: Guia rápido de Pascal

Dentro de um subprograma ou um bloco que é chamado de variáveis locais

Fora de todos os subprogramas que são chamados de variáveis globais

Na definição dos parâmetros do subprograma que é chamado de parâmetrosformais

Vamos explicar quais são variáveis locais e globais e parâmetros formais.

Variáveis que são declaradas dentro de um subprograma ou bloco são chamadas devariáveis locais. Eles podem ser usados apenas por instruções que estão dentro dessesubprograma ou bloco de código. Variáveis locais não são conhecidas por subprogramasfora do seu próprio. A seguir está o exemplo usando variáveis locais. Aqui, todas asvariáveis a , b e c são locais para o programa chamado exLocal .

program exLocal; var a, b, c: integer; begin (* actual initialization *) a := 10; b := 20; c := a + b; writeln('value of a = ', a , ' b = ', b, ' and c = ', c); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

value of a = 10 b = 20 c = 30

Agora, vamos estender pouco mais o programa, vamos criar um procedimento chamadode exibição, que terá o seu próprio conjunto de variáveis a , b e c e exibir seus valores,desde o programa exLocal .

program exLocal; var a, b, c: integer; procedure display; var a, b, c: integer; begin (* local variables *) a := 10; b := 20; c := a + b; writeln('Winthin the procedure display'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); end; begin a:= 100; b:= 200;

Variáveis Locais

Demonstração ao vivo

Demonstração ao vivo

Page 33: Guia rápido de Pascal

c:= a + b; writeln('Winthin the program exlocal'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); display(); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Within the program exlocal

value of a = 100 b = 200 c = 300

Within the procedure display

value of a = 10 b = 20 c = 30

Variáveis globais são definidas fora de uma função, geralmente no topo do programa.As variáveis globais manterão seu valor durante toda a vida útil do programa e poderãoser acessadas dentro de qualquer uma das funções definidas para o programa.

Uma variável global pode ser acessada por qualquer função. Ou seja, uma variávelglobal está disponível para uso em todo o seu programa após sua declaração. A seguir,um exemplo usando variáveis globais e locais -

program exGlobal; var a, b, c: integer; procedure display; var x, y, z: integer; begin (* local variables *) x := 10; y := 20; z := x + y; (*global variables *) a := 30; b:= 40; c:= a + b; writeln('Winthin the procedure display'); writeln(' Displaying the global variables a, b, and c'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); writeln('Displaying the local variables x, y, and z'); writeln('value of x = ', x , ' y = ', y, ' and z = ', z); end; begin a:= 100; b:= 200; c:= 300; writeln('Winthin the program exlocal'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c);

Variáveis globais

Demonstração ao vivo

Page 34: Guia rápido de Pascal

display(); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Within the program exlocal

value of a = 100 b = 200 c = 300

Within the procedure display

Displaying the global variables a, b, and c

value of a = 30 b = 40 c = 70

Displaying the local variables x, y, and z

value of x = 10 y = 20 z = 30

Observe que a exibição do procedimento tem acesso às variáveis a, b e c, que sãovariáveis globais em relação à exibição, bem como suas próprias variáveis locais. Umprograma pode ter o mesmo nome para variáveis locais e globais, mas o valor davariável local dentro de uma função terá preferência.

Vamos alterar um pouco o exemplo anterior, agora as variáveis locais para a exibição doprocedimento tem os mesmos nomes que a , b , c -

program exGlobal; var a, b, c: integer; procedure display; var a, b, c: integer; begin (* local variables *) a := 10; b := 20; c := a + b; writeln('Winthin the procedure display'); writeln(' Displaying the global variables a, b, and c'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); writeln('Displaying the local variables a, b, and c'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); end; begin a:= 100; b:= 200; c:= 300; writeln('Winthin the program exlocal'); writeln('value of a = ', a , ' b = ', b, ' and c = ', c); display(); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Demonstração ao vivo

Page 35: Guia rápido de Pascal

Within the program exlocal

value of a = 100 b = 200 c = 300

Within the procedure display

Displaying the global variables a, b, and c

value of a = 10 b = 20 c = 30

Displaying the local variables a, b, and c

value of a = 10 b = 20 c = 30

Pascal - CordasA string em Pascal é na verdade uma sequência de caracteres com uma especificaçãode tamanho opcional. Os caracteres podem ser numéricos, letras, espaços em branco,caracteres especiais ou uma combinação de todos. O Extended Pascal fornece váriostipos de objetos string, dependendo do sistema e da implementação. Discutiremos tiposmais comuns de strings usadas em programas.

Você pode definir uma string de várias maneiras -

Matrizes de Caracteres - Esta é uma cadeia de caracteres que é umasequência de zero ou mais caracteres de tamanho de bytes entre aspas simples.

Variáveis de string - A variável do tipo String, conforme definido no TurboPascal.

Strings curtas - A variável do tipo String com especificação de tamanho.

Strings terminadas nulas - A variável do tipo pchar .

AnsiStrings - Ansistrings são strings que não possuem limite de comprimento.

Pascal fornece apenas um operador de string, operador de concatenação de strings (+).

O programa a seguir imprime os primeiros quatro tipos de seqüências de caracteres.Nós usaremos AnsiStrings no próximo exemplo.

program exString; var greetings: string; name: packed array [1..10] of char; organisation: string[10]; message: pchar; begin greetings := 'Hello '; message := 'Good Day!'; writeln('Please Enter your Name'); readln(name); writeln('Please Enter the name of your Organisation'); readln(organisation); writeln(greetings, name, ' from ', organisation);

Exemplos

Page 36: Guia rápido de Pascal

writeln(message); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Please Enter your Name

John Smith

Please Enter the name of your Organisation

Infotech

Hello John Smith from Infotech

O exemplo a seguir faz uso de poucas outras funções, vamos ver -

program exString; uses sysutils; var str1, str2, str3 : ansistring; str4: string; len: integer; begin str1 := 'Hello '; str2 := 'There!'; (* copy str1 into str3 *) str3 := str1; writeln('appendstr( str3, str1) : ', str3 ); (* concatenates str1 and str2 *) appendstr( str1, str2); writeln( 'appendstr( str1, str2) ' , str1 ); str4 := str1 + str2; writeln('Now str4 is: ', str4); (* total lenghth of str4 after concatenation *) len := byte(str4[0]); writeln('Length of the final string str4: ', len); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

appendstr( str3, str1) : Hello

appendstr( str1, str2) : Hello There!

Now str4 is: Hello There! There!

Length of the final string str4: 18

Pascal suporta uma ampla gama de funções e procedimentos que manipulam strings.Esses subprogramas variam em termos de implementação. Aqui, estamos listandovários subprogramas de manipulação de strings fornecidos pelo Free Pascal -

Sr.Não.

Função e Propósito

1 função AnsiCompareStr (const S1:; const S2 :): Integer;

Demonstração ao vivo

Funções e Procedimentos Pascal String

Page 37: Guia rápido de Pascal

Compara duas cordas

2função AnsiCompareText (const S1:; const S2 :): Integer;

Compara duas strings, insensível a maiúsculas e minúsculas

3função AnsiExtractQuotedStr (var Src: PChar; Quote: Char) :;

Remove aspas da string

4função AnsiLastChar (const S :): PChar;

Obtém o último caractere de string

5função AnsiLowerCase (const s :):

Converte string para todas as minúsculas

6função AnsiQuotedStr (const S:; Quote: Char) :;

Cita uma string

7função AnsiStrComp (S1: PChar; S2: PChar): Integer;

Compara strings diferencia maiúsculas de minúsculas

8função AnsiStrIComp (S1: PChar; S2: PChar): Integer;

Compara strings sem distinção entre maiúsculas e minúsculas

9

função AnsiStrLComp (S1: PChar; S2: PChar; MaxLen: Cardinal):Integer;

Compara L caracteres de cadeias de caracteres sensíveis a maiúsculas eminúsculas

10

função AnsiStrLIComp (S1: PChar; S2: PChar; MaxLen: Cardinal):Integer;

Compara L caracteres de cadeias de caracteres insensíveis

11função AnsiStrLastChar (Str: PChar): PChar;

Obtém o último caractere de string

12função AnsiStrLower (Str: PChar): PChar;

Converte string para todas as minúsculas

Page 38: Guia rápido de Pascal

13 função AnsiStrUpper (Str: PChar): PChar;

Converte string em maiúsculas

14função AnsiUpperCase (const s :) :;

Converte string em maiúsculas

15procedure AppendStr (var Dest:; const S :);

Acrescenta 2 cordas

16procedure AssignStr (var P: PString; const S :);

Atribui valor de cadeias na pilha

17function CompareStr (const S1:; const S2 :): Integer; sobrecarga;

Compara duas cadeias de maiúsculas e minúsculas

18função CompareText (const S1:; const S2 :): Integer;

Compara duas cadeias insensíveis

19procedimento DisposeStr (S: PString); sobrecarga;Remove a string da pilha

20procedimento DisposeStr (S: PShortString); sobrecarga;

Remove a string da pilha

21função IsValidIdent (const Ident :): Boolean;

É string um identificador de pascal válido

22função LastDelimiter (const Delimiters:; const S :): Integer;

Última ocorrência de caractere em uma string

23função LeftStr (const S:; Count: Integer) :;

Obtém os primeiros N caracteres de uma string

24function LoadStr (Ident: Integer) :;

Carrega string de recursos

25 função LowerCase (const s:) :; sobrecarga;

Converte string para todas as minúsculas

Page 39: Guia rápido de Pascal

26função LowerCase (const V: variant) :; sobrecarga;

Converte string para todas as minúsculas

27função NewStr (const S :): PString; sobrecarga;

Aloca nova cadeia na pilha

28função RightStr (const S:; Contagem: Integer) :;

Obtém os últimos N caracteres de uma string

29função StrAlloc (Tamanho: Cardinal): PChar;

Aloca memória para string

30função StrBufSize (Str: PChar): SizeUInt;

Reservas de memória para uma string

31procedimento StrDispose (Str: PChar);

Remove a string da pilha

32função StrPas (Str: PChar) :;

Converte PChar em string de pascal

33função StrPCopy (Dest: PChar; Source :): PChar;

Copia string de pascal

34função StrPLCopy (Dest: PChar; Fonte:; MaxLen: SizeUInt): PChar;

Copia N bytes de string de pascal

35função UpperCase (const s :) :;

Converte string em maiúsculas

Pascal - booleanosO Pascal fornece um tipo de dados booleano que permite aos programadores definir,armazenar e manipular entidades lógicas, como constantes, variáveis, funções eexpressões, etc.

Valores booleanos são basicamente tipo inteiro. Variáveis do tipo booleano possuemdois valores possíveis predefinidos, True e False . As expressões que resolvem um

Page 40: Guia rápido de Pascal

valor booleano também podem ser atribuídas a um tipo booleano.

Free Pascal também suporta os tipos ByteBool , WordBool e LongBool . Estes sãodo tipo Byte, Word ou Longint, respectivamente.

O valor False é equivalente a 0 (zero) e qualquer valor diferente de zero é consideradoTrue ao converter para um valor booleano. Um valor booleano de True é convertido em-1 caso seja atribuído a uma variável do tipo LongBool.

Note-se que os operadores lógicos e , ou e não são definidos para tipos de dadosbooleanos.

Uma variável do tipo booleano é declarada usando a palavra-chave var.

var boolean-identifier: boolean;

por exemplo,

var choice: boolean;

program exBoolean; var exit: boolean; choice: char; begin writeln('Do you want to continue? '); writeln('Enter Y/y for yes, and N/n for no'); readln(choice); if(choice = 'n') then exit := true else exit := false; if (exit) then writeln(' Good Bye!') else writeln('Please Continue'); readln; end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Do you want to continue?

Enter Y/y for yes, and N/n for no

N

Good Bye!

Declaração de tipos de dados booleanos

Exemplo Demonstração ao vivo

Page 41: Guia rápido de Pascal

Y

Please Continue

Pascal - MatrizesA linguagem de programação Pascal fornece uma estrutura de dados chamada matriz,que pode armazenar uma coleção sequencial de tamanho fixo de elementos do mesmotipo. Uma matriz é usada para armazenar uma coleção de dados, mas geralmente émais útil pensar em uma matriz como uma coleção de variáveis do mesmo tipo.

Em vez de declarar variáveis individuais, como número1, número2, ... e número100,você declara uma variável de matriz, como números e números de uso [1], números[2] e ..., números [100] para representar variáveis individuais. Um elemento específicoem uma matriz é acessado por um índice.

Todas as matrizes consistem em locais de memória contíguos. O endereço mais baixocorresponde ao primeiro elemento e o endereço mais alto ao último elemento.

Por favor, note que se você quiser uma matriz de estilo C a partir do índice 0, você sóprecisa iniciar o índice de 0, em vez de 1.

Para declarar uma matriz em Pascal, um programador pode declarar o tipo e, emseguida, criar variáveis dessa matriz ou declarar diretamente a variável da matriz.

A forma geral de declaração de tipo de array unidimensional é -

type array-identifier = array[index-type] of element-type;

Onde,

array-identifier - indica o nome do tipo de matriz.

tipo de índice - especifica o subscrito da matriz; pode ser qualquer tipo dedado escalar, exceto o real

tipo de elemento - especifica os tipos de valores que serão armazenados

Por exemplo,

type vector = array [ 1..25] of real; var velocity: vector;

Declarando Matrizes

Page 42: Guia rápido de Pascal

Agora, velocidade é uma matriz variável de tipo de vetor, que é suficiente para suportaraté 25 números reais.

Para iniciar a matriz do índice 0, a declaração seria -

type vector = array [ 0..24] of real; var velocity: vector;

Em Pascal, um subscrito de array poderia ser de qualquer tipo escalar como, inteiro,booleano, enumerado ou sub-intervalo, exceto real. Os subscritos de array tambémpodem ter valores negativos.

Por exemplo,

type temperature = array [-10 .. 50] of real; var day_temp, night_temp: temperature;

Vamos pegar outro exemplo em que o subscrito é do tipo de caractere -

type ch_array = array[char] of 1..26; var alphabet: ch_array;

Subscrito poderia ser do tipo enumerado -

type color = ( red, black, blue, silver, beige); car_color = array of [color] of boolean; var car_body: car_color;

Em Pascal, os arrays são inicializados por meio de atribuição, seja especificando umsubscrito específico ou usando um loop de tarefas.

Por exemplo -

type ch_array = array[char] of 1..26; var alphabet: ch_array; c: char; begin ... for c:= 'A' to 'Z' do alphabet[c] := ord[m]; (* the ord() function returns the ordinal values *)

Tipos de Subscrito de Matriz

Inicializando matrizes

Page 43: Guia rápido de Pascal

Um elemento é acessado pela indexação do nome da matriz. Isso é feito colocando oíndice do elemento dentro de colchetes após o nome da matriz. Por exemplo -

a: integer; a: = alphabet['A'];

A declaração acima pegará o primeiro elemento da matriz chamada alphabet e atribuiráo valor à variável a.

A seguir, um exemplo, que usará todos os três conceitos acima mencionados, viz.declaração, atribuição e acesso a matrizes -

program exArrays; var n: array [1..10] of integer; (* n is an array of 10 integers *) i, j: integer; begin (* initialize elements of array n to 0 *) for i := 1 to 10 do n[ i ] := i + 100; (* set element at location i to i + 100 *) (* output each array element's value *) for j:= 1 to 10 do writeln('Element[', j, '] = ', n[j] ); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Element[1] = 101

Element[2] = 102

Element[3] = 103

Element[4] = 104

Element[5] = 105

Element[6] = 106

Element[7] = 107

Element[8] = 108

Element[9] = 109

Element[10] = 110

Matrizes são importantes para Pascal e devem precisar de mais detalhes. Existemalguns conceitos importantes relacionados a matriz que devem ser claros para umprogramador Pascal -

Sr.Não

Conceito e Descrição

1 Matrizes multidimensionais

Acessando Elementos da Matriz

Demonstração ao vivo

Matrizes de Pascal em detalhe

Page 44: Guia rápido de Pascal

Pascal suporta matrizes multidimensionais. A forma mais simples do arraymultidimensional é o array bidimensional.

2

Matriz dinâmicaNeste tipo de matrizes, o comprimento inicial é zero. O comprimento real damatriz deve ser definido com a função padrão SetLength .

3

Matriz empacotadaEsses arrays são bit-packed, ou seja, cada caractere ou valores de verdade sãoarmazenados em bytes consecutivos ao invés de usar uma unidade dearmazenamento, geralmente uma palavra (4 bytes ou mais).

4

Passando matrizes para subprogramasVocê pode passar para um subprograma um ponteiro para uma matrizespecificando o nome da matriz sem um índice.

Pascal - ponteirosPonteiros em Pascal são fáceis e divertidos de aprender. Algumas tarefas deprogramação Pascal são executadas mais facilmente com ponteiros, e outras tarefas,como alocação de memória dinâmica, não podem ser executadas sem o uso deponteiros. Por isso, torna-se necessário aprender os ponteiros para se tornar umperfeito programador Pascal. Vamos começar a aprendê-las em etapas simples e fáceis.

Como você sabe, cada variável é um local de memória e cada localização de memóriatem seu endereço definido, que pode ser acessado usando o nome da variável deponteiro, que indica um endereço na memória.

Um ponteiro é uma variável dinâmica, cujo valor é o endereço de outra variável, isto é,endereço direto da localização da memória. Como qualquer variável ou constante, vocêdeve declarar um ponteiro antes de poder usá-lo para armazenar qualquer endereçovariável. A forma geral de uma declaração de variável de ponteiro é -

type ptr-identifier = ^base-variable-type;

O tipo de ponteiro é definido prefixando a seta para cima do símbolo de interpolação(^) com o tipo base. O tipo base define os tipos de itens de dados. Quando umavariável de ponteiro é definida para ser de determinado tipo, ela pode apontar itens dedados apenas desse tipo. Uma vez definido um tipo de ponteiro, podemos usar adeclaração var para declarar variáveis de ponteiro.

var p1, p2, ... : ptr-identifier;

Quais são os ponteiros?

Page 45: Guia rápido de Pascal

A seguir estão algumas declarações de ponteiro válidas -

type Rptr = ^real; Cptr = ^char; Bptr = ^ Boolean; Aptr = ^array[1..5] of real; date-ptr = ^ date; Date = record Day: 1..31; Month: 1..12; Year: 1900..3000; End; var a, b : Rptr; d: date-ptr;

As variáveis de ponteiro são desreferenciadas usando o mesmo sinal de circunflexo (^).Por exemplo, a variável associada referida por um ponteiro rptr é rptr ^ . Pode seracessado como -

rptr^ := 234.56;

O exemplo a seguir ilustrará esse conceito -

program exPointers; var number: integer; iptr: ^integer; begin number := 100; writeln('Number is: ', number); iptr := @number; writeln('iptr points to a value: ', iptr^); iptr^ := 200; writeln('Number is: ', number); writeln('iptr points to a value: ', iptr^); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Number is: 100

iptr points to a value: 100

Number is: 200

iptr points to a value: 200

Em Pascal, podemos atribuir o endereço de uma variável a uma variável de ponteirousando o operador de endereço (@). Usamos esse ponteiro para manipular e acessar oitem de dados. No entanto, se por algum motivo, precisarmos trabalhar com o próprioendereço de memória, precisamos armazená-lo em uma variável de tipo de palavra.

Demonstração ao vivo

Imprimir um endereço de memória em Pascal

Page 46: Guia rápido de Pascal

Vamos estender o exemplo acima para imprimir o endereço de memória armazenado noponteiro iptr -

program exPointers; var number: integer; iptr: ^integer; y: ^word; begin number := 100; writeln('Number is: ', number); iptr := @number; writeln('iptr points to a value: ', iptr^); iptr^ := 200; writeln('Number is: ', number); writeln('iptr points to a value: ', iptr^); y := addr(iptr); writeln(y^); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Number is: 100

iptr points to a value: 100

Number is: 200

iptr points to a value: 200

45504

É sempre uma boa prática atribuir um valor NIL a uma variável de ponteiro, caso vocênão tenha o endereço exato a ser atribuído. Isso é feito no momento da declaração davariável. Um ponteiro atribuído a NIL aponta para lugar nenhum. Considere o seguinteprograma -

program exPointers; var number: integer; iptr: ^integer; y: ^word; begin iptr := nil; y := addr(iptr); writeln('the vaule of iptr is ', y^); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

The value of ptr is 0

Para verificar um ponteiro nulo, você pode usar uma instrução if da seguinte forma -

Demonstração ao vivo

Ponteiros NIL

Demonstração ao vivo

Page 47: Guia rápido de Pascal

if(ptr <> nill )then (* succeeds if p is not null *) if(ptr = nill)then (* succeeds if p is null *)

Os ponteiros têm muitos conceitos, mas são muito importantes para a programação emPascal. Existem alguns conceitos importantes de ponteiro, que devem ser claros paraum programador Pascal -

Sr.Não

Conceito e Descrição

1

Pascal - aritmética de ponteiroExistem quatro operadores aritméticos que podem ser usados em ponteiros:incremento, decremento, +, -

2Pascal - matriz de ponteirosVocê pode definir matrizes para manter um número de ponteiros.

3

Pascal - ponteiro para ponteiroPascal permite que você tenha um ponteiro em um ponteiro e assim pordiante.

4

Passando ponteiros para subprogramas em PascalPassar um argumento por referência ou por endereço permite que oargumento transmitido seja alterado no subprograma de chamada pelosubprograma chamado.

5Retornar ponteiro de subprogramas em PascalPascal permite que um subprograma retorne um ponteiro.

Pascal - RecordsOs arrays Pascal permitem que você defina o tipo de variáveis que podem conter váriositens de dados do mesmo tipo, mas um registro é outro tipo de dados definidos pelousuário disponível em Pascal que permite combinar itens de dados de diferentes tipos.

Registros consistem em campos diferentes. Suponha que você queira acompanhar seuslivros em uma biblioteca. Você pode acompanhar os seguintes atributos sobre cadalivro:

Título

Autor

Sujeito

ID do livro

Ponteiros Pascal em Detalhe

Page 48: Guia rápido de Pascal

Para definir um tipo de registro, você pode usar a declaração de declaração de tipo. Otipo de registro é definido como -

type record-name = record field-1: field-type1; field-2: field-type2; ... field-n: field-typen; end;

Aqui está a maneira que você declararia o registro do Livro -

type Books = record title: packed array [1..50] of char; author: packed array [1..50] of char; subject: packed array [1..100] of char; book_id: integer; end;

As variáveis de registro são definidas da maneira usual

var r1, r2, ... : record-name;

Alternativamente, você pode definir diretamente uma variável de tipo de registro como-

var Books : record title: packed array [1..50] of char; author: packed array [1..50] of char; subject: packed array [1..100] of char; book_id: integer; end;

Para acessar qualquer campo de um registro, usamos o operador de acesso de membro(.). O operador de acesso de membro é codificado como um período entre o nome davariável de registro e o campo que desejamos acessar. A seguir, o exemplo paraexplicar o uso da estrutura -

program exRecords; type Books = record title: packed array [1..50] of char; author: packed array [1..50] of char; subject: packed array [1..100] of char; book_id: longint; end; var

Definindo um registro

Acessando campos de um registro

Demonstração ao vivo

Page 49: Guia rápido de Pascal

Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *) begin (* book 1 specification *) Book1.title := 'C Programming'; Book1.author := 'Nuha Ali '; Book1.subject := 'C Programming Tutorial'; Book1.book_id := 6495407; (* book 2 specification *) Book2.title := 'Telecom Billing'; Book2.author := 'Zara Ali'; Book2.subject := 'Telecom Billing Tutorial'; Book2.book_id := 6495700; (* print Book1 info *) writeln ('Book 1 title : ', Book1.title); writeln('Book 1 author : ', Book1.author); writeln( 'Book 1 subject : ', Book1.subject); writeln( 'Book 1 book_id : ', Book1.book_id); writeln; (* print Book2 info *) writeln ('Book 2 title : ', Book2.title); writeln('Book 2 author : ', Book2.author); writeln( 'Book 2 subject : ', Book2.subject); writeln( 'Book 2 book_id : ', Book2.book_id); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Book 1 title : C Programming

Book 1 author : Nuha Ali

Book 1 subject : C Programming Tutorial

Book 1 book_id : 6495407

Book 2 title : Telecom Billing

Book 2 author : Zara Ali

Book 2 subject : Telecom Billing Tutorial

Book 2 book_id : 6495700

Você pode passar um registro como um argumento de subprograma de maneira muitosemelhante à passagem de qualquer outra variável ou ponteiro. Você acessaria oscampos de registro da mesma forma que acessou no exemplo acima -

program exRecords; type Books = record title: packed array [1..50] of char; author: packed array [1..50] of char; subject: packed array [1..100] of char; book_id: longint; end; var Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *)

Registros como Argumentos do Subprograma

Demonstração ao vivo

Page 50: Guia rápido de Pascal

(* procedure declaration *) procedure printBook( var book: Books ); begin (* print Book info *) writeln ('Book title : ', book.title); writeln('Book author : ', book.author); writeln( 'Book subject : ', book.subject); writeln( 'Book book_id : ', book.book_id); end; begin (* book 1 specification *) Book1.title := 'C Programming'; Book1.author := 'Nuha Ali '; Book1.subject := 'C Programming Tutorial'; Book1.book_id := 6495407; (* book 2 specification *) Book2.title := 'Telecom Billing'; Book2.author := 'Zara Ali'; Book2.subject := 'Telecom Billing Tutorial'; Book2.book_id := 6495700; (* print Book1 info *) printbook(Book1); writeln; (* print Book2 info *) printbook(Book2); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Book 1 title : C Programming

Book 1 author : Nuha Ali

Book 1 subject : C Programming Tutorial

Book 1 book_id : 6495407

Book 2 title : Telecom Billing

Book 2 author : Zara Ali

Book 2 subject : Telecom Billing Tutorial

Book 2 book_id : 6495700

Você pode definir ponteiros para registros de maneira muito semelhante ao definir oponteiro para qualquer outra variável da seguinte maneira -

type record-ptr = ^ record-name; record-name = record field-1: field-type1; field-2: field-type2; ... field-n: field-typen; end;

Ponteiros para Registros

Page 51: Guia rápido de Pascal

Agora, você pode armazenar o endereço de uma variável de tipo de registro na variávelde ponteiro acima definida. Para declarar uma variável do tipo de ponteiro criado, use apalavra-chave var -

var r1, r2, ... : record-ptr;

Antes de usar esses ponteiros, você deve criar armazenamento para uma variável detipo de nome de registro, que será manipulada por esses ponteiros.

new(r1); new(r2);

Para acessar os membros de um registro usando um ponteiro para esse registro, vocêdeve usar o ^. operador da seguinte forma -

r1^.feild1 := value1; r1^.feild2 := value2; ... r1^fieldn := valuen;

Finalmente, não esqueça de descartar o armazenamento usado, quando ele não estivermais em uso -

dispose(r1); dispose(r2);

Vamos reescrever o primeiro exemplo usando um ponteiro para o registro Books.Espero que isso seja fácil para você entender o conceito -

program exRecords; type BooksPtr = ^ Books; Books = record title: packed array [1..50] of char; author: packed array [1..50] of char; subject: packed array [1..100] of char; book_id: longint; end; var (* Declare Book1 and Book2 of pointer type that refers to Book type *) Book1, Book2: BooksPtr; begin new(Book1); new(book2); (* book 1 specification *) Book1^.title := 'C Programming'; Book1^.author := 'Nuha Ali '; Book1^.subject := 'C Programming Tutorial'; Book1^.book_id := 6495407; (* book 2 specification *) Book2^.title := 'Telecom Billing'; Book2^.author := 'Zara Ali'; Book2^.subject := 'Telecom Billing Tutorial';

Demonstração ao vivo

Page 52: Guia rápido de Pascal

Book2^.book_id := 6495700; (* print Book1 info *) writeln ('Book 1 title : ', Book1^.title); writeln('Book 1 author : ', Book1^.author); writeln( 'Book 1 subject : ', Book1^.subject); writeln( 'Book 1 book_id : ', Book1^.book_id); (* print Book2 info *) writeln ('Book 2 title : ', Book2^.title); writeln('Book 2 author : ', Book2^.author); writeln( 'Book 2 subject : ', Book2^.subject); writeln( 'Book 2 book_id : ', Book2^.book_id); dispose(Book1); dispose(Book2); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Book 1 title : C Programming

Book 1 author : Nuha Ali

Book 1 subject : C Programming Tutorial

Book 1 book_id : 6495407

Book 2 title : Telecom Billing

Book 2 author : Zara Ali

Book 2 subject : Telecom Billing Tutorial

Book 2 book_id : 6495700

Discutimos que os membros de um registro podem ser acessados usando o operador deacesso de membro (.). Desta forma, o nome da variável de registro deve ser escritotoda vez. A instrução With fornece uma maneira alternativa de fazer isso.

Veja o seguinte trecho de código retirado do nosso primeiro exemplo -

(* book 1 specification *) Book1.title := 'C Programming'; Book1.author := 'Nuha Ali '; Book1.subject := 'C Programming Tutorial'; Book1.book_id := 6495407;

A mesma atribuição pode ser escrita usando a instrução With como -

(* book 1 specification *) With Book1 do begin title := 'C Programming'; author := 'Nuha Ali '; subject := 'C Programming Tutorial'; book_id := 6495407; end;

Pascal - Variantes

A declaração com

Page 53: Guia rápido de Pascal

Pascal suporta um tipo exclusivo de armazenamento denominado variantes. Você podeatribuir qualquer tipo simples de valores em uma variável variante. O tipo de valorarmazenado em uma variante é determinado apenas no tempo de execução. Quasequalquer tipo simples pode ser atribuído a variantes: tipos ordinais, tipos de string,tipos int64.

Tipos estruturados, como conjuntos, registros, matrizes, arquivos, objetos e classes,não são compatíveis com atribuição com uma variante. Você também pode atribuir umponteiro a uma variante.

Free Pascal suporta variantes.

Você pode declarar o tipo de variante como qualquer outro tipo usando a palavra-chavevar . A sintaxe para declarar um tipo de variante é -

var v: variant;

Agora, essa variável variante v pode ser atribuída a quase todos os tipos simples,incluindo os tipos enumerados e vice-versa.

type color = (red, black, white); var v : variant; i : integer; b : byte; w : word; q : int64; e : extended; d : double; en : color; as : ansistring; ws : widestring; begin v := i; v := b; v := w; v := q; v := e; v := en; v := d: v := as; v := ws; end;

O exemplo a seguir ilustraria o conceito -

Program exVariant; uses variants;

Declarando uma variante

Exemplo

Demonstração ao vivo

Page 54: Guia rápido de Pascal

type color = (red, black, white); var v : variant; i : integer; r: real; c : color; as : ansistring; begin i := 100; v:= i; writeln('Variant as Integer: ', v); r:= 234.345; v:= r; writeln('Variant as real: ', v); c := red; v := c; writeln('Variant as Enumerated data: ', v); as:= ' I am an AnsiString'; v:= as; writeln('Variant as AnsiString: ', v); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Variant as Integer: 100

Variant as real: 234.345

Variant as Enumerated data: 0

Variant as AnsiString: I am an AnsiString

Pascal - ConjuntosUm conjunto é uma coleção de elementos do mesmo tipo. Pascal permite definir o tipode dados definido. Os elementos em um conjunto são chamados de seus membros. Namatemática, os conjuntos são representados colocando os membros entre chaves {} .No entanto, em Pascal, os elementos de conjunto são colocados entre colchetes [], quesão referidos como construtor de conjunto.

Os tipos de conjunto Pascal são definidos como

type set-identifier = set of base type;

Variáveis do tipo de conjunto são definidas como

var s1, s2, ...: set-identifier;

ou,

Definindo tipos e variáveis de conjunto

Page 55: Guia rápido de Pascal

s1, s2...: set of base type;

Exemplos de alguma declaração de tipo de conjunto válida são -

type Days = (mon, tue, wed, thu, fri, sat, sun); Letters = set of char; DaySet = set of days; Alphabets = set of 'A' .. 'Z'; studentAge = set of 13..20;

Você pode executar as seguintes operações de conjunto em conjuntos Pascal.

Sr.Não

Operações e descrições

1

União

Isso une dois conjuntos e fornece um novo conjunto com membros de ambosos conjuntos.

2

Diferença

Obtém a diferença de dois conjuntos e fornece um novo conjunto comelementos não comuns a nenhum conjunto.

3

Interseção

Obtém a interseção de dois conjuntos e fornece um novo conjunto comelementos comuns aos dois conjuntos.

4

Inclusão

Um conjunto P é incluído no conjunto Q, se todos os itens em P tambémestiverem em Q, mas não vice-versa.

5

Diferença simétrica

Obtém a diferença simétrica de dois conjuntos e fornece um conjunto deelementos, que estão em um dos conjuntos e não em sua interseção.

6Em

Ele verifica a associação.

A tabela a seguir mostra todos os operadores definidos suportados pelo Free Pascal.Suponha que S1 e S2 sejam dois conjuntos de caracteres, tais que -

Definir operadores

Page 56: Guia rápido de Pascal

S1: = ['a', 'b', 'c'];

S2: = ['c', 'd', 'e'];

Operador Descrição Exemplo

+ União de dois conjuntosS1 + S2 vai dar um set

['a', 'b', 'c', 'd', 'e']

- Diferença de dois conjuntosS1 - S2 vai dar um set

['a', 'b']

* Intersecção de dois conjuntosS1 * S2 dará um set

['c']

> < Diferença simétrica de dois conjuntosS1> <S2 dará um set ['a', 'b', 'd',

'e']

= Verifica a igualdade de dois conjuntosS1 = S2 dará o valor booleano

False

<> Verifica a não igualdade de dois conjuntosS1 <> S2 dará o valor booleano

True

<=Contém (Verifica se um conjunto é um

subconjunto do outro)

S1 <= S2 dará o valor booleanoFalse

IncluirInclui um elemento no conjunto;

basicamente é a união de um conjunto eum elemento do mesmo tipo de base

Incluir (S1, ['d']) dará umconjunto

['a', 'b', 'c', 'd']

Excluir

Exclui um elemento de um conjunto;basicamente é a diferença de um conjunto

e um elemento do mesmo tipo de base

Excluir (S2, ['d']) dará umconjunto

['c', 'e']

EmVerifica a associação definida de um

elemento em um conjunto

['e'] em S2 fornece o valorbooleano True

O exemplo a seguir ilustra o uso de alguns desses operadores -

program setColors; type color = (red, blue, yellow, green, white, black, orange); colors = set of color;

Exemplo

Demonstração ao vivo

Page 57: Guia rápido de Pascal

procedure displayColors(c : colors); const names : array [color] of String[7] = ('red', 'blue', 'yellow', 'green', 'white', 'black', 'orange'); var cl : color; s : String; begin s:= ' '; for cl:=red to orange do if cl in c then begin if (s<>' ') then s :=s +' , '; s:=s+names[cl]; end; writeln('[',s,']'); end; var c : colors; begin c:= [red, blue, yellow, green, white, black, orange]; displayColors(c); c:=[red, blue]+[yellow, green]; displayColors(c); c:=[red, blue, yellow, green, white, black, orange] - [green, white]; displayColors(c); c:= [red, blue, yellow, green, white, black, orange]*[green, white]; displayColors(c); c:= [red, blue, yellow, green]><[yellow, green, white, black]; displayColors(c); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

[ red , blue , yellow , green , white , black , orange]

[ red , blue , yellow , green]

[ red , blue , yellow , black , orange]

[ green , white]

[ red , blue , white , black]

Pascal - Manuseamento de FicheirosPascal trata um arquivo como uma seqüência de componentes, que deve ser do tipouniforme. O tipo de um arquivo é determinado pelo tipo dos componentes. O tipo dedados do arquivo é definido como -

type file-name = file of base-type;

Onde, o tipo base indica o tipo dos componentes do arquivo. O tipo base poderia serqualquer coisa como integer, real, Boolean, enumerated, subrange, record, arrays e

Page 58: Guia rápido de Pascal

sets, exceto outro tipo de arquivo. Variáveis de um tipo de arquivo são criadas usando adeclaração var -

var f1, f2,...: file-name;

A seguir estão alguns exemplos de definição de alguns tipos de arquivo e variáveis dearquivo -

type rfile = file of real; ifile = file of integer; bfile = file of boolean; datafile = file of record arrfile = file of array[1..4] of integer; var marks: arrfile; studentdata: datafile; rainfalldata: rfile; tempdata: ifile; choices: bfile;

Vamos escrever um programa que crie um arquivo de dados para os registros dosalunos. Criaria um arquivo chamado students.dat e gravaria os dados de um aluno nele-

program DataFiles; type StudentRecord = Record s_name: String; s_addr: String; s_batchcode: String; end; var Student: StudentRecord; f: file of StudentRecord; begin Assign(f,'students.dat'); Rewrite(f); Student.s_name := 'John Smith'; Student.s_addr := 'United States of America'; Student.s_batchcode := 'Computer Science'; Write(f,Student); Close(f); end.

Quando compilado e executado, o programa criaria um arquivo chamado students.datno diretório de trabalho. Você pode abrir o arquivo usando um editor de texto, como obloco de notas, para examinar os dados de John Smith.

Criando e escrevendo em um arquivo

Lendo de um arquivo

Page 59: Guia rápido de Pascal

Acabamos de criar e escrever em um arquivo chamado students.dat. Agora, vamosescrever um programa que leia os dados do aluno do arquivo -

program DataFiles; type StudentRecord = Record s_name: String; s_addr: String; s_batchcode: String; end; var Student: StudentRecord; f: file of StudentRecord; begin assign(f, 'students.dat'); reset(f); while not eof(f) do begin read(f,Student); writeln('Name: ',Student.s_name); writeln('Address: ',Student.s_addr); writeln('Batch Code: ', Student.s_batchcode); end; close(f); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Name: John Smith

Address: United States of America

Batch Code: Computer Science

Pascal permite que variáveis de arquivo sejam usadas como parâmetros emsubprogramas padrão e definidos pelo usuário. O exemplo a seguir ilustra esseconceito. O programa cria um arquivo chamado rainfall.txt e armazena alguns dados deprecipitação. Em seguida, ele abre o arquivo, lê os dados e calcula a precipitaçãomédia.

Por favor, note que, se você usar um parâmetro de arquivo com subprogramas,ele deve ser declarado como um parâmetro var.

program addFiledata; const MAX = 4; type raindata = file of real; var rainfile: raindata; filename: string; procedure writedata(var f: raindata);

Arquivos como Parâmetro do Subprograma

Page 60: Guia rápido de Pascal

var data: real; i: integer; begin rewrite(f, sizeof(data)); for i:=1 to MAX do begin writeln('Enter rainfall data: '); readln(data); write(f, data); end; close(f); end; procedure computeAverage(var x: raindata); var d, sum: real; average: real; begin reset(x); sum:= 0.0; while not eof(x) do begin read(x, d); sum := sum + d; end; average := sum/MAX; close(x); writeln('Average Rainfall: ', average:7:2); end; begin writeln('Enter the File Name: '); readln(filename); assign(rainfile, filename); writedata(rainfile); computeAverage(rainfile); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter the File Name:

rainfall.txt

Enter rainfall data:

34

Enter rainfall data:

45

Enter rainfall data:

56

Enter rainfall data:

78

Average Rainfall: 53.25

Page 61: Guia rápido de Pascal

Um arquivo de texto, em Pascal, consiste em linhas de caracteres em que cada linha éterminada com um marcador de fim de linha. Você pode declarar e definir essesarquivos como -

type file-name = text;

A diferença entre um arquivo normal de caracteres e um arquivo de texto é que umarquivo de texto é dividido em linhas, cada uma finalizada por um marcador especial defim de linha, inserido automaticamente pelo sistema. O exemplo a seguir cria e gravaem um arquivo de texto chamado contact.txt -

program exText; var filename, data: string; myfile: text; begin writeln('Enter the file name: '); readln(filename); assign(myfile, filename); rewrite(myfile); writeln(myfile, 'Note to Students: '); writeln(myfile, 'For details information on Pascal Programming'); writeln(myfile, 'Contact: Tutorials Point'); writeln('Completed writing'); close(myfile); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Enter the file name:

contact.txt

Completed writing

Anexar a um arquivo significa gravar em um arquivo existente que já tenha algunsdados sem sobrescrever o arquivo. O programa a seguir ilustra isso -

program exAppendfile; var myfile: text; info: string; begin assign(myfile, 'contact.txt'); append(myfile); writeln('Contact Details'); writeln('[email protected]');

Arquivos de texto

Anexando a um arquivo

Page 62: Guia rápido de Pascal

close(myfile); (* let us read from this file *) assign(myfile, 'contact.txt'); reset(myfile); while not eof(myfile) do begin readln(myfile, info); writeln(info); end; close(myfile); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Contact Details

[email protected]

Note to Students:

For details information on Pascal Programming

Contact: Tutorials Point

Free Pascal fornece as seguintes funções / procedimentos para manipulação de arquivos-

Sr.Não.

Nome e descrição da função

1procedimento Append (var t: Text);

Abre um arquivo no modo de anexação

2procedure Atribuir (out f: file; const Name :);

Atribui um nome a um arquivo

3procedure Atribuir (out f: file; p: PChar);

Atribui um nome a um arquivo

4procedure Atribuir (out f: file; c: Char);

Atribui um nome a um arquivo

5procedure Atribuir (fora f: TypedFile; const Name :);

Atribui um nome a um arquivo

6 procedure Atribuir (fora f: TypedFile; p: PChar);

Atribui um nome a um arquivo

Funções de manipulação de arquivos

Page 63: Guia rápido de Pascal

7procedure Atribuir (out f: TypedFile; c: Char);

Atribui um nome a um arquivo

8Atribuir procedimento (out t: Text; const s :);

Atribui um nome a um arquivo

9procedure Assign (out t: Texto; p: PChar);

Atribui um nome a um arquivo

10Atribuir procedimento (out t: Text; c: Char);

Atribui um nome a um arquivo

11

procedimento BlockRead (var f: arquivo; var Buf; contagem: Int64;var Resultado: Int64);

Lê dados de um arquivo na memória

12

procedimento BlockRead (var f: arquivo; var Buf; count: LongInt; varResultado: LongInt);

Lê dados de um arquivo na memória

13

procedimento BlockRead (var f: arquivo; var Buf; contagem: Cardinal;var Resultado: Cardinal);

Lê dados de um arquivo na memória

14

procedimento BlockRead (var f: arquivo; var Buf; count: Word; varResultado: Word);

Lê dados de um arquivo na memória

15

procedimento BlockRead (var f: arquivo; var Buf; count: Word; varResultado: Integer);

Lê dados de um arquivo na memória

16procedimento BlockRead (var f: arquivo; var Buf; contagem: Int64);

Lê dados de um arquivo na memória

17 procedimento BlockWrite (var f: arquivo; const Buf; Contagem: Int64;var Resultado: Int64);

Page 64: Guia rápido de Pascal

Grava dados da memória em um arquivo

18

procedimento BlockWrite (var f: arquivo; const Buf; Contagem:LongInt; var Resultado: LongInt);

Grava dados da memória em um arquivo

19

procedimento BlockWrite (var f: arquivo; const Buf; Contagem:Cardinal; var Resultado: Cardinal);

Grava dados da memória em um arquivo

20

procedimento BlockWrite (var f: arquivo; const Buf; Contagem: Word;var Resultado: Word);

Grava dados da memória em um arquivo

21

procedimento BlockWrite (var f: arquivo; const Buf; Contagem: Word;var Resultado: Integer);

Grava dados da memória em um arquivo

22

procedimento BlockWrite (var f: arquivo; const Buf; Contagem:LongInt);

Grava dados da memória em um arquivo

23procedure Close (var f: arquivo);

Fecha um arquivo

24procedure Close (var t: texto);

Fecha um arquivo

25função EOF (var f: file): Boolean;

Verifica o final do arquivo

26função EOF (var t: Text): Boolean;

Verifica o final do arquivo

27função EOF: Boolean;

Verifica o final do arquivo

28 função EOLn (var t: Text): Boolean;

Page 65: Guia rápido de Pascal

Cheques para o final da linha

29função EOLn: Boolean;

Cheques para o final da linha

30procedimento Erase (var f: file);

Exclui o arquivo do disco

31procedimento Apagar (var t: Texto);

Exclui o arquivo do disco

32função FilePos (var f: file): Int64;

Posição no arquivo

33função FileSize (var f: file): Int64;

Tamanho do arquivo

34procedimento Flush (var t: Text);

Grava buffers de arquivos no disco

35função IOResult: Word;

Retorna o resultado da última operação do IO do arquivo

36leitura do procedimento (var F: Text; Args: Arguments);

Lê do arquivo em variável

37leitura do procedimento (Args: Argumentos);

Lê do arquivo em variável

38procedimento ReadLn (var F: Text; Args: Arguments);

Lê do arquivo para a variável e vai para a próxima linha

39procedimento ReadLn (Args: Arguments);

Lê do arquivo para a variável e vai para a próxima linha

40procedimento Renomear (var f: arquivo; const s :);

Renomeia o arquivo no disco

Page 66: Guia rápido de Pascal

41 procedimento Renomear (var f: file; p: PChar);

Renomeia o arquivo no disco

42procedimento Renomear (var f: file; c: Char);

Renomeia o arquivo no disco

43procedimento Renomear (var t: Text; const s);

Renomear arquivo no disco

44procedimento Renomear (var t: Text; p: PChar);

Renomeia o arquivo no disco

45procedimento Renomear (var t: Text; c: Char);

Renomeia o arquivo no disco

46procedimento Reset (var f: file; l: LongInt);

Abre o arquivo para leitura

47procedimento Reset (var f: file);

Abre o arquivo para leitura

48procedimento Reset (var f: TypedFile);

Abre o arquivo para leitura

49procedimento Reset (var t: Text);

Abre o arquivo para leitura

50Procedimento Reescreva (var f: file; l: LongInt);

Abre o arquivo para escrever

51procedimento Reescreva (var f: file);

Abre o arquivo para escrever

52procedimento Reescreva (var f: TypedFile);

Abre o arquivo para escrever

53 procedimento Reescreva (var t: Text);

Page 67: Guia rápido de Pascal

Abre o arquivo para escrever

54procedimento Seek (var f: file; Pos: Int64);

Define a posição do arquivo

55função SeekEOF (var t: Text): Boolean;

Define a posição do arquivo para o final do arquivo

56function SeekEOF: Boolean;

Define a posição do arquivo para o final do arquivo

57function SeekEOLn (var t: Text): Boolean;

Define a posição do arquivo para o final da linha

58function SeekEOLn: Boolean;

Define a posição do arquivo para o final da linha

59procedimento SetTextBuf (var f: Text; var Buf);

Define o tamanho do buffer de arquivo

60procedimento SetTextBuf (var f: Texto; var Buf; Tamanho: SizeInt);

Define o tamanho do buffer de arquivo

61truncar procedimento (var F: arquivo);

Truncar o arquivo na posição

62procedimento Write (Args: Arguments);

Escreve variável para arquivo

63procedimento Write (var F: Text; Args: Argumentos);

Escrever variável para arquivo

64procedimento Writeln (Args: Argumentos);

Escreve variável para arquivar e anexar nova linha

65procedimento WriteLn (var F: Text; Args: Arguments);

Escreve variável para arquivar e anexar nova linha

Page 68: Guia rápido de Pascal

Pascal - Gerenciamento De MemóriaEste capítulo explica o gerenciamento de memória dinâmica em Pascal. A linguagem deprogramação Pascal fornece várias funções para alocação e gerenciamento de memória.

Ao fazer programação, se você está ciente sobre o tamanho de um array, então é fácil evocê pode defini-lo como um array. Por exemplo, para armazenar um nome de qualquerpessoa, ele pode ir no máximo 100 caracteres para que você possa definir algo daseguinte forma:

var name: array[1..100] of char;

Mas agora, vamos considerar uma situação em que você não tem idéia sobre otamanho do texto que precisa armazenar, por exemplo, você deseja armazenar umadescrição detalhada sobre um tópico. Aqui, precisamos definir um ponteiro para stringsem definir quanta memória é necessária.

Pascal fornece um novo procedimento para criar variáveis de ponteiro.

program exMemory; var name: array[1..100] of char; description: ^string; begin name:= 'Zara Ali'; new(description); if not assigned(description) then writeln(' Error - unable to allocate required memory') else description^ := 'Zara ali a DPS student in class 10th'; writeln('Name = ', name ); writeln('Description: ', description^ ); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Name = Zara Ali

Description: Zara ali a DPS student in class 10th

Agora, se você precisar definir um ponteiro com um número específico de bytes a serreferido posteriormente, você deve usar a função getmem ou o procedimento getmem, que possui a seguinte sintaxe -

procedure Getmem( out p: pointer; Size: PtrUInt ); function GetMem(

Alocando Memória Dinamicamente

Page 69: Guia rápido de Pascal

size: PtrUInt ):pointer;

No exemplo anterior, declaramos um ponteiro para uma string. Uma string tem umvalor máximo de 255 bytes. Se você realmente não precisa de tanto espaço, ou umespaço maior, em termos de bytes, o subprograma getmem permite especificar isso.Vamos reescrever o exemplo anterior, usando o getmem -

program exMemory; var name: array[1..100] of char; description: ^string; begin name:= 'Zara Ali'; description := getmem(200); if not assigned(description) then writeln(' Error - unable to allocate required memory') else description^ := 'Zara ali a DPS student in class 10th'; writeln('Name = ', name ); writeln('Description: ', description^ ); freemem(description); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Name = Zara Ali

Description: Zara ali a DPS student in class 10th

Assim, você tem controle total e pode passar qualquer valor de tamanho ao alocarmemória ao contrário de arrays, onde uma vez que você definiu o tamanho não podeser alterado.

Quando o programa é lançado, o sistema operacional libera automaticamente toda amemória alocada pelo seu programa, mas como uma boa prática quando você nãoprecisa mais de memória, você deve liberar essa memória.

Pascal fornece o procedimento dispor para libertar uma variável criada dinamicamenteusando o procedimento de novo. Se você alocou memória usando o subprogramagetmem , então você precisa usar o subemprograma freemem para liberar essamemória. Os subprogramas freemem possuem a seguinte sintaxe -

procedure Freemem( p: pointer; Size: PtrUInt ); function Freemem( p: pointer ):PtrUInt;

Demonstração ao vivo

Redimensionando e liberando memória

Page 70: Guia rápido de Pascal

Como alternativa, você pode aumentar ou diminuir o tamanho de um bloco de memóriaalocado chamando a função ReAllocMem . Vamos verificar o programa acima, mais umavez e fazer uso de ReAllocMem e FreeMem subprogramas. A seguir, a sintaxe deReAllocMem -

function ReAllocMem( var p: pointer; Size: PtrUInt ):pointer;

A seguir é um exemplo que faz uso de ReAllocMem e FreeMem subprogramas -

program exMemory; var name: array[1..100] of char; description: ^string; desp: string; begin name:= 'Zara Ali'; desp := 'Zara ali a DPS student.'; description := getmem(30); if not assigned(description) then writeln('Error - unable to allocate required memory') else description^ := desp; (* Suppose you want to store bigger description *) description := reallocmem(description, 100); desp := desp + ' She is in class 10th.'; description^:= desp; writeln('Name = ', name ); writeln('Description: ', description^ ); freemem(description); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Name = Zara Ali

Description: Zara ali a DPS student. She is in class 10th

O Pascal fornece uma grande quantidade de funções de gerenciamento de memória quesão usadas na implementação de várias estruturas de dados e na implementação deprogramação de baixo nível em Pascal. Muitas dessas funções dependem daimplementação. Free Pascal fornece as seguintes funções e procedimentos paragerenciamento de memória -

SN Nome e descrição da função

1 função Addr (X: TAnytype): Ponteiro;

Demonstração ao vivo

Funções de gerenciamento de memória

Page 71: Guia rápido de Pascal

Retorna o endereço da variável

2função atribuída (P: Pointer): Boolean;

Verifica se um ponteiro é válido

3função CompareByte (const buf1; const buf2; len: SizeInt): SizeInt;

Compara 2 buffers de memória byte por byte

4função CompareChar (const buf1; const buf2; len: SizeInt): SizeInt;

Compara 2 buffers de memória byte por byte

5função CompareDWord (const buf1; const buf2; len: SizeInt): SizeInt;

Compara 2 buffers de memória byte por byte

6função CompareWord (const buf1; const buf2; len: SizeInt): SizeInt;

Compara 2 buffers de memória byte por byte

7função Cseg: Word;

Retorna o segmento do código

8procedimento Dispose (P: Pointer);

Libera a memória alocada dinamicamente

9procedimento Dispose (P: TypedPointer; Des: TProcedure);

Libera a memória alocada dinamicamente

10função Dseg: Word;

Retorna o segmento de dados

11procedimento FillByte (var x; count: SizeInt; valor: Byte);

Preenche a região de memória com padrão de 8 bits

12

procedure FillChar (var x; count: SizeInt; Valor: Byte | Booleano |Char);

Preenche a região de memória com determinado caractere

13 procedimento FillDWord (var x; count: SizeInt; valor: DWord);

Preenche a região de memória com padrão de 32 bits

Page 72: Guia rápido de Pascal

14procedure FillQWord (var x; contagem: SizeInt; valor: QWord);

Preenche a região de memória com padrão de 64 bits

15procedimento FillWord (var x; count: SizeInt; Valor: Word);Preenche a região de memória com padrão de 16 bits

16procedimento Freemem (p: ponteiro; Tamanho: PtrUInt);

Libera memória alocada

17procedimento Freemem (p: ponteiro);

Libera memória alocada

18procedimento Getmem (out p: pointer; Tamanho: PtrUInt);

Aloca nova memória

19procedimento Getmem (out p: pointer);

Aloca nova memória

20procedimento GetMemoryManager (var MemMgr: TMemoryManager);

Retorna o gerenciador de memória atual

21função alta (Arg: TypeOrVariable): TOrdinal;

Retorna o maior índice de array aberto ou enumerado

22função IndexByte (const buf; len: TamanhoInt; b: Byte): SizeInt;

Localiza o valor do tamanho de byte em um intervalo de memória

23função IndexChar (const buf; len: TamanhoInt; b: Char): SizeInt;

Localiza o valor do tamanho de um caractere em um intervalo de memória

24função IndexDWord (const buf; len: TamanhoInt; b: DWord): SizeInt;

Encontra o valor do tamanho DWord (32 bits) em um intervalo de memória

25função IndexQWord (const buf; len: TamanhoInt; b: QWord): SizeInt;

Encontra o valor do tamanho QWord em um intervalo de memória

26 função Indexword (const buf; len: TamanhoInt; b: Word): SizeInt;

Page 73: Guia rápido de Pascal

Encontra valor do tamanho de uma palavra em um intervalo de memória

27function IsMemoryManagerSet: Boolean;

O gerenciador de memória está definido

28função Low (Arg: TypeOrVariable): TOrdinal;

Retorna o menor índice de array aberto ou enumerado

29procedure Mover (fonte const; var dest; contagem: SizeInt);

Move dados de um local na memória para outro

30procedimento MoveChar0 (const buf1; var buf2; len: SizeInt);

Move dados até o primeiro caractere zero

31procedimento New (var P: Pointer);

Alocar dinamicamente memória para variável

32procedure New (var P: Pointer; Contras: TProcedure);

Aloca dinamicamente memória para variável

33função Ofs (var X): LongInt;

Retorna o deslocamento da variável

34função ptr (sel: LongInt; off: LongInt): farpointer;

Combina segmento e deslocamento para ponteiro

35função ReAllocMem (var p: ponteiro; Tamanho: PtrUInt): ponteiro;

Redimensiona um bloco de memória na pilha

36função Seg (var X): LongInt;

Retorna o segmento

37procedimento SetMemoryManager (const MemMgr: TMemoryManager);

Define um gerenciador de memória

38função Sptr: Ponteiro;

Retorna o ponteiro da pilha atual

Page 74: Guia rápido de Pascal

39 função Sseg: Word;

Retorna o valor do registro do segmento da pilha

Pascal - UnidadesUm programa Pascal pode consistir em módulos chamados unidades. Uma unidadepode consistir em alguns blocos de código, que por sua vez são compostos de variáveis e declarações de tipo, instruções, procedimentos, etc. Existem muitas unidadesembutidas em Pascal e Pascal permite que programadores definam e escrevam suaspróprias unidades a serem usadas mais tarde em vários programas.

Ambas as unidades internas e as unidades definidas pelo usuário são incluídas em umprograma pela cláusula uses. Já usamos a unidade de variantes no tutorial Pascal -Variantes . Este tutorial explica como criar e incluir unidades definidas pelo usuário. Noentanto, vamos primeiro ver como incluir uma unidade interna crt em seu programa -

program myprog;

uses crt;

O exemplo a seguir ilustra o uso da unidade crt -

Program Calculate_Area (input, output); uses crt; var a, b, c, s, area: real; begin textbackground(white); (* gives a white background *) clrscr; (*clears the screen *) textcolor(green); (* text color is green *) gotoxy(30, 4); (* takes the pointer to the 4th line and 30th column) writeln('This program calculates area of a triangle:'); writeln('Area = area = sqrt(s(s-a)(s-b)(s-c))'); writeln('S stands for semi-perimeter'); writeln('a, b, c are sides of the triangle'); writeln('Press any key when you are ready'); readkey; clrscr; gotoxy(20,3); write('Enter a: '); readln(a); gotoxy(20,5); write('Enter b:'); readln(b); gotoxy(20, 7); write('Enter c: '); readln(c);

Usando unidades internas

Page 75: Guia rápido de Pascal

s := (a + b + c)/2.0; area := sqrt(s * (s - a)*(s-b)*(s-c)); gotoxy(20, 9); writeln('Area: ',area:10:3); readkey; end.

É o mesmo programa que usamos logo no início do tutorial do Pascal, compilar e rodarpara encontrar os efeitos da mudança.

Para criar uma unidade, você precisa escrever os módulos ou subprogramas que desejaarmazenar nela e salvá-la em um arquivo com a extensão .pas . A primeira linha destearquivo deve começar com a unidade de palavra-chave seguida pelo nome da unidade.Por exemplo -

unit calculateArea;

A seguir estão três etapas importantes na criação de uma unidade Pascal -

O nome do arquivo e o nome da unidade devem ser exatamente os mesmos.Assim, nossa unidade calculateArea será salva em um arquivo chamadocalculateArea.pas.

A próxima linha deve consistir em uma única interface de palavra-chave . Apósesta linha, você irá escrever as declarações para todas as funções eprocedimentos que virão nesta unidade.

Logo após as declarações de função, escreva a implementação da palavra ,que é novamente uma palavra-chave. Após a linha que contém aimplementação da palavra-chave, forneça a definição de todos ossubprogramas.

O programa a seguir cria a unidade denominada calculateArea -

unit CalculateArea; interface function RectangleArea( length, width: real): real; function CircleArea(radius: real) : real; function TriangleArea( side1, side2, side3: real): real; implementation function RectangleArea( length, width: real): real; begin RectangleArea := length * width; end; function CircleArea(radius: real) : real; const PI = 3.14159; begin

Criando e usando uma unidade Pascal

Page 76: Guia rápido de Pascal

CircleArea := PI * radius * radius; end; function TriangleArea( side1, side2, side3: real): real; var s, area: real; begin s := (side1 + side2 + side3)/2.0; area := sqrt(s * (s - side1)*(s-side2)*(s-side3)); TriangleArea := area; end; end.

Em seguida, vamos escrever um programa simples que usaria a unidade que definimosacima -

program AreaCalculation; uses CalculateArea,crt; var l, w, r, a, b, c, area: real; begin clrscr; l := 5.4; w := 4.7; area := RectangleArea(l, w); writeln('Area of Rectangle 5.4 x 4.7 is: ', area:7:3); r:= 7.0; area:= CircleArea(r); writeln('Area of Circle with radius 7.0 is: ', area:7:3); a := 3.0; b:= 4.0; c:= 5.0; area:= TriangleArea(a, b, c); writeln('Area of Triangle 3.0 by 4.0 by 5.0 is: ', area:7:3); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Area of Rectangle 5.4 x 4.7 is: 25.380

Area of Circle with radius 7.0 is: 153.938

Area of Triangle 3.0 by 4.0 by 5.0 is: 6.000

Pascal - data e horaA maioria dos softwares que você escreve precisa implementar alguma forma de funçãode data, retornando a data e hora atuais. As datas são tão importantes na vidacotidiana que se torna fácil trabalhar com elas sem pensar. O Pascal também forneceferramentas poderosas para aritmética de datas que facilitam a manipulação de datas.No entanto, o nome real e o funcionamento dessas funções são diferentes paradiferentes compiladores.

Page 77: Guia rápido de Pascal

A função TimeToString de Pascal fornece a hora atual em um formulário delimitado pordois-pontos (:). O exemplo a seguir mostra como obter o horário atual -

program TimeDemo; uses sysutils; begin writeln ('Current time : ',TimeToStr(Time)); end.

Quando o código acima foi compilado e executado, ele produz o seguinte resultado -

Current time : 18:33:08

A função Date retorna a data atual no formato TDateTime . O TDateTime é um valorduplo, que precisa de alguma decodificação e formatação. O programa a seguirdemonstra como usá-lo em seu programa para exibir a data atual -

Program DateDemo; uses sysutils; var YY,MM,DD : Word; begin writeln ('Date : ',Date); DeCodeDate (Date,YY,MM,DD); writeln (format ('Today is (DD/MM/YY): %d/%d/%d ',[dd,mm,yy])); end.

Quando o código acima foi compilado e executado, ele produz o seguinte resultado -

Date: 4.111300000000000E+004

Today is (DD/MM/YY):23/7/2012

A função Now retorna a data e hora atuais -

Program DatenTimeDemo; uses sysutils; begin writeln ('Date and Time at the time of writing : ',DateTimeToStr(Now)); end.

Quando o código acima foi compilado e executado, ele produz o seguinte resultado -

Date and Time at the time of writing : 23/7/2012 18:51:

O Free Pascal fornece uma estrutura simples de registro de data e hora chamadaTTimeStamp , que possui o seguinte formato -

type TTimeStamp = record Time: Integer; Date: Integer; end;

Obtendo a data e hora atuais

Demonstração ao vivo

Demonstração ao vivo

Page 78: Guia rápido de Pascal

Free Pascal fornece as seguintes funções de data e hora -

Sr.Não.

Nome e descrição da função

1function DateTimeToFileDate (DateTime: TDateTime): LongInt;

Converte o tipo DateTime na data do arquivo.

2function DateTimeToStr (DateTime: TDateTime) :;

Constrói uma representação de string de DateTime

3

função DateTimeToStr (DateTime: TDateTime; const FormatSettings:TFormatSettings) :;

Constrói uma representação de string de DateTime

4

procedure DateTimeToString (out Resultado:; const FormatStr:; constDateTime: TDateTime);

Constrói uma representação de string de DateTime

5

procedure DateTimeToString (out Resultado:; const FormatString:;const DateTime: TDateTime; const FormatSettings: TFormatSettings);

Constrói uma representação de string de DateTime

6

procedimento DateTimeToSystemTime (DateTime: TDateTime; foraSystemTime: TSystemTime);

Converte DateTime na hora do sistema

7function DateTimeToTimeStamp (DateTime: TDateTime): TTimeStamp;Converte DateTime em timestamp

8function DateToStr (Date: TDateTime) :;

Constrói uma representação de string de data

9

function DateToStr (Data: TDateTime; const FormatSettings:TFormatSettings) :;

Constrói uma representação de string de data

10 data da função: TDateTime;

Várias funções de data e hora

Page 79: Guia rápido de Pascal

Obtém a data atual

11função DayOfWeek (DateTime: TDateTime): Integer;

Obtém o dia da semana

12

procedimento DecodeDate (Date: TDateTime; out Ano: Word; out Mês:Word; out Dia: Word);

Decodifica DateTime para ano mês e dia

13

procedimento DecodeTime (Time: TDateTime; out Hora: Word; outMinuto: Word; out Segundo: Word; out MilliSecond: Word);

Decodifica DateTime para horas, minutos e segundos

14function EncodeDate (Ano: Word; Mês: Word; Dia: Word): TDateTime;

Codifica ano, dia e mês para DateTime

15

função EncodeTime (Hora: Word; Minuto: Word; Segundo: Word;MilliSecond: Word): TDateTime;

Codifica horas, minutos e segundos para o DateTime

16função FormatDateTime (const FormatStr: DateTime: TDateTime) :;

Retorna a representação de string de DateTime

17

função FormatDateTime (const FormatStr: DateTime: TDateTime;const FormatSettings: TFormatSettings) :;

Retorna a representação de string de DateTime

18

função IncMonth (const DateTime: TDateTime; NumberOfMonths:Integer = 1): TDateTime;

Adiciona 1 ao mês

19função IsLeapYear (Year: Word): Boolean;

Determina se ano é ano bissexto

20função MSecsToTimeStamp (MSecs: Comp): TTimeStamp;

Converte o número de milissegundos em timestamp

21 function Agora: TDateTime;

Page 80: Guia rápido de Pascal

Obtém a data e hora atuais

22função StrToDateTime (const S :): TDateTime;

Converte string em DateTime

23

função StrToDateTime (const s: ShortString; const FormatSettings:TFormatSettings): TDateTime;

Converte string em DateTime

24

função StrToDateTime (const s: AnsiString; const FormatSettings:TFormatSettings): TDateTime;

Converte string em DateTime

25function StrToDate (const S: ShortString): TDateTime;

Converte string para data

26função StrToDate (const S: Ansistring): TDateTime;

Converte string para data

27função StrToDate (const S: ShortString; separador: Char): TDateTime;

Converte string para data

28função StrToDate (const S: AnsiString; separador: Char): TDateTime;

Converte string para data

29

função StrToDate (const S: ShortString; constante useformat:;separador: Char): TDateTime;

Converte string para data

30

função StrToDate (const S: AnsiString; constante useformat:;separador: Char): TDateTime;

Converte string para data

31

função StrToDate (const S: PChar; Len: inteiro; const useformat:;separador: Char = # 0): TDateTime;

Converte string para data

32 function StrToTime (const S: Shortstring): TDateTime;

Page 81: Guia rápido de Pascal

Converte string em time

33função StrToTime (const S: Ansistring): TDateTime;

Converte string em time

34função StrToTime (const S: ShortString; separador: Char): TDateTime;

Converte string em time

35função StrToTime (const S: AnsiString; separador: Char): TDateTime;

Converte string em time

36

function StrToTime (const S:; FormatSettings: TFormatSettings):TDateTime;

Converte string em time

37

função StrToTime (const S: PChar; Len: inteiro; separador: Char = #0): TDateTime;

Converte string em time

38

function SystemTimeToDateTime (const SystemTime: TSystemTime):TDateTime;

Converte a hora do sistema em datetime

39

função TimeStampToDateTime (const TimeStamp: TTimeStamp):TDateTime;

Converte o registro de data e hora em DateTime

40função TimeStampToMSecs (const TimeStamp: TTimeStamp): comp;

Converte o registro de data e hora em número de milissegundos

41function TimeToStr (Time: TDateTime) :;

Retorna a representação de string do Time

42

função TimeToStr (Time: TDateTime; const FormatSettings:TFormatSettings) :;

Retorna a representação de string do Time

43 função Time: TDateTime;

Page 82: Guia rápido de Pascal

Chegar a hora atual

O exemplo a seguir ilustra o uso de algumas das funções acima -

Program DatenTimeDemo; uses sysutils; var year, month, day, hr, min, sec, ms: Word; begin writeln ('Date and Time at the time of writing : ',DateTimeToStr(Now)); writeln('Today is ',LongDayNames[DayOfWeek(Date)]); writeln; writeln('Details of Date: '); DecodeDate(Date,year,month,day); writeln (Format ('Day: %d',[day])); writeln (Format ('Month: %d',[month])); writeln (Format ('Year: %d',[year])); writeln; writeln('Details of Time: '); DecodeTime(Time,hr, min, sec, ms); writeln (format('Hour: %d:',[hr])); writeln (format('Minutes: %d:',[min])); writeln (format('Seconds: %d:',[sec])); writeln (format('Milliseconds: %d:',[hr])); end.

Quando o código acima foi compilado e executado, produziu o seguinte resultado:

Date and Time at the time of writing : 7/24/2012 8:26:

Today is Tuesday

Details of Date:

Day:24

Month:7

Year: 2012

Details of Time:

Hour: 8

Minutes: 26

Seconds: 21

Milliseconds: 8

Pascal - Orientado a ObjetosPodemos imaginar nosso universo feito de diferentes objetos como sol, terra, lua, etc.Da mesma forma, podemos imaginar nosso carro feito de objetos diferentes como roda,direção, engrenagem etc. Do mesmo jeito, existem conceitos de programaçãoorientados a objetos, que assumir tudo como um objeto e implementar um softwareusando objetos diferentes. Em Pascal, existem dois tipos de dados estruturais usados para implementar um objeto do mundo real -

Tipos de objeto

Demonstração ao vivo

Page 83: Guia rápido de Pascal

Tipos de classe

Antes de entrarmos em detalhes, vamos definir termos Pascal importantes relacionadosao Pascal Orientado a Objetos.

Object - An Object é um tipo especial de registro que contém campos como umregistro; no entanto, ao contrário dos registros, os objetos contêmprocedimentos e funções como parte do objeto. Esses procedimentos e funçõessão mantidos como ponteiros para os métodos associados ao tipo do objeto.

Classe - Uma Classe é definida quase da mesma maneira que um Objeto, mashá uma diferença na forma como eles são criados. A classe é alocada no heapde um programa, enquanto o objeto é alocado na pilha. É um ponteiro para oobjeto, não para o objeto em si.

Instanciação de uma classe - Instanciação significa criar uma variável dessetipo de classe. Como uma classe é apenas um ponteiro, quando uma variável deum tipo de classe é declarada, há memória alocada somente para o ponteiro,não para o objeto inteiro. Somente quando é instanciado usando um de seusconstrutores, a memória é alocada para o objeto. Instâncias de uma classe sãotambém chamadas de 'objetos', mas não as confundem com Object PascalObjects. Neste tutorial, vamos escrever 'Objeto' para objetos Pascal e 'objeto'para o objeto conceitual ou instância da classe.

Variáveis de membro - estas são as variáveis definidas dentro de uma classeou um objeto.

Funções de Membro - Estas são as funções ou procedimentos definidos dentrode uma Classe ou um Objeto e são usados para acessar os dados do objeto.

Visibilidade dos Membros - Os membros de um Objeto ou Classe tambémsão chamados de campos. Esses campos têm visibilidades diferentes.Visibilidade refere-se à acessibilidade dos membros, ou seja, exatamente ondeesses membros estarão acessíveis. Objetos têm três níveis de visibilidade:público, privado e protegido. As turmas têm cinco tipos de visibilidade: pública,privada, estritamente privada, protegida e publicada. Vamos discutir avisibilidade em detalhes.

Herança - Quando uma classe é definida herdando funcionalidades existentesde uma classe pai, então é dito que ela é herdada. Aqui, a classe filha herdarátodas ou algumas funções de membro e variáveis de uma classe pai. Objetostambém podem ser herdados.

Classe pai - uma classe que é herdada por outra classe. Isso também échamado de classe base ou superclasse.

Conceitos orientados a objeto

Page 84: Guia rápido de Pascal

Classe filha - Uma classe que herda de outra classe. Isso também é chamadode subclasse ou classe derivada.

Polimorfismo - Este é um conceito orientado a objetos onde a mesma funçãopode ser usada para diferentes propósitos. Por exemplo, o nome da funçãopermanecerá igual, mas pode levar um número diferente de argumentos e podeexecutar tarefas diferentes. As classes de Pascal implementam o polimorfismo.Objetos não implementam polimorfismo.

Sobrecarga - É um tipo de polimorfismo no qual alguns ou todos os operadorestêm diferentes implementações, dependendo dos tipos de seus argumentos.Similarmente, as funções também podem ser sobrecarregadas comimplementação diferente. Classes Pascal implementam sobrecarga, mas osObjetos não.

Abstração de Dados - Qualquer representação de dados nos quais os detalhesda implementação estão ocultos (abstraídos).

Encapsulamento - Refere-se a um conceito em que encapsulamos todos osdados e funções de membro juntos para formar um objeto.

Construtor - Refere-se a um tipo especial de função que será chamadoautomaticamente sempre que houver uma formação de objeto de uma classeou um objeto.

Destructor - Refere-se a um tipo especial de função que será chamadoautomaticamente sempre que um objeto ou classe for excluído ou sair doescopo.

Um objeto é declarado usando a declaração de tipo. A forma geral de uma declaraçãode objeto é a seguinte -

type object-identifier = object private field1 : field-type; field2 : field-type; ... public procedure proc1; function f1(): function-type; end; var objectvar : object-identifier;

Vamos definir um Rectangle Object que tenha dois membros de dados do tipo inteiro -length e width e algumas funções membro para manipular esses membros de dados eum procedimento para desenhar o retângulo.

type Rectangle = object private

Definindo Objetos Pascal

Page 85: Guia rápido de Pascal

length, width: integer; public constructor init; destructor done; procedure setlength(l: inteter); function getlength(): integer; procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end; var r1: Rectangle; pr1: ^Rectangle;

Depois de criar seus objetos, você poderá chamar funções de membro relacionadas aesse objeto. Uma função de membro poderá processar variável de membro de objetorelacionado somente.

O exemplo a seguir mostra como definir comprimentos e larguras para dois objetos deretângulo e desenhá-los chamando as funções de membro.

r1.setlength(3); r1.setwidth(7); writeln(' Draw a rectangle: ', r1.getlength(), ' by ' , r1.getwidth()); r1.draw; new(pr1); pr1^.setlength(5); pr1^.setwidth(4); writeln(' Draw a rectangle: ', pr1^.getlength(), ' by ' ,pr1^.getwidth()); pr1^.draw; dispose(pr1);

A seguir, um exemplo completo para mostrar como usar objetos em Pascal -

program exObjects; type Rectangle = object private length, width: integer; public procedure setlength(l: integer); function getlength(): integer; procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end; var r1: Rectangle; pr1: ^Rectangle; procedure Rectangle.setlength(l: integer); begin length := l;

Demonstração ao vivo

Page 86: Guia rápido de Pascal

end; procedure Rectangle.setwidth(w: integer); begin width :=w; end; function Rectangle.getlength(): integer; begin getlength := length; end; function Rectangle.getwidth(): integer; begin getwidth := width; end; procedure Rectangle.draw; var i, j: integer; begin for i:= 1 to length do begin for j:= 1 to width do write(' * '); writeln; end; end; begin r1.setlength(3); r1.setwidth(7); writeln('Draw a rectangle:', r1.getlength(), ' by ' , r1.getwidth()); r1.draw; new(pr1); pr1^.setlength(5); pr1^.setwidth(4); writeln('Draw a rectangle:', pr1^.getlength(), ' by ' ,pr1^.getwidth()); pr1^.draw; dispose(pr1); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Draw a rectangle: 3 by 7

* * * * * * *

* * * * * * *

* * * * * * *

Draw a rectangle: 5 by 4

* * * *

* * * *

* * * *

* * * *

* * * *

Visibilidade dos membros do objeto

Page 87: Guia rápido de Pascal

Visibilidade indica a acessibilidade dos membros do objeto. Os membros do objetoPascal possuem três tipos de visibilidade -

Sr.Não

Visibilidade e Acessibilidade

1

Público

Os membros podem ser usados por outras unidades fora da unidade doprograma

2Privado

Os membros são acessíveis apenas na unidade atual.

3

Protegido

Os membros estão disponíveis apenas para objetos descendentes do objetopai.

Por padrão, os campos e métodos de um objeto são públicos e são exportados para forada unidade atual.

Construtores são tipos especiais de métodos, que são chamados automaticamentesempre que um objeto é criado. Você cria um construtor em Pascal apenas declarandoum método com um construtor de palavra-chave. Convencionalmente, o nome dométodo é Init, no entanto, você pode fornecer qualquer identificador válido. Você podepassar quantos argumentos quiser para a função de construtor.

Destrutores são métodos que são chamados durante a destruição do objeto. Osmétodos de destruição destroem qualquer alocação de memória criada porconstrutores.

O exemplo a seguir fornecerá um construtor e um destruidor para a classe Rectangleque inicializará o comprimento e a largura do retângulo no momento da criação doobjeto e o destruirá quando sair do escopo.

program exObjects; type Rectangle = object private length, width: integer; public constructor init(l, w: integer); destructor done; procedure setlength(l: integer); function getlength(): integer;

Construtores e Destrutores para Objetos Pascal -

Demonstração ao vivo

Page 88: Guia rápido de Pascal

procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end; var r1: Rectangle; pr1: ^Rectangle; constructor Rectangle.init(l, w: integer); begin length := l; width := w; end; destructor Rectangle.done; begin writeln(' Desctructor Called'); end; procedure Rectangle.setlength(l: integer); begin length := l; end; procedure Rectangle.setwidth(w: integer); begin width :=w; end; function Rectangle.getlength(): integer; begin getlength := length; end; function Rectangle.getwidth(): integer; begin getwidth := width; end; procedure Rectangle.draw; var i, j: integer; begin for i:= 1 to length do begin for j:= 1 to width do write(' * '); writeln; end; end; begin r1.init(3, 7); writeln('Draw a rectangle:', r1.getlength(), ' by ' , r1.getwidth()); r1.draw; new(pr1, init(5, 4)); writeln('Draw a rectangle:', pr1^.getlength(), ' by ',pr1^.getwidth()); pr1^.draw; pr1^.init(7, 9); writeln('Draw a rectangle:', pr1^.getlength(), ' by ' ,pr1^.getwidth()); pr1^.draw;

Page 89: Guia rápido de Pascal

dispose(pr1); r1.done; end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Draw a rectangle: 3 by 7

* * * * * * *

* * * * * * *

* * * * * * *

Draw a rectangle: 5 by 4

* * * *

* * * *

* * * *

* * * *

* * * *

Draw a rectangle: 7 by 9

* * * * * * * * *

* * * * * * * * *

* * * * * * * * *

* * * * * * * * *

* * * * * * * * *

* * * * * * * * *

* * * * * * * * *

Destructor Called

Objetos Pascal podem, opcionalmente, herdar de um objeto pai. O programa a seguirilustra a herança em objetos Pascal. Vamos criar outro objeto chamado TableTop , queé herdado do objeto Rectangle.

program exObjects; type Rectangle = object private length, width: integer; public procedure setlength(l: integer); function getlength(): integer; procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end; TableTop = object (Rectangle) private material: string; public function getmaterial(): string; procedure setmaterial( m: string); procedure displaydetails; procedure draw; end;

Herança para objetos Pascal

Demonstração ao vivo

Page 90: Guia rápido de Pascal

var tt1: TableTop; procedure Rectangle.setlength(l: integer); begin length := l; end; procedure Rectangle.setwidth(w: integer); begin width :=w; end; function Rectangle.getlength(): integer; begin getlength := length; end; function Rectangle.getwidth():integer; begin getwidth := width; end; procedure Rectangle.draw; var i, j: integer; begin for i:= 1 to length do begin for j:= 1 to width do write(' * '); writeln; end; end; function TableTop.getmaterial(): string; begin getmaterial := material; end; procedure TableTop.setmaterial( m: string); begin material := m; end; procedure TableTop.displaydetails; begin writeln('Table Top: ', self.getlength(), ' by ' , self.getwidth()); writeln('Material: ', self.getmaterial()); end; procedure TableTop.draw(); var i, j: integer; begin for i:= 1 to length do begin for j:= 1 to width do write(' * '); writeln; end; writeln('Material: ', material); end; begin

Page 91: Guia rápido de Pascal

tt1.setlength(3); tt1.setwidth(7); tt1.setmaterial('Wood'); tt1.displaydetails(); writeln; writeln('Calling the Draw method'); tt1.draw(); end.

A seguir estão os pontos importantes que devem ser anotados

O objeto Tabletop herdou todos os membros do objeto Rectangle.

Há um método de desenho no TableTop também. Quando o empate método échamado usando um TableTop objeto, sorteio de TableTop é invocado.

Existe uma instância implícita denominada self que se refere à instância atualdo objeto.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Table Top: 3 by 7

Material: Wood

Calling the Draw Method

* * * * * * *

* * * * * * *

* * * * * * *

Material: Wood

Pascal - ClassesVocê viu que os objetos Pascal exibem algumas características do paradigma orientadoa objetos. Eles implementam encapsulamento, ocultação de dados e herança, mastambém possuem limitações. Por exemplo, objetos Pascal não fazem parte dopolimorfismo. Portanto, as classes são amplamente usadas para implementar umcomportamento adequado orientado a objetos em um programa, especialmente osoftware baseado em GUI.

Uma classe é definida quase da mesma maneira que um objeto, mas é um ponteiropara um objeto em vez do próprio objeto. Tecnicamente, isso significa que a classe éalocada no heap de um programa, enquanto o objeto é alocado na pilha. Em outraspalavras, quando você declara uma variável como o tipo de objeto, ela ocupará tantoespaço na pilha quanto o tamanho do objeto, mas quando você declara uma variável dotipo de classe, ela sempre terá o tamanho de um ponteiro na pilha. Os dados reais daclasse estarão no heap.

Uma classe é declarada da mesma maneira que um objeto, usando a declaração detipo. A forma geral de uma declaração de classe é a seguinte -

Definindo Classes Pascal

Page 92: Guia rápido de Pascal

type class-identifier = class private field1 : field-type; field2 : field-type; ... public constructor create(); procedure proc1; function f1(): function-type; end; var classvar : class-identifier;

Vale a pena observar os seguintes pontos importantes -

As definições de classe devem estar apenas na parte de declaração de tipo doprograma.

Uma classe é definida usando a palavra-chave class .

Campos são itens de dados que existem em cada instância da classe.

Os métodos são declarados dentro da definição de uma classe.

Existe um construtor predefinido chamado Criar na classe raiz. Todas as classesabstratas e todas as classes concretas são descendentes de Root, portanto,todas as classes possuem pelo menos um construtor.

Existe um destruidor predefinido chamado Destroy na classe Root. Todas asclasses abstratas e todas as classes concretas são descendentes de Root,portanto, todas as classes possuem pelo menos um destruidor.

Vamos definir uma classe Rectangle que tenha dois membros de dados do tipo inteiro -length e width e algumas funções membro para manipular esses membros de dados eum procedimento para desenhar o retângulo.

type Rectangle = class private length, width: integer; public constructor create(l, w: integer); procedure setlength(l: integer); function getlength(): integer; procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end;

Vamos escrever um programa completo que crie uma instância de uma classe deretângulo e desenhe o retângulo. Este é o mesmo exemplo que usamos ao discutirobjetos Pascal. Você encontrará ambos os programas são quase iguais, com asseguintes exceções -

Você precisará incluir a diretiva {$ mode objfpc} para usar as classes.

Page 93: Guia rápido de Pascal

Você precisará incluir a diretiva {$ m +} para usar construtores.

A instanciação de classes é diferente da instanciação de objetos. Apenasdeclarar a variável não cria espaço para a instância, você usará o construtorcreate para alocar memória.

Aqui está o exemplo completo -

{$mode objfpc} // directive to be used for defining classes {$m+} // directive to be used for using constructor program exClass; type Rectangle = class private length, width: integer; public constructor create(l, w: integer); procedure setlength(l: integer); function getlength(): integer; procedure setwidth(w: integer); function getwidth(): integer; procedure draw; end; var r1: Rectangle; constructor Rectangle.create(l, w: integer); begin length := l; width := w; end; procedure Rectangle.setlength(l: integer); begin length := l; end; procedure Rectangle.setwidth(w: integer); begin width :=w; end; function Rectangle.getlength(): integer; begin getlength := length; end; function Rectangle.getwidth(): integer; begin getwidth := width; end; procedure Rectangle.draw; var i, j: integer; begin for i:= 1 to length do begin for j:= 1 to width do

Demonstração ao vivo

Page 94: Guia rápido de Pascal

write(' * '); writeln; end; end; begin r1:= Rectangle.create(3, 7); writeln(' Draw Rectangle: ', r1.getlength(), ' by ' , r1.getwidth()); r1.draw; r1.setlength(4); r1.setwidth(6); writeln(' Draw Rectangle: ', r1.getlength(), ' by ' , r1.getwidth()); r1.draw; end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Draw Rectangle: 3 by 7

* * * * * * *

* * * * * * *

* * * * * * *

Draw Rectangle: 4 by 6

* * * * * *

* * * * * *

* * * * * *

* * * * * *

Visibilidade indica a acessibilidade dos membros da classe. Os alunos de Pascal têmcinco tipos de visibilidade -

Sr.Não

Visibilidade e Acessibilidade

1Público

Esses membros estão sempre acessíveis.

2

Privado

Esses membros só podem ser acessados no módulo ou unidade que contém adefinição de classe. Eles podem ser acessados de dentro dos métodos declasse ou de fora deles.

3

Estrito privado

Esses membros só podem ser acessados a partir de métodos da própria classe.Outras classes ou classes descendentes na mesma unidade não podem acessá-las.

Visibilidade dos membros da classe

Page 95: Guia rápido de Pascal

4 Protegido

Isso é o mesmo que private, exceto que esses membros são acessíveis para ostipos descendentes, mesmo que sejam implementados em outros módulos.

5

Publicados

Isso é o mesmo que um Public, mas o compilador gera informações de tipo quesão necessárias para o fluxo automático dessas classes se o compilador estiverno estado {$ M +}. Os campos definidos em uma seção publicada devem serdo tipo de classe.

Construtores são métodos especiais, que são chamados automaticamente sempre queum objeto é criado. Portanto, aproveitamos totalmente esse comportamentoinicializando muitas coisas através de funções de construtor.

Pascal fornece uma função especial chamada create () para definir um construtor. Vocêpode passar quantos argumentos quiser para a função de construtor.

O exemplo a seguir criará um construtor para uma classe chamada Books e inicializaráo preço e o título do livro no momento da criação do objeto.

program classExample; {$MODE OBJFPC} //directive to be used for creating classes {$M+} //directive that allows class constructors and destructors type Books = Class private title : String; price: real; public constructor Create(t : String; p: real); //default constructor procedure setTitle(t : String); //sets title for a book function getTitle() : String; //retrieves title procedure setPrice(p : real); //sets price for a book function getPrice() : real; //retrieves price procedure Display(); // display details of a book end; var physics, chemistry, maths: Books; //default constructor constructor Books.Create(t : String; p: real); begin title := t; price := p; end; procedure Books.setTitle(t : String); //sets title for a book

Construtores e Destrutores para as Classes Pascal

Demonstração ao vivo

Page 96: Guia rápido de Pascal

begin title := t; end; function Books.getTitle() : String; //retrieves title begin getTitle := title; end; procedure Books.setPrice(p : real); //sets price for a book begin price := p; end; function Books.getPrice() : real; //retrieves price begin getPrice:= price; end; procedure Books.Display(); begin writeln('Title: ', title); writeln('Price: ', price:5:2); end; begin physics := Books.Create('Physics for High School', 10); chemistry := Books.Create('Advanced Chemistry', 15); maths := Books.Create('Algebra', 7); physics.Display; chemistry.Display; maths.Display; end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Title: Physics for High School

Price: 10

Title: Advanced Chemistry

Price: 15

Title: Algebra

Price: 7

Como o construtor implícito chamado create, há também um método destrutivoimplícito destroy, que permite liberar todos os recursos usados na classe.

As definições de classe Pascal podem, opcionalmente, herdar de uma definição declasse pai. A sintaxe é a seguinte -

type childClas-identifier = class(baseClass-identifier) < members > end;

O exemplo a seguir fornece uma classe de romances, que herda a classe Books eadiciona mais funcionalidade com base no requisito.

Herança

Page 97: Guia rápido de Pascal

program inheritanceExample; {$MODE OBJFPC} //directive to be used for creating classes {$M+} //directive that allows class constructors and destructors type Books = Class protected title : String; price: real; public constructor Create(t : String; p: real); //default constructor procedure setTitle(t : String); //sets title for a book function getTitle() : String; //retrieves title procedure setPrice(p : real); //sets price for a book function getPrice() : real; //retrieves price procedure Display(); virtual; // display details of a book end; (* Creating a derived class *) type Novels = Class(Books) private author: String; public constructor Create(t: String); overload; constructor Create(a: String; t: String; p: real); overload; procedure setAuthor(a: String); // sets author for a book function getAuthor(): String; // retrieves author name procedure Display(); override; end; var n1, n2: Novels; //default constructor constructor Books.Create(t : String; p: real); begin title := t; price := p; end; procedure Books.setTitle(t : String); //sets title for a book begin title := t; end; function Books.getTitle() : String; //retrieves title begin getTitle := title; end; procedure Books.setPrice(p : real); //sets price for a book begin price := p; end; function Books.getPrice() : real; //retrieves price begin

Demonstração ao vivo

Page 98: Guia rápido de Pascal

getPrice:= price; end; procedure Books.Display(); begin writeln('Title: ', title); writeln('Price: ', price); end; (* Now the derived class methods *) constructor Novels.Create(t: String); begin inherited Create(t, 0.0); author:= ' '; end; constructor Novels.Create(a: String; t: String; p: real); begin inherited Create(t, p); author:= a; end; procedure Novels.setAuthor(a : String); //sets author for a book begin author := a; end; function Novels.getAuthor() : String; //retrieves author begin getAuthor := author; end; procedure Novels.Display(); begin writeln('Title: ', title); writeln('Price: ', price:5:2); writeln('Author: ', author); end; begin n1 := Novels.Create('Gone with the Wind'); n2 := Novels.Create('Ayn Rand','Atlas Shrugged', 467.75); n1.setAuthor('Margaret Mitchell'); n1.setPrice(375.99); n1.Display; n2.Display; end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Title: Gone with the Wind

Price: 375.99

Author: Margaret Mitchell

Title: Atlas Shrugged

Price: 467.75

Author: Ayn Rand

Vale a pena observar os seguintes pontos importantes -

Os membros da classe Books têm visibilidade protegida .

Page 99: Guia rápido de Pascal

A classe Novels possui dois construtores, portanto, o operador de sobrecarga éusado para sobrecarga de função.

O procedimento Books.Display foi declarado virtual , para que o mesmométodo da classe Novels possa substituí- lo.

O construtor Novels.Create chama o construtor da classe base usando apalavra-chave herdada .

Interfaces são definidas para fornecer um nome de função comum aosimplementadores. Diferentes implementadores podem implementar essas interfaces deacordo com seus requisitos. Você pode dizer, interfaces são esqueletos, que sãoimplementados pelos desenvolvedores. A seguir, um exemplo de interface -

type Mail = Interface Procedure SendMail; Procedure GetMail; end; Report = Class(TInterfacedObject, Mail) Procedure SendMail; Procedure GetMail; end;

Observe que, quando uma classe implementa uma interface, ela deve implementartodos os métodos da interface. Se um método de uma interface não for implementado,o compilador dará um erro.

Uma classe abstrata é aquela que não pode ser instanciada, apenas herdada. Umaclasse abstrata é especificada incluindo a palavra símbolo abstrato na definição daclasse, como esta -

type Shape = ABSTRACT CLASS (Root) Procedure draw; ABSTRACT; ... end;

Ao herdar de uma classe abstrata, todos os métodos marcados como abstract nadeclaração de classe pai devem ser definidos pelo filho; Além disso, esses métodosdevem ser definidos com a mesma visibilidade.

Declarar membros ou métodos da classe como estáticos os torna acessíveis semprecisar de uma instanciação da classe. Um membro declarado como estático não pode

Interfaces

Classes Abstratas

Palavra-chave estática

Page 100: Guia rápido de Pascal

Página anterior Próxima página

ser acessado com um objeto de classe instanciado (embora um método estático possa).O exemplo a seguir ilustra o conceito -

program StaticExample; {$mode objfpc} {$static on} type myclass=class num : integer;static; end; var n1, n2 : myclass; begin n1:= myclass.create; n2:= myclass.create; n1.num := 12; writeln(n2.num); n2.num := 31; writeln(n1.num); writeln(myclass.num); myclass.num := myclass.num + 20; writeln(n1.num); writeln(n2.num); end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

12

31

31

51

51

Você deve usar a diretiva {$ static on} para usar os membros estáticos.

Demonstração ao vivo

FAQ's Política de Cookies Contato© Copyright 2018. Todos os direitos reservados.

Enter email for newsletter vai

Page 101: Guia rápido de Pascal
Page 102: Guia rápido de Pascal