Você está na página 1de 15

Capítulo 3

CARACTERÍSTICAS GERAIS DA LINGUAGEM PASCAL

1. INTRODUÇÃO

A linguagem Pascal foi concebida por Niklaus Wirth no início da década de 70, tendo
por principal objetivo eliminar os péssimos hábitos de programação reinantes na época, que
eram conseqüência da utilização das linguagens de programação existentes como Fortran,
Cobol e Basic.
O aparecimento de Pascal, linguagem cujo nome é uma homenagem ao filósofo
Blaise Pascal, foi motivado pela visão de que a maior parte dos erros de programação
poderiam ser evitados a partir da utilização de uma linguagem estruturada em blocos e
dotada de um severo controle de tipos. O controle de tipos garante que variáveis e
constantes de um tipo não podem ser mescladas a variáveis e constantes de um outro tipo
(com pequenas exceções). Com o passar dos anos, a linguagem Pascal foi ganhando
espaço como ferramenta para o desenvolvimento de programas e servindo de inspiração
para a concepção de outras linguagens de programação (como Modula-2, proposta pelo
mesmo Wirth). Atualmente, Pascal volta à evidência com o recente aparecimento da
linguagem Delphi.
Neste capítulo, serão apresentados os conceitos básicos da linguagem Pascal,
particularmente a estrutura de um programa Pascal, as palavras-chave, tipos, variáveis,
constantes e alguns exemplos de aplicação.

2. PROGRAMAS EM PASCAL

2.1. Elementos constituintes de um programa Pascal


Como toda linguagem de programação, Pascal define uma série de elementos de
representação, os quais atuam como os átomos que vão permitir a construção de um
programa. Os parágrafos a seguir vão apresentar alguns destes elementos.

Palavras-chave. As palavras-chave constituem o vocabulário da linguagem, sendo que a


maior parte dela são reservadas a uma utilização bem definida, o seu uso sendo proibido ao
programador para outras finalidades. Elas são utilizadas normalmente para delimitar
diferentes partes de um programa, indicar o papel de uma ou mais instruções,
características dos dados, etc... O quadro a seguir apresenta algumas das palavras-chave
definidas para a linguagem Pascal.
PROGRAM CONST VAR TYPE BEGIN
DO output if then else
CASE END real integer boolean
writeln read FUNCTION PROCEDURE false
ARRAY SET FOR AND OR

— 3.1 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

Identificadores. Correspondem aos “nomes próprios” escolhidos pelo programador para


representar os diversos elementos do programa como tipos de dados, dados,
procedimentos, etc... Um identificador deve ser composto de uma seqüência de caracteres
alfanuméricos (letras e números), sendo que o primeiro deve ser uma letra. O tamanho dos
identificadores, em princípio não é limitado, mas alguns compiladores podem impor um
limite. Por outro lado, apenas os primeiros 8 caracteres do identificador são considerados
significativos para efeito de execução dos programas (isto significa que os identificadores
Floripa95 e Floripa96 seriam considerados idênticos).

Separadores. Os separadores correspondem à “pontuação” da linguagem, permitindo


delimitar os diferentes elementos como instruções, variáveis, blocos de programa, etc... A
tabela abaixo apresenta alguns dos separadores definidos na linguagem.

Símbolo Nome Função


, vírgula separa elementos de uma lista
:= dois pontos/igual símbolo de atribuição
() parênteses delimitam listas de palavras-chave da linguagem
. ponto separa a parte inteira da parte fracionária de um real
; ponto e vírgula separa instruções pertencentes a um mesmo bloco
: dois pontos associa um tipo de dado na declaração de uma variável
= igual precede o valor associado na declaração de uma
variável
(* parênteses/asterisco marca o início de um comentário
*) asterisco/parênteses marca o final de um comentário

Operadores. Permitem ao programador descrever os cálculos que o computador deverá


realizar sobre os dados considerados. Existem diversos tipos de operadores definidos em
Pascal: operadores aritméticos, operadores de comparação e ordenamento, operadores de
pertinência a um conjunto, operadores lógicos, etc...

Constantes. Uma constante corresponde a uma seqüência de caracteres que representa,


perante o compilador, um valor preciso dentro de um conjunto bem determinado de valores.
Na maior parte dos programas, o programador pode associar um identificador a uma
constante ou ainda utilizar palavras reservadas (como por exemplo, TRUE e FALSE) da
linguagem.

