Tableaux à énumération vs ensembles

Types ordinaux comme indices de tableau

Tableaux à longueur constante Constant-length arrays

Les énumérations et les types ordinaux à plage personnalisée peuvent servir d’indices de tableau, offrant une flexibilité pour définir librement l’étendue des index.

Exemple : énumérations en tant qu’indices de tableau

type
  // 1. Indice numérique simple 0~9
  TArrayOfTenStrings = array [0..9] of string;

  // 2. Indice commençant à 1, plage 1~10
  TArrayOfTenStrings1Based = array [1..10] of string;

  // 3. Type ordinal personnalisé utilisé comme indice
  TMyNumber = 0..9;
  TAlsoArrayOfTenStrings = array [TMyNumber] of string;

  // 4. Énumération directement comme indice de tableau (usage le plus courant)
  TAnimalKind = (akDuck, akCat, akDog);
  TAnimalNames = array [TAnimalKind] of string;
var
  AnimalNameArr: TAnimalNames;
begin
  AnimalNameArr[akDuck] := 'Canard';
  AnimalNameArr[akCat] := 'Chat';
  AnimalNameArr[akDog] := 'Chien';
end;
Langage du code : PHP (php)

IntToStr est une fonction de conversion standard définie dans l’unité SysUtils. Rôle : convertir un entier en chaîne de caractères.

Programme complet d’exemple

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;

uses
  SysUtils; // Unité obligatoire pour utiliser IntToStr

type
  // 1. Indice numérique simple 0~9
  TArrayOfTenStrings = array [0..9] of string;

  // 2. Indice commençant à 1, plage 1~10
  TArrayOfTenStrings1Based = array [1..10] of string;

  // 3. Type ordinal personnalisé utilisé comme indice
  TMyNumber = 0..9;
  TAlsoArrayOfTenStrings = array [TMyNumber] of string;

  // 4. Énumération directement comme indice de tableau (usage le plus courant)
  TAnimalKind = (akDuck, akCat, akDog);
  TAnimalNames = array [TAnimalKind] of string;

var

  // Tableau avec indices 0 à 9
  Arr0To9: TArrayOfTenStrings;

  // Tableau à indices débutant à 1, plage 1 à 10
  Arr1To10: TArrayOfTenStrings1Based;

  // Tableau à indices de type ordinal personnalisé
  ArrCustomIdx: TAlsoArrayOfTenStrings;

  // Variable de boucle de type TMyNumber
  I: TMyNumber;

  // Variable de tableau indexé par énumération
  AnimalNameArr: TAnimalNames;

begin

  // 1. Utilisation du tableau à indices 0~9
  Arr0To9[0] := 'Élément n°0'; // Affectation
  Arr0To9[5] := 'Élément central';
  Writeln(Arr0To9[0]); // Lecture de la valeur

  // 2. Tableau à indices commençant à 1 ; l’indice 0 est interdit
  Arr1To10[1] := 'Premier élément';
  Arr1To10[10] := 'Dernier élément';
  Writeln(Arr1To10[10]);

  // 3. Parcours par boucle avec type ordinal personnalisé TMyNumber
  for I := Low(TMyNumber) to High(TMyNumber) do
  begin
    ArrCustomIdx[I] := 'Numéro ' + IntToStr(I);
  end;

  Writeln(ArrCustomIdx[3]);

  // Affectation de valeurs au tableau énuméré via des valeurs d’énumération en indices
  AnimalNameArr[akDuck] := 'Canard';
  AnimalNameArr[akCat] := 'Chat';
  AnimalNameArr[akDog] := 'Chien';
end.Langage du code : PHP (php)

Deux avertissements lors de la compilation

D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
mydemo.dpr(55,35) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
mydemo.dpr(55,33) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
Linking mydemo.exe
63 lines compiled, 0.2 sec, 68464 bytes code, 4276 bytes data
2 warning(s) issued

D:\fpcdemo>mydemo
Élément n°0
Dernier élément
Numéro 3Langage du code : CSS (css)

Types ensembles

Sets, implémentés en interne sous forme de champs de bits bit-fields

Les ensembles se définissent à partir d’énumérations ou de types ordinaux. Ils stockent un groupe de valeurs d’énumération et prennent en charge les opérations ensemblistes, l’ajout et la suppression d’éléments.

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;

type
  TAnimalKind = (akDuck, akCat, akDog);
  // Définition d’un type ensemble basé sur une énumération
  TAnimals = set of TAnimalKind;
var
  A: TAnimals;
begin
  A := [];                     // Littéral d’ensemble vide
  A := [akDuck, akCat];        // Affectation directe de plusieurs éléments
  A := A + [akDog];            // Union d’ensembles (ajout d’un élément)
  A := A * [akCat, akDog];     // Intersection d’ensembles (conserver les éléments communs)

  Include(A, akDuck);          // Procédure native : ajouter un seul élément
  Exclude(A, akDuck);          // Procédure native : supprimer un seul élément
end.
Langage du code : PHP (php)

Opérateurs et procédures courants sur les ensembles

  1. [] : littéral d’ensemble vide
  2. + : union, fusionner deux groupes d’éléments
  3. * : intersection, conserver les éléments présents dans les deux ensembles
  4. Include(Ensemble, Élément) : ajouter un élément sans risque
  5. Exclude(Ensemble, Élément) : supprimer un élément sans risque

Previous:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *