Tipos de dados e registros
| English | Português |
|---|---|
| data type/ˈdeɪtə taɪp/ | tipo de dado |
| field/fiːld/ | campo |
| record/ˈrekɔːd/ | registrar |
| record structure/ˈrekɔːd ˈstrʌktʃə/ | estrutura de registro |
| dot notation/dɒt nəʊˈteɪʃn/ | notação pontual |
A decisão de tipo de dado mais cara da história
- Na década de 1960, memória custava mais que programadores. Para economizar dois caracteres por data, anos eram armazenados com dois dígitos:
99significava 1999. - Ninguém esperava que o código sobrevivesse ao século. Ele sobreviveu, e em 1º de janeiro de 2000 cada um desses campos leria como 1900. Governos e empresas gastaram estimados US$ 300 bilhões verificando e consertando isso.
- O bug não foi um erro de digitação. Foi um tipo de dado 数据类型 escolhido para a memória de 1965 e mantido para as datas de 2000.
- Esta aula ensina como escolher o tipo que se adequa aos dados, e como agrupar valores que pertencem juntos num registo 记录.
Os seis tipos básicos
| Tipo | Contém | Use-o para |
|---|---|---|
INTEGER |
um número inteiro, 42, -7 |
contagens, índices, IDs |
REAL |
um número com parte fracionária, 3.14 |
medições, médias |
CHAR |
um único caractere, 'A' |
uma letra de nota, uma escolha de menu |
STRING |
caracteres entre aspas, "Hello" |
texto |
BOOLEAN |
TRUE ou FALSE |
flags (indicadores) |
DATE |
uma data do calendário | datas de nascimento, prazos |

A pseudocódigo também nomeia dois tipos estruturados: ARRAY e FILE
Qual tipo de dado melhor armazena uma bandeira sim/não como "em estoque"?
Uma bandeira tem dois estados, então BOOLEAN (VERDADEIRO/FALSO) é a escolha precisa — não as strings "sim"/"não".
Um tipo real (ponto flutuante) deve ser usado para armazenar uma medida como temperatura.
Contagens inteiras usam inteiros; medições usam reais.
Escolha pelo uso do valor
- Um tipo é definido pelo que o programa fará com o valor, não pela sua aparência.
- O número de alunos é
INTEGER; a média da turma éREAL, pois tem uma parte fracionária; se um aluno pagou éBOOLEAN. - Um índice de array é sempre
INTEGER. Uma única letra de nota éCHAR; um endereço de email éSTRING. - Um número de telefone é um
STRING: começa com0, e ninguém jamais soma dois números de telefone.
Combine cada valor com o melhor tipo de dado para ele.
Escolha o tipo preciso: BOOLEAN para uma bandeira, REAL para valores fracionários, INTEGER para contagens inteiras, STRING para texto.
Que tipo de dado deve armazenar um número de telefone como 07700 900123?
Um INTEGER perderia o zero inicial, e nenhum programa soma ou multiplica números de telefone. Os dígitos são texto.
Exemplo resolvido: dê o tipo de dado adequado
| Dado | Tipo | Porquê |
|---|---|---|
| número de itens em stock | INTEGER |
uma contagem inteira |
| preço de um item | REAL |
tem pence, uma parte fracionária |
| se o item está em promoção | BOOLEAN |
apenas dois estados |
código de categoria do item, 'F' |
CHAR |
exatamente um caractere |
| nome do fornecedor | STRING |
texto |
| data de entrega do item | DATE |
uma data do calendário |
- Dê o nome do pseudocódigo, não a linguagem que você conhece:
BOOLEAN, nãobool;REAL, nãofloat.
O tipo de dado de um índice de array é sempre ____.
Um índice conta posições, portanto é um número inteiro. Names[2.5] não tem significado.
Registos
- Um registo (uma estrutura de registo 记录结构) armazena um conjunto de itens de dados de diferentes tipos sob um único identificador. Cada item é um campo 字段.
- Use um quando vários valores descrevem sempre uma coisa: um item em stock, um cliente, um aluno.
TYPE TStockItem
DECLARE ItemID : INTEGER
DECLARE Category : STRING
DECLARE ItemCost : REAL
DECLARE InStock : BOOLEAN
ENDTYPE

Um identificador, quatro campos, quatro tipos
Um registro é usado para:
Um registro agrupa campos de (possivelmente) tipos diferentes que descrevem uma coisa. Uma matriz armazena muitos valores do mesmo tipo.
Declaração e uso de um registo
TYPE … ENDTYPEdefine o tipo. Depois declare variáveis desse tipo, individualmente ou como um array:
DECLARE Item1 : TStockItem
DECLARE Items : ARRAY[1:100] OF TStockItem
- Acesse um campo com notação de ponto 点号表示法, para escrever e ler:
Item1.Category ← "Fruit"
OUTPUT Item1.Category, " costs ", Item1.ItemCost
Items[7].InStock ← FALSE
Um registro agrupa campos sob um único nome
Um registro agrupa campos relacionados juntos. Cada campo é um rótulo nomeado que você acessa com notação de ponto — Item1.Categoria — não por índice numérico.
Para definir o campo Category da variável de registro Item1, você escreve:
A notação ponto record.field acessa um campo de um registro.
Exemplo resolvido: o ficheiro de membros do clube
- Um clube armazena, para cada aluno, um ID de aluno (uma string), um nome, uma data de nascimento e até três números de clube. Declare o tipo de registo, um array para 3000 alunos e armazene um nome no primeiro elemento.
TYPE Student
DECLARE StudentID : STRING
DECLARE Name : STRING
DECLARE DateOfBirth : DATE
DECLARE Club : ARRAY[1:3] OF INTEGER
ENDTYPE
DECLARE Membership : ARRAY[1:3000] OF Student
Membership[1].Name ← "Li Wei"
- As notas:
TYPEcom o identificador eENDTYPE; cada campo declarado com um tipo adequado; o array com os seus limites eOF Student; o campo acessado com o índice e o ponto.
Coloque as linhas da declaração de filiação ao clube em ordem.
Defina o tipo, feche-o, declare uma variável ou matriz dele, depois use índice e ponto para acessar um campo.
Exemplo resolvido: indique o erro na declaração
TYPE TBooking
DECLARE Seats : INTEGER
DECLARE Price
DECLARE Total : STRING
- Três erros, cada um vale uma marca: o tipo não tem
ENDTYPE; o campoPricenão tem tipo de dado; eTotalconteráSeats * Price, um resultado aritmético, então não pode ser umSTRING. - Os três erros habituais do examinador: um
ENDTYPEausente, um campo sem tipo, um campo do tipo errado para o que é feito com ele.
Quais destes são erros em uma declaração de registro? Selecione todos que se aplicam.
Diferentes tipos em um registro são o ponto principal de um registro. As outras três são os erros que os examinadores colocam.
Registo, array ou variáveis simples
- Valores que sempre pertencem juntos e têm tipos diferentes: um registo.
- Muitos valores do mesmo tipo sob um único nome: um array (próxima aula).
- Uma tabela de linhas onde cada linha tem campos mistos: um array de registros,
Members[i].Name. - Valores não relacionados: variáveis separadas. Agrupá-los não traz vantagens.
Uma matriz de registros permite que um único identificador segure uma tabela em que cada linha tem campos de tipos diferentes.
Members[i] é uma linha (um registro); Members[i].Name é uma única célula. A matriz fornece as linhas, o registro fornece as colunas mistas.
Marcas que escapam
- Um valor sim/não é um
BOOLEAN, não as strings"yes"e"no". - Um número de telefone ou um ID que começa com
0é umSTRING, nunca umINTEGER. - Dinheiro em um
REALacumula erros de arredondamento; muitos sistemas armazenam centavos inteiros como umINTEGER. - Cada campo é uma linha de
DECLAREcom um tipo, e o tipo termina comENDTYPE. O índice vai no array, o ponto no campo:Members[3].Name.
Entendeu?
- seis tipos básicos,
INTEGER,REAL,CHAR,STRING,BOOLEAN,DATE, escolhidos pelo que o programa faz com o valor - um registro contém campos de tipos diferentes sob um único identificador:
TYPE … DECLARE field : type … ENDTYPE - declare variáveis ou arrays do tipo, e acesse um campo com notação de ponto:
Membership[1].Name ← "Li Wei" - os erros que o examinador planta: sem
ENDTYPE, um campo sem tipo, um campo digitado erroneamente para seu uso