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 :

Inversion d'une chaîne


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut Inversion d'une chaîne
    BOnjour , j'essaye d'écrire une fonction qui prend une chaine en paramètre , par exemple la chaine "bonjour" , et qui me renvoit la chaine inverse "ruojnob" , et j'ai des difficultés à trouver un algorithme , voici ce que je propose :

    1.On lit chaque caractère de la chaine , on les compte .
    2. Par une boucle , du dernier caractère au 1er , on affiche les caractères de la chaine dans une seconde chaine ?

    QU'en pensez vous , celà peut marcher ?

    merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hi,
    Citation Envoyé par Maxence45
    BOnjour , j'essaye d'écrire une fonction qui prend une chaine en paramètre , par exemple la chaine "bonjour" , et qui me renvoit la chaine inverse "ruojnob" , et j'ai des difficultés à trouver un algorithme , voici ce que je propose :

    1.On lit chaque caractère de la chaine , on les compte .
    2. Par une boucle , du dernier caractère au 1er , on affiche les caractères de la chaine dans une seconde chaine ?

    QU'en pensez vous , celà peut marcher ?

    merci
    Oui, ça marchera.

    Par contre, pas besoin de compter les caractères de ta chaine, la fonction length est là pour te donner la longueur de la chaine.

    (D'ailleurs, comment ferais-tu pour calculer la longueur ?)

    On peut faire mieux, mais commence par faire comme ça, et on verra plus tard.

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Bonjour

    J'ai créé une fonction qui fait ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Function ReverseString(Chaine : String) : String ;
    Var
      Tmpstr:String;
      iLoop : Integer;
     
    Begin
      For iLoop := Length(Chaine) DownTo 1 do
          Tmpstr := Tmpstr + Copy(Chaine, iLoop, 1);
     
      Result := TmpStr;
    End;

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut
    je vous remercierai de ne pas me balancer du code tout fait s'il vous plait car sinon çà sert à rien que je travaille , alors j'ai fait travailler ma cervelle et je propose ce code source qui marche à 99Ù , qu'en dites vous !!! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function reply(ch: STRING): STRING;
    var
       i : CARDINAL;
       j : char;
    begin
    for i := length(ch) DownTo 1 do
    begin
       j := ch[i];
    write(j);
    end;
       reply := j;
    end;
    le seul petit hic c'est qu'il me rajouter une lettre inutile à la fin...

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Ca ne peut pas marcher, si j est un char, alors à chaque tour de boucle j est écrasé.

    Il faut que tu crées une string avec s[i] à la suite les uns des autres... Et que tu retournes cette string.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut
    là mon code marche quasiment , pq j ne peut pas etre un char , la variable lû est bien de type char pourtant...

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hi,
    Citation Envoyé par Maxence45
    je vous remercierai de ne pas me balancer du code tout fait s'il vous plait car sinon çà sert à rien que je travaille , alors j'ai fait travailler ma cervelle et je propose ce code source qui marche à 99Ù , qu'en dites vous !!! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function reply(ch: STRING): STRING;
    var
       i : CARDINAL;
       j : char;
    begin
    for i := length(ch) DownTo 1 do
    begin
       j := ch[i];
    write(j);
    end;
       reply := j;
    end;
    le seul petit hic c'est qu'il me rajouter une lettre inutile à la fin...
    Je ne vois pas de quoi tu parles, il ne semble pas y avoir de "hic", sauf qu'il faudrait peut-être ajouter un writeln après la sortie de la boucle, uniquement pour que les messages suivants ne se mettent pas directement à la suite de ce que la fonction écrit.

    Il y a de l'idée, mais de petits problèmes:

    reply est une fonction qui doit renvoyer une string,

    or
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
       j : char;
    ...
       reply := j;
    tu lui fais retourner un char

    ici,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       j := ch[i];
    write(j);
    la variable j servant d'intermédiaire est inutile, tu peux parfaitement écrire directement
    A part cela, il y a un grand "hic" :

    Ta fonction affiche bien la chaine inversée, mais c'est tout ce qu'elle fait : elle ne renvoie pas la chaine inversée, même en corrigeant le problème du retour d'un caractère au lieu d'une chaine, comme attendu.

    Ta première version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function ReverseString(Chaine : String) : String ;
    Var
      Tmpstr:String;
      iLoop : Integer;
     
    Begin
      For iLoop := Length(Chaine) DownTo 1 do
          Tmpstr := Tmpstr + Copy(Chaine, iLoop, 1);
     
      Result := TmpStr;
    End;
    faisait pourtant le travail attendu, à part qu'il fallait initialiser la chaine tampon Tmpstr avant d'entrer dans la boucle la remplissant à partir des données de Chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
      Tmpstr := '';
      { puis la boucle }
    ...
    pourquoi en faire une autre ?

    Par rapport à ce que j'ai vu de tes autres posts, ça vient tranquilement, continue

    ps : Prends quand même l'habitude de bien présenter ton code, en ce qui concerne l'indentation surtout

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut
    le code que tu me montres n'est pas de moi lol .

    c'est quoi la différence entre renvoyer la chaine et afficher la chaine inversée , le résultat est le même non ?

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

Discussions similaires

  1. [Débutant] Inverser une chaîne de caractères
    Par zbooon dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 28/04/2017, 13h44
  2. Inversion d'une chaîne de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 31/10/2011, 13h56
  3. Inversion d'une chaîne de caractères
    Par bounadalvidal dans le forum Débuter
    Réponses: 7
    Dernier message: 09/11/2010, 14h51
  4. Réponses: 3
    Dernier message: 26/05/2010, 23h39
  5. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09

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