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

Pascal Discussion :

Contrôle qualitatif d'une saisie


Sujet :

Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Points : 35
    Points
    35
    Par défaut Contrôle qualitatif d'une saisie
    Bonsoir à tous !

    J'aimerais que mes programmes contrôlent les saisies. Pour moi, il y a deux types de contrôles de saisie : le contrôle quantitatif (on vérifie que la valeur saisie appartient à un intervalle fixé par le programme sinon la saisie est rejetée/refusée) et le contrôle qualitatif (on vérifie que la valeur saisie respecte le type de la variable qui doit la recevoir).

    C'est le deuxième type de contrôle qui m'intéresse. J'ai établi un tableau mettant en évidence la réponse du programme relativement à deux paramètres : le type de la variable et le type de la valeur saisie par l'utilisateur.

    Mes questions se devinent aisément. En effet :

    1. comment obliger l'utilisateur à saisir un real ou un integer au lieu d'un string ?

    2. comment obliger l'utilisateur à saisir un integer au lieu d'un real ou d'un string ?

    3. comment obliger l'utilisateur à saisir effectivement une chaîne de caractères (string) qui n'est pas un nombre ? [cette question a son importance car toute suite de caractères est acceptée comme chaîne y compris les nombres].

    Je souhaite que nous allions pas-à-pas, c'est-à-dire question par question. Nous pourrions commencer par la première.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par iks37 Voir le message
    1. comment obliger l'utilisateur à saisir un real ou un integer au lieu d'un string ?
    C'est un problème classique : vous trouverez des réponses un peu partout.

    Je suppose que nous parlons d'une application de type console, qui utilise la procedure ReadLn. La solution est de déclarer systématiquement une variable de type string, qu'on essaie ensuite de convertir vers le type attendu. Pour ce faire, on dispose de la procedure Val.

    Si la conversion échoue, on demande à l'utilisateur de recommencer.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Points : 35
    Points
    35
    Par défaut String vs Integer/Real
    Bonsoir,

    Je pense avoir compris. Je propose deux petits programmes exemples, permettant pour l'un de refuser la saisie d'un String à la place d'un Integer, et pour l'autre de refuser la saisie d'un String à la place d'un Real.

    Les deux cas mettent en oeuvre la Procédure Val(s,v,c).
    Qu'en pensez-vous ?
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Voilà, c'est ça.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Points : 35
    Points
    35
    Par défaut Real/String vs Integer
    Bonsoir,

    Pourrions-nous passer à la deuxième question ?

    2. comment obliger l'utilisateur à saisir un integer au lieu d'un real ou d'un string ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Le problème est déjà résolu.

    Dans tous les cas, l'utilisateur saisit une chaîne, et ensuite la procédure Val permet de vérifier la validité de la chaîne. Le code d'erreur renvoyé par la procédure dépend du type du second argument. Si l'erreur vaut zéro, c'est que la chaîne peut être effectivement convertie vers le type spécifié.

    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
    18
    19
    20
    program UsageVal;
     
    var
      s: string;
      i: integer;
      r: real;
      e: integer;
     
    begin
      s := '1.5';
     
      Val(s, i, e);
      WriteLn('Conversion r'#130'ussie : ', e = 0); // FALSE
     
      Val(s, r, e);
      WriteLn('Conversion r'#130'ussie : ', e = 0); // TRUE
     
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Points : 35
    Points
    35
    Par défaut
    Merci pour ton aide.

    Je voudrais que nous passions au troisième point :

    3. comment obliger l'utilisateur à saisir effectivement une chaîne de caractères (string) qui n'est pas un nombre ? [cette question a son importance car toute suite de caractères est acceptée comme chaîne y compris les nombres].

  8. #8
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Bonsoir,

    Tu devrais lire des cours sur les chaines de caractere en pascal, tu y decouvrirais des methodes pour parcourir ces chaines et donc comment savoir si ta chaine contient que des nombre, pas de nombre, un peu de nombre ect...
    Pour indince, une "String" est un tableau de caractere et donc s'itere de la meme facon qu'un tableau à l'exception pres que les premier octet est la longueure de ta chaine.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 69
    Points : 35
    Points
    35
    Par défaut Str (n,s) ?
    Bonjour,

    Je suis en train de tester la procédure Str (n,s).

  10. #10
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    3. comment obliger l'utilisateur à saisir effectivement une chaîne de caractères (string) qui n'est pas un nombre ? [cette question a son importance car toute suite de caractères est acceptée comme chaîne y compris les nombres].
    Bah avec la même méthode que précedement, tu essaies de convertir ta chaine en nombre, si il n'y a pas d'erreur, c'est que ta chaine est un nombre (tu ne valides pas). Si il y a une erreur, c'est que ta chaine est valide. (oui oui, je trouve ça tordu comme raisonnement )

  11. #11
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    Et il y a la dernière méthode, celle qui permet de rejeter en temps réel les valeurs erronées :
    Tu testes, pour chaque caractère saisi, qu'il entre dans un ensemble de caractères défini à l'avance.
    Exemples : ['a'..'z','A'..'Z'], ['0'..'9'], &c.
    Ainsi, tu peux rejeter le caractère fautif, l'utilisateur sait où il a fauté & il n'a pas besoin de recommencer toute la saisie (c'est quand même mieux s'il s'agit d'une longue référence).
    Inutile de dire que c'est ma méthode préférée.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

Discussions similaires

  1. Faire des contrôles lors d'une saisie
    Par Roland2007 dans le forum C
    Réponses: 6
    Dernier message: 07/05/2008, 17h10
  2. Controler une saisie
    Par philippef dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/08/2005, 10h36
  3. [JTable] Valider une saisie
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 25/03/2005, 16h29
  4. [BDE] Echec de contrôle lors d'une insertion
    Par rbag dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/11/2004, 09h57
  5. [VB.NET] Contrôle personnalisé dans une dll personnalisée
    Par c3b12 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/10/2004, 07h56

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