Pascal. Types de données simples

Un type de données définit un ensemble de valeurs valides et un ensemble d'opérations valides.

Types simples.

Les types simples sont divisés en ORDINAL et REAL.

1. TYPES DE COMMANDES , à leur tour, il y a :

un ensemble

Pascal définit 5 types entiers, qui sont définis en fonction du signe et de la valeur que prendra la variable.

Tapez le nom

Longueur (en octets)

Plage de valeurs

32 768...+32 767

2 147 483 648...+2 147 483 647

b) logique

Le nom de ce type est BOOLEAN. Les valeurs booléennes peuvent être l'une des constantes booléennes : VRAI (vrai) ou FAUX (faux).

c) symbolique

Le nom de ce type est CHAR - occupe 1 octet. La valeur d'un type de caractère est l'ensemble de tous les caractères PC. Chaque caractère se voit attribuer un entier compris entre 0 et 255. Ce numéro sert de code pour la représentation interne du symbole.

2. TYPES RÉELS .

Contrairement aux types ordinaux, dont les valeurs sont toujours mappées sur une série d'entiers et sont donc représentées de manière absolument précise dans PC, les valeurs des types réels définissent un nombre arbitraire uniquement avec une certaine précision finie en fonction du format interne du nombre réel. .

Longueur du type de données numérique, octets

Nom du type de données numérique

Nombre de chiffres significatifs d'un type de données numérique

Plage d'ordre décimal d'un type de données numérique

2*1063 +1..+2*1063 -1

TYPES STRUCTURÉS

Les types de données structurées définissent une collection ordonnée de variables scalaires et sont caractérisées par le type de leurs composants.

Les types de données structurés, contrairement aux types simples, définissent de nombreuses valeurs complexes avec un nom commun. On peut dire que les types structurels déterminent une certaine manière de former de nouveaux types à partir de types existants.

Il existe plusieurs méthodes de structuration. Selon la méthode d'organisation et le type de composants dans les types de données complexes, on distingue les variétés suivantes : type régulier (tableaux) ; type combiné (enregistrements); type de fichier(fichiers); plusieurs types ; type de chaîne (chaînes); dans la version 6.0 et antérieure du langage Turbo Pascal, un type d'objet (objets) a été introduit.

Contrairement aux types de données simples, les données de type structuré se caractérisent par la multiplicité des éléments qui forment ce type, c'est-à-dire une variable ou une constante d'un type structuré a toujours plusieurs composants. Chaque composant, à son tour, peut appartenir à un type structuré, c'est-à-dire l'imbrication des types est possible.

1. Tableaux

Les tableaux dans Turbo Pascal sont similaires à bien des égards aux types de données similaires dans d'autres langages de programmation. Une particularité des tableaux est que tous leurs composants sont des données du même type (éventuellement structurées). Ces composants peuvent être facilement organisés et chacun d’entre eux est accessible simplement en spécifiant un numéro de série.

La description du tableau est spécifiée comme suit :

<имя типа>= tableau[<сп.инд.типов>] de<тип>

Ici<имя типа>- identifiant correct ;

Tableau, de – mots réservés (tableau, de) ;

<сп.инд.типов>- une liste d'un ou plusieurs types d'index, séparés par des virgules ; les crochets encadrant la liste sont une exigence de syntaxe ;

<тип>- tout type de Turbo Pascal.

Tous les types ordinaux peuvent être utilisés comme types d'index dans Turbo Pascal, à l'exception des types LongInt et range avec le type de base LongInt.

La profondeur d'imbrication des types structurés en général, et donc des tableaux, est arbitraire, donc le nombre d'éléments dans la liste des index de type (taille du tableau) n'est pas limité, cependant, la longueur totale de la représentation interne d'un tableau ne peut pas être supérieur à 65 520 octets.

2. Dossiers

Un enregistrement est une structure de données composée d'un nombre fixe de composants appelés champs d'enregistrement. Contrairement à un tableau, les composants (champs) d’un enregistrement peuvent être de différents types. Pour permettre de faire référence à l'un ou l'autre composant d'un enregistrement, les champs sont nommés.

La structure d'une déclaration de type de publication est :

< Nomtaper>=ENREGISTRER< coentreprise. des champs>FIN

Ici<имя типа>- identifiant correct ;

RECORD, END – mots réservés (enregistrement, fin) ;

<сп.полей>- liste des champs ; est une séquence de sections d'un enregistrement séparées par un point-virgule.

3 ensembles

Les ensembles sont un ensemble d'objets du même type qui sont logiquement connectés les uns aux autres. La nature des connexions entre objets est uniquement implicite par le programmeur et n'est en aucun cas contrôlée par Turbo Pascal. le nombre d'éléments inclus dans un ensemble peut varier de 0 à 256 (un ensemble qui ne contient pas d'éléments est dit vide).C'est l'inconstance du nombre de ses éléments qui fait que les ensembles diffèrent des tableaux et des enregistrements.

Deux ensembles sont considérés comme équivalents si et seulement si tous leurs éléments sont identiques et que l'ordre des éléments de l'ensemble est indifférent. Si tous les éléments d’un ensemble sont également inclus dans un autre, le premier ensemble est dit inclus dans le second.

La description du type d'ensemble est :

< Nomtaper>=ENSEMBLE DE< socles. taper>

Ici<имя типа>- identifiant correct ;

SET, OF – mots réservés (set, of) ;

<баз.тип>- le type de base des éléments de l'ensemble, qui peut être n'importe quel type ordinal sauf WORD, INTEGER et LONGINT.

Pour définir un ensemble, on utilise ce qu'on appelle le constructeur d'ensemble : une liste de spécifications des éléments de l'ensemble, séparées par des virgules ; la liste est entourée de crochets. Les spécifications d’éléments peuvent être des constantes ou des expressions d’un type de base, ainsi qu’un type de plage du même type de base.

4. Fichiers

Un fichier est compris soit comme une zone nommée de la mémoire externe d'un PC, soit comme un périphérique logique - une source ou un récepteur potentiel d'informations.

Tout fichier a trois caractéristiques

    il a un nom qui permet au programme de travailler avec plusieurs fichiers simultanément.

    il contient des composants du même type. Le type de composant peut être n'importe quel type Turbo Pascal, à l'exception des fichiers. En d’autres termes, vous ne pouvez pas créer un « fichier de fichiers ».

    la longueur du fichier nouvellement créé n'est en aucun cas spécifiée lors de sa déclaration et n'est limitée que par la capacité des périphériques de mémoire externes.

Un type de fichier ou une variable de type de fichier peut être spécifié de trois manières :

< Nom>= FICHIER DE< taper>;

< Nom>=TEXTE;

<имя>= FICHIER ;

Ici<имя>- nom du type de fichier (identifiant correct) ;

FILE, OF – mots réservés (fichier, from) ;

TEXTE – nom du type de fichier texte standard ;

<тип>- tout type de Turbo Pascal, sauf les fichiers.

Selon le mode de déclaration, trois types de dossiers peuvent être distingués :

· fichiers typés (définis par la clause FILE OF...) ;

· fichiers texte (définis comme type TEXTE) ;

· fichiers non typés (définis par le type FILE).

À propos de la conversion des types de données numériques de Pascal

En Pascal, les conversions implicites (automatiques) de types de données numériques sont presque impossibles. Une exception est faite uniquement pour le type entier, dont l'utilisation est autorisée dans les expressions de type réel. Par exemple, si les variables sont déclarées comme ceci :

Var X : entier ; Y : réel ;

puis l'opérateur

sera syntaxiquement correct, bien qu'il y ait une expression entière à droite du signe d'affectation et une variable réelle à gauche, le compilateur convertira automatiquement les types de données numériques. La conversion inverse automatiquement du type réel vers le type entier est impossible en Pascal. Rappelons combien d'octets sont alloués pour les variables de type entier et réel : 2 octets de mémoire sont alloués pour le type de données entier entier, et 6 octets pour le type réel. Il existe deux fonctions intégrées pour convertir un réel en entier : round(x) arrondit un réel x à l'entier le plus proche, trunc(x) tronque un réel en supprimant la partie fractionnaire.

Le type de données numérique le plus simple en Pascal est le type entier, conçu pour stocker des entiers. Les entiers en Pascal sont généralement divisés en deux types : signés et non signés. Les nombres signés sont un type entier qui comprend à la fois des nombres positifs et négatifs, les nombres non signés ne sont que des nombres positifs.

Vous trouverez ci-dessous deux tableaux avec des types entiers. Nous allons d'abord écrire types entiers signés:


TaperOctetPlage de valeurs
raccourci1 -128 ... 127
petit entier2 -32768 ... 32767
entier, entier long4 -2147483648 ... 2147483647
int648 -9223372036854775808 ... 9223372036854775807

Et ça types entiers non signés:


TaperOctetPlage de valeurs
octet1 0 ... 255
mot2 0 ... 65535
mot long, cardinal4 0 ... 4294967295
uint648 0 ... 18446744073709551615

Comme vous pouvez le voir, la première colonne contient le nom du type, la seconde - le nombre d'octets occupés en mémoire par des nombres de ce type et la troisième - la plage de valeurs possibles, respectivement. Il existe deux types de nombres signés : entier et entier long (littéralement « entier » et « entier long »), qui sont synonymes. Autrement dit, vous pouvez utiliser un nom ou un autre dans la section de description.

De même, dans le deuxième tableau (entiers non négatifs en Pascal), il existe également deux types d'entiers synonymes de 4 octets - mot long et cardinal , utilisez donc l'un ou l'autre.

