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 Pascal Discussion :

L'opérateur "in" et les ensembles


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut L'opérateur "in" et les ensembles
    bonjour,

    J'ai une chaine de caracteres intitulé "ligne". J'ai un integer "rang".
    Et je veux obtenir le rang de la position du premier chiffre (0..9) de ma chaine de caractere.
    J'ai ecrit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          while not ligne[rang] in [1..9] do
                      rang:=rang+1;
    Delphi me dit que "in" n'est pas applicable a cette operande.
    Comment faire donc pour verifier si un caractere est un chiffre (0 à 9) ou non?

    Merci

    Nico

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Jio,

    Ta chaîne de caractères contient des ... caractères (si, si ), et tu testes sur des valeurs entières.

    Donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while not (ligne[rang] in ['0'..'9']) do
                      rang:=rang+1;
    avec des parenthèses qui facilitent la lecture.

    Attention, si ta chaîne ne contient pas de caractères '0' à '9', tu vas droit vers une violation d'accès, car tu dépasseras la longueur de la chaîne.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci droggo,
    ca marche bcp mieux maintenant!!
    A+

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Enfin comme dit Droggo, fais gaffe avec ce genre de test. Si ta chaine ne contient pas de chiffre ça fera une erreur, donc vaut mieux en tenir compte...

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    Quelle est cette erreur exactement et quels sont les cas où on peut la rencontrer à part celui de nic1319 ?
    Merci.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Lie,
    Citation Envoyé par katrena99 Voir le message
    Bonjour,
    Quelle est cette erreur exactement et quels sont les cas où on peut la rencontrer à part celui de nic1319 ?
    Merci.
    Je suppose que tu veux parler de l'erreur de dépassement de la longueur de la chaîne ?

    On peut la rencontrer chaque fois qu'on lit/écrit un caractère sans avoir vérifié qu'on ne dépasse pas la longueur ou la capacité max de la chaîne.

    En clair, TOUJOURS prévoir une vérification des limites des chaînes de caractères, et c'est bien entendu tout aussi vrai pour les limites des tableaux.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Justement Droggo, si je m'en rappelle bien, la limite d'une chaîne quand ce n'est pas specifié est 255, n'est-ce pas ? Par contre celle d'un tableau, je ne sais pas. Je voudrais pourtant savoir pourquoi on a eu un problème en TP, quand on a déclaré un tableau d'enregistrement. D'ailleurs on a dû faire un "passage par variable" (je ne sais pas si ça s'appelle comme ça, c'est le fait de mettre var avant le nom d'une variable dans l'entête d'une procédure) dans une fonction. Savez-vous pourquoi et connaissez-vous la limite de ce que peut contenir un tableau d'enregistrements ?
    Merci.
    Ciao !
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Gio,

    La taille maximale d'un tableau dépend très fortement du compilateur utilisé.

    Cette taille est évidemment vite limitée quand on utilise les vieux compilateurs, comme Turbo Pascal, par exemple, et beaucoup moins contraignante avec des compilateurs plus récents (qui travaillent avec les systèmes 32 bits au lieu des 16 bits des "vieux").

    Quand on passe un tableau en précisant var (on appelle cela "passer par adresse"), cela a deux effets :

    - Le principal est généralement que la fonction peut alors modifier la variable originale, alors que si var n'est pas précisé, cela est impossible.

    - le deuxième est également précieux, car on évite ainsi de faire une copie des données du tableau pour les passer à la fonction.
    Si les cons volaient, il ferait nuit à midi.

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

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