Data types and records · Types de données et enregistrements
| English | Français |
|---|---|
| data type/ˈdeɪtə taɪp/ | type de donnée |
| field/fiːld/ | champ |
| record/ˈrekɔːd/ | enregistrement |
| record structure/ˈrekɔːd ˈstrʌktʃə/ | structure d'enregistrement |
| dot notation/dɒt nəʊˈteɪʃn/ | notation pointée |
The most expensive data-type decision in history
- In the 1960s memory cost more than programmers. To save two characters per date, years were stored as two digits:
99meant 1999. - Nobody expected the code to outlive the century. It did, and on 1 January 2000 every one of those fields would read as 1900. Governments and companies spent an estimated $300 billion checking and fixing it.
- The bug was not a typo. It was a data type 数据类型 chosen for the memory of 1965 and kept for the dates of 2000.
- This lesson is how to pick the type that fits the data, and how to bundle values that belong together into a record 记录.
La décision de type de donnée la plus chère de l'histoire
- Dans les années 1960, la mémoire coûtait plus cher que les programmeurs. Pour économiser deux caractères par date, les années étaient stockées sur deux chiffres :
99signifiait 1999. - Personne ne s'attendait à ce que le code survive au siècle. Il a survécu, et le 1er janvier 2000, chacun de ces champs afficherait 1900. Les gouvernements et les entreprises ont dépensé environ 300 milliards de dollars pour vérifier et corriger ce problème.
- Ce bug n'était pas une faute de frappe. C'était un type de données 数据类型 choisi pour la mémoire en 1965 et conservé pour les dates de 2000.
- Cette leçon explique comment choisir le type adapté aux données, et comment regrouper des valeurs liées ensemble dans un enregistrement 记录.
The six basic types
| Type | Holds | Use it for |
|---|---|---|
INTEGER |
a whole number, 42, -7 |
counts, indexes, IDs |
REAL |
a number with a fractional part, 3.14 |
measurements, averages |
CHAR |
a single character, 'A' |
a grade letter, a menu choice |
STRING |
characters in quotes, "Hello" |
text |
BOOLEAN |
TRUE or FALSE |
flags |
DATE |
a calendar date | dates of birth, deadlines |
Pseudocode also names two structured types: ARRAY and FILE
Les six types de base
| Type | Contient | À utiliser pour |
|---|---|---|
INTEGER |
un nombre entier, 42, -7 |
comptes, indices, identifiants |
REAL |
un nombre avec partie décimale, 3.14 |
mesures, moyennes |
CHAR |
un seul caractère, 'A' |
une lettre de note, un choix de menu |
STRING |
des caractères entre guillemets, "Hello" |
du texte |
BOOLEAN |
TRUE ou FALSE |
des drapeaux (flags) |
DATE |
une date du calendrier | dates de naissance, échéances |

Le pseudocode nomme également deux types structurés : ARRAY et FILE
Which data type best stores a yes/no flag like "in stock"? · Quel type de données convient le mieux pour stocker un indicateur oui/non comme « en stock » ?
A flag has two states, so BOOLEAN (TRUE/FALSE) is the precise choice — not the strings "yes"/"no". · Un indicateur a deux états, donc BOOLEAN (VRAI/FAUX) est le choix précis — pas les chaînes « yes »/« no ».
A real (floating-point) type should be used to store a measurement such as a temperature. · Un type réel (virgule flottante) doit être utilisé pour stocker une mesure telle qu'une température.
Whole counts use integers; measurements use reals. · Les comptes entiers utilisent des entiers ; les mesures utilisent des réels.
Choose by how the value is used
- A type is decided by what the program will do with the value, not by how it looks.
- The number of students is
INTEGER; the class's average mark isREAL, because it has a fractional part; whether a student has paid isBOOLEAN. - An array index is always
INTEGER. A single grade letter isCHAR; an email address isSTRING. - A phone number is a
STRING: it starts with0, and nobody ever adds two phone numbers.
Choisir selon l'usage de la valeur
- Un type est défini par ce que le programme va faire avec la valeur, pas par son apparence.
- Le nombre d'étudiants est
INTEGER; la moyenne de la classe estREAL, car elle a une partie décimale ; si un étudiant a payé estBOOLEAN. - L'index d'un tableau est toujours
INTEGER. Une seule lettre de note estCHAR; une adresse e-mail estSTRING. - Un numéro de téléphone est un
STRING: il commence par0, et personne ne fait jamais l'addition de deux numéros de téléphone.
Match each value to the best data type for it. · Reliez chaque valeur au meilleur type de données pour elle.
Pick the precise type: BOOLEAN for a flag, REAL for fractional values, INTEGER for whole counts, STRING for text. · Choisissez le type précis : BOOLEAN pour un indicateur, RÉEL pour les valeurs fractionnaires, ENTIER pour les comptes entiers, CHAÎNE pour le texte.
Which data type should store a phone number such as 07700 900123? · Quel type de données devrait stocker un numéro de téléphone tel que 07700 900123 ?
An INTEGER would drop the leading zero, and no program adds or multiplies phone numbers. The digits are text. · Un ENTIER supprimerait le zéro initial, et aucun programme n'ajoute ou ne multiplie des numéros de téléphone. Les chiffres sont du texte.
Worked example: give the appropriate data type
| Data | Type | Because |
|---|---|---|
| number of items in stock | INTEGER |
a whole count |
| price of an item | REAL |
has pence, a fractional part |
| whether the item is on offer | BOOLEAN |
only two states |
the item's category code, 'F' |
CHAR |
exactly one character |
| the supplier's name | STRING |
text |
| the date the item was delivered | DATE |
a calendar date |
- Give the pseudocode name, not the language you happen to know:
BOOLEAN, notbool;REAL, notfloat.
Exemple résolu : donner le type de données approprié
| Données | Type | Pourquoi |
|---|---|---|
| nombre d'articles en stock | INTEGER |
un comptage entier |
| prix d'un article | REAL |
contient des pence, une partie décimale |
| si l'article est en promotion | BOOLEAN |
seulement deux états |
le code catégorie de l'article, 'F' |
CHAR |
exactement un caractère |
| le nom du fournisseur | STRING |
du texte |
| la date de livraison de l'article | DATE |
une date du calendrier |
- Donnez le nom du pseudocode, pas le langage que vous connaissez :
BOOLEAN, pasbool;REAL, pasfloat.
The data type of an array index is always ____. · Le type de données d'un indice de tableau est toujours ____.
An index counts positions, so it is a whole number. Names[2.5] has no meaning. · Un indice compte des positions, c'est donc un nombre entier. Names[2.5] n'a aucun sens.
Records
- A record (a record structure 记录结构) holds a set of data items of different data types under one identifier. Each item is a field 字段.
- Use one when several values always describe one thing: a stock item, a customer, a student.
One identifier, four fields, four types
Enregistrements
- Un enregistrement (une structure d'enregistrement 记录结构) regroupe un ensemble de données de types différents sous un même identifiant. Chaque donnée est un champ 字段.
- Utilisez-en un lorsque plusieurs valeurs décrivent toujours une même chose : un article en stock, un client, un étudiant.
TYPE TStockItem
DECLARE ItemID : INTEGER
DECLARE Category : STRING
DECLARE ItemCost : REAL
DECLARE InStock : BOOLEAN
ENDTYPE

Un identifiant, quatre champs, quatre types
A record is used to: · Un enregistrement est utilisé pour :
A record bundles fields of (possibly) different types that describe one thing. An array holds many values of the same type. · Un enregistrement regroupe des champs (éventuellement) de types différents qui décrivent une entité. Un tableau contient de nombreuses valeurs du même type.
Declaring and using a record
TYPE … ENDTYPEdefines the type. Then declare variables of it, singly or as an array:
- Reach a field with dot notation 点号表示法, to write and to read:
Déclaration et utilisation d'un enregistrement
TYPE … ENDTYPEdéfinit le type. Ensuite, déclarez des variables de ce type, individuellement ou comme un tableau :
DECLARE Item1 : TStockItem
DECLARE Items : ARRAY[1:100] OF TStockItem
- Accédez à un champ avec la notation pointée 点号表示法, pour écrire et lire :
Item1.Category ← "Fruit"
OUTPUT Item1.Category, " costs ", Item1.ItemCost
Items[7].InStock ← FALSE
A record groups fields under one name · Un enregistrement regroupe des champs sous un nom unique
A record bundles related fields together. Each field is a named label you reach with dot notation — Item1.Category — not by a numeric index. · Un enregistrement regroupe des champs liés ensemble. Chaque champ est une étiquette nommée à laquelle vous accédez avec la notation point — Item1.Category — et non par un index numérique.
To set the Category field of a record variable Item1, you write: · Pour définir le champ Category de la variable d'enregistrement Item1, vous écrivez :
Dot notation record.field reaches a field of a record. · La notation point record.field accède à un champ d'un enregistrement.
Worked example: the club membership file
- A club stores, for each student, a student ID (a string), a name, a date of birth and up to three club numbers. Declare the record type, an array for 3000 students, and store a name in the first element.
- The marks:
TYPEwith the identifier andENDTYPE; every field declared with a suitable type; the array with its bounds andOF Student; the field reached with the index and the dot.
Exemple résolu : le fichier d'adhésion au club
- Un club stocke, pour chaque étudiant, un ID étudiant (une chaîne), un nom, une date de naissance et jusqu'à trois numéros de club. Déclarez le type d'enregistrement, un tableau pour 3000 étudiants, et stockez un nom dans le premier élément.
TYPE Student
DECLARE StudentID : STRING
DECLARE Name : STRING
DECLARE DateOfBirth : DATE
DECLARE Club : ARRAY[1:3] OF INTEGER
ENDTYPE
DECLARE Membership : ARRAY[1:3000] OF Student
Membership[1].Name ← "Li Wei"
- Les notes :
TYPEavec l'identifiant etENDTYPE; chaque champ déclaré avec un type approprié ; le tableau avec ses bornes etOF Student; le champ accédé avec l'index et le point.
Put the lines of the club membership declaration in order. · Remettez les lignes de la déclaration d'adhésion au club dans l'ordre.
Define the type, close it, declare a variable or array of it, then use index and dot to reach a field. · Définissez le type, fermez-le, déclarez une variable ou un tableau de ce type, puis utilisez l'index et le point pour accéder à un champ.
Worked example: state the error in the declaration
- Three errors, each a mark: the type has no
ENDTYPE; the fieldPricehas no data type; andTotalwill holdSeats * Price, an arithmetic result, so it cannot be aSTRING. - The examiner's usual three: a missing
ENDTYPE, a field without a type, a field of the wrong type for what is done with it.
Exemple résolu : identifier l'erreur dans la déclaration
TYPE TBooking
DECLARE Seats : INTEGER
DECLARE Price
DECLARE Total : STRING
- Trois erreurs, chacune vaut une marque : le type n'a pas de
ENDTYPE; le champPricen'a pas de type de données ; etTotalcontiendraSeats * Price, un résultat arithmétique, donc ce ne peut pas être unSTRING. - Les trois erreurs habituelles de l'examinateur : un
ENDTYPEmanquant, un champ sans type, un champ de mauvais type pour l'usage qui en est fait.
Which of these are errors in a record declaration? Select all · tout that apply. · Lesquelles de ces options sont des erreurs dans une déclaration d'enregistrement ? Sélectionnez toutes celles qui s'appliquent.
Different types in one record is the whole point of a record. The other three are the errors examiners plant. · Avoir des types différents dans un enregistrement est tout l'intérêt d'un enregistrement. Les trois autres sont les erreurs que les examinateurs glissent.
Record, array, or plain variables
- Values that always belong together and have different types: a record.
- Many values of the same type under one name: an array (next lesson).
- A table of rows where each row has mixed fields: an array of records,
Members[i].Name. - Unrelated values: separate variables. Bundling them gains nothing.
Enregistrement, tableau ou variables simples
- Des valeurs qui appartiennent toujours ensemble et ont des types différents : un enregistrement.
- De nombreuses valeurs du même type sous un même nom : un tableau (leçon suivante).
- Un tableau de lignes où chaque ligne a des champs mixtes : un tableau d'enregistrements,
Members[i].Name. - Des valeurs non liées : des variables séparées. Les grouper n'apporte rien.
An array of records lets one identifier hold a table in which every row has fields of different types. · Un tableau d'enregistrements permet à un identificateur unique de contenir un tableau dont chaque ligne a des champs de types différents.
Members[i] is one row (a record); Members[i].Name is one cell. The array gives the rows, the record gives the mixed columns. · Members[i] est une ligne (un enregistrement) ; Members[i].Name est une seule cellule. Le tableau fournit les lignes, l'enregistrement fournit les colonnes mixtes.
Marks that slip away
- A yes/no value is a
BOOLEAN, not the strings"yes"and"no". - A phone number or an ID that starts with
0is aSTRING, never anINTEGER. - Money in a
REALpicks up rounding errors; many systems store whole pennies as anINTEGER. - Every field is a
DECLAREline with a type, and the type ends withENDTYPE. The index goes on the array, the dot on the field:Members[3].Name.
Pièges qui font perdre des points
- Une valeur oui/non est un
BOOLEAN, pas les chaînes"yes"et"no". - Un numéro de téléphone ou un ID qui commence par
0est unSTRING, jamais unINTEGER. - L'argent dans un
REALaccumule des erreurs d'arrondi ; beaucoup de systèmes stockent des pences entières comme unINTEGER. - Chaque champ est une ligne
DECLAREavec un type, et le type se termine parENDTYPE. L'index va sur le tableau, le point sur le champ :Members[3].Name.
You've got it
- six basic types,
INTEGER,REAL,CHAR,STRING,BOOLEAN,DATE, chosen by what the program does with the value - a record holds fields of different types under one identifier:
TYPE … DECLARE field : type … ENDTYPE - declare variables or arrays of the type, and reach a field with dot notation:
Membership[1].Name ← "Li Wei" - the errors the examiner plants: no
ENDTYPE, a field with no type, a field typed wrongly for its use
Vous avez compris
- six types de base,
INTEGER,REAL,CHAR,STRING,BOOLEAN,DATE, choisis selon ce que le programme fait avec la valeur - un enregistrement contient des champs de types différents sous un même identifiant :
TYPE … DECLARE field : type … ENDTYPE - déclarer des variables ou des tableaux de ce type, et accéder à un champ avec la notation pointée :
Membership[1].Name ← "Li Wei" - les erreurs que l'examinateur plante : pas de
ENDTYPE, un champ sans type, un champ mal typé pour son usage