Curso de Pascal
Variáveis
Você está em: MarMSX >> Cursos >> Pascal
Uma variável é um espaço de memória reservado pelo programa para armazenar um determinado tipo de dado. Ela é composta por:
- Um identificador - um nome que irá identificar o dado, ou seja, irá fazer referência a esse dado na memória.
- Descrição do tipo de dado - indica qual é o tipo de dado armazenado.
- O dado em si.
Diferente do Basic, no Pascal devemos declarar uma variável antes de utilizá-la. Também devemos indicar qual é o tipo de dado que essa variável irá comportar.
A palavra reservada "var" é utilizada para indicar que uma variável está sendo declarada.
Sintaxe:
var <identificador> : <tipo de dado>;
Exemplo:
var idade : integer;
Declara uma variável com o identificador "idade" e o tipo de dado inteiro.
Para a declaração de mais variáveis, utiliza-se um "var" apenas. Além disso, a declaração de variáveis deverá sempre estar antes do "begin" do corpo principal, função ou procedimento correspondente. Ex:
var nome : string[40];
idade : integer;
altura : real;
Atribuição:
A atribuição de valor é feita utilizando-se os dois pontos e o igual ":=". Os dois pontos são utilizados para diferenciar a igualdade de atribuição da igualdade do teste lógico, no qual é utilizado apenas o símbolo de igual "=". Ex:
var nota : integer;
begin
nota := 7;
if nota = 7 then
writeln('Aprovado no limite!');
end.
A variável nota recebe o valor igual a 7. Observe que o teste lógico (nota = 7) possui apenas o símbolo de igual, sem os dois pontos.
Tipos de dados
O Turbo Pascal possui os seguintes tipos de dados primitivos:
- Boolean
- Byte
- Char
- Integer
- Real
- String
- Text
BOOLEAN
Variável que admite somente 2 valores distintos: FALSO ou VERDADEIRO.
TIPO |
TAMANHO |
boolean |
8 bits |
wordbool |
16 bits |
longbool |
32 bits |
bytebool |
8 bits |
Exemplo:
var brasileiro : boolean;
begin
brasileiro := false;
if brasileiro then
writeln('Brasuca')
else
writeln('Gringo');
end.
Saída:
Gringo
Obs: para variáveis do tipo booleano, o teste do "if":
if brasileiro then
equivale a:
if brasileiro = true then
CHAR
Variável utilizada para manipular caracteres. Contém o código ASCII de
uma letra.
Não serve para armazenar valores, pois este tipo de variável não
permite realizar operações.
A função ord() retorna o código ASCII da variável, enquanto a
função chr() retorna a letra correspondente a um código ASCII.
Exemplo:
var letra1, letra2 : char;
begin
letra1 := 'A';
letra2 := #65;
writeln('A letra 1 é: ', letra1);
writeln('A letra 2 é: ', letra2);
writeln('O codigo ASCII da letra 1 é: ',ord(letra1));
letra2 := chr(65); { Também pode }
end.
Saída:
A letra 1 é: A
A letra 2 é: A
O código ASCII da letra 1 é: 65
INTEGER
Variável utilizada para manipular números inteiros.
TIPO |
FAIXA |
SINAL |
TAMANHO |
shortint |
-128 a 127 |
Sinalizado |
8 bits |
integer |
-32768 a 32767 |
Sinalizado |
16 bits |
longint |
-2147483648 a 2147483647 |
Sinalizado |
32 bits |
byte |
0 a 255 |
Não sinalizado |
8 bits |
word |
0 a 65535 |
Não sinalizado |
16 bits |
A diferença entre variável sinalizada e não sinalizada é a
presença de números negativos. Nas variáveis sinalizadas, o bit mais
significativo é utilizado para indicar o sinal. O bit 0 indica número positivo, e o bit 1
indica número negativo.
Exemplo:
var idade : integer;
begin
idade:=20;
write('Ela tem ',idade); { Pode ser também: writeln('Ela tem ', idade, ' anos.'); }
writeln(' anos.');
end.
Saída:
Ela tem 20 anos.
REAL
Variável utilizada para manipular números reais.
TIPO |
FAIXA |
DÍGITOS |
BYTES |
real |
2.9e-39 a 1.7e38 |
11-12 |
6 |
single |
1.5e-45 a 3.4e38 |
7-8 |
4 |
double |
5.0e-324 a 1.7e308 |
15-16 |
8 |
extended |
3.4e-4932 a 1.1e4932 |
19-20 |
10 |
comp |
-9.2e18 a 9.2e18 |
19-20 |
18 |
Principais funções do real:
- trunc() - Trunca um valor real.
- round() - Arredonda um valor real.
- int() - Pega a parte inteira de um valor real. Retorna inteiro.
- frac() - Pega a parte fracionária de um real.
- abs() - Retorna valor absoluto (elimina o sinal) de um inteiro ou real.
- sin(), cos() - Calcula o seno ou cosseno de um ângulo em radianos.
- sqr() - Calcula o quadrado de um número, equivalente a num * num.
- sqrt() - Calcula a raiz quadrada de um número.
Exemplo:
var a : real;
begin
a := 7.6;
writeln('Valor de a: ', a);
writeln('Valor truncado de a: ', trunc(a));
writeln('Valor arredondado de a: ', round(a));
end.
Saída:
Valor de a: 7.6
Valor truncado de a: 7
Valor arredondado de a: 8
STRING
Variável que manipula cadeia de caracteres. Utilizada para armazenar
palavras.
Em sua declaração, podemos indicar o tamanho da palavra. Caso omitirmos
este tamanho, será atribuído o máximo valor possível, que é de 256
caracteres.
As principais funções de manipulação de strings são:
- concat(str1, str2, ..., strn) - Concatena strings.
- copy(string, inicio, tamanho) - Igual ao mid$() do basic.
- delete(string, inicio, tamanho) - Apaga um trecho da string.
- insert(add_str, string, pos) - Insere uma string dentro da outra.
- length(string) - Retorna o tamanho da string.
- pos(busca_str, string) - Retorna a primeira ocorrência de uma string de busca.
- str(val, string) - Converte valor numérico em string.
- val(string, var, code) - Converte uma string em valor numérico.
Exemplo:
var nome : string[10];
begin
nome:='Marcelo';
writeln(copy(nome,1,3),'MSX');
end.
Saida:
MarMSX
Concatenação é a união de strings. Ela é feita no pascal utilizando-se o sinal de soma ("+"). Ex:
var frase1, frase2, frase3 : string;
begin
frase1 := 'MSX';
frase2 := frase1 + ' é o ';
frase3 := frase2 + frase1;
writeln(frase1);
writeln(frase2);
writeln(frase3);
end.
Saída:
MSX
MSX é o
MSX é o MSX
Formatação de strings a partir de valores numéricos:
variavel : numero_casas_antes_virgula : numero_casas_depois_virgula
Exemplo:
var i : integer;
r : real;
begin
i := 20;
r := 34.5;
writeln(i:3);
writeln(r:2:1);
end.
Saída:
20
34.5
Variáveis Absolute
As variáveis são alocadas em posições aleatórias de memória. Entretanto, podemos definir o endereço que uma variável irá residir através da palavra reservada "aboslute".
Exemplo:
var i : integer absolute $f000;
Fará com que a variável "i" resida no endereço de memória &HF000.
O mesmo se dá para vetores:
var vetor : array[1..10] of byte absolute $D4CD;
A declaração absolute deverá ser feita variável a variável, ou seja:
var i, j : byte absolute $C000;
é errada. O correto é:
var i : byte absolute $C000;
j : byte absolute $C001;
Constantes
A constante é uma espécie de variável que deverá ter seu valor explicitado na declaração e este valor não poderá ser alterado ao longo do programa.
A sintaxe é a mesma da variável, entretanto utiliza-se a palavra reservada "const" antes da declaração das constantes.
Exemplo:
const a : integer = 5;
begin
writeln('Valor da constante a: ', a);
end.
Saída:
Valor da constante a: 5
Estudo aprofundado: Interpretação dos dados na memória
Quando escolhemos o tipo de uma variável, na verdade estamos indicando:
- Quantos bytes serão reservados para armazenar o dado; e
- Como esse dado será interpretado pelo programa.
Para entender melhor, vejamos o seguinte exemplo contendo o trecho de memória entre os endereços 0 a 7:
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
A proposta a seguir é verificar como esses dados serão interpretados por uma variável, dependendo do seu tipo.
Para qualquer tipo proposto, o endereço inicial da variável é 0.
Byte
Variável que ocupa 1 byte, onde interpreta o dado como um número inteiro não sinalizado.
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
Assim, tem-se na posição 0 o valor igual a &H61, o que equivale a 97 em decimal.
Char
Variável que ocupa 1 byte, onde interpreta o dado como um caractere.
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
Assim, tem-se na posição 0 o valor igual a &H61, o que equivale ao caractere 'a' da tabela de ASCII.
Integer
Variável que ocupa 2 bytes, onde interpreta o dado como um número inteiro não sinalizado.
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
Assim, tem-se o número: &H7A61 (posição invertida na memória), o que equivale a 31329 em decimal.
Double
Variável que ocupa 8 bytes, onde interpreta o dado como um número real.
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
Assim, o valor correspondente é 1,712E+214.
String[8]
Variável que ocupa 8 bytes, onde interpreta o dado como uma cadeia de caracteres.
Endereço 00 01 02 03 04 05 06 07
---------------------------------
Dado 61 7A 75 6C 61 6E 69 6C
Assim, teriamos a palavra 'azulanil' (azul anil)
Outros tipos de variáveis
Além das variáveis primitivas, temos outros tipos de variáveis no Pascal, que serão abordadas nos capítulos mais adiante:
- Vetores - uma lista delimitada e sequencial do mesmo tipo de dado.
- Variáveis dinâmicas - uma lista ilimitada (em tese) e não-sequencial do mesmo tipo de dado.
- Variáveis compostas - composição de vários tipos de dados primitivos - type.