Instruções Pascal. As instruções da linguagem Pascal podem ser escritas a partir dos
elementos descritos anteriormente, podendo ser associadas a uma frase da linguagem
natural. Num programa Pascal, pode-se encontrar basicamente dois tipos de instruções: as
instruções de declaração, que permitem definir a natureza dos dados a serem utilizados nos
programas (reservando espaço em memória para eles) e as instruções executáveis, as
quais descrevem as ações a serem realizadas sobre os dados pelo computador. Como
veremos pelos diversos exemplos a serem analisados, o texto de um programa Pascal
corresponde a uma seqüência lógica de instruções, sendo traduzido, interpretado e
executado pelo computador, independente das características de hardware da máquina
considerada. Em programas Pascal, cada instrução é escrita numa linha de texto, mas nada
impede que o programador escreva diversas instruções numa mesma linha, ou utilizar
diversas linhas para uma mesma instrução.

Comentários. Correspondem a seqüências de caracteres delimitados pelos símbolos (* e *)


e que são introduzidos no texto com a finalidade de melhorar a documentação do programa
(explicando a razão da existência de determinados dados ou blocos de instruções). Os
comentários não são executados pelo computador. Alguns compiladores aceitam também
as chaves — { e } — como delimitadores de comentários.

— 3.2 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

2.2. Estrutura de um programa Pascal

Um programa Pascal é composto basicamente dos seguintes elementos:

Cabeçalho do Programa. Corresponde normalmente à primeira linha do programa Pascal,


iniciada pela palavra-chave PROGRAM.

Seção de declarações. Corresponde à parte do programa onde são declaradas as


constantes, tipos de dados e variáveis do programa Pascal.

Seção de procedimentos e funções. É a parte do programa onde são declarados os


procedimentos e funções (subprogramas) a serem utilizados no programa.

Seção de instruções executáveis. É a parte, delimitada pelas palavras-chave BEGIN e


END, onde são introduzidas as instruções Pascal.

A listagem abaixo apresenta a forma geral de um programa Pascal.

PROGRAM <nome_programa>;

CONST
(* aqui são declaradas as constantes *)

TYPE
(* aqui são declarados os tipos de dados *)

VAR
(* aqui são declaradas as variaveis do programa *)

PROCEDURE <nome_procedimento> (...);


...
END;

FUNCTION <nome_função> (...);


...
END;

BEGIN
...
END.

2.3. Um exemplo de programa Pascal

Apenas a título ilustrativo, será apresentado um exemplo de programa Pascal, o que


vai permitir fixar o formato utilizado para a construção de tais programas. O exemplo
considerado corresponde a um dos exercícios relativos ao capítulo 2 (Algoritmos), onde
pede-se para imprimir o maior número entre 3 introduzidos no computador.

3. A DECLARAÇÃO DE CONSTANTES, TIPOS DE DADOS E VARIÁVEIS

Os dados manipulados no contexto dos programas fazem parte, normalmente de um


conjunto predeterminado, como as letras do alfabeto, os números inteiros, os números
inteiros, os números reais, etc.
Na maior parte dos programas de computador existe a necessidade de que os dados
a serem manipulados sejam armazenados na memória para que possam ser acessados
pelas instruções definidas no programa.

— 3.3 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

PROGRAM Maior_Num (input,output);

VAR
Num1,Num2,Num3,Maior : integer;

BEGIN
(* Leitura dos numeros *)
write(‘Entre com o primeiro numero -> ‘);
readln(Num1);
write(‘Entre com o segundo numero -> ‘);
readln(Num2);
write(‘Entre com o terceiro numero -> ‘);
readln(Num3);

(* Determinacao do maior numero *)


Maior := Num1;
IF Maior < Num2
THEN Maior := Num2;
IF Maior < Num3
THEN Maior := Num3;

(* Impressao do maior numero *)


writeln(‘Programa de Determinacao do Maior Numero’);
writeln;
writeln(‘>> O maior numero eh o -> ‘,Maior);

END.

A reserva de espaço em memória para os dados de um programa é feita pela sua


declaração, seja como constante ou como variável.

3.1. As constantes ou valores imediatos

As constantes são dados cujo valor permanece fixo ao longo de toda a execução de
um programa, o que significa que o espaço de memória ocupado por uma constante não
sofre nenhuma alteração enquanto o computador executa o programa.
As constantes num programa Pascal podem representar diferentes tipos de dados. O
que define que tipo de dado está sendo representado é a forma como a constante é escrita
no texto Pascal. Desta forma, 100 corresponde a uma constante inteira, enquanto ‘INE
5201’ e ‘APROVADO’ representam dados do tipo seqüência de caracteres.
Num programa Pascal, as constantes podem ser declaradas basicamente de duas
formas:

• no contexto de uma expressão Pascal, como no exemplo mostrado a seguir, onde


a constante 2 é introduzida como parte da expressão de cálculo de um dado
denominado V_MAX a partir de um outro denominado V_MED;

VMAX := 2*V_MED

• na forma de uma constante simbólica, como será explicado a seguir.

Uma constante simbólica corresponde à associação de um valor fixo a um nome (ou


identificador). A declaração de uma constante simbólica é realizada na seção CONST, cujo
formato geral é:

— 3.4 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

CONST
identificador_1 = valor_1;
identificador_2 = valor_2;
...
identificador_N = valor_N;

Um exemplo ilustrativo da seção CONST num programa Pascal é mostrado abaixo:

CONST
PI = 3.14159205;
TAXA = 0.35;
DISC = ‘INE 5201 - Introd. a Ciencia da Computacao’

O uso de constantes simbólicas apresentam basicamente duas vantagens, as quais estão


associadas à possibilidade de uso da mesma constante por diversas vezes num mesmo
programa:

• a primeira é que em caso da necessidade de alteração de valor, basta realizar a


mudança apenas na seção de declaração da constante; por exemplo, no caso de
um programa possuindo a seção de declaração mostrada acima, se o valor da
taxa fosse alterado para 0,325;
• olhando para o exemplo dado anteriormente (particularmente no caso das
constantes PI e DISC), torna-se evidente a segunda vantagem, que é a economia
na escrita de longos valores.

3.2. As variáveis e sua declaração

Como já foi introduzido no capítulo 2, as variáveis de um programa correspondem


aos dados cujos valores são modificados durante a execução de um programa. As variáveis
de um programa Pascal são declaradas a partir da seção VAR, onde associa-se um
identificador a um determinado tipo de dado que define o conjunto ao qual os valores que
serão assumidos pela variável pertencem. O identificador permite designar o conteúdo do
dado representado pela variável numa dada posição de memória, sendo que o seu valor a
cada instante será o conteúdo daquela posição. Os identificadores de variáveis deverão ser
compostos segundo o que foi estabelecido na seção 2.1.
A seção VAR, de declaração de variáveis apresenta o seguinte formato geral:

VAR
identificador_1 : atributo_1;
identificador_2 : atributo_2;
...
identificador_N : atributo_N;

É importante observar que cada conjunto identificador : atributo é terminado com


um ponto e vírgula. O atributo permite definir o conjunto de dados a partir do qual a variável
declarada vai assumir os valores. O atributo pode ser uma palavra-chave da linguagem ou
então um identificador introduzido na seção TYPE, que será apresentada a seguir.
No caso em que diversas variáveis sejam caracterizadas por um mesmo atributo, é
possível associar diversos identificadores a um mesmo atributo. Um exemplo desta
facilidades é a declaração de variáveis do programa Maior_Num, apresentado na seção 2.3.

VAR
Num1,Num2,Num3,Maior : INTEGER;

— 3.5 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

Neste exemplo, Num1, Num2, Num3 e Maior são os identificadores de quatro


variáveis cujos valores correspondem a números inteiros (designado aqui pelo atributo
INTEGER, que é uma palavra-chave da linguagem Pascal, como apresentado em 2.1).

3.3. Os tipos de dados

Um tipo de dado permite indicar um conjunto de valores que pode ser assumido por
uma dada variável, definindo um certo número de propriedades e de operações próprias ao
conjunto. A figura 3.1 mostra como os tipos de dados suportados pela linguagem Pascal
estão relacionados.

3.3.1. Tipos de Dados Escalares

Tipos de Dados Inteiros (INTEGER). Pode-se representar dados inteiros através de


constantes ou variáveis. No caso das constantes inteiras, elas são representadas através de
seqüências de dígitos decimais, precedidas do sinal “-“, se o valor representado for negativo.
Alguns exemplos de constantes válidas são: 100, 13450, -123, 0. No caso das variáveis,
estas são declaradas na seção VAR, com o atributo INTEGER. Alguns exemplos de
variáveis inteiras são:

VAR
Num1,Num2,Num3,Maior : INTEGER;

Sobre dados inteiros, podem ser realizadas as seguintes operações, onde a


operação a MOD b corresponde ao resto da divisão de a por b, sendo b > 0 e a ≥ 0.

Tipos de Dados

Tipos Escalares Tipos Estruturados

Vetores (ARRAY)
Registros (RECORD)
Arquivos (FILE)
Reais (REAL) Tipos Discretos Conjuntos (SET)

Inteiros (INTEGER) Enumerados

Definidos pelo
Prédefinidos
programador

Lógicos
Caracteres (CHAR)
(BOOLEAN)

Figura 3.1 - Tipos de dados suportados pela linguagem Pascal.


Símbolo Operação Exemplo
+ Adição X := X+1;
- Subtração DIF := A - B;
* Multiplicação V_MAX := 2*V_MED;
DIV Divisão K := I DIV J;
MOD Módulo A := X MOD Y

— 3.6 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

Tipos de Dados Reais (REAL). As constantes reais podem ser expressas basicamente em
dois formatos: o formato fracionário, onde o valor será composto de uma parte inteira e uma
parte fracionária separadas por um ponto decimal (Ex: 123.5, -23.456, 0.375); o formato
científico, da forma m E e, onde m é mantissa, correspondendo a um valor inteiro ou real no
formato anterior e e é o expoente, correspondendo a uma constante inteira. Por exemplo, as
constantes 12E4, 64.2E-3 e -1.43E0 correspondem, respectivamente aos valores 120000,
0.0642 e -1.43. As variáveis reais são declaradas na seção VAR, assumindo o atributo
REAL, como é mostrado no exemplo abaixo:

VAR
X1,X2 : REAL;

As operações internas que podem ser realizadas sobre os dados reais são:

Símbolo Operação Exemplo


+ Adição X1 := A + X2;
- Subtração VAL := X1 - X2;
* Multiplicação XA := 3.5*R;
/ Divisão TAXA := N/M;

É possível realizar as operações acima envolvendo operandos inteiros e reais. Neste caso,
o resultado será sempre um valor real. Ainda, o operador de divisão aplicado sobre dois
operandos inteiros resultará num valor real (Ex.: 13/4 resultará no valor 3.25).

Tipos de Dados Caracteres (CHAR). Este tipo de dados consiste do conjunto dos
caracteres, contendo particularmente caracteres alfabéticos (letras), numéricos (dígitos
decimais), o caractere de espaço e caracteres especiais. As constantes de tipo caractere
correspondem a um elemento deste conjunto, sendo expressa, nos programas, pelo
caractere designado delimitado por apóstrofes, como mostram os exemplos abaixo:

‘*’ ‘A’ ‘9’

As variáveis de tipo caractere devem ser declaradas, na seção VAR, associadas ao atributo
CHAR. No exemplo mostrado a seguir, as variáveis A e B são declaradas como do tipo
caractere. No caso da atribuição de valores às variáveis do tipo CHAR, estes devem ser
igualmente delimitados por apóstrofes, como é ilustrado a seguir.

VAR
A,B : CHAR;
...
BEGIN
A := ‘E’;

Os elementos de dados pertencentes ao conjunto CHAR seguem uma política de


ordenamento que é o seguinte:

• no caso dos caracteres alfabéticos, o caractere A é o primeiro da ordem e o Z é o


último, de modo que ‘A’ < ‘B’ < ‘C’ < ... < ‘Y’ < ‘Z’;
• no caso dos caracteres numéricos, a política é mais óbvia... ‘0’ < ‘1’ < ... < ‘8’ < ‘9’.

Tipos de Dados Booleanos (BOOLEAN). São os tipos de dados enumerados cujos valores
são denotados pelos identificadores predefinidos FALSE (falso) e TRUE (verdadeiro). As
variáveis booleanas são declaradas nas seções VAR utilizando a palavra-chave BOOLEAN,
como mostra a o exemplo que segue:

— 3.7 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

VAR
APROVADO : BOOLEAN;

Algumas expressões em Pascal podem resultar em valores booleanos (FALSE ou TRUE),


sendo chamadas expressões booleanas. Exemplos destas expressões são aquelas que
envolvem operadores de comparação entre dois valores escalares (inteiros, reais ou
caracteres). Os operadores de comparação são os seguintes:

Símbolo Operação Exemplo


> Maior que X := A > B;
>= Maior ou igual X := X1 >= X2;
= Igual X := LETRA = ‘A’;
<> Diferente X := VEL <> 0.0;
<= Menor ou igual X := Y <= Z;
< Menor X := N < M;

Nos exemplos citados, a variável X deve ter sido declarada como BOOLEAN na seção VAR.
Em expressões booleanas, resultados de avaliações cujo valor seja booleano podem ser
operados resultando em valores também booleanos. São as chamadas operações lógicas,
que são:

Operador Operação Exemplo


