Telefones 

Quais tipos de dados são usados ​​na linguagem Pascal. Tipos de dados ordinais em Pascal. Tipo de dados enumerado

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.

  • Análise de dados usando os comandos Seleção de Parâmetros e Pesquisa de Solução
  • Análise e interpretação de dados de pesquisas psicológicas experimentais.
  • Análise dos dados de origem. Normas técnicas para estradas urbanas.
  • ANÁLISE DOS DADOS OBTIDOS. TOMADA DE DECISÃO SOBRE A SUFICIÊNCIA OU INSUFICIÊNCIA DAS CARACTERÍSTICAS DE ABASTECIMENTO DE ÁGUA PARA AS NECESSIDADES DO SISTEMA DE IRRIGAÇÃO.
  • Equipamentos de linha de comunicação: equipamentos de transmissão de dados, equipamentos terminais, equipamentos intermediários.

  • Noções básicas de programação
    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:

    1. Notação decimal. Apenas um número, como 10.
    2. Notação hexadecimal. Um número prefixado com $. Por exemplo, o número hexadecimal $10 é igual ao número decimal 16.
    3. Notação octal. Um número prefixado com &. Por exemplo, octal &10 é igual ao decimal 8.
    4. 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):

    1. como um único caractere entre apóstrofos: ‘W’, ‘V’, ‘n’;
    2. especificando o código do caractere, cujo valor deve estar na faixa de 0 a 255.
    3. 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

    Tipo de dados de intervalo

    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).

    Tipos padrão

    Turbo Pascal possui quatro tipos padrão integrados: inteiro, real, booleano e char.

    Tipo inteiro (inteiro)

    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:

    1. Um tipo de constante inteira é um tipo inteiro integrado com o menor intervalo que inclui o valor dessa constante inteira.
    2. No caso de uma operação binária (uma operação que utiliza dois operandos), ambos os operandos são convertidos em seu tipo comum antes que a operação seja executada neles. O tipo comum é o tipo inteiro integrado, com o menor intervalo que inclui todos os valores possíveis de ambos os tipos. Por exemplo, o tipo comum para um número inteiro e um número inteiro de comprimento de byte é inteiro, e o tipo comum para um número inteiro e um número inteiro de comprimento de palavra é um número inteiro longo. A ação é executada de acordo com a precisão do tipo genérico e o tipo do resultado é o tipo genérico.
    3. A expressão à direita do operador de atribuição é avaliada independentemente do tamanho da variável à esquerda.

    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;

    Tipo real (real)

    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:

    • Todas as operações são válidas para números inteiros.
    • SQRT(x) é a raiz quadrada de x.
    • SIN(X), COS(X), ARCTAN(X).
    • LN(X) é o logaritmo natural.
    • EXP(X) é o expoente de X (ex).
    • EXP(X*LN(A)) - exponenciação (A x).
    • Funções de conversão de tipo:
      • TRUNC(X) - descarta a parte fracionária;
      • REDONDO(X) - arredondamento.
    • Algumas regras de operações aritméticas:
      • Se uma operação aritmética contém números do tipo real e inteiro, então o resultado será do tipo real.
      • Todos os componentes da expressão são escritos em uma linha.
      • Somente parênteses são usados.
      • Você não pode colocar dois sinais aritméticos seguidos.

    Variáveis ​​do tipo real são descritas a seguir:

    var lista de variáveis: tipo;

    Por exemplo:

    var d,g,k:real;

    Tipo de caractere (char)

    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:

    1. ORD(X) - determina o número de série do símbolo X. ord (‘a’) =97 ;
    2. CHR(X) - identifica um caractere por número.
    3. chr(97) =’a’;
    4. SUCC(X) - retorna o caractere após o caractere X succ ('A') ='B';

    Tipo de enumeração

    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:

    Tipo<имя типа>=(lista de constantes) ; Var<имя переменной>:<имя типа>;

    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:

    digite direção=(norte, sul, oeste, leste); mês=(junho, julho, agosto, janeiro) ; capacidade=(balde, barril, vasilha, tanque) ; var rotação: direção; partida:mês; volume:capacidade;

    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

    3. SUCC – elemento subsequente.

    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.

    oeste e tanque

    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.

    É descrito da seguinte forma:<имя типа>TIPO

    =constante1 ..constante2

    1. Neste caso, as seguintes regras devem ser seguidas:
    2. Ambas as constantes limitadas devem ser do mesmo tipo.
    3. Qualquer tipo simples, exceto real, pode ser usado como tipo base.
    O valor inicial ao definir um tipo limitado não deve ser maior que o valor final.

    tipo índice =0 ..63 ; letra=’a’..’z’; var char1,char2:letra; a,g:índice;

    Você pode descrevê-lo imediatamente na seção de descrição da variável: