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 :

Déterminer si un entier est un multiple de 2


Sujet :

Pascal

  1. #1
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut Déterminer si un entier est un multiple de 2
    Voilà, j'ai un problème avec une de mes fonctions sous pascal...
    Cette fonction est censée prendre un entier, le convertir en chaine puis vérifier si le dernier caractère fait partie de la liste suivante:{ 0; 2; 4; 6; 8}.

    En somme, cette fonction me permet de déterminer si l'entier est un multiple de deux ou non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function multipl2(a: integer): integer;
    var b: string;
        c: integer;
      begin
        str(a,b);
        c:=length(b);
        delete(b,0,c);
        writeln(b);
        readln;
        if (b='0') or (b='2') or (b='4') or (b='6') or (b='8')
          then multipl2:=1
          else multipl2:=0;
      end;

    Le problème est que cette fonction me retourne automatiquement 0...et je ne vois pas pourquoi...

    A moins qu'il y ait une fonction de modulo, mais je n'en ai jamais entendu parler...
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  2. #2
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    En somme, cette fonction me permet de déterminer si l'entier est un multiple de deux ou non...
    pourquoi ne pas utiliser la fonction mod? (modulo = reste de la division entière)
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Et oui, il existe le modulo, regarde mod dans l'aide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function multiple(a: integer): boolean;
    begin
      multiple := (a mod 2 = 0);
    end;
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    j'ai les boules là...

    merci
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  5. #5
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Sinon, ton problème est simple et se situe au niveau de la fonction Delete. Tu demandes à supprimer les caractères de la chaîne à partir de l'indice 0 sur une longueur égale à la longueur de la chaîne.
    Déjà, n'oublie pas que les chaînes commencent à l'indice 1.

    Ensuite, n'hésite pas à prendre une feuille de papier pour tester. Prenons la chaîne S = 'ABCDEF'. Sa longueur vaut 6.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Delete(S, 1, Length(S)) = ''
    Hé oui ! Tu supprimes toute la chaîne... Il faut commencer à 1 et ne supprimer que sur une longueur égale à la longueur de la chaîne moins 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Delete(S, 1, Length(S) - 1) = 'F'
    Si on reprend ta fonction (même s'il y a plus simple, cf plus haut), ça pourait donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function IsMultiple2(const n: Integer): Boolean;
    var
      S: string;
    begin
      Str(n, S);
      IsMultiple2 := (S[Length(S)] in ['0', '2', '4', '6', '8']);
    end;
    Comme tu peux le voir, on peut faire simple C'est une bonne occasion d'apprendre à se servir des chaînes de caractères en tant que tableaux de caractères et d'apprendre à utiliser les ensembles, qui sont une notion aussi spécifique qu'intéressante du langage Pascal.

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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

Discussions similaires

  1. Comment tester si une valeur de type entier est nulle ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2009, 00h53
  2. verifier si une valeur entier est null
    Par sepehr_gsfc dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/03/2009, 21h53
  3. Tester si un entier est null
    Par Diablo_22 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 13/10/2008, 17h06
  4. Tester si un nombre est un multiple de 5
    Par sissi25 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/09/2008, 16h44
  5. Savoir si un nombre est le multiple d'un autre
    Par Munkey74 dans le forum Langage
    Réponses: 3
    Dernier message: 08/07/2007, 01h15

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