Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

POO à gogo - Apprendre la notion d'enregistrements dans Free Pascal et Lazarus partie 1 sur 2
Un tutoriel de Gilles Vasseur

Le , par gvasseur58

0PARTAGES

9  0 
Les enregistrements simples et le compactage



À l'aide de ce tutoriel, vous devriez être capable d'utiliser au mieux les enregistrements dans vos programmes. Les novices apprendront à :

  • définir un type enregistrement simple avec ou sans variantes ;
  • affecter des valeurs à des champs et les retrouver à la demande ;
  • tenir compte des limites des enregistrements ;
  • comprendre les mécanismes régissant le compactage afin de l'utiliser à bon escient.

Ceux qui manipulent déjà bien ces notions trouveront l'occasion de réviser leurs connaissances et de critiquer si nécessaire la présentation qui en est faite.
Dans un tutoriel à suivre prochainement, il sera temps d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet.

http://gilles-vasseur.developpez.com...egistrements1/

Que pensez-vous de ce tutoriel ?
Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de thewolf
Membre habitué https://www.developpez.com
Le 13/04/2017 à 19:18
Bonjour. Merci pour ce tutoriel très intéressant.

Cependant, je ne comprends pas très bien l'exemple de code ci-dessous. Comment se fait le lien entre point1 et Point2 d'une part et MyRect d'autre part ?

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  TPoint = record
    X: LongInt;
    Y: LongInt;
  end;
  TRect = record
   case Integer of
     0: (Left,Top,Right,Bottom: Longint);
     1: (TopLeft,BottomRight: TPoint);
  end;

var
  Point1, Point2: TPoint;
  MyRect: TRect;
[…]

  Point1.X := 15;
  Point1.Y := 32;
  Point2.X := 125;
  Point2.Y := 232;
  Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
3  0 
Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 28/03/2017 à 19:48
Citation Envoyé par gvasseur58 Voir le message
Que pensez-vous de ce tutoriel ?
Rhôôô, magnifique !

Juste un mot :
Cet ensemble de connaissances va vous permettre à présent d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet : ce sont des outils puissants, pour la plupart rencontrés à l'occasion de la manipulation d'objets, qui s'offrent ainsi aux programmeurs.
Je n'ai pas trouvé où cliquer pour passer aux enregistrements étendus,
Ben vi, tu nous mets l'eau à la bouche, là...

Citation Envoyé par gvasseur58 Voir le message
Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
Comme Yves : toujours bon de relire certains points même basiques, on en apprend tous les jours (les "packed" avec les petits champs plutôt à la fin, c'est noté !)

Un dernier mot : précise "record" entre parenthèses après "enregistrements" dans le titre, il m'a fallu un certain temps pour capter qu'on n'allait pas parler magnétophones et multimédia, et oui...
2  0 
Avatar de gvasseur58
Responsable Lazarus & Pascal https://www.developpez.com
Le 28/03/2017 à 20:20
Citation Envoyé par Jipété Voir le message

Ben vi, tu nous mets l'eau à la bouche, là...
Je ne suis pas bon commerçant, mais j'apprends à faire languir le chaland . Il faudra patienter un tout petit peu encore...

Citation Envoyé par Jipété Voir le message

Un dernier mot : précise "record" entre parenthèses après "enregistrements" dans le titre, il m'a fallu un certain temps pour capter qu'on n'allait pas parler magnétophones et multimédia, et oui...
C'est fait .
2  0 
Avatar de Roland Chastain
Rédacteur/Modérateur https://www.developpez.com
Le 29/03/2017 à 8:46
Bonjour !

Excellent article, qui dit tout (me semble-t-il) sur le sujet.

Il y a une petite correction à faire dans l'exemple suivant :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uses sysutils;
type
  TPoint = record
    X: LongInt;
    Y: LongInt;
  end;
  TRect = record
   case Integer of
     0: (Left,Top,Right,Bottom: Longint);
     1: (TopLeft,BottomRight: TPoint);
  end;

var
  Point1, Point2: TPoint;
  MyRect: TRect;
begin

  Point1.X := 15;
  Point1.Y := 32;
  Point2.X := 125;
  Point2.Y := 232;
  WriteLn(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
end.
Dans l'article il manque MyRect.. Désolé, j'ai loupé la discussion de relecture technique.

P.-S. Pour les enregistrements avec constructeur, je n'en vois pas l'intérêt mais je suis prêt à changer d'avis en lisant la deuxième partie de l'article.
2  0 
Avatar de Jon Shannow
Membre extrêmement actif https://www.developpez.com
Le 29/03/2017 à 10:57
Que pensez-vous de ce tutoriel ? Excellent, comme tous les autres...
Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ? Y a jamais de mal à revoir les fondamentaux... Et puis, on apprend toujours, même sur un truc qu'on a utilisé et ré-utilisé pendant des décennies.

Encore merci pour ces excellents tutos... (par contre je passe de 4 à 6 ? Ou est le 5... J'en ai loupé un ? )
2  0 
Avatar de gvasseur58
Responsable Lazarus & Pascal https://www.developpez.com
Le 14/04/2017 à 17:08
Citation Envoyé par thewolf Voir le message
Bonjour. Merci pour ce tutoriel très intéressant.

Cependant, je ne comprends pas très bien l'exemple de code ci-dessous. Comment se fait le lien entre point1 et Point2 d'une part et MyRect d'autre part ?
Bonjour et merci pour les remarques.
Le lien entre les points Point1 et Point2 est très simple : il n'existe pas. Il s'agit en effet d'une erreur de ma part qui ai laissé un ancien morceau de code .
Il fallait lire :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type
  TPoint = record
    X: LongInt;
    Y: LongInt;
  end;

  TRect = record
   case Integer of
     0: (Left,Top,Right,Bottom: Longint);
     1: (TopLeft,BottomRight: TPoint);
  end;

var
  MyRect: TRect;
[…]

  MyRect.Top := 15;
  MyRect.Left := 32;
  MyRect.Bottom := 125;
  MyRect.Right := 232;
 
  Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
Cordialement,

Gilles
2  0 
Avatar de tourlourou
Modérateur https://www.developpez.com
Le 28/03/2017 à 22:18
A priori, la taille d'un Double fait toujours huit octets avec FPC.
Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
1  0 
Avatar de gvasseur58
Responsable Lazarus & Pascal https://www.developpez.com
Le 28/03/2017 à 22:29
Citation Envoyé par tourlourou Voir le message
Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
Non, non, c'est moi qui ai le cerveau en marmelade . Je constate l'alignement sur un multiple de 8, mais je n'ai pas la réponse technique du pourquoi de ce choix, y compris en 32 bits : est-ce une recherche d'homogénéité du compilateur ? A vérifier...
1  0 
Avatar de Jon Shannow
Membre extrêmement actif https://www.developpez.com
Le 29/03/2017 à 14:46
J'avais loupé celui des jeux de dés...
1  0 
Avatar de droggo
Expert confirmé https://www.developpez.com
Le 29/03/2017 à 16:54
Bonjour,

Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POO
1  0