Os tipos ordinais incluem (veja a Figura 4.1) tipos inteiros, lógicos, de caracteres, enumerados e de intervalo. A função ORD(X) é aplicável a qualquer um deles, que retorna o número ordinal do valor da expressão X. Para tipos inteiros, a função ORD(X) retorna o valor do próprio X, ou seja, ORD(X) = X para X pertencente a qualquer tipo de shell. A aplicação de ORD(X) aos tipos booleano, caractere e enumeração produz um número inteiro positivo no intervalo de 0 a 1 (booleano), 0 a 155 (caractere), 0 a 65535 (enumeração). Um tipo de intervalo retém todas as propriedades do tipo ordinal subjacente, portanto, o resultado da aplicação da função ORD(X) a ele depende das propriedades desse tipo.
Você também pode aplicar funções a tipos ordinais:
PRED (X) - retorna o valor anterior do tipo ordinal (o valor que corresponde ao número ordinal ORD(X) - 1), ou seja,
ORD(PRED(X)) = ORD(X) - 1;
SUCC (X) - retorna o próximo valor ordinal que corresponde ao número ordinal ORD(X) +1, ou seja,
ORD(SUCC(X)) = ORD(X) + 1.
Por exemplo, se um programa define uma variável
então a função PRED(C) retornará o valor "4" e a função SUCC(C) retornará o valor "6".
Se imaginarmos qualquer tipo ordinal como um conjunto ordenado de valores, aumentando da esquerda para a direita e ocupando um determinado segmento no eixo dos números, então a função PRED(X) não está definida para a esquerda, e SUCC(X) para a direita final deste segmento.
Tipos inteiros. A gama de valores possíveis dos tipos inteiros depende da sua representação interna, que pode ser um, dois ou quatro bytes. Na mesa 4.1 mostra o nome dos tipos inteiros, o comprimento de sua representação interna em bytes e a faixa de valores possíveis.
Tabela 4.1
Ao usar procedimentos e funções com parâmetros inteiros, você deve se guiar pelo “aninhamento” de tipos, ou seja, onde quer que WORD possa ser usado, BYTE pode ser usado (mas não vice-versa), LONGINT “inclui” INTEGER, que, por sua vez, inclui SHORTINT.
A lista de procedimentos e funções aplicáveis aos tipos inteiros é dada na Tabela 4.2. Cartas b, s, w, eu, eu expressões do tipo BYTE, SHORTINT, WORD, INTEGER e LONGINT são designadas, respectivamente, x é uma expressão de qualquer um desses tipos; cartas vb, vs, vw, vi, vl, vx denotam variáveis dos tipos correspondentes. Um parâmetro opcional é indicado entre colchetes.
Tabela 4.2
Procedimentos e funções padrão aplicáveis a tipos inteiros | ||
Apelo | Tipo de resultado | Ação |
abdômen (x) | x | Retorna módulo x |
cr(b) | Caráter | Retorna um caractere pelo seu código |
dec(vx[, eu]) | - | Diminui o valor de vx em i, e na ausência de i - em 1 |
inc(vx[, eu]) | - | Aumenta o valor de vx em i, e na ausência de i - em 1 |
Olá (eu) | Byte | Retorna o byte alto do argumento |
Olá (o) | Mesmo | Mesmo |
Lo (eu) | " | Retorna o byte inferior do argumento |
Baixo) | " | Mesmo |
ímpar (eu) | Booleano | Retorna True se o argumento for um número ímpar |
Aleatório (w) | Igual ao parâmetro | Retorna um número pseudoaleatório distribuído uniformemente no intervalo 0...(w-l) |
sgr(x) | X | Retorna o quadrado do argumento |
trocar (eu) | Inteiro | Troca bytes em uma palavra |
trocar (w) | Palavra |
Ao operar com números inteiros, o tipo do resultado corresponderá ao tipo dos operandos, e se os operandos forem de tipos inteiros diferentes, o tipo do operando que possui potência máxima (faixa máxima de valores). Possível estouro do resultado não é controlado de forma alguma, o que pode gerar mal-entendidos, por exemplo:
uma:= 32767; (Valor INTEGER máximo possível)
x:= uma + 2; (Estouro ao avaliar esta expressão !}
y:= LongInt(a)+2; (Sem overflow após converter a variável para um tipo mais poderoso)
EscrevaLn(x:10:0, y:10:0)
Como resultado da execução do programa, obtemos
Tipo booleano. Os valores booleanos podem ser uma das constantes pré-declaradas FALSE ou TRUE. As regras se aplicam a eles:
Falso< True;
succ(Falso)= Verdadeiro;
pred(Verdadeiro) = Falso.
Como o tipo Boolean é um tipo ordinal, ele pode ser usado em um operador de tipo contável, por exemplo:
para 1:= Falso para Verdadeiro faça ....
Tipo de personagem. O valor de um tipo de caractere é o conjunto de todos os caracteres do PC. Cada caractere recebe um número inteiro no intervalo de 0 a 255. Este número serve como código para a representação interna do símbolo e é retornado pela função ORD.
O código ASCII é usado para codificação ( Código Padrão Americano para Intercâmbio de Informações- Código Padrão Americano para Intercâmbio de Informações). Este é um código de 7 bits, ou seja, ele pode codificar apenas 128 caracteres no intervalo de 0 a 127. Ao mesmo tempo, no byte de 8 bits alocado para armazenar um caractere no Turbo Pascal, você pode codificar o dobro de caracteres no intervalo de 0 a 255. O a primeira metade dos caracteres PC com códigos 0...127 corresponde ao padrão ASCII (Tabela 4.3). A segunda metade dos caracteres com códigos 128...255 não está limitada pela estrutura rígida do padrão e pode ser alterada em diferentes tipos de PCs (o Apêndice 2 mostra algumas opções de codificação comuns para esses caracteres).
Tabela 4.3
Codificação de caracteres de acordo com o padrão ASCII | |||||||
Código | Símbolo | Código | Símbolo | Código | Símbolo | Código | Símbolo |
NUL | B.L. | ® | " | ||||
ZONA | ! | UM | um | ||||
STX | " | EM | b | ||||
ETX | # | COM | Com | ||||
EOT | $ | D | d | ||||
ENQ | % | E | e | ||||
PERGUNTAR | & | F | f | ||||
BEL | " | G | g | ||||
B.S. | ( | H | h | ||||
NT | ) | EU | eu | ||||
SE | * | J. | j | ||||
TV | + | k | k | ||||
FF | , | eu | eu | ||||
CR | - | M | eu | ||||
ENTÃO | . | N | n | ||||
SI. | / | SOBRE | |||||
DEL | p | P | |||||
DC1 | P | q | |||||
DC2 | R | R | |||||
DC3 | S | é | |||||
DC4 | T | t | |||||
N.A.K. | Você | você | |||||
SIN | V | V | |||||
ETB | c | c | |||||
PODE | X | X | |||||
E.M. | Você | Você | |||||
SUB | : | z | z | ||||
ESC | / | [ | { | ||||
FS | < | \ | eu | ||||
G.S. | = | ] | } | ||||
R.S. | > | ^ | ~ | ||||
NÓS | ? | - | n |
Os caracteres com códigos 0...31 referem-se a códigos de serviço. Se esses códigos forem usados no texto dos caracteres do programa, eles serão considerados espaços em branco. Quando usados em operações de E/S, podem ter o seguinte significado independente:
Símbolo | Código | Significado |
BEL | Chamar; A exibição deste símbolo é acompanhada por sinal sonoro | |
NT | Tabulação horizontal; quando exibido na tela, move o cursor para uma posição que é um múltiplo de 8 mais 1 (9, 17, 25, etc.) | |
SE | Alimentação de linha; ao exibi-lo na tela, todos os caracteres subsequentes serão exibidos começando na mesma posição, mas na próxima linha | |
TV | Guia vertical; quando exibido na tela, é substituído por um caractere especial | |
FF | Execução de página; quando enviado para uma impressora, forma uma página; quando enviado para a tela, é substituído por um caractere especial; | |
CR | Retorno de transporte; inserido pressionando a tecla Enter (quando inserido usando READ ou READLN, significa o comando “Enter” e não é colocado no buffer de entrada; quando gerado, significa o comando “Continuar a saída do início da linha atual”) | |
SUB | Fim do arquivo; inserido no teclado pressionando Ctrl-Z; na saída, ele é substituído por um sinal especial | |
SSC | Fim do trabalho; inserido no teclado pressionando a tecla ESC; na saída, ele é substituído por um sinal especial |
Operações relacionais, bem como funções integradas, são aplicáveis ao tipo CHAR: СНR(В) - função do tipo CHAR; converte uma expressão B do tipo BYTE em um caractere e a retorna com seu valor;
UPCASE(CH) - função do tipo CHAR; retorna a letra maiúscula se CH for uma letra latina minúscula, caso contrário, retorna o próprio caractere CH, por exemplo:
cl:=UpCase("s") ;
c2:=UpCase("Ф") ;
EscrevaLn(cl," ",c2)
Como a função UPCASE não processa cirílico, o resultado da execução deste
programas serão exibidos na tela
Tipo de enumeração. Um tipo enumerado é especificado por uma enumeração dos valores que pode receber. Cada valor é nomeado por algum identificador e está localizado em uma lista entre parênteses, por exemplo:
cores =(vermelho, branco, azul);
O uso de tipos enumerados torna os programas mais visuais. Se, por exemplo, o programa utiliza dados associados aos meses do ano, então o seguinte fragmento do programa:
TypeMonth = (janeiro, fevereiro, março, abril, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro);
mês: TipoMês;
if mês = agosto então WriteLn("Seria bom ir para o mar!");
Seria, você vê, muito claro. Infelizmente! No Turbo Pascal você não pode usar cirílico em identificadores, então somos forçados a escrever assim:
TypeMonth = (jan, fevereiro, março, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro);
mês: TipoMês;
if mês = agosto then WriteLn("Seria bom ir para o mar!");
A correspondência entre os valores de um tipo enumerado e os números ordinais desses valores é estabelecida pela ordem de enumeração: o primeiro valor da lista recebe o número ordinal 0, o segundo - 1, etc. A capacidade máxima de um tipo enumerado é de 65.536 valores, portanto, na verdade, um tipo enumerado define um determinado subconjunto de todo o tipo WORD e pode ser considerado como uma declaração compacta de um grupo de constantes inteiras com valores 0, 1, etc.
O uso de tipos enumerados aumenta a confiabilidade dos programas, permitindo controlar os valores que as variáveis correspondentes recebem. Por exemplo, sejam fornecidos os seguintes tipos enumerados:
cores = (preto, vermelho, branco);
ordenal= (um, dois, três);
dias = (segunda, terça, quarta);
Em termos de poder e representação interna, todos os três tipos são equivalentes:
ord(preto)=0, ..., ord(branco)=2,
ord(um)=0, ...ord(três)=2,
ord(segunda-feira)=0, ...ord(quarta-feira)=2.
No entanto, se as variáveis forem definidas
col:cores; num:ordenal;
então os operadores são permitidos
num:= succ(dois);
dia:=pred(terça);
mas inaceitável
Como já mencionado, existe uma correspondência biunívoca entre os valores de um tipo enumerado e o conjunto de inteiros, especificado pela função ORD(X). O Turbo Pascal também permite a conversão reversa: qualquer expressão do tipo WORD pode ser convertida para um valor do tipo enum, desde que o valor da expressão inteira não exceda o power1™ do tipo enumeração. Esta conversão é obtida usando uma função declarada automaticamente com o nome do tipo enumerado (ver seção 4.4). Por exemplo, para a declaração de tipo discutida acima, as seguintes atribuições são equivalentes:
col:= cores(0);
Claro, tarefa
será inaceitável.
Variáveis de qualquer tipo enumerado podem ser declaradas sem primeiro declarar esse tipo, por exemplo:
col: (preto, branco, verde);
Faixa de tipo. Um tipo de intervalo é um subconjunto de seu tipo base, que pode ser qualquer tipo ordinal, exceto um tipo de intervalo. Um tipo de intervalo é definido pelos limites de seus valores dentro do tipo base:
<мин.знач.>..<макс.знач.>
Aqui<мин.знач. >- valor mínimo da faixa de tipo;
<макс.знач.>- seu valor máximo.
Por exemplo:
dígito = "0".."9";
O tipo de intervalo não precisa ser descrito na seção TYPE, mas pode ser especificado diretamente ao declarar uma variável, por exemplo:
Ichr: "A".."Z";.
Ao determinar um tipo de intervalo, você deve seguir as seguintes regras:
- dois caracteres ".." são tratados como um único caractere, portanto não são permitidos espaços entre eles;
- a borda esquerda do intervalo não deve exceder a borda direita. Um tipo de intervalo herda todas as propriedades de seu tipo base, mas com as limitações de seu poder inferior. Em particular, se uma variável for definida
dias = (mo,tu,nós,th,fr,sa,su);
Fim de semana = sa .. su;
então ORD(W) retornará o valor 5, enquanto PRED(W) resultará em um erro.
A biblioteca padrão do Turbo Pascal inclui duas funções que suportam o trabalho com tipos de intervalo:
HIGH(X) - retorna o valor máximo do tipo de intervalo ao qual pertence a variável X;
LOW(X) - retorna o valor mínimo do tipo de intervalo.
O seguinte programa curto imprimirá a linha
WriteLn(Baixo(k),"..",Alto(k))
O conjunto de inteiros é infinito, mas sempre podemos escolher a quantidade de bits para representar qualquer inteiro que surja na resolução de um problema específico. O conjunto dos números reais não é apenas infinito, mas também contínuo, portanto, não importa quantos bits peguemos, inevitavelmente encontraremos números que não possuem uma representação exata. Os números de ponto flutuante são uma forma possível de representar números reais, o que é uma compensação entre precisão e intervalo de valores aceitos.
Um número de ponto flutuante consiste em um conjunto de dígitos individuais, convencionalmente divididos em sinal, expoente e mantissa. O expoente e a mantissa são inteiros que, juntamente com o sinal, dão a seguinte representação de um número de ponto flutuante:
Matematicamente está escrito assim:
(-1) s × M × B E, onde s é o sinal, B é a raiz, E é o expoente e M é a mantissa.
A base determina o sistema numérico de dígitos. Foi matematicamente comprovado que números de ponto flutuante com base B=2 (representação binária) são mais resistentes a erros de arredondamento, portanto, na prática, apenas as bases 2 e, menos comumente, 10 são encontradas. Para apresentação posterior, sempre assumiremos B=. 2, e a fórmula para um número com ponto flutuante será semelhante a:
(-1)s × M × 2 E
O que é mantissa e ordem? Mantissaé um número inteiro de comprimento fixo que representa os bits mais significativos de um número real. Digamos que nossa mantissa consiste em três bits (|M|=3). Tomemos, por exemplo, o número “5”, que no sistema binário será igual a 101 2. O bit mais significativo corresponde a 2 2 =4, o bit do meio (que é igual a zero) é 2 1 =2 e o bit menos significativo é 2 0 =1. Ordem– esta é a potência da base (dois) do dígito mais alto. No nosso caso E=2. É conveniente escrever tais números na chamada forma padrão “científica”, por exemplo “1.01e+2”. Fica imediatamente claro que a mantissa consiste em três signos e a ordem é dois.
Digamos que queremos obter um número fracionário usando os mesmos 3 bits da mantissa. Podemos fazer isso se considerarmos, digamos, E=1. Então nosso número será igual
1,01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5
Obviamente, desta forma o mesmo número pode ser representado de diferentes maneiras. Vamos considerar um exemplo com o comprimento da mantissa |M|=4. O número “2” pode ser representado da seguinte forma:
2 = 10 (em binário) = 1,000e+1 = 0,100e+2 = 0,010e+3.
Portanto, já nas primeiras máquinas, os números eram representados nas chamadas forma normalizada, quando o primeiro bit da mantissa sempre foi assumido como igual a um.
Isso economiza um bit (já que o implícito não precisa ser armazenado na memória) e garante que o número seja representado de forma exclusiva. No nosso exemplo, “2” tem uma representação única (“1.000e+1”), e a mantissa é armazenada na memória como “000”, pois a unidade principal está implícita implicitamente. Mas surge um novo problema na representação normalizada de números - é impossível representar zero nesta forma.
Todo profissional já foi um bule de chá. Certamente você está familiarizado com o estado quando “você não sabe como começar a pensar para chegar a tal coisa”. Você provavelmente já se deparou com uma situação em que simplesmente não sabe por onde começar. Este livro é voltado justamente para pessoas que gostariam de se tornar programadores, mas não têm a menor ideia de como iniciar esse caminho.
...
Quase todos os tipos de dados inteiros são . Esses tipos de dados representam números inteiros dentro de um determinado intervalo. Os nomes exatos dos tipos inteiros e intervalos de valores dependem da linguagem de programação específica, do compilador e do modo de compilação. Você pode aprender mais sobre isso na documentação do compilador. Por exemplo, tipo de dados Inteiro Por exemplo, tipo de dados no Delphi tem um intervalo de -2147483648…2147483647, enquanto no Turbo Pascal o tipo de dados Por exemplo, tipo de dados representa números no intervalo -35768 a 32767. No Free Pascal, o intervalo de valores do tipo
determinado pelo modo selecionado.
Como o Lazarus usa o compilador Free Pascal, tudo o que foi dito sobre os tipos de dados em relação ao Free Pascal também é verdade para o Lazarus.
Portanto, os tipos de dados inteiros do Free Pascal estão listados na Tabela 13.1.
Tabela 13.1. Tipos de dados inteiros Pascal gratuitos (Lazarus). | Tipo | Tamanho, bytes |
Faixa de valores | 1 | 0…255 |
Byte | 1 | -128…127 |
Shortint | 2 | -35768…32767 |
Pequeno | 2 | 0…65535 |
Por exemplo, tipo de dados | Palavra | 2 ou 4 |
Depende do modo de compilação | 4 | 0…4294967295 |
Cardeal | 4 | -2147483648…2147483647 |
Inteiro longo | 4 | 0...4294967295 |
Palavra longa | 8 | -9223372036854775808...9223372036854775807 |
Int64 | 8 | 0...18446744073709551615 |
QWord
OBSERVAÇÃO Palavra longa Tipos em Free Pascal Int64 não são! Isso significa que você não pode usá-los, por exemplo, para variáveis de índice em loops. No entanto, apresentei-os aqui para não descrevê-los separadamente no futuro e para coletar todos os tipos inteiros do Free Pascal em um só lugar. Se você não entende algumas palavras, não se assuste. No devido tempo contarei tudo com mais detalhes.
E agora algumas explicações sobre a mesa.
Na coluna TIPO são fornecidos identificadores de tipo de dados (palavras-chave que indicam ao compilador a que tipo um determinado dado pertence). Você aprenderá como usar esses identificadores nas lições a seguir.
Na coluna TAMANHO indica o tamanho que o tipo de dado ocupa na memória do computador. Por exemplo, um número inteiro positivo pode ser representado tipos diferentes: Faixa de valores, Pequeno, Depende do modo de compilação etc. No entanto, um número como Depende do modo de compilação ocupará 4 bytes na memória, enquanto um número como Faixa de valores– apenas 1 byte. Portanto, se você tem certeza de que o número com o qual está trabalhando nunca terá um valor maior que 255, então é melhor defini-lo como um tipo Faixa de valores, pois isso economizará espaço na memória do seu computador. Embora nem tudo seja tão simples aqui (as nuances da distribuição de memória e outros recursos do computador estão além do escopo).
Na coluna FAIXA especifica o intervalo de valores em que o tipo de dados opera. Por exemplo, um número como Faixa de valores pode assumir valores de 0 a 255.
Agora para praticar. Vamos escrever um programa que exiba os intervalos de valores de todos os tipos de dados inteiros. O código fonte deste programa é fornecido abaixo:
Listagem 13.1. Um programa para exibir intervalos de números inteiros. programa td; ($mode objfpc)($H+) usa ($IFDEF UNIX)($IFDEF UseCThreads) cthreads, ($ENDIF)($ENDIF) Classes (você pode adicionar unidades depois disso); começar Writeln("Byte: ", Baixo(Byte), "..", Alto(Byte));
Writeln("Shortint: ", Low(Shortint), "..", High(Shortint)); Writeln("Smallint: ", Baixo(Smallint), "..", Alto(Smallint)); Writeln("Palavra: ", Baixo(Palavra), "..", Alto(Palavra)); Writeln("Inteiro: ", Baixo(Inteiro), "..", Alto(Inteiro)); Writeln("Cardeal: ", Baixo(Cardeal), "..", Alto(Cardeal)); Writeln("Inteiro longo: ", Baixo(Inteiro longo), "..", Alto(Inteiro longo)); Tipos em Free Pascal Writeln("Longword: ", Low(Longword), "..", High(Longword)); Writeln("Int64: ", Baixo(Int64), "..", Alto(Int64));
Por fim, direi como os dados inteiros são gravados no programa. Sim, como em qualquer outro lugar - basta escrever o número, sem aspas ou símbolos adicionais. Por exemplo, assim
10
178
35278
É verdade que isso se aplica a números no sistema numérico decimal. Certamente você já sabe que existem outros sistemas. Os sistemas numéricos mais utilizados são binário, decimal e hexadecimal.
Free Pascal suporta quatro formatos inteiros:
- Notação decimal. Apenas um número, como 10.
- Notação hexadecimal. Um número prefixado com $. Por exemplo, o número hexadecimal $10 é igual ao número decimal 16.
- Notação octal. Um número prefixado com &. Por exemplo, octal &10 é igual ao decimal 8.
- Notação binária. Um número prefixado com%. Por exemplo, o número binário %10 é igual ao número decimal 2.
Trabalho de casa:
Crie um programa que exiba intervalos de valores inteiros (Listagem 13.1). Compile o programa e execute-o. Certifique-se de que esses valores correspondem aos mostrados na Tabela 13.1.
No código-fonte do programa, encontre a linha que define o modo de compilação:
($modo objfpc)($H+)
Nesta linha, em vez da palavra objfpc escreva a palavra tp. Ou seja, a linha final deve ficar assim:
($modo tp)($H+)
Inicie o programa. Observe o intervalo de valores de tipo Por exemplo, tipo de dados. Tire conclusões.
Aprenda a pensar como um programador, ou seja, de forma lógica. Ninguém vai mastigar tudo para você até a aposentadoria, como eu faço agora. Você tem que se acostumar a pensar por si mesmo. Caso contrário, você cairá no “princípio do aprendizado do macaco” e suas chances de se tornar um grande programador serão próximas de zero. Para ajudá-lo a não cair no nível de “estudo”, periodicamente deixarei lacunas em seu aprendizado para que você tente descobrir algumas coisas sozinho.
É muito melhor se você descobrir sozinho decisão errada, você mesmo encontrará o erro e o corrigirá, em vez de sempre usar as soluções corretas de outras pessoas e copiá-las estupidamente.
Agência Federal de Educação
Resumo
"TIPOS DE DADOS EM PASCAL"
1. Tipos de dados
Quaisquer dados, ou seja, constantes, variáveis, propriedades, valores de funções ou expressões são caracterizadas por seus tipos. Um tipo define o conjunto de valores válidos que um objeto pode ter, bem como o conjunto de operações válidas que podem ser aplicadas a ele. Além disso, o tipo também determina o formato da representação interna dos dados na memória do PC.
Em geral, a linguagem Object Pascal é caracterizada por uma estrutura ramificada de tipos de dados (Fig. 1.1). A linguagem fornece um mecanismo para a criação de novos tipos, graças ao qual o número total de tipos usados em um programa pode ser tão grande quanto desejado.
Os dados processados no programa são divididos em variáveis, constantes e literais:
Constantes representam dados cujos valores são definidos na seção de declaração constante e não mudam durante a execução do programa.
Variáveis são declarados na seção de declaração de variáveis, mas, diferentemente das constantes, recebem seus valores durante a execução do programa e esses valores podem ser alterados. Constantes e variáveis podem ser referidas pelo nome.
Literal não possui identificador e é representado diretamente pelo valor no texto do programa.
Tabela 13.1. Tipos de dados inteiros Pascal gratuitos (Lazarus). define o conjunto de valores que os elementos de dados podem assumir e o conjunto de operações permitidas sobre eles.
Este e os quatro capítulos subsequentes fornecem descrições detalhadas de cada tipo.
1.1 Tipos simples
Os tipos simples incluem os tipos ordinais, reais e de data e hora.
Tipos ordinais diferem porque cada um deles tem um número finito de valores possíveis. Esses valores podem ser ordenados de uma determinada forma (daí o nome dos tipos) e, portanto, cada um deles pode ser associado a algum número inteiro - o número ordinal do valor.
Tipos reais, a rigor, também possuem um número finito de valores, que é determinado pelo formato da representação interna de um número real. Porém, o número de valores possíveis dos tipos reais é tão grande que não é possível associar um número inteiro (seu número) a cada um deles.
Tipo de data e hora projetado para armazenar data e hora. Na verdade, ele usa o formato real para esses fins.
1.1.1 Tipos ordinais
Os tipos ordinais incluem (veja a Figura 1.1) tipos inteiros, lógicos, de caracteres, enumerados e de intervalo. A qualquer um deles pode ser aplicada a função Ord(x), que retorna o número ordinal do valor da expressão X.
Arroz. 1.1 - Estrutura do tipo de dados
Para todo tipos, a função ord(x) retorna o valor do próprio x, ou seja, Ord(X) = x para x pertencente a qualquer todo tipo. Aplicando Ord(x) a lógico , simbólico e enumerável tipos fornece um número inteiro positivo no intervalo de 0 a 1 ( tipo booleano), de 0 a 255 ( simbólico), de 0 a 65535 ( enumerável). Gama de tipos preserva todas as propriedades do tipo ordinal base, portanto o resultado da aplicação da função ord(x) a ele depende das propriedades desse tipo.
Você também pode aplicar funções a tipos ordinais:
pred(x)- retorna o valor anterior do tipo ordinal (o valor que corresponde ao número ordinal ord(x) -1, ou seja, ord(pred(x)) = ord(x) - 1;
sucesso (x)- retorna o próximo valor do tipo ordinal, que corresponde ao número ordinal ord(x) +1, ou seja, ord(Succ(x)) = ord(x) + 1.
Por exemplo, se um programa define uma variável
então a função PRED(c) retornará o caractere "4" e a função SUCC(c) retornará o caractere "6".
Se imaginarmos qualquer tipo ordinal como um conjunto ordenado de valores, aumentando da esquerda para a direita e ocupando um determinado segmento no eixo dos números, então a função pred(x) não está definida para a esquerda, e succ(x) para a direita final deste segmento.
Tipos inteiros . A gama de valores possíveis dos tipos inteiros depende da sua representação interna, que pode ser um, dois, quatro ou oito bytes. Na mesa 1.1 mostra os nomes dos tipos inteiros, o comprimento de sua representação interna em bytes e o intervalo de valores possíveis.
Tabela 1.1 – Tipos inteiros
Nome | Comprimento, bytes | Tamanho, bytes |
Depende do modo de compilação | 4 | 0. .. 2 147 483 647 |
Faixa de valores | 1 | 0...255 |
Byte | 1 | -128...+127 |
Shortint | 2 | -32 768...+32 767 |
Pequeno | 2 | 0...65 535 |
Por exemplo, tipo de dados | 4 | |
Cardeal | 4 | -2 147 483 648...+2 147 483 647 |
Palavra longa | 8 | -9*1018...+9*1018 |
Palavra longa | 4 | 0. . .4 294 967 295 |
Tipos Palavra longa E Palavra longa foram introduzidos pela primeira vez na versão 4, e os tipos Shortint E Depende do modo de compilação não disponível no Delphi 1. Digite inteiro para esta versão são necessários 2 bytes e tem uma faixa de valores de -32768 a +32767, ou seja, o mesmo que Shortint .
Ao usar procedimentos e funções com parâmetros inteiros, você deve se guiar pelo “aninhamento” de tipos, ou seja, onde quer que possa ser usado palavra, permitido usar Faixa de valores(mas não vice-versa), em Cardeal“entra” Shortint, que por sua vez inclui Byte .
A lista de procedimentos e funções aplicáveis aos tipos inteiros é fornecida na tabela. 1.2. As letras b, s, w, i, l denotam expressões do seguinte tipo: Faixa de valores , Inteiro curto, palavra, inteiro e inteiro longo ,
x é uma expressão de qualquer um desses tipos; as letras vb, vs, vw, vi, vl, vx denotam variáveis dos tipos correspondentes. Um parâmetro opcional é indicado entre colchetes.
Tabela 1.2 - Procedimentos e funções padrão aplicáveis a tipos inteiros
Apelo | Tipo de resultado | Ação |
abdômen (x) | x | Retorna módulo x |
cr(b) | Caráter | Retorna um caractere pelo seu código |
dec(vx[,i]) | - | Diminui o valor de vx em i, e na ausência de i - em 1 |
inc(vx[,i]) | - | Aumenta o valor de vx em i, e na ausência de i - em 1 |
Olá (o) | Faixa de valores | Retorna o arco mais alto do argumento |
Olá (eu) | Mesmo | Retorna o terceiro byte |
Lo (eu) | “ | Retorna o byte inferior do argumento |
Baixo) | “ | Mesmo |
ímpar (eu) | Booleano | Retorna True se o argumento for um número ímpar |
Aleatório (w) | Igual ao parâmetro | Retorna um número pseudoaleatório distribuído uniformemente no intervalo 0...(w-l) |
quadrado(x) | X | Retorna o quadrado do argumento |
trocar (eu) | Por exemplo, tipo de dados | Troca bytes em uma palavra |
trocar (w) | Pequeno | Mesmo |
Ao operar com números inteiros, o tipo de resultado corresponderá ao tipo dos operandos, e se os operandos forem de tipos inteiros diferentes, um tipo comum que inclua ambos os operandos. Por exemplo, ao operar com shortint E palavra o tipo comum será inteiro. Na configuração padrão, o compilador Delphi não produz código para verificar se um valor está fora do intervalo, o que pode levar a mal-entendidos.
Tipos booleanos . Os tipos lógicos incluem Booleano, ByteBool, Bool, wordBool E LongBool. No Pascal padrão, apenas o tipo é definido Booleano, outros tipos lógicos são introduzidos no Object Pascal para compatibilidade com Windows: tipos Booleano E ByteBool cada um ocupa um byte, Bool E WordBool- 2 bytes cada, LongBool- 4 bytes. Os valores booleanos podem ser uma das constantes pré-declaradas False ou True.
Como o tipo booleano é um tipo ordinal, ele pode ser usado em uma instrução de loop de tipo contável. No Delphi 32 para Booleano significado
Ord (True) = +1, enquanto para outros tipos ( Bool, WordBool etc.)
Ord(True) = -1, portanto, esses tipos de operadores devem ser usados com cautela! Por exemplo, para a versão Delphi 6, a instrução executável showMessage(" --- ") no loop a seguir para nunca será executado:
para L:= Falso para Verdadeiro faça
ShowMessage("--);
Se substituirmos o tipo de parâmetro de loop L no exemplo anterior por Booleano, o loop será executado e a mensagem aparecerá duas vezes na tela. [Para Delphi versões 1 e 2 ord (True) =+1 para qualquer tipo booleano.]
Tipo de personagem . O valor de um tipo de caractere é o conjunto de todos os caracteres do PC. Cada caractere recebe um número inteiro no intervalo de 0 a 255. Este número serve como código para a representação interna do símbolo e é retornado pela função ord.
Para codificação no Windows, é usado o código ANSI (em homenagem ao American National Standard Institute, o instituto americano de padronização que propôs este código). A primeira metade dos caracteres do PC com códigos 0...127 corresponde à Tabela 1.3. A segunda metade dos caracteres com códigos 128...255 varia para diferentes fontes. As fontes padrão do Windows Arial Cyr, Courier New Cyr e Times New Roman usam os últimos 64 códigos (de 192 a 256) para representar caracteres cirílicos (sem as letras “ё” e “Ё”): “A”... “Z” são valores codificados 192..223, “a”... “i” - 224...255. Os símbolos “Ё” e “е” possuem os códigos 168 e 184, respectivamente.
Tabela 1.3 - Codificação de caracteres de acordo com o padrão ANSI
Código | Símbolo | Código. | Símbolo | Código. | Símbolo | Código | Símbolo |
0 | NUL | 32 | B.L. | 64 | @ | 96 | " |
1 | ZONA | 33 | ! | 65 | UM | 97 | UM |
2 | STX | 34 | “ | 66 | EM | 98 | b |
3 | ETX | 35 | # | 67 | COM | 99 | Com |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | CONFIRMAR | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | " | 71 | G | 103 | d |
8" | B.S. | 40 | ( | 72 | N | 104 | h |
9 | HT | 41 | ) | 73 | EU | 105 | eu |
10 | SE | 42 | * | 74 | J. | 106 | j |
11 | TV | 43 | + | 75 | PARA | 107 | k |
12 | FF | 44 | F | 76 | eu | 108 | 1 |
13 | CR | 45 | - | 77 | M | 109 | eu |
14 | ENTÃO | 46 | 78 | N | 110 | n | |
15 | SI. | 47 | / | 79 | 0 | 111 | Ó |
16 | DEL | 48 | 0 | 80 | R | 112 | P |
17 | DC1 | 49 | 1 | 81 | P | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | R |
19 | DC3 | 51 | 3 | 83 | S | 115 | é |
20 | CD 4 | 52 | 4 | 84 | T | 116 | t |
21 | N.A.K. | 53 | 5 | 85 | Você | 117 | você |
22 | SIN | 54 | 6 | 86 | V | 118 | v |
23 | ETB | 55 | 7 | 87 | C | 119 | C |
24 | PODE | 56 | 8 | 88 | X | 120 | x |
25 | E.M. | 57 | 9 | 89 | S | 121 | Você |
26 | SUB | 58 | : | 90 | Z | .122 | z |
27 | ESC | 59 | ; | 91 | t | 123 | { |
28 | FS | 60 | < | 92 | \ | 124 | 1 |
29 | G.S. | 61 | = | 93 | ] | 125 | } |
30 | R.S. | 62 | > | 94 | eu | 126 | ~ |
31 | NÓS | 63 | F | 95 | 127 | R |
Os caracteres com códigos 0...31 referem-se a códigos de serviço. Se esses códigos forem usados no texto dos caracteres do programa, eles serão considerados espaços em branco.
O conceito de dados é um dos principais na programação e na ciência da computação em geral. Grosso modo, dados em ciência da computação são informações que estão em estado de armazenamento, processamento ou transmissão durante um determinado período de tempo. Nas máquinas de Turing, a informação tem um tipo e este, por sua vez, depende do tipo de informação.
Os tipos de dados em Pascal definem os valores possíveis de variáveis, constantes, expressões e funções. Eles são integrados e personalizados. Os tipos integrados estão inicialmente presentes na linguagem de programação e os tipos personalizados são criados pelo programador.
De acordo com o método de apresentação e processamento, os tipos de dados são:
- simples
- estruturado
- ponteiros
- objetos
- procedimentos
Este artigo considerará apenas os tipos de dados mais simples, pois nos estágios iniciais do treinamento será mais fácil para o seu programa ficar sem, por exemplo, arquivos e registros do que sem variáveis inteiras ou de string.
Tipo inteiro
Isso inclui vários tipos inteiros, que diferem no intervalo de valores, no número de bytes alocados para armazená-los e na palavra com a qual o tipo é declarado.
Tabela 13.1. Tipos de dados inteiros Pascal gratuitos (Lazarus). | Faixa | Tamanho em bytes |
shortint | -128…127 | 1 |
inteiro | -32 768…32 767 | 2 |
inteiro longo | -2 147 483 648…2 147 483 647 | 4 |
byte | 0…255 | 1 |
palavra | 0…65 535 | 2 |
Você pode declarar uma variável inteira na seção Var, por exemplo:
Todas as operações aritméticas e lógicas podem ser realizadas em variáveis desta categoria, com exceção da divisão (/), que requer um tipo real. Algumas funções e procedimentos padrão também podem ser aplicados.
Tipo real
Em Pascal existem os seguintes tipos de dados reais:
Tabela 13.1. Tipos de dados inteiros Pascal gratuitos (Lazarus). | Faixa | Memória, byte | Número de dígitos |
Real | 2.9e-39… 1.7e38 | 6 | 11-12 |
Solteiro | 1.5e-45…3.4e38 | 4 | 7-8 |
Dobro | 5.0e-324…1.7e308 | 8 | 15-16 |
Estendido | 3.4e-4932… 1.1e493 | 10 | 19-20 |
Comp. | -9.2e63…(9.2e63)-1 | 8 | 19-20 |
Mais operações e funções podem ser executadas neles do que em números inteiros. Por exemplo, estas funções retornam um resultado real:
sin(x) – seno;
cos(x) – cosseno;
arctan(x) – arco tangente;
ln(x) – logaritmo natural;
sqrt(x) – raiz quadrada;
exp(x) – expoente;
Tipo booleano
Uma variável de tipo de dados booleano pode assumir apenas dois valores: verdadeiro e falso. Aqui, verdadeiro corresponde ao valor 1 e falso corresponde a zero. Você pode declarar uma variável booleana assim:
Comparações e operações lógicas podem ser realizadas em dados deste tipo: not, and, or, xor.
Tipo de personagem
Um tipo de dados de caractere é uma coleção de caracteres usados em um computador específico. Uma variável deste tipo assume o valor de um desses caracteres e ocupa 1 byte na memória do computador. Palavra Caráter define um valor deste tipo. Existem várias maneiras de escrever uma variável de caractere (ou constante):
- como um único caractere entre apóstrofos: ‘W’, ‘V’, ‘n’;
- especificando o código do caractere, cujo valor deve estar na faixa de 0 a 255.
- usando a construção ^K, onde K é o código do caractere de controle. O valor de K deve ser 64 maior que o código do caractere de controle correspondente.
As operações relacionais e as seguintes funções são aplicáveis a valores de um tipo de dados de caractere:
Sucesso(x)- retorna o próximo caractere;
Pred(x)- retorna o caracter anterior;
Ordem(x)- retorna o valor do código do caractere;
Cr(x)- retorna o valor de um símbolo pelo seu código;
UpCase(x)- converte letras do intervalo ‘a’..’z’ para maiúsculas.
Para trabalhar de forma eficaz com o tipo de caractere, recomendo usar .
Tipo de string
Uma string em Pascal é uma sequência de caracteres entre apóstrofos e é denotada pela palavra Corda. O número de caracteres (comprimento da linha) não deve exceder 255. Se o comprimento da linha não for especificado, será automaticamente determinado como 255 caracteres. A forma geral de uma declaração de variável string é assim:
Var<имя_переменной>:corda[<длина строки>];
Cada caractere em uma linha possui seu próprio índice (número). O índice do primeiro byte é 0, mas não armazena o primeiro caractere, mas sim o comprimento de toda a string, o que significa que uma variável desse tipo ocupará 1 byte a mais que o número de variáveis nela contidas. O número do primeiro caractere é 1, por exemplo, se tivermos a string S=‘stroka’, então S=s;. Em uma das lições a seguir, o tipo de dados string será discutido com mais detalhes.
Tipo de dados enumerado
Um tipo de dados enumerado representa um número limitado de identificadores. Esses identificadores são colocados entre parênteses e separados por vírgulas.
Tipo Dia=(Segunda, Terça, Quarta, Quinta, Sexta, Sábado, Domingo);
A variável A só pode assumir os valores especificados na seção Tipo. Você também pode declarar uma variável do tipo enumerado na seção Var:
Var A: (segunda, terça);
PARA este tipo operações relacionais são aplicáveis, e está predeterminado que segunda-feira Quando é necessário especificar um intervalo de valores, então, em tais situações, o tipo de dados intervalo é usado. A construção usada para a declaração é m..n, Onde eué o valor mínimo (inicial) e n– máximo (final); aqui m e n são constantes, que podem ser do tipo inteiro, caractere, enumeração ou booleano. Os valores do tipo intervalo podem ser descritos tanto na seção de tipos quanto na seção de descrição de variáveis. Visão geral: TIPO<имя_типа> = <мин. значение>..<макс. значение>; Ao descrever uma variável, você deve indicar seu tipo. O tipo de uma variável descreve o conjunto de valores que ela pode assumir e as ações que podem ser executadas sobre ela. Uma declaração de tipo especifica um identificador que representa o tipo. Os tipos simples são divididos em padrão (ordinal) e enumerados (restritos). Turbo Pascal possui quatro tipos padrão integrados: inteiro, real, booleano e char. Turbo Pascal possui cinco tipos de inteiros integrados: shortint, inteiro, longint, byte e word. Cada tipo denota um subconjunto específico de números inteiros, conforme mostrado na tabela a seguir. Tipos inteiros integrados. Faixa Formatar 8 bits assinados 16 bits assinados 2147483648 +2147483647 32 bits assinado 8 bits não assinados 16 bits não assinados As operações aritméticas sobre operandos do tipo inteiro são realizadas de acordo com as seguintes regras: Operações realizadas em números inteiros: “+” - adição “-“ - subtração "*" - multiplicação SQR - quadratura DIV – descarta a parte fracionária após a divisão MOD - obtendo o resto inteiro após a divisão ABS - módulo numérico RANDOM(X) - obtenção de um número aleatório de 0 a X R:=100; b:=60 ; resultado a DIV b - 1 resultado a MOD b - 40 Variáveis do tipo inteiro são descritas a seguir: var lista de variáveis: tipo; Por exemplo: var à,р,n:inteiro; O tipo real é um subconjunto de números reais que pode ser representado em formato de ponto flutuante com um número fixo de dígitos. Escrever um valor no formato de ponto flutuante normalmente envolve três valores - m, b e e - tais que m*b e, onde b é sempre 10 e m e e são valores inteiros no intervalo real. Esses valores de m e e determinam ainda mais o alcance e a precisão do tipo real. Existem cinco tipos de tipos reais: real, simples, duplo, exnende, comp. Os tipos reais variam no intervalo e na precisão dos valores associados a eles Intervalo e dígitos decimais para tipos reais Faixa Números 2,9x10E-39 a 1,7x10E 38 1,5x10E-45 a 3,4x10E 38 5,0x10E-324 a 1,7x10E 308 3,4x10E-493 a 1,1x10E 403 2E 63 a 2E 63 Operações realizadas em números reais: Variáveis do tipo real são descritas a seguir: Por exemplo: O tipo char é qualquer caractere colocado entre apóstrofos. Para representar um apóstrofo como uma variável de caractere, você deve colocá-lo entre um apóstrofo: ''''. Cada personagem tem seu próprio código e número. Os números de série dos dígitos 0,1..9 são ordenados em ordem crescente. Os números de série das letras também estão ordenados em ordem crescente, mas não necessariamente se sucedem. Os seguintes sinais de comparação se aplicam aos dados de caracteres: > , < , >=, <=, <> . Por exemplo: 'A'< ‘W’ Funções que se aplicam a variáveis de caracteres: Um tipo de dados enumerado tem esse nome porque é especificado como uma lista de constantes em uma ordem estritamente definida e em uma quantidade estritamente definida. Um tipo enumerado consiste em uma lista de constantes. Variáveis deste tipo podem assumir o valor de qualquer uma dessas constantes. A descrição do tipo de enumeração é semelhante a esta: Onde<список констант>- este é um tipo especial de constantes, especificadas separadas por vírgulas e com número de série próprio, começando em 0. Por exemplo: var turn:(norte, sul, oeste, leste); partida: (junho, julho, agosto, janeiro); volume: (balde, barril, vasilhame, tanque); Você pode executar os seguintes operadores de atribuição: Rotação:=sul; partida:=Agosto; volume:=tanque; mas você não pode fazer tarefas mistas: Partida:=sul; volume:=Agosto; As seguintes funções se aplicam a variáveis do tipo enumerado: 1. ORD - número de série 2. PRED – elemento anterior PRED (barril) = balde; SUCC (sul) =oeste; ORD (julho) =1;< юг, июнь < январь имеют значения TRUE, а юг>Variáveis de tipo enumerado podem ser comparadas porque são ordenadas e numeradas. Então as expressões: norte<бочка значение FАLSE. Tipo limitado Se uma variável não aceita todos os valores de seu tipo, mas apenas dentro de um determinado intervalo, ela pode ser considerada uma variável de tipo limitado. Cada tipo restrito é definido impondo uma restrição aos tipos base. =constante1 ..constante2 tipo índice =0 ..63 ; letra=’a’..’z’; var char1,char2:letra; a,g:índice;
Tipo de dados de intervalo
Tipos padrão
Tipo inteiro (inteiro)
Tipo real (real)
Tipo de caractere (char)
Tipo de enumeração
oeste e tanque
O valor inicial ao definir um tipo limitado não deve ser maior que o valor final.