NOT Não (negação) X := NOT Y;
AND “E” X := Z AND Y;
OR “OU” X := X1 OR X2;
XOR “OU exclusivo” X := X1 XOR X2;

Na tabela anterior, X, Y, Z, X1 e X2 devem ter sido declaradas como uma variáveis de tipo
booleano. Os operadores lógicos podem ser aplicados também a expressões cujo resultado
seja booleano. Abaixo são apresentadas as “tabelas verdade” dos operadores apresentados
acima:

Dados Operações
a b NOT b a AND b a OR b a XOR b
F F T F F F
F T F F T T
T F T F T T
T T F T T F

Tipos de Dados Intervalos de Valores. Estes tipos de dados permitem definir uma faixa de
valores de um tipo de dados específicos (denominado tipo hospedeiro). Na declaração de
um tipo de dados Intervalo de Valores, são declarados o menor valor e o maior valor
separados por dois pontos, sendo que os dois valores declarados devem pertencer ao
mesmo tipo de dados. Na sua forma geral, a declaração de um tipo Intervalo de Valores
apresenta-se da seguinte forma:

TYPE
<identificador> = <menor_valor>..<maior_valor>;

Na declaração, menor_valor deve ser menor que maior_valor, como mostram os


exemplos que seguem.

TYPE

— 3.8 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

dezena = 0..99;
byte = 0..255;
tensao = -5..5;

Tipos de Dados Enumerados Definidos pelo Usuário. Correspondem a dados cujos


valores são definidos na forma de um conjunto ordenado de identificadores. A ordenação é
estabelecida segundo a ordem de declaração dos identificadores. A seguir, são
apresentados alguns exemplos de tipos de dados enumerados.

TYPE
Cores = (Amarelo,Azul,Verde,Branco,Vermelho);
Resultado = (Aprovado,Reprovado,Recuperacao,Conceito_I);

3.3.2. Tipos de Dados Estruturados

Tipos de Dados Vetores (ARRAY). Correspondem aos dados caracterizados por um


número fixo de componentes de um mesmo tipo. A declaração de um tipo vetor apresenta-
se, de modo geral, da seguinte forma:

VAR
<identificador> : ARRAY[ind_1,ind_2,...ind_N] OF tipo;

Na declaração acima, pode-se verificar que o vetor pode apresentar diversos índices,
sendo que cada índice indica uma dimensão de componentes. A linguagem Pascal admite,
como tipos válidos de índices para vetores, os tipos Inteiro, Booleano, Caracteres,
Enumerados e Intervalos de Valores.
A seguir, são apresentados alguns exemplos de declaração de tipos de dados
vetores:

VAR
MATRIZ : ARRAY[1..5,1..8] OF REAL;
VETOR : ARRAY[1..10] OF ARRAY[1..100] OF INTEGER;

O acesso ao valor de um componente de uma variável vetor é feito indicando-se o


identificador da variável mais o índice do componente no vetor. Por exemplo, para acessar o
valor do terceiro componente da terceira linha e da quarta coluna da variável MATRIZ, basta
fazer:

X := MATRIZ[3,4];

Para que não ocorram problemas de compatibilidade de tipos Pascal, a variável X


deve ter sido declarada como REAL.

Tipos de Dados Registros (RECORD). São os dados caracterizados por um dado número
de componentes, denominados campos, que podem ser de diferentes tipos. A declaração de
um RECORD deve apresentar os identificadores e os atributos (tipos de dados) associados
a cada campo:

VAR
<ident> : RECORD
<id_1> : <atributo_1>;
<id_2> : <atributo_2>;
...
<id_N> : <atributo_N>;

— 3.9 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

END;

Um exemplo de declaração de uma variável registro é apresentada a seguir:

VAR
Pessoa : RECORD
Peso : REAL;
Altura : REAL;
Olhos : (Pretos,Castanhos, Azuis,Verdes);
Idade : 0..120;
Est_Civil : (Solteiro,Casado,Viuvo,Divorciado);
Sexo : (Masculino,Feminino);
END;

O acesso a um valor de uma variável registro é feito referenciando-se o identificador


seguido de um ponto e do nome do campo desejado:

Estado := Pessoa.Est_Civil;

Da mesma forma, a variável Estado deve ter sido declarada como tipo enumerado
(Solteiro,Casado,Viuvo,Divorciado).

Tipos de Dados Conjunto (SET). São os tipos de dados declarados na forma de um