Vous pouvez également remarquer que si nous déplaçons conditionnellement les nombres du premier tableau vers la droite par rapport à zéro (déplacez l'intervalle vers la droite pour que le nombre minimum soit 0), alors nous obtiendrons des intervalles d'entiers dans le deuxième tableau se trouvant dans les lignes correspondantes. Ainsi, si dans un type shortint de 1 octet, nous ajoutons 128 aux limites gauche et droite, nous obtenons le type d'octet (0..255) ; si dans un smallint de type 2 octets nous ajoutons 32768 aux limites, nous obtenons le mot de type non signé correspondant de 2 octets (0..65535), etc.

Tout cela se produit parce que dans les types entiers non signés, les nombres peuvent être divisés exactement en deux : la moitié des nombres dans la partie négative, l'autre moitié dans la partie positive. Pourquoi alors dans les nombres signés le bord gauche en valeur absolue 1 est-il plus grand que le bord droit ? - tu demandes. Par exemple, dans le type shortint, le minimum est de -128, tandis que le maximum n'est que de 127 (modulo 1 de moins). Et c'est parce que le côté droit comprend également 0, et vous devez le savoir et vous en souvenir.

Alors pourquoi les entiers en Pascal doivent-ils être divisés en autant de types ? Pourquoi ne pas se contenter, par exemple, du plus grand des types entiers de PascalABC.Net et Free Pascal – int64 – qui fait près de 9 quintillions et demi (!) avec à la fois un moins et un plus ? Oui, pour une simple raison banale (?) : économiser de la mémoire. Si vous devez ajouter deux petits nombres positifs d'un octet (0..255) et que vous avez décrit ces nombres comme int64 (8 octets), cela prend 8 fois plus de mémoire. Et si le programme est volumineux et qu'il comporte de nombreuses variables, les économies de mémoire augmentent très fortement. De plus, cela ne sert à rien d’utiliser des types entiers signés si le problème concerne des quantités telles que la longueur, la masse, la distance, le temps, etc.

Dans la section Abrahamyan Problem Book du site (sous-section Integer), observez l'utilisation de divers types entiers en Pascal.

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 de type entier 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 portée (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 description de type restreinte 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 supprimé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).

Types de données en langage Pascal : classification et descriptions. Types de données arithmétiques et ordinales, actions avec eux. Expressions arithmétiques : fonctions, opérations et ordre des actions. Compatibilité et conversions des types de données.

Les compilateurs Pascal exigent que des informations sur la quantité de mémoire nécessaire pour exécuter un programme soient fournies avant son exécution. Pour ce faire, dans la section description des variables ( var) vous devez lister toutes les variables utilisées dans le programme. De plus, vous devez également indiquer au compilateur la quantité de mémoire que chacune de ces variables occupera. Il serait également bien de se mettre d'accord à l'avance sur les différentes opérations applicables à certaines variables...

Tout cela peut être communiqué au programme en indiquant simplement le type de la future variable. Disposant d'informations sur le type d'une variable, le compilateur « comprend » combien d'octets doivent lui être alloués, quelles actions peuvent être effectuées avec elle et à quelles constructions il peut participer.

Pour la commodité des programmeurs, Pascal dispose de nombreux types de données standard, ainsi que de la possibilité de créer de nouveaux types.

Lors de la construction de nouveaux types de données à partir de données existantes (standard ou encore définies par le programmeur lui-même), nous devons nous rappeler que tout bâtiment doit être construit sur de bonnes fondations. Par conséquent, nous allons maintenant parler de cette « fondation ».

Basé types de données de base tous les autres types du langage Pascal sont construits, appelés : construit.

La division en types de données de base et construits en Pascal est indiquée dans le tableau :

Les types de données construits par le programmeur sont décrits dans la section taper selon le modèle suivant :

taper<имя_типа> = <описание_типа>;

Par exemple:

tapez Lat_Bukvy = "a" .. "z", "A" .. "Z" ;

Les types de données de base sont standards, il n'est donc pas nécessaire de les décrire dans la section taper. Toutefois, si vous le souhaitez, cela peut également être fait, par exemple en donnant de longues définitions. noms courts. Disons en introduisant un nouveau type de données

tapez Int = Entier ;

Vous pouvez raccourcir un peu le texte du programme.

Les types construits standard n'ont pas non plus besoin d'être décrits dans la section taper. Cependant, dans certains cas, cela doit encore être fait en raison d'exigences syntaxiques. Par exemple, dans liste de paramètres procédures ou les fonctions Les constructeurs de types ne peuvent pas être utilisés (voir conférence 8).

Types de données ordinales

Parmi les types de données de base, les plus remarquables sont types ordinaux. Ce nom peut être justifié de deux manières :

Routines standard qui traitent types de données ordinales

Uniquement pour les quantités types ordinaux Les fonctions et procédures suivantes sont définies :

  1. Fonction Ord(X) renvoie le numéro ordinal de la valeur de la variable x (par rapport au type auquel appartient la variable x).
  2. Fonction Préd(X) renvoie la valeur précédant x (non applicable au premier élément du type).
  3. Fonction Succès(X) renvoie la valeur qui suit x (non applicable au dernier élément du type).
  4. Procédure Inc.(X) renvoie la valeur qui suit x (pour types de données arithmétiques cela équivaut à l'opérateur x:= x + 1).
  5. Procédure Inc.(x,k) renvoie la kième valeur après x (pour types de données arithmétiques cela équivaut à l'opérateur x:= x + k).
  6. Procédure Déc(X) renvoie la valeur précédant x (pour types de données arithmétiques cela équivaut à l'opérateur x:= x - 1).
  7. Procédure Déc(x,k) renvoie la valeur k–e précédant x (pour types de données arithmétiques cela équivaut à l'opérateur x:= x - k).

À première vue, il semble que le résultat de l'application de la procédure Inc.(X) coïncide complètement avec le résultat de l'application de la fonction Succès(X). Cependant, la différence entre eux apparaît aux limites de la plage autorisée. Fonction Succès(X) n'est pas applicable à l'élément maximum d'un type, mais voici la procédure Inc.(X) ne produira aucune erreur, mais, agissant selon les règles d'addition machine, ajoutera l'unité suivante au numéro d'élément. Le nombre, bien entendu, dépassera la plage et, en raison de la troncature, se transformera en le nombre de la valeur minimale de la plage. Il s'avère que les procédures Inc.() Et Déc() ils perçoivent tout type ordinal comme s'il était « fermé en anneau » : immédiatement après le dernier, la première valeur revient.

Expliquons tout ce qui a été dit avec un exemple. Pour le type de données

tapez Seize = 0 .. 15 ;

essayer d'ajouter 1 au nombre 15 entraînera le résultat suivant :

1 1 1 1 1 1 0 0 0 0

L'unité initiale sera coupée, et il s'avère donc que Inc.(15)=0 .

Une situation similaire à la limite inférieure de la plage autorisée d'un type de données ordinal arbitraire est observée pour la procédure Déc(X) et fonctions Préd(X):

Types de données liés à ordinal

Décrivons maintenant types de données ordinales en détails.

  1. Type booléen Booléen a deux valeurs : False et True, et les égalités suivantes sont valables pour elles :
  2. Au type de caractère Carboniser comprend 256 caractères table ASCII étendue(par exemple, "a", "b", "i", "7", "#"). Numéro de caractère renvoyé par la fonction Ord() , correspond au numéro de ce symbole dans Tableau ASCII.
  3. Types de données entiers Mettons-le dans un tableau :
  4. Répertoriable les types de données sont spécifiés dans la section taper en listant explicitement leurs éléments. Par exemple:

    tapez Week = (dim, lundi, mardi, mercredi, jeudi, vendredi, samedi) ; 0 1 2 3 4 5 6

    Rappelons que pour ce type de données :

  5. Types de données d'intervalle ne sont spécifiés que par les limites de leur aire de répartition. Par exemple:

    tapez Mois = 1 .. 12 ;
    Budni = lundi .. vendredi ;

  6. Le programmeur peut créer ses propres types de données, qui sont une combinaison de plusieurs types standards. Par exemple:

    tapez Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ;

Ce type consiste à combiner plusieurs intervalles, et dans ce cas l'ordre des lettres latines est modifié : si dans le type standard

La notion de données est une des notions clés en programmation et en informatique en général. En gros, les données en informatique sont des informations qui sont en état de stockage, de traitement ou de transmission pendant une certaine période de temps. Dans les machines de Turing, l’information a un type, qui dépend à son tour du type d’information.

Les types de données en Pascal définissent les valeurs possibles des variables, constantes, expressions et fonctions. Ils sont intégrés et personnalisés. Les types intégrés sont initialement présents dans le langage de programmation et les types personnalisés sont créés par le programmeur.

Selon le mode de présentation et de traitement, les types de données sont :

  • simple
  • structuré
  • pointeurs
  • objets
  • procédures

Cet article ne considérera que les types de données les plus simples, car aux premières étapes de la formation, il sera plus facile pour votre programme de se passer, par exemple, de fichiers et d'enregistrements que de variables entières ou de chaînes.

Type entier

Cela inclut plusieurs types entiers, qui diffèrent par la plage de valeurs, le nombre d'octets alloués pour les stocker et le mot avec lequel le type est déclaré.

Taper Gamme Taille en octets
raccourci -128…127 1
entier -32 768…32 767 2
entier long -2 147 483 648…2 147 483 647 4
octet 0…255 1
mot 0…65 535 2

Vous pouvez déclarer une variable entière dans la section Var, par exemple :

Toutes les opérations arithmétiques et logiques peuvent être effectuées sur les variables de cette catégorie à l'exception de la division (/), qui nécessite un type réel. Certaines fonctions et procédures standard peuvent également s'appliquer.

Type réel

En Pascal, il existe les types de données réels suivants :

Taper Gamme Mémoire, octet Nombre de chiffres
Réel 2,9e-39 … 1,7e38 6 11-12
Célibataire 1,5e-45 … 3,4e38 4 7-8
Double 5.0e-324…1.7e308 8 15-16
Étendu 3.4e-4932 … 1.1e493 10 19-20
Comp -9.2e63…(9.2e63)-1 8 19-20

Plus d'opérations et de fonctions peuvent être effectuées sur eux que sur des entiers. Par exemple, ces fonctions renvoient un résultat réel :

péché(x) – sinus ;

cos(x) – cosinus ;

arctan(x) – arctangente ;

ln(x) – logarithme népérien ;

sqrt(x) – racine carrée ;

exp(x) – exposant ;

Type booléen

Une variable de type de données booléen ne peut prendre que deux valeurs : vrai et faux. Ici, vrai correspond à la valeur 1 et faux correspond à zéro. Vous pouvez déclarer une variable booléenne comme ceci :

Des opérations de comparaison et logiques peuvent être effectuées sur des données de ce type : not, et, ou, xor.

Type de caractère

Un type de données caractère est une collection de caractères utilisés dans un ordinateur particulier. Une variable de ce type prend la valeur d'un de ces caractères et occupe 1 octet en mémoire de l'ordinateur. Mot Carboniser définit une valeur de ce type. Il existe plusieurs manières d'écrire une variable (ou constante) caractère :

  1. comme un seul caractère entouré d'apostrophes : « W », « V », « p » ;
  2. en précisant le code du caractère dont la valeur doit être comprise entre 0 et 255.
  3. en utilisant la construction ^K, où K est le code du caractère de contrôle. La valeur de K doit être supérieure de 64 au code du caractère de contrôle correspondant.

Les opérations relationnelles et les fonctions suivantes sont applicables aux valeurs d'un type de données caractère :

Succès(x)- renvoie le caractère suivant ;

Préd(x)- renvoie le caractère précédent ;

Commande(x)- renvoie la valeur du code du caractère ;

Chr(x)- renvoie la valeur d'un symbole par son code ;

UpCase(x)- convertit les lettres de l'intervalle 'a'..'z' en majuscules.

Pour travailler efficacement avec un type de caractère, je recommande d'utiliser .

Type de chaîne

Une chaîne en Pascal est une séquence de caractères entourée d'apostrophes et est désignée par le mot Chaîne. Le nombre de caractères (longueur de ligne) ne doit pas dépasser 255. Si la longueur de la ligne n'est pas précisée, elle sera automatiquement déterminée à 255 caractères. La forme générale d'une déclaration de variable chaîne ressemble à ceci :

Var<имя_переменной>:chaîne[<длина строки>];

Chaque caractère d'une ligne possède son propre index (numéro). L'index du premier octet est 0, mais il ne stocke pas le premier caractère, mais la longueur de la chaîne entière, ce qui signifie qu'une variable de ce type occupera 1 octet de plus que le nombre de variables qu'elle contient. Le numéro du premier caractère est 1, par exemple, si nous avons la chaîne S='stroka', alors S=s;. Dans l’une des leçons suivantes, le type de données chaîne sera abordé plus en détail.

Type de données énumérées

Un type de données énuméré représente un nombre limité d'identifiants. Ces identifiants sont mis entre parenthèses et séparés par des virgules.

Type Jour=(lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche) ;

La variable A ne peut prendre que les valeurs spécifiées dans la section Type. Vous pouvez également déclarer une variable de type énuméré dans la section Var :

Var A : (lundi, mardi) ;

Les opérations relationnelles sont applicables à ce type, et il est prédéterminé que lundi

Type de données d'intervalle

Lorsqu'il est nécessaire de spécifier une plage de valeurs, dans de telles situations, le type de données intervalle est utilisé. La construction utilisée pour la déclaration est m..n, Où m est la valeur minimale (initiale), et n– maximum (final) ; ici m et n sont des constantes, qui peuvent être de type entier, caractère, énumération ou booléen. Les valeurs de type intervalle peuvent être décrites à la fois dans la section types et dans la section description des variables.

Forme générale:

TAPER<имя_типа> = <мин. значение>..<макс. значение>;