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 :

Concaténation de deux nombres entiers


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 10
    Par défaut Concaténation de deux nombres entiers
    Bonsoir à tous,

    Je voulais savoir s'il était possible de faire la chose suivante :

    Je dispose d'un tableau tab qui contient 2 entiers (soit tab[0] := 1 et tab[1] := 2 par exemple).

    Je voulais savoir s'il était possible de concaténer ces deux cases pour former un integer (soit ici 12).

    Merci pour votre aide.

    Problème résolu à l'instant !

    Pour ceux qui sont intéressés : := (tab[0] * 10) + tab[1];

  2. #2
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Désolé de déterrer cela mais la solution n'est valable que pour les nombres de 0 à 9.
    Essayez concaténer 10 et 20; cela devrait donner 1020 mais 10*10 +20 donne 120.
    Méthode possible : en faire deux chaînes; les concaténer et convertir en entier

  3. #3
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Une simple fonction suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function Concatene(g,d: Integer): Integer;
    var
      dp: Integer;
    begin
      dp := d;
      repeat
        dp := dp div 10;
        g := g * 10;
      until dp = 0;
      Result := g+d
    end;
    Uniquement didactique, le dépassement de capacité n'est pas traité, se restreindre donc à des entiers raisonnables, non testé en pascal.
    Evite les conversions en chaînes de caractères. Le test rejeté à la fin permet de traiter correctement le cas du 0 pour le nombre noté d.
    On pourrait aussi envisager une solution basée sur les décalages de bits, ce qui serait un bon exercice. (Oups, bêtise de ma part, le décalage de bits n'est pas cohérent avec les manipulations de puissances de 10.)

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MyVal := StrToInt(Format('%d%d',[tab[0],tab[1]]))

  5. #5
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Anapurna

    Ta solution est très proche de celle de Michel. Rappelons qu'il faut un entier en sortie, donc par ton approche, il faut en gros deux conversions en entrée (entier -> chaîne), une concaténation et enfin une nouvelle conversion (chaîne -> entier). Ca commence à coûter cher... Je sais, je sais, on peut se le permettre avec la puissance des machines actuelles.

    Ma solution consistait à ne pas passer par des manipulations de chaîne, je reste ainsi dans le monde des entiers et je pense que cela est plus rapide même si cela pose un problème de débordement potentiel. En outre, l'algorithme n'est pas compliqué (5 minutes de réflexion en Python).

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut @e-ric,

    avec ton approche tu oublie le zero sur la chaine de gauche
    concatenation

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

Discussions similaires

  1. Concaténation de champs de type string et integer ou long
    Par scrutin dans le forum Langage SQL
    Réponses: 15
    Dernier message: 15/11/2011, 09h40
  2. Concaténation d'un champ char avec un champ integer
    Par Bram2 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/05/2010, 16h20
  3. Concaténation de deux integer pour former une clé primaire
    Par stoukou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 08/09/2005, 10h34
  4. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26

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