subconjunto de algum tipo de dados já definido. Cada possível valor num tipo SET sempre
faz parte do conjunto definido pelo tipo base. Na sua forma geral, um tipo SET é declarado
da seguinte forma:
VAR
<identificador> : SET OF tipo_base;

Abaixo são mostrados alguns exemplos de declaração de tipos conjuntos:

VAR
Alfa : SET OF `A`..`Z`;
W : ARRAY[0..20] OF SET OF 0..31;

Tipos de Dados Arquivo (FILE). Estes tipos de dados correspondem a uma seqüência
linear de componentes de um tipo de dado escalar qualquer. O número de componentes
não é definido na declaração. A declaração geral dos tipos arquivo é feita como segue:

VAR
<identificador> : FILE OF tipo_base;

Um exemplo de declaração de um arquivo é mostrado abaixo:

VAR
Arq_1 : FILE OF CHAR;

Tipos de Dados Seqüência de Caracteres (STRING). São os dados que consistem de


cadeias de caracteres, com um comprimento de características dinâmicas. O ordenamento
entre dois dados do tipo STRING está relacionado ao ordenamento considerando os
primeiros caracteres de cada cadeia. A exemplo das constantes do tipo CHAR, as do tipo
Seqüência de Caracteres são representadas, nos programas Pascal delimitadas por
apóstrofes como mostra o exemplo que segue:

— 3.10 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

CONST
DISC = ‘INE 5201’;

As variáveis Pascal do tipo STRING são declaradas como segue:

VAR
<identificador> : STRING[tam_max];

Onde, tam_max corresponde ao número máximo de caracteres compondo a


seqüência. No exemplo abaixo, é declarada uma seqüência de caracteres de tamanho
máximo igual a 20:

VAR
Cidade : STRING[20];

3.3.3. Um exemplo de uso de tipos de dados estruturados

Na primeira lista de exercícios proposta, era solicitado desenvolver um algoritmo que


permitisse “entrar com 8 números e imprimir a quantidade de números maiores que 4”.
Vamos ver como poderíamos implementar este problema em Pascal utilizando os tipos
ARRAY suportados nesta linguagem. É claro que o uso de variáveis de tipo escalar (no
caso, INTEGER) seria possível, mas, poderemos ver que o uso de vetores permite
simplificar significativamente o programa.
Vamos considerar, então, que os 8 números a serem introduzidos pelo usuário do
programa serão, na realidade, componentes de um vetor, ao qual daremos o nome NUM. O
algoritmo a ser desenvolvido é simples... em primeiro lugar, o programa deverá ler os 8
números, ou seja, os 8 componentes do vetor... em seguida, basta que este compare, um a
um, os componentes com o valor 4 e imprima apenas aqueles que forem superiores a 4.
Uma forma de implementar esta solução em Pascal é mostrada a seguir.

4. AÇÕES BÁSICAS NUM PROGRAMA PASCAL

4.1. A atribuição de valor

A maior parte dos programas de computador nada mais são que a formalização de
um algoritmo, sendo que boa parte das ações definidas em algoritmos (principalmente na
área de Engenharia) podem ser expressos por expressões matemáticas. Quando uma
expressão matemática é traduzida para uma linguagem de programação, o programador faz
uso de variáveis as quais serão modificadas pela expressão matemática ou vão fazer o
papel de agente modificador do valor de uma dada variável.
PROGRAM Maior_Num;

VAR
i : INTEGER;
Num : ARRAY[1..8] OF INTEGER;

BEGIN
(* Leitura dos numeros *)

FOR i := 1 TO 8 DO
BEGIN
write(‘Entre com o numero `,i,` -> ‘);
readln(Num[i]);
END;

— 3.11 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

(* Determinacao do maior numero *)

FOR i := 1 TO 8 DO
IF Num[i] > 4
THEN
WRITELN(`>> O numero `,Num[i],`eh maior que 4!!!`);

END.

As expressões matemáticas em Pascal são expressas indicando-se o identificador


de uma variável (a variável cujo valor vai ser modificado), seguida do símbolo de atribuição
de valor “:=” e da expressão que irá definir a forma de modificação do valor da variável. De
uma forma geral, tais expressões são assim escritas:

<identificador_variável> := <expressão>;

Um cuidado que o programador deve ter quando escreve expressões em Pascal é o


respeito às declarações de tipos de dados realizadas no início do programa. O valor
resultante da expressão deve ser do mesmo tipo que o da variável presente no lado
esquerdo da expressão, seja ele escalar ou estruturado.
É importante lembrar que num programa de computador, quando um valor é
atribuído a uma dada variável, o seu valor anterior à instrução de atribuição é “apagado”
definitivamente. Por esta razão, é bastante comum encontrarmos instruções de atribuição do
tipo:

x := x - 1;

ou

soma := soma + a;

Nestes casos, nota-se a presença do identificador da variável nos dois lados da


instrução de atribuição. Isto significa que o valor anterior da variável é utilizado para definir o
seu novo valor. No primeiro exemplo, observamos uma operação de “decremento” da
variável x, ou seja, o seu novo valor é igual ao valor anterior diminuído de uma unidade. No
segundo exemplo, o valor anterior da variável soma é adicionado ao valor de outra variável
(a) para definir o novo valor de soma, caracterizando uma operação de acúmulo.

4.2. A avaliação de expressões

Uma expressão num programa Pascal pode ser caracterizada por uma seqüência de
operações elementares, como aquelas apresentadas quando da apresentação dos tipos de
dados de Pascal (adições, subtrações, etc...). Quando caracterizadas desta forma num
programa, algumas regras de avaliação da expressão devem ser observadas para que se
obtenha o resultado esperado:

• a avaliação de um constante corresponde ao valor representado por ela;


• a avaliação de uma variável corresponde ao seu valor corrente;
• a avaliação de uma operação corresponde ao valor resultante da aplicação do seu
operador sobre seus operandos;
• a avaliação de uma chamada de função corresponde ao valor resultante da
aplicação desta função ao conjunto de seus argumentos.

A avaliação de expressões mais complexas é resultante da política de avaliação do


compilador da linguagem, esta política sendo baseada num esquema de prioridades

— 3.12 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

relativas dos operadores existentes na expressão. Na tabela abaixo são apresentados os


operadores suportados por Pascal, numa escala decrescente de prioridades:

Operadores Operação
unários NOT e - (mudança de sinal)
multiplicativos DIV, MOD, *, /, AND
aditivos +, -, OR
relação <, <=, =, <>, >=, >

Por exemplo, a expressão A + B / C + D corresponde à expressão matemática:

b
a+ +d
c

Se quisermos, numa expressão, quebrar o esquema de prioridades do compilador,


então deve-se fazer uso de parênteses. Por exemplo, se quisermos construir a expressão:

a +b
c +d

Deve-se escrever (A+B)/(C+D).

4.3. Funções prédefinidas do Pascal

Além dos operadores, a linguagem Pascal suporta um extenso conjunto de funções


que podem ser utilizadas nas expressões de nossos programas. A chamada a estas funções
é feita através do uso das palavras-chave definidas na linguagem. A tabela a seguir
apresenta as funções suportadas pela linguagem Pascal.

4.4. Leitura e escrita de dados em Pascal

A característica de interatividade de programas Pascal é concretizada a partir de


instruções de leitura e escrita de dados (constantes ou variáveis).
No caso da leitura de dados, as instruções disponíveis são READ e READLN, cuja
diferença básica é a introdução de um salto de linha após a leitura (no caso de READLN).

Função Descrição Operandos Resultado


ABS(x) valor absoluto Inteiro, Real Inteiro, Real
SQR(x) quadrado de um valor (x2) Inteiro, Real Inteiro, Real
TRUNC(x) truncamento (parte inteira) Real Inteiro
ROUND(x) arredondamento Real Inteiro
COS(x) coseno Inteiro, Real Real
SIN(x) seno Inteiro, Real Real
ARCTAN(x) arco tangente Inteiro, Real Real
SQRT(x) raiz quadrada Inteiro, Real Real
EXP(x) eleva ex Inteiro, Real Real
LN(x) retorna o logaritmo Log x Inteiro, Real Real
ODD(x) retorna TRUE se x é ímpar Inteiro Booleano
ORD(x) retorna 0 se x = FALSE, 1 se x = TRUE Booleano Inteiro
PRED(x) predecessor de x num conjunto Caractere Caractere
SUCC(x) sucessor de x num conjunto Caractere Caractere

— 3.13 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

Nas operações de leitura, o programador deve introduzir entre parênteses e após a


palavra-chave READ (ou READLN), a lista de variáveis que deverão ser introduzidas pelo
usuário do programa.
Por exemplo, a instrução a seguir permite que sejam introduzidos pelo usuário os
valores de quatro variáveis V1, V2, V3 e V4, todas na mesma linha de digitação. Neste caso,
os valores de cada variável deverão estar separados por pelo menos um caractere de
espaço.

READLN(V1,V2,V3,V4);

Caso o programador quisesse que o usuário introduzisse os valores um em cada


