Aula 5: Variáveis


Write e Writeln

As instruções write e writeln são usadas para mostrar informação no ecrã: texto, números, valor das variáveis, etc. Elas são bastante utilizadas e quase todos os programas fazem uso de uma intrução write ou writeln. Como exemplo, considere o seguinte programa: 

PROGRAM WritelnExample;

begin
  writeln('Today is a very nice day');
end.

quando nós compilamos e executamos o programa o ecrãn mostrará

Today is a very nice day
_

(nota, o caracter underscore _ representa a posição do cursor).

As intruções write e writeln não são usadas só para texto, tal como no exemplo anterior, mas também mostram, números ou outro tipo de informação. Mais tarde será discutido como controlar o formato de saída (a forma como a informação será mostrada). De momento, vamos ver o irmão do writeln, chamado write: A diferença entre writeln e write é que o writeln posiciona o cursor numa nova linha, de forma que a próxima saída apareça a por baixo do texto inicial.Com a intrução write, o cursor fica logo a seguir ao texto:

PROGRAM WriteExample;

begin
  write('Today is a very nice day');
end.

quando nós compilamos e executamos o programa o ecrã mostrará

Today is a very nice day_

Quando nós queremos imprimir várias coisas ao mesmo tempo, podemos fazê-lo com a mesma intrução write

PROGRAM WriteMultiple;

begin
  write('Today is ', x, ' a very nice day');
end.

que deverá mostrar(quando x é igual a 34)

Today is 34 a very nice day_

Compare os seguintes programas:
 
 

    program

PROGRAM WriteLnsExample;

begin
  writeln('Today is a ');
  writeln('very nice day');
end.

    output

Today is a 
very nice day
_

     program

PROGRAM WritesExample;

begin
  write('Today is a ');
  write('very nice day');
end.

    output

Today is a very nice day_

    program

PROGRAM WritesExample;

begin
  writeln('Today is a ');
  writeln;
  write('very nice day');
end.

    output

Today is a 

very nice day_

    program

PROGRAM WritesMulti;

begin
  writeln('Today ','is',' a ');
  write('very nice day');
end.

    output

Today is a 
very nice day_


Tipos de Variáveis

Variáveis guardam valores e informação. Elas permitem aos programas efectuar cálculos e guardar os resultados para utilizar mais tarde.Imagine uma variável como uma caixa que pode conter informação. Quando nós queremos saber essa informação, abrimos a caixa e lê-mos o valor. No final, colocamos a informação de volta na caixa e deixamo-la lá, até necessitar-mos outra vez dessa informação. Para simplificar a identificação, e para prevenir confusões,
todas as caixas têm de ter um nome, um identificador (ver aula 4). 

O tipo de caixa define o tamanho da caixa e o tipo de informação que poderá ser encontrada lá. As variáveis podem ser de vários tamanhos e gostos. 

As variáveis podem  guardar números, nomes, textos, etc. Em versões modernas do PASCAL existem muitos tipos de variáveis. Os mais importantes são
 
 

 grupo 
 tipo
 gama
 tamanho
I
 boolean
 TRUE / FALSE 
 1 bit
II
 byte
 0.. 255
 8 bit = 1 byte
II
 integer
 -32768 .. 32767
 16 bit = 2 bytes
II
 word
 0 .. 65535
 16 bit = 2 bytes
II
 longint
 -2147483648 .. 2147483647 
 32 bit = 4 bytes
III
 real
-2.9E-39 .. 1.7E38
 48 bit = 6 bytes
III
 double
 -5.0E-324 .. 1.7E308
 64 bit = 8 bytes
III
 extended
 -3.4E-4932 .. 1.1E4932
 80 bit = 10 bytes
IV
 char
 #0 .. #255
 8 bit = 1 byte
IV
 string
 text
 256 bytes

Note a convenção de expoentes em notação científica:
2.9E-39 é 2.9 x 10-39, 1.7E308 é 1.7 x 10308, etc.










I Boolean é usado para guardar e manipular informação do tipo true-orfalse. Tal como vimos na aula 3, isto é um bit de informação.
 
 

II Byte, integer, word, e longint guardam  números inteiros. Isto é usado para coisas que podem ser contadas; número de pessoas na sala, número de portas de um carro, número de chamadas telefónicas que alguém efectuou, ano lectivo, dia do mês, etc. Byte e word apenas guardam números positivos, enquanto que integer e longint podem guardar  números positivos e negativos. O tipo de variável byte é o que ocupa menos memória, apenas 8 bits, mas o alcançe dos valores está muito limitado, apenas de 0 .. 255. Se precisar-mos de guardar números inteiros positivos maiores, teremos que utilizar word. Se queremos guardar números positivos e negativos grandes e teremos que utilizar longint. Nota: Como byte tem 8 bits, pode armazenar 28=256 números diferentes: 0 .. 255  Podemos fazer o mesmo cálculo para unidades word e integer de 16-bit: 216 = 65536, números a partir de 0 .. 65535 para word, e -32768 .. 32767 para integer. Lembre-se dos cálculos da aula 3.

III Real, double e extended são exemplo de váriáveis que podem  guardar números de vírgula flutuante (por exemplo 3.1415926535). Estes são usados para
números fraccionários, tais como o comprimento do carro, o tempo perdido entre dois eventos, a altura de um edíficio, a raiz quadrada de 3, etc. O mais pequeno é real, e ocupa apenas 6 bytes, tendo como custo uma pequena precisão nos cálculos. A melhor é extended, com 80 bit (10 bytes), os cálculos deverão ter elevada
precisão, mas os cálculos serão mais lentos e ocuparão mais espaço em memória. Uma boa escolha entre estas é a double.

IV Os últimos dois tipos são usados para guardar texto. Char é utilizado para um caractér simples, enquanto que a string pode guardar até 255 caractéres. Mais tarde iremos aprender como nós poderemos definir o nosso próprio tipo de variáveis, agora vamos ver como é que nós as usamos em PASCAL.


Variáveis: Declaração com VAR

Na maioria das linguagens  modernas de compilação, todas as variáveis que nós utilizamos têm de ser primeiramente definidas. Isto é chamada a declaração. Para
ser mais preciso, declaração quer dizer reservar espaço em memória e associar um nome a ele, para que mais tarde nós possamos utilizar esse nome e não o seu
endereço de memória. quando desejar-mos aceder á informação. Em PASCAL declaramos variáveis com a intrução VAR, seguida pelas variável(eis) com o tipo que nós queremos usar. O sítio para fazer isso é antes do início do programa, mas depois da declaração do nome do programa. Por exemplo:

PROGRAM VarExample;

VAR i: integer;
    a: real;
    b: word;

begin
  writeln('Today is day ',i);
end.

Se queremos definir mais variáveis do mesmo tipo, podemos fazer isso com várias intruções ou fazê-lo apenas numa linha. Nota que em qualquer caso, nós não deveremos ter que escrever VAR novamente, se bem que não é proíbido fazê-lo:

PROGRAM VarsExample;

VAR i, j, k: integer;
    a1, a2: real;
VAR b1: word;
    b2: word;
    b3: word;

begin
  writeln('Today is day ',i);
end.


Variáveis: Inicialização

A instrução VAR não atibui um valor á variável, apenas reserva espaço para tal em memória! Neste último programa de exemplo acima, a saída  poderia ser

Today is day 23741

Quando um computador é ligado, a memória é normalmente preenchida com 0's, mas passado um bocado, depois de vários programas terem feito uso da memória e terem deixado lá o seu "lixo", o conteúdo de um endereço de  memória é imprevisíve.Para garantir que nós estamos a trabalhar com valores bem definidos deveremos sempre atribuir um valor a cada variável. Na próxima aula iremos aprender como é que nós podemos designar  instruções no programa. Aqui é suficiente dizer que "não assuma que no início as suas variáveis são estabelecidas"

Nota: Em muitas linguagens de programação é possível atribuir um valor a uma variável no momento da declaração. Também em PASCAL isso é possível (através de variáveis constants ), mas isto só irá criar confusão logo é melhor evitá-lo.


Teste rápido:

Para testar o seu conhecimento sobre aquilo que aprendeu nesta lição, click aqui para um teste on-line. Nota que esta não á a forma do teste final!

Peter Stallinga. Universidade do Algarve, 26 fevereiro 2002