1. #1
    Futur Membre du Club
    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
    Points : 7
    Points
    7

    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 éclairé

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

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

    Informations forums :
    Inscription : mars 2002
    Messages : 380
    Points : 741
    Points
    741
    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
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 485
    Points : 3 598
    Points
    3 598

    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 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "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
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    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 : 2 449
    Points : 3 850
    Points
    3 850

    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]]))
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 485
    Points : 3 598
    Points
    3 598

    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 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "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
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    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 : 2 449
    Points : 3 850
    Points
    3 850

    Par défaut

    salut @e-ric,

    avec ton approche tu oublie le zero sur la chaine de gauche
    concatenation
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 485
    Points : 3 598
    Points
    3 598

    Par défaut

    Normalement mon algorithme prévoit cette situation (emploi de repeat until au lieu de while). Mais je n'ai pas fait de test (pas de compilo FPC sur place), as-tu pu vérifié l'exécution ?

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "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."

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 485
    Points : 3 598
    Points
    3 598

    Par défaut

    @ Anapurna: Au fait, quand j'ai répondu à ton premier post, je n'ai pas été trop agressif au moins, sinon désolé! ce n'était pas mon but.

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "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."

  9. #9
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    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 : 2 449
    Points : 3 850
    Points
    3 850

    Par défaut

    salut

    non pas de soucis je suis pas susceptible
    je n'est pas FPC non plus
    effectivement j'avais pas vu que tu multiplie par 10 au moins une fois autant pour moi
    j'ai lu trop rapidement et mon œil est resté sur d'ou mon intervention
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Membre éclairé

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

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

    Informations forums :
    Inscription : mars 2002
    Messages : 380
    Points : 741
    Points
    741
    Billets dans le blog
    1

    Par défaut

    superbe !!!
    je ne m'attendait pas à autant de réactions à ma petite remarque !

    Une peite méthode tordue pour la route mais pas plus de 2 chiffres pour b différent de zéro
    Pour le cas b=0 j'aurais du ajouter un if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    program concat;
    uses Math,crt;
    var a,b,c,puissance: integer;
    p :real;
    begin
            clrscr;
            a:=205;b:=130;
            p:=int(Log10(b)+1);
     
            c:=a*Round(POWER(10,p))+b;
    writeln(a,' ',b,' -> ', c );
    end.
    Testé pour quelques valeurs de a et b avec FC

  11. #11
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 485
    Points : 3 598
    Points
    3 598

    Par défaut

    Salut

    Ok pourquoi pas, mais utiliser un logarithme pour travailler sur les entiers me paraît incongru, tu fais deux conversions (entier -> réel puis réel -> entier), ma solution permet de rester dans le monde des entiers.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "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."

  12. #12
    Membre éclairé

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

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

    Informations forums :
    Inscription : mars 2002
    Messages : 380
    Points : 741
    Points
    741
    Billets dans le blog
    1

    Par défaut

    Tout à fait d'accord e-ric ; j'avais annoncé la couleur, c'est tordu en même un peu limité !!

+ 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