linha, ele teria de fazer:

READLN(V1);
READLN(V2);
READLN(V3);
READLN(V4);

No caso de operações de escrita, as instruções disponíveis são WRITE e WRITELN,


a diferença básica entre as duas sendo a mesma que no caso das instruções de escrita (o
salto de linha após a operação de escrita no caso de WRITELN).
O comando WRITE (ou WRITELN) pode incluir qualquer informação entre os seus
argumentos, incluindo expressões, constantes, variáveis e texto. Abaixo são apresentados
alguns exemplos do uso destas instruções:

WRITE(V1);
WRITELN(2*3);
WRITE(‘INE 5201’);
WRITELN(‘-> O valor da taxa eh: ‘, Taxa);

Um ponto interessante a comentar sobre a instrução de escrita é a possibilidade de


formatação da saída, principalmente no caso de valores de tipo REAL. Em princípio, a
notação utilizada para a saída de valores reais é a científica. Observe o exemplo de
programa dado pela listagem a seguir, cujo objetivo é imprimir o resultado de uma
multiplicação entre dois números reais.

PROGRAM multi;
VAR
n1,n2,Resultado : REAL;
BEGIN
WRITE(‘Entre com o primeiro operando >> ‘);
READLN(n1);
WRITE(‘Entre com o segundo operando >> ‘);
READLN(n1);
Resultado := n1 * n2;
WRITELN(‘O resultado da operacao eh: ‘,Resultado);
READLN;
END.

Se o programa acima for executado e o usuário entrar com os operandos 2.7 e 5.9,
por exemplo, o resultado da operação (que é 15.93) aparecerá impresso na forma científica,
como mostra a listagem da execução do programa a seguir:

Entre com o primeiro operando >> 2.7


Entre com o segundo operando >> 5.9

— 3.14 —
CAP. 3 – CARACTERÍSTICAS BÁSICAS DA LINGUAGEM PASCAL PROF. V. B. MAZZOLA

O resultado da operacao eh: 1.5930000000E+01

A notação científica, na maior parte das vezes, não é muito adequada como forma
de apresentar resultado. Por esta razão, é interessante poder especificar a forma de
apresentação de um resultado, explicitando o espaço que o valor deve apresentar e o
número de casas decimais que deve ser apresentado. No caso do exemplo acima, se o
programador modificar a última instrução de impressão de modo a explicitar o formato no
qual o dado deve ser apresentado, a saída será mais confortável para o usuário. Observe
como fica a nova versão desta instrução:

WRITELN(‘O resultado da operacao eh: ‘,Resultado:6:3);

O primeiro valor colocado após o identificador da variável indica a quantidade total


de dígitos que será utilizada para representar o valor; o segundo valor indica o número de
casas decimais que deverão ser impressas. Para o exemplo utilizado, considerando a
modificação de formatação da saída, o programa executará da seguinte maneira:

Entre com o primeiro operando >> 2.7


Entre com o segundo operando >> 5.9
O resultado da operacao eh: 15.930

Outro aspecto importante é onde a saída ocorre quando um comando de impressão


é executado. Em princípio, a saída de dados realiza-se no monitor de vídeo onde da
máquina onde o programa está sendo executado. No caso de programas onde se queira
registrar saídas de dados em impressoras, o programador (no ambiente Turbo Pascal)
deverá tomar o cuidado de indicar onde ele quer que seja realizada a saída. Se for no
monitor de vídeo, ele poderá escrever normalmente o comando de impressão. Se a saída
for na impressora, ele deverá adicionar o identificador da impressora no próprio comando.
Este identificador é designado por LST (LiSTer)1.
A listagem de programa abaixo mostra a diferença entre os dois comandos de escrita
para saída de informações no monitor de vídeo e na impressora. Observe que, no programa,
foi declarada a utilização da unidade Printer, do Turbo Pascal, para evitar que o compilador
indicasse erro de compilação por não reconhecer o identificador LST.

PROGRAM impressao;
USES Printer;
BEGIN
(* Impressao de texto no monitor de video *)
WRITELN(‘Oi, tudo bem?’);
(* Impressao de texto na impressora *)
WRITELN(LST,‘Oi, tudo bem?’);
END.

1 No caso do Turbo Pascal, o programador deverá, ainda, tomar o cuidado de declarar, em seu programa, o uso
da unidade Printer, para que o compilador reconheça o identificador LST... isto é feito após a linha de cabeçalho
do programa, através do comando USES Printer.

— 3.15 —

Você também pode gostar