IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

déclaration de variable type entier


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut déclaration de variable type entier
    Bonjour
    Pour déclarer une variable de type byte on fait
    Si on veut déclarer un byte dont les valeurs seraient bornées, par exemple de 0 à 15, on peut faire
    Y a t-il un inconvénient à faire ça ?
    Quel type de variable est déclaré dans cet exemple ?
    Choisir, c'est renoncer...

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonsoir.

    Wahou je ne savais pas que ce genre de syntaxe existait, je me couches moins bête ce soir.

    De ce que j'ai pu tester, les deux chiffres définissent les valeurs entières minimum et maximum que peut prendre la variable. Quand à la place qu'occupe en réalité la variable en mémoire elle dépend de la déclaration. Ici elle occupe un octet mais si on définit par exemple 0..365 alors elle prend deux octets (et probablement ainsi de suite pour qu'il n'y ait pas d'erreur d'étendue).
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    pour faire simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TForm1.FormCreate(Sender: TObject);
    type
      t = 0..15;
    var
      b : t;
      i : Integer;
    begin
    {$o-} // sinon ne produit pas de code :)
      ShowMessage(IntToStr(SizeOf(b))); // 1 octet
    //  b := 16; // ne compile pas
      i := 16;
    {$r-}
      b := i;  // compile et s'execute sans pb
    {$r+}
      b := i;  // compile et provoque un ERangeError
    end;
    b est ici un Byte
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Wahou je ne savais pas que ce genre de syntaxe existait, je me couches moins bête ce soir.
    C'est plus que courant en Ada, c'est moins souvent utilisé en Pascal / Delphi, mais ça reste redoutablement efficace (avec les vérifications d'étendue à l'exécution, bien sûr) pour vérifier des contraintes numériques un peu spéciales (vraiment au hasard, les dates...).

    Attention par contre en les utilisant : en faisant ceci, comme l'a montré Paul, on peut arriver à de gros problèmes d'affectation et il n'y a pas de cast bourrin pouvant résoudre le problème... Ce qui veut dire notamment qu'utiliser un tel type pour une propriété peut conduire à des erreurs d'exécution impossibles à résoudre sans rajouter une fonction de conversion / adaptation !

    Le type "réel" utilisé sera toujours le plus petit type scalaire capable de contenir l'intégralité du domaine défini. Ce sera en plus un type non signé si l'intervalle n'inclus pas de valeur négative.

    Par exemple, un type "0..257" sera forcément stocké dans un Word (deux octets, non signé), tandis qu'un type "-100..100" sera dans un Shortint (un octet, signé).
    Je n'ai pas essayé, mais normalement, un type "1000..1010", bien que pouvant être codé sur un seul octet, sera malgré tout codé sur un Word pour des raisons de performances au vu de ses bornes.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Pour compléter ce qui a été dit sur une note plus théorique, les types intervalle sont en fait des types entier tout à fait classiques. Ou plus exactement, les types entier classique sont des types intervalle.

    Ainsi, Byte pourrait être défini comme :
    Citation Envoyé par Mac LAK Voir le message
    Je n'ai pas essayé, mais normalement, un type "1000..1010", bien que pouvant être codé sur un seul octet, sera malgré tout codé sur un Word pour des raisons de performances au vu de ses bornes.
    Je confirme.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Merci pour ces éclaircissements
    Je coche [résolu]
    Choisir, c'est renoncer...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Valeur Maximum d'une variable de type ENTIER
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/11/2013, 03h17
  2. [XL-2010] Problème de déclaration de variables types
    Par tompom3108 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/01/2012, 13h29
  3. Variable Chaîne pour variable de type Entier long
    Par ggvert dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/12/2007, 18h32
  4. fonction qui indique qu'une variable est d'un type entier
    Par piotrr dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/06/2007, 16h05
  5. Calculer la longueur d'une variable de type entier
    Par juliendeparis dans le forum C
    Réponses: 13
    Dernier message: 08/06/2006, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo