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

 Delphi Discussion :

Tester le type d'une variable et trouver un ppcm


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Tester le type d'une variable et trouver un ppcm
    Bonjour

    J'essaie (non sans peine) de créer un petit prog tout simple qui trouve le ppcm (plus petit commun multiple) de 2 nombres. Voici la procédure lors du clic sur le boutton qui lance l'analyse (désolé si mon code fait bondir les experts, mais je débute) :

    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
    21
    22
    23
    24
    25
    26
    27
    procedure TForm1.BtnPpcmClick(Sender: TObject);
    Var//variables locales
    Nombre1  : Integer;//stock le nombre de gauche
    Nombre2  : Integer;//stock le nombre de droite
    Compteur : Integer;//stock le multiplicateur
     
    begin//début procédure
    BtnReset.Enabled := True;//active le boutton reset
    Nombre1          := StrToInt (EdtNombre1.Text);//prend la valeur de l'edit gauche
    Nombre2          := StrToInt (EdtNombre2.Text);//prend la valeur de l'edit droit
    Compteur         := 0;//initialise le multiplicateur à 0
     
    If ((Nombre1 > 0) And (Nombre2 > 0))//test des valeurs saisies
    Then Begin
          While (MNombre1.Lines <> MNombre2.Lines) Do//tant que le ppcm n'est pas trouvé
          Begin
          Inc(Compteur);//incrémente le compteur de 1
          MNombre1.Lines.Add(IntToStr(Compteur)+ ' ' + 'x' +' ' + IntToStr(Nombre1) + ' ' +'=' + ' '  +IntToStr(Nombre1 * Compteur));
          MNombre2.Lines.Add(IntToStr(Compteur)+ ' ' + 'x' +' ' + IntToStr(Nombre2) + ' ' +'=' + ' '  +IntToStr(Nombre2 * Compteur));
          Windows.Beep(1500,1)//féquence, durée 
          End;//fin while
         End
    Else Begin
         ShowMessage ('valeurs incorrectes');;
         End;//fin du test de valeurs saisies
     
    end;//fin procédure
    Voici l'allure sans prétentions de mon programme (comme vous le voyez c'est simplissime, mais déjà assez difficil pour moi )


    Je suis confronté à deux soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Nombre1 > 0) And (Nombre2 > 0))
    Ce test vérifie donc si les valeurs saisies dans l'edit de gauche et dans celui de droite sont supérieurs à 0. Je voudrais plutôt tester si les valeurs saisies sont des Integer. J'avais pensé à une astuce du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Nombre1 In[0..9]) And (Nombre2 In[0..9]))
    Mais je ne peut pas dépasser 9 et si je met une lettre ou un chiffre à virgule j'ai un message d'erreur générique et non pas le showmessage que j'ai céer pour informer l'utilisateur que les valeurs saisies sont incorrectes...

    Le 2ème soucis est d'ordre logique :

    Comment puis-je tester lorsque le ppcm est trouvé (lorsque le nombre1 et le nombre2 sont égaux, indépendament du moment où c'est le cas) ?
    Mon test actuel est le suivant mais donne évidamment un while infinit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While (MNombre1.Lines <> MNombre2.Lines) Do
    Cette boucle est infinie car l'égalité n'existe jamais au même moment lorsqu'il s'agit de 2 nombres différents...

    D'avance merci pour votre patience et vos explications "claires et concises"

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Alors, premierement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Nombre1 > 0) And (Nombre2 > 0))
    Ce test vérifie donc si les valeurs saisies dans l'edit de gauche et dans celui de droite sont supérieurs à 0. Je voudrais plutôt tester si les valeurs saisies sont des Integer. J'avais pensé à une astuce du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Nombre1 In[0..9]) And (Nombre2 In[0..9]))
    Mais je ne peut pas dépasser 9 et si je met une lettre ou un chiffre à virgule j'ai un message d'erreur générique et non pas le showmessage que j'ai céer pour informer l'utilisateur que les valeurs saisies sont incorrectes...
    Tes variables Nombre1 et Nombre2 sont des entiers. Tu les a déclarés comme des entiers, donc il ne peuvent qu'être des entiers (ou integer). Le deuxieme code que tu as posté vérifie si la valeur est comprise entre 0 et 9. Ce n'est pas ce que tu veux.

    Si tu tapes une lettre dans ton edit, ta variable Nombre1 ne contiendra RIEN (enfin, pour etre précis, il contiendra une valeur bizarre, peut etre 0, peut etre autre chose ...) ! Ceci est du au fait que si tu rentres une chaine dans ton edit qui n'est pas un entier, la fonction IntToStr ne fonctionnera pas et génerera une erreur.

    Tu veux simplement interdire a l'utilisateur de rentrer des nombes a virgule, ou des lettres, c'est ca ?
    L'utilisateur rentre une chaine de caracteres dans l'Edit. Tu ne peux pour l'instant pas savoir si ce qu'il a rentré est correct. Quand tu fais "Nombre1:=StrToInt(Edit1.Text)", si la chaine de caractere entrée n'est pas un entier, le code génere une erreur. Tu as plusieurs facons de regler le probleme :
    - Soit tu laisse l'utilisateur rentrer n'importe quoi et quand il essaye le PPCM, tu lui dit que ses valeurs sont incorrectes,
    - Soit tu empeche l'utilisateur de taper autre chose que des nombres.

    Premiere solution :
    Tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var : ValeurCorrecte : boolean;
    ...
     
    ValeurCorrecte:=TryStrToInt(Edit1.Text,Valeur1)
    Si ValeurCorrecte = true, alors ca veut dire que l'Edit1 contient bien un entier, et que Valeur1 contient la bonne valeur, si ValeurCorrecte=false, alors c'est que l'utilisateur a rentré une mauvaise valeur.

    Deuxieme solution :
    Tu peux changer de composant : a la place du Edit, tu peux utiliser un SpinEdit qui permet de choisir un entier.
    Autre moyen : dans l'évenement OnKeyPress du Edit, tu met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Key<>#8) and ((Key<'0') or (Key>'9')) then Key:=#0;
    end;
    Ce code regarde la touche enfoncée (sa valeur est Key). Si la touche n'est pas "Effacer" (= #8) et si cette touche n'est pas un chiffre de 0 a 9, alors, on met #0 a la touche (c'est comme si l'utilisateur n'avait rien fait).



    Pour ton while, il ne peux pas fonctionner. Je n'ai pas l'algo du PPCM en tête, mais ce n'est pas comme ca que tu pourras le trouver. Je te poste l'algo des que j'ai une idée.

    Bonne chance !

    Mick605

    Edit : PPCM(Nombre1, Nombre2)=Nombre1*Nombre2/PGCD(Nombre1, Nombre2)
    (Il y a d'autres méthodes)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Merci pour toutes ces précisions je vais pouvoir méditer là dessus

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

Discussions similaires

  1. Tester le type d'une variable de type "Variant"
    Par nono27200 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/08/2007, 22h26
  2. Tester le type d'une variable
    Par jmbonnaz dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/06/2007, 18h37
  3. tester le type d'une variable
    Par MayOL69bg dans le forum Langage
    Réponses: 5
    Dernier message: 16/04/2007, 15h31
  4. Tester le type d'une variable
    Par Débéa dans le forum Général Python
    Réponses: 2
    Dernier message: 03/08/2006, 17h45
  5. Tester le type d'une variable
    Par mzt.insat dans le forum Linux
    Réponses: 5
    Dernier message: 30/05/2006, 19h37

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