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

Free Pascal Discussion :

Inversion des caractères d'une chaîne [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut Inversion des caractères d'une chaîne
    Bonjour !

    J'ai un problème avec cette procédure :

    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
    program inverser;
    begin
     
    type
    Tab=string;
     
    Procedure Inverser (Var t : Tab; p, n : Integer);
    Var aux : char;
    Begin
    If p < n Then
    Begin
    aux := t[p];
    t[p] := t[n];
    t[n] := aux;
    Inverser (t, p + 1, n - 1);
     End;
     End;
    End;
    end.
    Pourriez-vous m'aider ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 282
    Points : 939
    Points
    939
    Par défaut
    Oui, bonjour moi aussi.

    Je pense que les gens qui liront ton post auront au moins deux problèmes en commun avec moi :
    • Quel est ton problème, en clair in the text ?
    • Il faudrait proposer un code lisible : d'abord la balise code (le # en haut à droite lors de l'édition), et ensuite indenter correctement ton code.

    D'ailleurs, si tu avais indenté ton code, je subodore qu'il y aurait au moins un problème de visible. Mais peut-être que ce n'est pas celui qui t'as motivé à poster, allons savoir.
    poke 1024,0; poke 214,214

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par nadirmabed Voir le message
    J'ai un problème avec cette procédure
    Commençons par le début. Pourrais-tu nous expliquer ce que tu veux faire ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Je veux exécuter cette procédure, pour inverser un vecteur ou une chaîne de caractère. Free Pascal me marque beaucoup d'erreurs.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Nom : 54548787.JPG
Affichages : 4439
Taille : 82,3 Ko

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Pour rendre ton programme compilable, il n'y a pas grand chose à changer :

    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
    program inverser;
     
    //begin
     
    type
      Tab = string;
     
    procedure Inverser (var t: Tab; p, n: Integer);
    var
      aux: char;
    begin
      If p < n Then
      begin
        aux := t[p];
        t[p] := t[n];
        t[n] := aux;
        Inverser (t, p + 1, n - 1);
      end;
    end;
     
    //end;
     
    begin
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    La déclaration du type Tab me semble inutile : autant utiliser directement le type string.

    D'autre part, si ce que tu veux faire, c'est de renverser toute la chaîne, tu peux le faire plus simplement, par exemple de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      aux: string;
      i: integer;
    begin
      aux := '';
     
      for i := Length(t) downto 1 do
        aux := aux + t[i];
     
      t := aux;
    end;
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Comment l'écrire en algorithme ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Nom : inverse sans t.JPG
Affichages : 4294
Taille : 71,8 Ko

    Quel est le type de la variable t ?

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Le code que j'ai posté n'est pas un programme complet. C'est une autre version de ta procédure Inverser().
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Pourrais-tu l'écrire complètement ?

  12. #12
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par nadirmabed Voir le message
    Pourrais-tu l'écrire complètement ?
    Voici le programme complet :

    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
     
    program Inversion;
     
    procedure Inverser(var s: string);
    var
      aux: string;
      i: integer;
    begin
      aux := '';
     
      for i := Length(s) downto 1 do
        aux := aux + s[i];
     
      s := aux;
    end;
     
    var
      s1: string;
     
    begin
      s1 := 'bonjour'; // ou ReadLn(s1);
      Inverser(s1);
      WriteLn(s1);
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Citation Envoyé par nadirmabed Voir le message
    Pourrais-tu l'écrire complètement ?
    Un petit effort personnel ne serait pas malvenu. Roland a déjà donné bien des précisions.

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

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Un petit effort personnel ne serait pas malvenu. Roland a déjà donné bien des précisions.
    je suis un deputant
    dèsole et merci a tous

  15. #15
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    Voici 3 autres méthodes pour inverser une chaîne. Toutes ne sont pas vraiment efficaces.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    program Inversion;
     
    procedure InverserRecursif(var S: String);
     
      procedure InverserCaracteres(var S: String; Gauche, Droit: Integer);
      var
        C : Char;
      begin
        if Droit > Gauche then
        begin
          C := S[Gauche];
          S[Gauche] := S[Droit];
          S[Droit]:=C;
          InverserCaracteres(S, Gauche + 1, Droit - 1);
        end;
      end;
     
    begin
      InverserCaracteres(S, 1, Length(S));
    end;
     
    procedure InverserEnPlace(var S: String);
    var
      I, J, Len: Integer;
      Tmp : Char;
    begin
      Len := Length(S);
     
      for I := 1 to  Len div 2 do
      begin
        J := Len - I + 1;
        Tmp := S[I];
        S[I] := S[J];
        S[J] := Tmp;
      end;
    end;
     
    procedure InverserAuHasard(var S: String);
    var
      Aux : String;
      Len : Integer;
     
      function EstInverse : Boolean;
      var
        I : Integer;
      begin
        EstInverse := true;
        for I := 1 to Len do
          if Aux[I] <> S[Len - I + 1] then
          begin
            EstInverse := false;
            Break;
          end;
      end;
     
      procedure Echange(I, J : Integer);
      var
        C : Char;
      begin
        C := Aux[I];
        Aux[I] := Aux[J];
        Aux[J] := C;
      end;
     
    begin
      Len := Length(S);
      if Len > 1 then
      begin
        Aux := S;
     
        while not EstInverse do
          Echange(Random(Len) + 1, Random(Len) + 1);
     
        S := Aux;
      end;
    end;
     
    var
      S1: String;
    begin
      Randomize;
     
      S1 := 'abcdefghij'; 
      InverserEnPlace(S1);
      WriteLn('InverserEnPlace =>', S1);
     
      InverserRecursif(S1);
      WriteLn('InverserRecursif =>', S1);
     
      InverserAuHasard(S1);
      WriteLn('InverserAuHasard =>', S1);
    end.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2008, 16h15
  2. Récupérer des caractères dans une chaîne
    Par LoiL Reborn dans le forum Débuter
    Réponses: 9
    Dernier message: 05/05/2008, 08h46
  3. Réponses: 2
    Dernier message: 24/03/2008, 23h00
  4. Réponses: 21
    Dernier message: 28/01/2008, 20h56
  5. Sélection des 8 premiers caractères d'une chaîne
    Par linooo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/09/2007, 09h15

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