Types de données simples en Pascal. Types de variables en Pascal : description, propriétés, exemples

Lors de la description d'une variable, vous devez indiquer son type. Le type d'une variable décrit l'ensemble des valeurs qu'elle peut prendre et les actions qui peuvent être effectuées sur elle. Une déclaration de type spécifie un identifiant qui représente le type.

Les types simples sont divisés en standard (ordinal) et énuméré (restreint).

Types standards

Turbo Pascal a quatre composants intégrés modèle standard: entier (entier), réel (réel), booléen (logique) et char (caractère).

Type entier (entier)

Turbo Pascal possède cinq types d'entiers intégrés : entier court, entier, entier long, octet et mot. Chaque type désigne un sous-ensemble spécifique d'entiers, comme indiqué dans le tableau suivant.

Types entiers intégrés.

Gamme

Format

8 bits signés

16 bits signés

2147483648 +2147483647

32 bits signé

8 bits non signés

16 bits non signés

Les opérations arithmétiques sur les opérandes de type entier sont effectuées selon les règles suivantes :

  1. Le type d'une constante entière est un type entier avec la plus petite plage qui inclut la valeur de cette constante entière.
  2. Dans le cas d'une opération binaire (une opération qui utilise deux opérandes), les deux opérandes sont convertis dans leur type commun avant que l'opération ne soit effectuée sur eux. Le type commun est le type entier intégré, avec la plus petite plage incluant toutes les valeurs possibles des deux types. Par exemple, le type commun pour un entier et un entier de longueur en octets est entier, et le type commun pour un entier et un entier de longueur de mot est un entier long. L'action est effectuée selon la précision type général et le type de résultat est un type générique.
  3. L'expression à droite de l'opérateur d'affectation est évaluée quelle que soit la taille de la variable à gauche.

Opérations effectuées sur des entiers :

"+" - ajout

"-" - soustraction

"*" - multiplication

SQR - quadrature

DIV - supprime la partie fractionnaire après la division

MOD - obtention du reste entier après division

ABS - module numéro

RANDOM(X)-recevoir nombre aléatoire de 0 à X

A:=100 ; b:=60 ; un résultat DIV b - 1 un résultat MOD b - 40

Les variables de type entier sont décrites comme suit :

liste de variables var : type ;

Par exemple : var а,р,n:integer;

Type réel (réel)

Le type réel est un sous-ensemble de nombres réels qui peuvent être représentés au format virgule flottante avec un nombre fixe de chiffres. L'écriture d'une valeur au format à virgule flottante implique généralement trois valeurs - m, b et e - telles que m*b e, où b vaut toujours 10 et m et e sont des valeurs entières dans la plage réelle. Ces valeurs de m et e déterminent en outre la portée et la précision du type réel.

Il existe cinq types de types réels : réel, simple, double, exnende, comp. Les types réels varient dans la plage et la précision des valeurs qui leur sont associées

Plage et chiffres décimaux pour les types réels

Gamme

Nombres

2,9x10E-39 à 1,7x10E-38

1,5x10E-45 à 3,4x10E 38

5,0x10E-324 à 1,7x10E-308

3,4x10E-493 à 1,1x10E 403

2E 63 à 2E 63

Opérations effectuées sur des nombres réels :

  • Toutes les opérations sont valables pour les entiers.
  • SQRT(x) est la racine carrée de x.
  • PÉCHÉ(X), COS(X), ARCTAN(X).
  • LN(X) est le logarithme népérien.
  • EXP(X) est l'exposant de X (e x).
  • EXP(X*LN(A)) - exponentiation (A x).
  • Fonctions de conversion de type :
    • TRUNC(X) - supprime la partie fractionnaire ;
    • ROND(X) - arrondi.
  • Quelques règles d'opérations arithmétiques :
    • Si dans opération arithmétique il existe des nombres de type réel et entier, alors le résultat sera de type réel.
    • Tous les composants de l'expression sont écrits sur une seule ligne.
    • Seules les parenthèses sont utilisées.
    • Vous ne pouvez pas mettre deux signes arithmétiques à la suite.

Les variables de type réel sont décrites comme suit :

liste de variables var : type ;

Par exemple:

var d,g,k:réel ;

Type de caractère (caractère)

Le type char est n’importe quel caractère entouré d’apostrophes. Pour représenter une apostrophe sous forme de variable caractère, vous devez la mettre entre une apostrophe : ''''.

Chaque caractère a son propre code et numéro. Les numéros de série des chiffres 0,1..9 sont classés par ordre croissant. Les numéros de série des lettres sont également classés par ordre croissant, mais ne se suivent pas nécessairement.

Les signes de comparaison suivants s'appliquent aux données de caractères :

> , < , >=, <=, <> .

Par exemple : « A »< ‘W’

Fonctions qui s'appliquent aux variables de caractères :

  1. ORD(X) - détermine le numéro de série du symbole X. ord ('a') =97 ;
  2. CHR(X) - identifie un caractère par un numéro. chr(97) = 'une';
  3. PRED(X) - renvoie le caractère précédant le caractère X pred (« B ») = « A » ;
  4. SUCC(X) - renvoie le caractère suivant le caractère X succ (« A ») = « B » ;

Type d'énumération

Un type de données énuméré est ainsi nommé car il est spécifié comme une liste de constantes dans un ordre strictement défini et dans une quantité strictement définie. Un type énuméré consiste en une liste de constantes. Les variables de ce type peuvent prendre la valeur de n'importe laquelle de ces constantes. La description du type d'énumération ressemble à ceci :

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

Où<список констант>- il s'agit d'un type spécial de constantes, spécifiées séparées par des virgules et ayant leur propre numéro de série, commençant à 0.

Par exemple:

tapez direction=(nord, sud, ouest, est) ; mois=(juin, juillet, août, janvier) ; capacité=(seau, baril, bidon, réservoir) ; var rotation:direction; départ:mois; volume : capacité ; var turn:(nord, sud, ouest, est) ; départ : (juin, juillet, août, janvier) ; volume : (seau, baril, bidon, réservoir) ;

Vous pouvez effectuer les opérateurs d'affectation suivants :

Rotation :=sud ; départ:=août; volume :=réservoir ;

mais vous ne pouvez pas faire de tâches mixtes :

Départ :=sud ; volume :=août ;

Les fonctions suivantes s'appliquent aux variables de type énuméré :

1. ORD - numéro de série

2. PRED - élément précédent

3. SUCC - élément ultérieur.

PRED (baril) = seau ; SUCC (sud) =ouest ; ORD (juillet) =1 ;

Les variables d'un type énuméré peuvent être comparées car elles sont ordonnées et numérotées. Donc les expressions : nord< юг, июнь < январь имеют значения TRUE, а юг>ouest et réservoir<бочка значение FАLSE.

Type limité

Si une variable n'accepte pas toutes les valeurs de son type, mais seulement dans une certaine plage, elle peut alors être considérée comme une variable d'un type limité. Chaque type contraint est défini en imposant une contrainte sur les types de base.

Il est décrit comme suit :

TAPER<имя типа>=constante1 ..constante2

Dans ce cas, les règles suivantes doivent être respectées :

  1. Les deux constantes bornées doivent être du même type.
  2. Tout type simple, sauf real, peut être utilisé comme type de base.
  3. La valeur initiale lors de la définition d'un type limité ne doit pas être supérieure à la valeur finale.
indice de type =0 ..63 ; lettre = 'a'..'z'; var char1,char2:lettre; a,g:index ;

Vous pouvez le décrire immédiatement dans la section description de la variable :

var a,g:0 ..63 ; char1,char2 : 'a'..'z'.

Types de données Pascal

Toutes les données (constantes, variables, valeurs de fonction ou expressions) dans Turbo Pascal sont caractérisées par leurs types. Un type définit l'ensemble des valeurs valides qu'un objet peut avoir, ainsi que l'ensemble des opérations valides qui peuvent lui être appliquées. Le type détermine également le format de la représentation interne des données dans la mémoire de l'ordinateur.

Il existe les types de données suivants dans Turbo Pascal.

1) Types simples :

- réel;

– symbolique ;

– Booléen (logique) ;

– énuméré;

- gamme limitée).

2) Types composites (structurés) :

– régulier (tableaux);

– combinés (enregistrements) ;

- déposer;

- plusieurs;

- chaîne;

- objets.

3) Types de référence (pointeurs typés et non typés).

4) Types procéduraux.

Turbo Pascal fournit un mécanisme pour créer de nouveaux types de données, grâce auquel le nombre total de types utilisés dans le programme peut être aussi grand que souhaité.

Type entier. Les valeurs entières sont les éléments d'un sous-ensemble d'entiers. Il existe cinq types entiers dans Turbo Pascal. Leurs noms, plage de valeurs, longueur de représentation en octets sont donnés dans le tableau. 6.

Tableau 6

Types de données entiers

Les variables entières sont décrites à l'aide des mots réservés ci-dessus :

i, j, k : entier ;

Les données entières sont stockées exactement en mémoire. Par exemple, les variables de type entier occupent 2 octets (16 bits) en mémoire, qui sont alloués comme suit : 1 bit est alloué pour stocker le signe du nombre (0 si le nombre est positif, et 1 si le nombre est négatif) et 15 bits pour stocker le nombre en binaire. Le nombre décimal maximum pouvant être écrit en binaire 15 bits est 32767.

Lorsque vous utilisez des procédures et des fonctions avec des paramètres entiers, vous devez être guidé par « l'imbrication » des types, c'est-à-dire partout où un mot est utilisé, l'octet est autorisé (mais pas l'inverse), l'entier long "inclut" un entier, qui, à son tour, inclut l'entier court.

Pour le type entier, cinq opérations de base sont définies dont le résultat est également un entier : +, -, *, div, mod (addition, soustraction, multiplication, division entière et reste de division entière). Dans les expressions arithmétiques, les opérations *, div, mod ont une priorité plus élevée que les opérations +, -. Exemples d'expressions écrites :

La liste des procédures et fonctions applicables aux types entiers est donnée dans le tableau. 7. Les lettres b, s, w, i, l désignent respectivement des expressions de type byte, shortint, word, integer et longint ; x est une expression de l’un de ces types ; les identifiants vb, vs, vw, vi, vl, vx désignent des variables des types correspondants. Un paramètre facultatif est indiqué entre crochets.

Tableau 7

Procédures et fonctions standard applicables à des types entiers

Appel Type de résultat Action
Abdos(x) X Module de retour x
Chr(b) Carboniser Renvoie un caractère par son code
Déc(vx[,i]) - Diminue la valeur de vx de i, et en l'absence de i – de 1
Inc(vx[,i]) - Augmente la valeur de vx de i, et en l'absence de i – de 1
Salut (je) Octet Renvoie l'octet de poids fort de l'argument
Salut (je) Octet Même
Lo(je) Octet Renvoie l'octet de poids faible de l'argument
Faible) Octet Même
Impair(l) Octet Renvoie vrai si l'argument est un nombre impair
Aléatoire (w) Identique au paramètre Renvoie un nombre pseudo-aléatoire uniformément distribué dans la plage 0…(w-1)
Carré(x) X Renvoie le carré de l'argument
Échanger(i) Entier
Échange (w) Mot Échange des octets dans un mot
Succès(x) Identique au paramètre Renvoie la valeur entière suivante, c'est-à-dire x+1
Préd(x) Identique au paramètre Renvoie la valeur entière précédente, c'est-à-dire x-1

Lorsque vous travaillez avec des entiers, le type du résultat correspondra au type de l'opérande, et si les opérandes sont de types entiers différents, au type de l'opérande qui a la plage maximale de valeurs. Un éventuel débordement du résultat n'est pas contrôlé, ce qui peut entraîner des erreurs dans le programme.

Un vrai type. Les valeurs de types réels définissent un nombre arbitraire avec une certaine précision finie en fonction du format interne du nombre réel. Il existe cinq types réels dans Turbo Pascal (Tableau 8).

Tableau 8

Types de données réels

Les variables réelles sont décrites à l'aide des mots réservés ci-dessus :

Un nombre réel dans la mémoire de l'ordinateur se compose de 3 parties :

Chiffre de signe d'un nombre ;

Partie exponentielle ;

Mantisse du nombre.

La mantisse a une longueur de 23 (simple) à 63 chiffres binaires (étendus), ce qui offre une précision de 7 à 8 pour les chiffres décimaux simples et de 19 à 20 pour les chiffres décimaux étendus. Le point décimal (virgule) est implicite avant le chiffre gauche (le plus significatif) de la mantisse, mais lorsqu'on opère sur un nombre, sa position est décalée vers la gauche ou la droite conformément à l'ordre binaire du nombre stocké dans la partie exponentielle , c'est pourquoi les opérations sur les nombres réels sont appelées arithmétique à virgule flottante (virgule).

Les types Single, Double et Extended sont accessibles uniquement dans des modes de compilation spéciaux. Pour activer ces modes, sélectionnez l'élément de menu Possibilités, Compilateur… et activez l'option 8087/80287 en groupe Traitement numérique.

Une position particulière dans Turbo Pascal est occupée par le type Comp, qui est traité comme un nombre réel sans parties exponentielles ni fractionnaires. En fait, Comp est un grand entier signé qui stocke 19 à 20 chiffres décimaux significatifs. En même temps, dans les expressions, Comp est entièrement compatible avec tout autre type réel : toutes les opérations réelles y sont définies, il peut être utilisé comme argument pour des opérations mathématiques, etc.



Les nombres réels sont spécifiés dans le système de nombres décimaux dans l'un des deux formes.

DANS forme à virgule fixe l'enregistrement est constitué d'un nombre entier et d'une partie fractionnaire, séparés l'un de l'autre par un point, par exemple :

0.087 4.0 23.5 0.6

DANS forme à virgule flottante l'entrée contient la lettre E, qui signifie « multiplier par dix à la puissance », et la puissance est un entier, par exemple :

7E3 6,9E-8 0,98E-02 45E+04

Les opérations suivantes sont définies sur les objets de type réel : +, -, *, /.

Les opérations "*" et "/" ont une priorité plus élevée que les opérations "+" et "-".

Si au moins un opérande est réel, alors les opérations +, -, *, / conduisent à un résultat réel. L'opération de division / conduit à un résultat réel même dans le cas de deux opérandes entiers, par exemple : 9/3 = 3,0.

Pour travailler avec des données réelles, des fonctions mathématiques standard présentées dans le tableau peuvent être utilisées. 9. Le résultat de ces fonctions est également réel.

Tableau 9

Fonctions mathématiques qui fonctionnent avec des données réelles

Il est interdit d'utiliser des variables et constantes de type REAL :

– dans les fonctions pred(x), succ(x), ord(x) ;

– comme index de tableau ;

– comme étiquettes dans les déclarations de transfert de contrôle ;

– comme variables de contrôle (paramètres de cycle).

Pour convertir un nombre réel en entier, vous pouvez utiliser les fonctions suivantes :

trunc(x) – partie entière de x (x – réel) ;

round(x) – arrondi à l’entier le plus proche (x est réel).

Type de caractère. Les variables de caractères sont décrites à l'aide du mot réservé char :

Les valeurs de ce type sont sélectionnées dans un jeu de caractères ordonné (jeu ASCII) composé de 256 caractères. Chaque caractère se voit attribuer un entier compris entre 0 et 255. Par exemple, les lettres majuscules de l'alphabet latin A..Z ont les codes 65..90 et les lettres minuscules ont les codes 97..122.

La valeur d'une variable de type caractère est un caractère unique entouré d'apostrophes, par exemple :

'F' '8' '*'

Les variables de caractères peuvent être comparées entre elles et les codes de caractères sont comparés.

Il existe des fonctions qui établissent une correspondance entre un symbole et son code :

ord(c) – donne le numéro du symbole c ;

chr(i) – renvoie le numéro de caractère i.

Ces fonctions sont inverses les unes des autres.

Type booléen. Les variables booléennes sont décrites à l'aide du mot réservé boolean :

p1, p2 : booléen ;

Les variables de type booléen prennent deux valeurs : vrai(vrai), FAUX(mensonge).

Ces valeurs sont ordonnées comme suit : faux< true. false имеет порядковый номер 0, true имеет порядковый номер 1.

Les variables booléennes peuvent soit recevoir une valeur directement, soit utiliser une expression booléenne. Par exemple,

a, d, g, b : booléen ;

Opérations relationnelles (<, <=, >, >=, =, <>), appliqués à des variables entières, réelles et symboliques, produisent un résultat logique.

Les opérations logiques sur les opérandes de type logique produisent également un résultat logique (les opérations sont classées par ordre décroissant de priorité) (pour plus de détails, voir les tableaux 3 et 5) :

non – négation (opération NON);

et – multiplication logique (opération ET);

ou – addition logique (opération OU);

xor – OU exclusif.

L'expression (pas a) a le sens opposé de a.

L'expression (a et b) est évaluée comme vraie si seuls a et b sont vrais, sinon la valeur de cette expression est fausse.

L’expression (a ou b) est évaluée comme fausse si seulement a et b sont évalués comme faux, sinon le résultat est vrai ;

Type d'énumération. Un type d'énumération non standard est spécifié par une énumération sous forme de noms de valeurs que peut prendre une variable. Chaque valeur est nommée par un identifiant et se trouve dans une liste entourée de parenthèses. Forme générale de description du type énuméré :

x = (w1, w2, …, wn);

où x est le nom du type, w1, w2,..., wn sont les valeurs que peut prendre une variable de type x.

Ces valeurs sont ordonnées w1

Les fonctions standard suivantes s'appliquent à l'argument w d'un type énuméré :

succ(w), pred(w), ord(w).

couleur=(rouge, noir, jaune, vert)

ww=(gauche, haut, droite, bas) ;

f : tableau de ww ;

succ(d) = jaune;

Les variables a et b sont de type w. ils peuvent prendre l'une des trois valeurs suivantes, avec

Les opérations relationnelles sont applicables aux valeurs de type énuméré : =,<>, <=, >=, <, >.

Il est permis de spécifier des constantes de type énumérées directement dans la section var sans utiliser de partition taper, Par exemple

c,d : (rouge, noir, jaune, vert) ;

Type de plage (limitée). Lors de la définition d'un type limité, vous spécifiez les valeurs initiales et finales que peut prendre une variable de type plage. Les valeurs sont séparées par deux points.

La déclaration de type restreint est de la forme

Ici a est le nom du type, min, max sont des constantes.

Lors de la spécification d'un type restreint, les règles suivantes doivent être respectées :

– les deux constantes limites min et max doivent être du même type ;

– un type limité est créé à partir des données d'un type de base, qui peut être un type entier, caractère ou énuméré. Par exemple:

col = rouge.. jaune;

lettre = 'a'..'f';

– Les variables d'un type restreint peuvent être déclarées dans la section var sans faire référence à la section type :

– un type restreint hérite de toutes les propriétés du type de base à partir duquel il est créé ;

– la limite minimale doit toujours être inférieure à la limite maximale.

Tableaux. Un tableau est un type complexe qui est une structure composée d'un nombre fixe de composants du même type. Le type de composant est appelé type de base. Tous les composants de la baie peuvent être facilement commandés et l'accès à chacun d'entre eux peut être fourni en indiquant simplement son numéro de série. Description du tableau dans la section var a la forme :

un: tableau de t2 ;

où a est le nom du tableau, tableau, de– mots de service (signifiant « tableau de… »), t1 – type d'index ; t2 – type de composant (type de base).

Le nombre d'index détermine la taille du tableau. Les index peuvent être de type entier (sauf entier long), caractère, logique, énumération et plage. Les indices sont séparés par des virgules et placés entre crochets. Les composants du tableau peuvent être de n’importe quel type, à l’exception du fichier.

Exemple 1. Considérons un tableau unidimensionnel C dont les valeurs sont cinq nombres réels :

4.6 6.23 12 -4.8 0.7

La description de ce tableau est la suivante :

c : tableau de réels ;

En fonction d'une valeur d'index spécifique, vous pouvez sélectionner un composant de tableau spécifique (par exemple, C signifie le troisième élément du tableau C, c'est-à-dire le nombre 12).

Exemple 2. Considérons un tableau bidimensionnel B (matrice B), dont la valeur est un tableau d'entiers :

La description de ce tableau est la suivante :

b d'un nombre entier ;

Ici b est le nom du tableau, le premier index est le numéro de ligne et prend les valeurs de 1 à 2, le second est le numéro de colonne et prend les valeurs de 1 à 4. En fonction des valeurs d'index spécifiques, vous pouvez sélectionnez un composant de tableau spécifique (par exemple, b signifie un élément de tableau situé dans la première ligne et la troisième colonne, c'est-à-dire le numéro -4).

Les index peuvent être des expressions arbitraires correspondant au type d'index issu de la description du tableau :

a : tableau de réels ;

une[(i+1)*2] := 24;

L'ensemble des opérations sur les éléments du tableau est entièrement déterminé par le type de ces éléments.

Type de chaîne. Le type chaîne est un ensemble de chaînes de caractères de longueur arbitraire (de zéro à un nombre donné). Les variables de type chaîne sont décrites à l'aide d'un mot fonction chaîne:

B : chaîne ;

Particularités :

– la valeur d'une variable chaîne peut être saisie à l'aide du clavier, affectée dans un opérateur d'affectation ou lue à partir d'un fichier. Dans ce cas, la longueur de la chaîne saisie peut être quelconque (inférieure à la taille spécifiée, égale à la taille ou supérieure, dans ce dernier cas, les caractères supplémentaires sont ignorés) ; a:= « Résultats » ;

– il est permis d'utiliser l'opération de concaténation dans l'opérateur d'affectation, puisque les chaînes peuvent changer dynamiquement leur longueur : a:= a + « calculs » ;

– la longueur maximale d'une variable chaîne est de 255 caractères, cette indication de longueur peut être omise :

un: chaîne;

a1 : chaîne ;

Les variables a et a1 sont les mêmes (description équivalente).

– la mémoire pour les variables de type chaîne est allouée au maximum, mais seule la partie de la mémoire actuellement occupée par les caractères chaîne est utilisée. Pour décrire une variable chaîne de longueur n, n+1 octets de mémoire sont utilisés : n octets pour stocker les caractères de chaîne, n+1 octets pour stocker la longueur actuelle.

– les opérations de comparaison sont définies sur des valeurs de types chaînes :< <= > >= = <>. Une chaîne courte est toujours plus petite qu’une longue. Si les chaînes ont la même longueur, les codes de caractères sont comparés.

– l'accès aux éléments individuels d'une chaîne est possible de la même manière que l'accès aux éléments d'un tableau : a, a. Le numéro de l'élément de ligne est indiqué entre crochets.

Procédures et fonctions orientées vers le travail avec des chaînes.

concaténer (s1, s2,…)– fonction de fusion de chaînes, s1, s2,... - lignes, le nombre de lignes peut être arbitraire. Le résultat de la fonction est une chaîne. Si la chaîne résultante comporte plus de 255 caractères, la chaîne est tronquée à 255 caractères.

copie(s, index, nombre)– fonction d'extraction d'une chaîne d'une chaîne source s longueur compter caractères, commençant par le numéro du caractère indice.

supprimer (s, index, nombre)– procédure pour supprimer de la chaîne s une sous-chaîne de longueur compter caractères, commençant par le numéro du caractère indice.

insérer (s1, s2, index)– procédure d'insertion de ligne s1à la ligne s2, en commençant par le caractère avec le numéro indice.

longueur(s)– fonction pour déterminer la longueur actuelle de la chaîne, renvoie un nombre égal à la longueur actuelle de la chaîne.

pos(s1, s2)– fonction de recherche dans une chaîne s2 sous-chaînes s1. renvoie le numéro de position du premier caractère d'une sous-chaîne s1 en ligne s2(ou 0 si cette ligne n'existe pas).

val (st, x, code)– procédure de conversion de chaînes en variable entière ou réelle X. Paramètre code contient 0 si la conversion a réussi (et en X le résultat de la conversion est placé), ou le numéro de position de la ligne où le caractère erroné est détecté (dans ce cas, la valeur X ne change pas).

Compatibilité et conversion de type. Turbo Pascal est un langage typé. Il est construit sur la base du strict respect du concept de type, selon lequel toutes les opérations utilisées dans le langage sont définies uniquement sur des opérandes de types compatibles.

Deux types sont considérés comme compatibles si :

– les deux sont du même type ;

– les deux sont réels ;

- les deux sont intacts ;

– un type est un type de plage du deuxième type ;

– les deux sont des types de plage du même type de base ;

– les deux sont des ensembles composés d'éléments du même type de base ;

– les deux sont des chaînes condensées (définies avec le mot précédent condensé) de même longueur maximale;

– l'un est un type chaîne et l'autre est un type chaîne ou caractère ;

– un type est n'importe quel pointeur et l'autre est un pointeur vers son objet associé ;

– les deux sont des types procéduraux avec le même type de résultat (pour un type de fonction), le même nombre de paramètres et le même type de paramètres correspondant mutuellement.

La compatibilité des types est particulièrement importante dans les opérateurs d’affectation. Soit t1 le type de la variable et t2 le type de l'expression, c'est-à-dire que l'affectation t1:=t2 est effectuée. Cette affectation est possible dans les cas suivants :

– t1 et t2 sont du même type, et ce type ne fait pas référence aux fichiers, aux tableaux de fichiers, aux enregistrements contenant des champs de fichier ou aux tableaux de tels enregistrements ;

– t1 et t2 sont des types ordinaux compatibles, et la valeur de t2 se situe dans la plage des valeurs possibles de t1 ;

– t1 et t2 sont des types réels, et la valeur de t2 se situe dans la plage des valeurs possibles de t1 ;

– t1 – type réel et t2 – type entier ;

– t1 – ligne et t2 – caractère ;

– t1 – chaîne et t2 – chaîne compressée ;

– t1 et t2 – chaînes compressées compatibles ;

– t1 et t2 sont des ensembles compatibles et tous les membres de t2 appartiennent à l'ensemble des valeurs possibles de t1 ;

– t1 et t2 sont des pointeurs compatibles ;

– t1 et t2 sont des types procéduraux compatibles;

– t1 est un objet et t2 est son descendant.

Dans un programme, les données d'un type peuvent être converties en données d'un autre type. Cette conversion peut être explicite ou implicite.

La conversion de type explicite appelle des fonctions de conversion spéciales dont les arguments appartiennent à un type et dont les valeurs appartiennent à un autre. Un exemple est les fonctions déjà évoquées ord, trunc, round, chr.

La conversion implicite n'est possible que dans deux cas :

– dans les expressions composées de variables réelles et entières, ces dernières sont automatiquement converties en un type réel, et l'expression entière dans son ensemble acquiert un type réel ;

– une même zone mémoire est alternativement traitée comme contenant des données d'un type ou d'un autre (combinant des données de types différents en mémoire).

Connaître et comprendre les types de données fait partie intégrante de la programmation.

Dans cette leçon, nous découvrirons les types de données dans le langage de programmation Turbo Pascal.

En langage Pascal, tous les objets, c'est-à-dire les constantes, variables, valeurs de fonction ou expressions sont caractérisées par leurs types. Un type définit l'ensemble des valeurs valides pour un objet, ainsi que l'ensemble des opérations qui lui sont applicables. De plus, le type détermine le format de la représentation interne des données dans la mémoire de l'ordinateur. En termes de types d'objets, Pascal est un langage statique. Cela signifie que le type d'un objet, par exemple une variable, est déterminé lors de sa déclaration et ne peut pas être modifié ultérieurement.

Structure des types de données en Pascal :

Types de langage simples
Les types simples incluent les types ordinal, réel, chaîne et adresse (pointeur). Ils définissent tous le type d’une seule valeur.

Types ordinaux caractérisé par le fait que chacun d'eux a un nombre fini de valeurs possibles, parmi lesquelles un ordre linéaire est établi. Chaque valeur peut être associée à un certain nombre entier - son numéro ordinal.

Types entiers- désignent des ensembles d'entiers dans différentes plages. Il existe cinq types d'entiers, différant par la plage de valeurs valides et la taille de la RAM qu'elles occupent. Les types entiers sont désignés par des identifiants : Byte, ShortInt, Word, Integer, LongInt ; leurs caractéristiques sont indiquées dans le tableau suivant.

Les valeurs de types entiers sont écrites dans le programme de la manière habituelle :
123 4 -3 +345 -699
La présence d'un point décimal dans la notation d'un nombre entier est inacceptable. Ce serait une erreur d'écrire un entier comme celui-ci :
123.0
En plus de la notation décimale habituelle, il est possible d'écrire des entiers au format hexadécimal en utilisant le préfixe $, par exemple :
$01AF $FF $1A $F0A1B
La casse des lettres A, B, ..., F n'a pas d'importance.

Opérations valides :

  • - affectation;
  • - toute l'arithmétique : +, - ,*, /, div, mod (avec une division ordinaire [/] le résultat est réel !) ;
  • - comparaison<, >, >=, <=, <>, =.
Type booléen- se compose de seulement deux valeurs : False (faux) et True (vrai). Les mots Faux et Vrai sont définis dans le langage et sont en fait des constantes logiques. La casse des lettres dans leur écriture n'a pas d'importance : FAUX = faux. Les valeurs de ce type sont le résultat de l'évaluation d'expressions conditionnelles et logiques et participent à toutes sortes d'opérateurs conditionnels du langage.
Opérations valides :
  • - affectation;
  • - comparaison:<, >, >=, <=, <>, =;
  • - opérations logiques : NON, OU, ET, XOR
Type de caractère (Caractère)- il s'agit d'un type de données composé d'un seul caractère (signe, lettre, code). Une valeur Char peut être n’importe quel caractère du jeu de caractères ASCII. Si un symbole a une représentation graphique, alors dans le programme, il est écrit entre guillemets simples (apostrophes), par exemple :
"w" "s" "." "*" " "-(espace)
Pour représenter l'apostrophe elle-même, son image est doublée : """".
Si le caractère n'a pas de représentation graphique, par exemple un caractère de tabulation ou un caractère de retour chariot, vous pouvez alors utiliser une forme équivalente d'écriture de la valeur du caractère, composée du préfixe # et du code ASCII du caractère :
#9 #32 #13
Opérations valides :
  • - affectation;
  • - comparaison:<, >, >=, <=, <>, =. Le caractère le plus grand est celui qui possède un numéro ASCII plus élevé.
Type de chaîne (Chaîne, Chaîne[n])- Ce type de données définit des séquences de caractères - chaînes. Le paramètre n spécifie le nombre maximum de caractères par ligne. S’il n’est pas spécifié, n=255 est supposé. Une valeur de type « chaîne » dans un programme est écrite sous la forme d'une séquence de caractères entourée de guillemets simples (apostrophes), par exemple
"C'est une chaîne"
"1234" est aussi une chaîne, pas un nombre
"" - ligne vide

Opérations valides :
  • - affectation;
  • - ajout (concaténation, fusion) ; par exemple, S:= "L'hiver"+" "+"est arrivé !";
  • - comparaison:<, >, >=, <=, <>, =. Les chaînes sont considérées comme égales si elles ont la même longueur et sont équivalentes caractère par caractère.
Types réels- désignent des ensembles de nombres réels dans différentes plages. Il existe cinq types réels, différant par la plage de valeurs autorisées et la taille de la RAM occupée. Les types réels sont désignés par des identifiants : Real, Single, Double, Extended, Comp ; leurs caractéristiques sont indiquées dans le tableau suivant.

Type de composition bien que classé comme type réel, il s’agit en réalité d’un entier avec une très large plage de valeurs.
Les valeurs de types réels peuvent être écrites dans un programme de plusieurs manières :
1.456 0.000134 -120.0 65432
+345 0-45 127E+12
-1,5E-5 -1,6E+12 5E4 0,002E-6

Ce serait une erreur d’écrire un nombre réel comme celui-ci :
0,5 (correct 0,5)
12. (correctement 12,0 ou 12)

Un nombre réel sous forme à virgule flottante (forme scientifique) s'écrit sous forme de paire
<мантисса>E<порядок>
Cette désignation s'entend comme « la mantisse multipliée par dix à une puissance égale à l'ordre ». Par exemple,
-1,6E+12 correspond à -1,6 1012

Opérations valides :
- affectation;
- tout arithmétique : +, - ,*, /;
- comparaison:<, >, >=, <=, <>, =.

Lorsque vous comparez des nombres réels, n'oubliez pas qu'en raison de l'imprécision de leur représentation dans la mémoire de l'ordinateur (en raison de l'inévitabilité des arrondis), vous devez éviter d'essayer de déterminer l'égalité stricte de deux valeurs réelles. Il est possible que l’égalité soit fausse, même si ce n’est pas le cas.

Une plage ou (type restreint) n'est pas un type de langage prédéfini (tel que Integer ou Char) et n'est donc associée à aucun identifiant. Ce type est une entrée utilisateur. En l'utilisant, nous pouvons définir un nouveau type qui contiendra des valeurs uniquement provenant d'une sous-plage limitée d'un certain type de base. Le type de base ne peut être qu'un type entier, un type Char (caractère) et l'un des types d'énumération introduits par le programmeur.

Pour introduire un nouveau type - une plage - vous devez indiquer dans le bloc de description du type TYPE le nom du type saisi et les limites de la plage via le symbole de plage spécial ".." (deux points d'affilée) :
TAPER
Siècle = 1..21 ; (sous-plage de type entier)
Lettres Majuscules = "A". "Z"; (sous-plage de type Char)

Types de langage structuré

Les types structurés incluent : un tableau, un enregistrement, un ensemble, un fichier, etc. Tous définissent le ou les types d'une structure de données.

Tableau- une structure ordonnée de données du même type qui les stocke séquentiellement. Le tableau doit avoir des dimensions qui déterminent le nombre d'éléments stockés dans la structure. Tout élément d'un tableau peut être atteint par son index.

Le type de tableau est déterminé par la construction :
Tableau [plage] de ElementType ;

La plage entre crochets indique les valeurs d'index du premier et du dernier élément de la structure. Exemples de déclarations de types et de variables :

TYPE Vecteur = tableau de Réel ; VAR V1 : Vecteur ; V2 : tableau d’octets ;
Ici, la variable V1 est définie en utilisant le type Vector décrit ci-dessus ; le type de variable V2 est construit directement au stade de sa description.

En tant que type d'élément de tableau, vous pouvez également spécifier un tableau, formant ainsi des structures multidimensionnelles. Par exemple, une description d'une structure bidimensionnelle (matrice) ressemblera à ceci :
VAR M1 : tableau de tableau d'octets ; La même chose peut être écrite de manière beaucoup plus compacte : VAR M2 : tableau d'octets ;
Ici, les tableaux M1 et M2 ont exactement la même structure : une matrice carrée de taille 3x3.

On accède à un élément de tableau en spécifiant son index, par exemple :

Writeln(V1); (afficher le premier élément du tableau V1) readln(M2); (saisir le troisième élément de la deuxième ligne de la matrice M2)
Ceci conclut la leçon sur les types de données, le texte a été presque entièrement copié et collé (le lien sera ci-dessous), car Je ne vois pas l’intérêt de raconter ce matériel avec mes propres mots. Si la différence entre les types de données est au moins un peu claire, alors c'est déjà bien.

Bases de la programmation
Chaque professionnel était autrefois une théière. Vous connaissez sûrement l’état où « vous ne savez pas par où commencer à réfléchir pour arriver à une telle chose ». Vous avez probablement rencontré une situation dans laquelle vous ne savez tout simplement pas par où commencer. Ce livre s'adresse précisément aux personnes qui aimeraient devenir programmeur, mais qui n'ont absolument aucune idée par où commencer dans cette voie. ...

Presque tous les types de données entiers sont . Ces types de données représentent des entiers dans une certaine plage. Les noms spécifiques des types entiers et des plages de valeurs dépendent du langage de programmation spécifique, du compilateur et du mode de compilation. Vous pouvez en savoir plus à ce sujet dans la documentation du compilateur.

Par exemple, le type de données Entier en Delphi, sa plage est comprise entre -2147483648…2147483647, tandis qu'en Turbo Pascal, le type de données Entier représente des nombres compris entre -35 768 et 32 ​​767. En Free Pascal, la plage de valeurs de type Entier déterminé par le mode sélectionné.

Puisque Lazarus utilise le compilateur Free Pascal, tout ce qui est dit sur les types de données en relation avec Free Pascal est également vrai pour Lazarus.

Ainsi, les types de données entiers de Free Pascal sont répertoriés dans le tableau 13.1.

Tableau 13.1. Types de données entiers Pascal gratuits (Lazarus).

Taper Taille, octets Plage de valeurs
Octet 1 0…255
Raccourci 1 -128…127
Petitint 2 -35768…32767
Mot 2 0…65535
Entier 2 ou 4 Dépend du mode de compilation
Cardinal 4 0…4294967295
Entier long 4 -2147483648…2147483647
Mot long 4 0...4294967295
Int64 8 -9223372036854775808...9223372036854775807
QMot 8 0...18446744073709551615

NOTE
Types en Pascal Libre Int64 Et QMot ne sont pas! Cela signifie que vous ne pouvez pas les utiliser, par exemple, pour les variables d'index dans les boucles. Cependant, je les ai présentés ici afin de ne pas les décrire séparément à l'avenir et de rassembler tous les types entiers Free Pascal en un seul endroit. Si vous ne comprenez pas certains mots, ne vous inquiétez pas. En temps voulu, je vous raconterai tout plus en détail.

Et maintenant quelques explications sur le tableau.

Dans une chronique TAPER des identifiants de type de données sont donnés (des mots clés qui indiquent au compilateur à quel type appartient une donnée particulière). Vous apprendrez à utiliser ces identifiants dans les leçons suivantes.

Dans une chronique TAILLE indique la taille qu'occupe le type de données dans la mémoire de l'ordinateur. Par exemple, un entier positif peut être représenté par différents types : Octet, Mot, Cardinal etc. Cependant, un nombre comme Cardinal occupera 4 octets en mémoire, tandis qu'un nombre comme Octet– seulement 1 octet. Par conséquent, si vous savez avec certitude que le nombre avec lequel vous travaillez ne prendra jamais une valeur supérieure à 255, alors il est préférable de le définir comme un type. Octet, car cela permettra d'économiser de l'espace dans la mémoire de votre ordinateur. Bien que tout ne soit pas si simple ici (les nuances de la répartition de la mémoire et des autres ressources informatiques dépassent le cadre).

Dans une chronique GAMME spécifie la plage de valeurs sur laquelle le type de données opère. Par exemple, un nombre comme Octet peut prendre des valeurs de 0 à 255.

Maintenant, place à la pratique. Écrivons un programme qui affiche les plages de valeurs de tous les types de données entières. Le code source de ce programme est donné ci-dessous :

Inscription 13.1. Un programme pour afficher des plages d'entiers. programme td; ($mode objfpc)($H+) utilise ($IFDEF UNIX)($IFDEF UseCThreads) cthreads, ($ENDIF)($ENDIF) classes (vous pouvez ajouter des unités après cela) ; commencer Writeln("Octet : ", Low(Octet), "..", High(Octet)); Writeln("Abréviation : ", Faible(Abréviation), "..", Élevé(Abréviation)); Writeln("Smallint : ", Low(Smallint), "..", High(Smallint)); Writeln("Mot : ", Faible(Mot), "..", Élevé(Mot)); Writeln("Entier : ", Faible(Entier), "..", Élevé(Entier)); Writeln("Cardinal : ", Faible(Cardinal), "..", Haut(Cardinal)); Writeln("Entier Long : ", Faible(Entier Long), "..", Haut(Entier Long)); Writeln("Mot long : ", Faible(Mot long), "..", Haut(Mot long)); Writeln("Int64 : ", Faible(Int64), "..", Élevé(Int64)); Writeln("QWord : ", Faible(QWord), "..", Élevé(QWord)); Lire ; fin.

Fonction standard Faible définit la valeur minimale du type de données. Funtskia Haut définit la valeur maximale. Avec fonctions ÉcrireLn Et LireLn vous vous connaissez déjà un peu. Nous parlerons plus en détail des sous-programmes (procédures et fonctions) dans la section correspondante.

Enfin, je vais vous expliquer comment les données entières sont écrites dans le programme. Oui, comme partout ailleurs : écrivez simplement le numéro, sans guillemets ni symboles supplémentaires. Par exemple, comme ça

10
178
35278

Certes, cela s'applique aux nombres dans le système numérique décimal. Vous savez sûrement déjà qu’il existe d’autres systèmes. Les systèmes numériques les plus utilisés sont le binaire, le décimal et l’hexadécimal.

Free Pascal prend en charge quatre formats d'entiers :

  1. Notation décimale. Juste un chiffre, comme 10.
  2. Notation hexadécimale. Un numéro préfixé par $. Par exemple, le nombre hexadécimal $10 est égal au nombre décimal 16.
  3. Notation octale. Un numéro préfixé par &. Par exemple, l'octal &10 est égal au décimal 8.
  4. Notation binaire. Un nombre préfixé par %. Par exemple, le nombre binaire %10 est égal au nombre décimal 2.

Devoirs:

Créez un programme qui affiche des plages de valeurs entières (liste 13.1). Compilez le programme et exécutez-le. Assurez-vous que ces valeurs correspondent à celles indiquées dans le tableau 13.1.

Dans le code source du programme, recherchez la ligne qui définit le mode de compilation :

($mode objfpc)($H+)

Dans cette ligne, au lieu du mot objfpcécrire le mot tp. Autrement dit, la dernière ligne devrait ressembler à ceci :

($mode tp)($H+)

Lancer le programme. Regardez la plage de valeurs de type Entier. Conclure.

Apprenez à penser comme un programmeur, c'est-à-dire logiquement. Personne ne mâchera tout à votre place jusqu’à la retraite, comme je le fais maintenant. Il faut s'habituer à penser par soi-même. Sinon, vous tomberez dans le « principe d’apprentissage du singe » et vos chances de devenir un grand programmeur seront alors proches de zéro. Pour vous aider à ne pas tomber dans le niveau « bachotage », je laisserai périodiquement des lacunes dans votre apprentissage afin que vous essayiez de comprendre certaines choses vous-même.

C'est bien mieux si tu le découvres toi-même mauvaise décision, vous trouverez l’erreur vous-même et la corrigerez vous-même, plutôt que de toujours utiliser les bonnes solutions des autres et de les copier bêtement.

3.2. Types de données simples dans Turbo Pascal 7

Un type simple définit un ensemble ordonné de valeurs de paramètres. Turbo Pascal possède les groupes de types simples suivants :

  • types entiers ;
  • type booléen ;
  • type de caractère ;
  • type énuméré ;
  • plage de types ;
  • de vrais types.

Tous les types simples, à l’exception des types réels, sont appelés types ordinaux. Pour les quantités de types ordinaux, des procédures et fonctions standards sont définies : Dec, Inc, Ord, Pred, Succ (voir section 13.1).

3.2.1. Types entiers

Contrairement à Pascal, qui définit un seul type entier, Integer, Turbo Pascal propose cinq types entiers standard : Shortint, Integer, Longint, Byte, Word. Les caractéristiques de ces types sont données dans le tableau. 2.

Tableau 2. Types de données entiers

Taper Gamme Format Taille en octets
Raccourci -128 .. 127 Iconique 1
Entier -32768 .. 32767 Iconique 2
Entier long -2147483648 .. 2147483647 Iconique 4
Octet 0 .. 255 Non signé 1
Mot 0 .. 65535 Non signé 2

3.2.2. Type booléen

Le type booléen standard (taille - 1 octet) est un type de données dont tout élément ne peut prendre que deux valeurs : True et False. Dans ce cas, les conditions suivantes sont valables :
Faux Ord (Faux) = 0
Ord (Vrai) = 1
Succ (Faux) = Vrai
Préd (Vrai) = Faux

Turbo Pascal 7.0 a ajouté trois types logiques supplémentaires ByteBool (taille - 1 octet), WordBool (taille - 2 octets) et LongBool (taille - 4 octets). Ils ont été introduits pour l'unification avec d'autres langages de programmation et avec l'environnement Windows. Leur différence avec le type booléen standard est la valeur réelle du paramètre de ce type, correspondant à la valeur True. Pour tous les types logiques, la valeur False correspond au nombre 0, écrit dans le nombre d'octets correspondant. La valeur True pour le type booléen correspond au nombre 1 écrit dans son octet, et pour les autres types la valeur True correspond à tout nombre autre que zéro (bien que la fonction Ord dans ce cas donne la valeur 1).

3.2.3. Type de caractère

Le type de caractère standard Char définit un ensemble complet de caractères ASCII. La fonction Ord à partir d'une valeur de type Char donne le code du caractère correspondant. Les valeurs de type caractère sont comparées selon leurs codes.

3.2.4. Type d'énumération

Un type énuméré n'est pas standard et est défini par un ensemble d'identifiants auxquels les valeurs des paramètres peuvent correspondre. La liste des identifiants est indiquée entre parenthèses, les identifiants sont séparés par des virgules :

taper
= ();)

Il est important dans quel ordre les identifiants sont répertoriés lors de la définition d'un type, car le premier identifiant se voit attribuer le numéro de série 0, le second - 1, etc. Le même identifiant ne peut être utilisé dans la définition d'un seul type énuméré. La fonction Ord à partir d'une valeur d'un type énuméré donne le numéro ordinal de sa valeur.

Exemple. Type énuméré.

tapez Operat = (Plus, Moins, Mult, Divide);

Le type booléen est un cas particulier du type énuméré :

tapez Boolean = (Faux, Vrai) ;

3.2.5. Gamme de types

Dans n'importe quel type ordinal, vous pouvez sélectionner un sous-ensemble de valeurs, défini par les valeurs minimales et maximales, qui inclut toutes les valeurs du type d'origine situées à l'intérieur de ces limites, y compris les limites elles-mêmes. Ce sous-ensemble définit un type de plage. Le type de plage est spécifié en spécifiant les valeurs minimale et maximale, séparées par deux points :

tapez = . . ;

La valeur minimale lors de la définition de ce type ne doit pas être supérieure au maximum.

Exemple. Définition des types de plages.

taper
Douzaine = 1..12 ; (chiffres de 1 à 12)
AddSub = Plus..Moins ; (opérations d'addition et de soustraction)

3.2.6. Types réels

Contrairement au standard du langage Pascal, où un seul type réel Real est défini, Turbo Pascal possède cinq types réels standards : Real, Single, Double, Extended, Comp. Pour les caractéristiques de ces types, voir tableau. 3. Tableau 3. Types de données réels

Taper Gamme Nombre de chiffres significatifs Taille en octets
Réel 2.9*10-39..1.7*1038 11-12 6
Célibataire 1.5*10-45..3.4*1038 7-8 4
Double 5.0*10-324.-1.7*10308 15-16 8
Étendu 3.4*10-4932..1.1*104932 19-20 10
Comp -263+1..263-1 19-20 8

Le type Comp est en fait un type entier à plage étendue, mais n’est pas considéré comme un type ordinal.

Les types Single, Double, Extended et Comp ne peuvent être utilisés dans les programmes que s'il existe un coprocesseur arithmétique ou si l'émulateur de coprocesseur est activé (voir paragraphes 17.5.8 et 17.7.1).

Partager