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

Langage Pascal Discussion :

Trouver la position d'une sous-chaîne


Sujet :

Langage Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut Trouver la position d'une sous-chaîne
    bonjour...
    lorsque la chaine contient plusieurs sous chaines identiques...j'ai lu dans laFAQ "creer sa propre fonction de recherche"...
    ben je suis debutant..je voudrais un exemple de code qui fait ce travail pour l'essayer sous turbo pascal...et merci.

  2. #2
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    je voudrais un exemple de code qui fait ce travail pour l'essayer sous turbo pascal...et merci.
    Si je te donne un code java tu sauras l'essayer sous turbo pascal ?

    Plus sérieusement ce que tu cherches à faire n'est pas très compliqué et peut se régler en quelques lignes vu que tu disposes de la fonction pos:
    Pour t'aider à trouver la solution ,sachant que pos ne renvoie que la position de la première occurrence ,la question que tu dois te poser est :comment sais-t-on que la sous chaine n'est pas contenue dans la chaine?(si tu réponds à ça tu a résolue à moitié ton problème)
    Je vais t'aider un peu plus,pour connaitre les différentes positions d'une sous chaine dans une chaine, il faut faire tester la position de la sous chaine dans la chaine jusqu'à ce que la chaine ne contienne plus la sous chaine. Ceci peut s'effectuer soit en supprimant dans la chaine la première sous chaine rencontrée et ainsi de suite jusqu'à ce que la chaine ne contienne plus la sous chaine
    Repenses ça et tu feras ce que je dis,fais l'algo et tu verras que c'est assez simple.(ceci est l'une des méthodes simple )

    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bonsoir...
    je vais essayer...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Bonsoir...
    voici ce que je propose mr krachik...mais le probleme est que ça me donne toujours i=0...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program debutant
    var nom,s:string;
    i:byte;
    begin
    writeln('ecrire un nom');
    readln(nom);
    delete(s,1,3);
    i:=pos(s,nom);
    writeln(i);
    readln;
    end.
    alors encore un petit pousse s'il vous plait et merci d'avance.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Goe,
    Citation Envoyé par hallaj Voir le message
    Bonsoir...
    voici ce que je propose mr krachik...mais le probleme est que ça me donne toujours i=0...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program debutant
    var nom,s:string;
    i:byte;
    begin
    writeln('ecrire un nom');
    readln(nom);
    delete(s,1,3);
    i:=pos(s,nom);
    writeln(i);
    readln;
    end.
    alors encore un petit pousse s'il vous plait et merci d'avance.
    et tu mets quoi dans s ?

    Il faut penser à initialiser les variables avant de les utiliser. (ici, il faut copier nom dans s avant de faire le delete)
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bonsoir....
    je vais initialiser s à 'der'....et le mot que j'ecris est "derderwaderder"...mais i=o toujours....peut etre que je ne manipule pas bien delete et que 'der' est totalement effaceé c'est pour cela que j'ai ..i=0?...
    excusez les questions bêtes d'un debutant

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gie,

    Citation Envoyé par hallaj Voir le message
    bonsoir....
    je vais initialiser s à 'der'....et le mot que j'ecris est "derderwaderder"...mais i=o toujours....peut etre que je ne manipule pas bien delete et que 'der' est totalement effaceé c'est pour cela que j'ai ..i=0?...
    excusez les questions bêtes d'un debutant
    Regarde l'aide pour Delete !!

    Ça ne fait pas du tout ce que tu penses, d'après ton message.

    - Conseil : quand ça ne marche pas comme tu le pensais, affiche toutes les variables après chaque appel de fonction/procédure, et tu verras.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Je rajoute à ce que droggo t'a déjà dit que tu peux aussi aller revoir l'algo que tu utilises.Comme tu l'as dit il s'agit de dire si une sous chaine apparait plusieurs fois dans une chaine et si c'est le cas connaitre ses différentes positions, ce qui doit faire intervenir une itération ou une fonction récursive ou tout autre du genre or ton code ne présente en rien une telle chose.
    Je ne sais pas si tu as bien lu mon premier post une partie de l'algo est la dedans
    Comme droggo le dit crayon+papier==>algo ==>code pascal

    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Kie,
    Citation Envoyé par krachik Voir le message
    Comme droggo le dit crayon+papier==>algo ==>code pascal
    On ne le répètera jamais assez, c'est un problème qu'ont les débutants ayant des mauvais cours (cas si fréquent, hélas), ou qui apprennent seul, en commençant avec des cours ne concernant que le langage utilisé, oubliant la conception, l'algorithmique...
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bonsoir ...
    voila ce que je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program debutant;
    var i:byte;
    texte:string
    begin
    texte:='waderderwaderder';
    i:=pos('der',texte);
    reprat writeln(i);
    delete(texte,i,3);
    writeln(texte);
    i:=pos('der',texte);
    writeln(i); until i=0;
    writeln(texte);
    readln;
    end.
    j'espere que c'est bien... et grand merci a droggo et krachik les rois du pascal...et merci pour votre patience avec les bleus et grand merci pour le conseil de l'algo vous m'avez donné la vraie methode d'apprentissage et merci de m'avoir laissé chercher tout seul ....j'ai appris beaucoup de choses...et merci a +l'infini....

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Fao,
    Citation Envoyé par hallaj Voir le message
    j'espere que c'est bien... et grand merci a droggo et krachik les rois du pascal...et merci pour votre patience avec les bleus et grand merci pour le conseil de l'algo vous m'avez donné la vraie methode d'apprentissage et merci de m'avoir laissé chercher tout seul ....j'ai appris beaucoup de choses...et merci a +l'infini....
    C'est le but, sinon ça ne sert à rien (c'est pourquoi il n'est pas dans la politique du forum de donner des programmes prêts à l'emploi, qu'un copier/coller suffit pour les utiliser, mais qui n'apprend rien à celui/celle qu'on "dépanne").

    Pour le programme, ça va, mais prends quand même l'habitude de faire un copier/coller du programme effectif, plutôt que de le retaper dans tes messages (je suppose que le reprat au lieu de repeat, ainsi que le ; manquant sont dus à ça).

    Pour copier le texte, 2 solutions :

    -1) dans la fenêtre de TP, si tu l'utilises sous XP (ou autres versions de Windows, je ne sais pas) :
    - sélectionner le texte avec la souris
    - clic droit quelque part sur ce texte ainsi sélectionné,
    et hop, c'est copié.

    -2) Plus simple : il suffit d'ouvrir le fichier .pas dans n'importe quel éditeur de pur texte (le Bloc Note de Windows fait parfaitement l'affaire), et copier ce que tu veux.

    ----------

    On passe au leitmotiv :

    Pour ton code :

    - prends l'habitude de le présenter proprement, à savoir une indentation régulière et cohérente.
    En se forçant un peu au début, ça finit par devenir machinal.

    - évite de mettre plusieurs instructions sur la même ligne, particulièrement la marque d'une fin de boucle, comme le until de ton code.

    voici ce que ça donne pour ton code, corrections faites:
    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
    program debutant;
     
    var 
      i : Byte;
      texte : string;
    begin
      texte := 'waderderwaderder';
      i := Pos('der', texte);
      repeat 
        Writeln(i);
        Delete(texte, i, 3);
        Writeln(texte);
        i := Pos('der', texte);
        Writeln(i); 
      until i = 0;
      Writeln(texte);
      Readln;
    end.
    C'est tout de même plus lisible, non ?

    Si les cons volaient, il ferait nuit à midi.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bonjour...
    merci pour les nouveaux conseils...on apprend toujours...merci à +l'infini.

  13. #13
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    D'abord bravo ton travail
    Ensuite Chipotage mais instructif
    Dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      texte := 'waderderwaderder';
      i := Pos('der', texte);
    Vu que tu as compris la chose alors tu peux passer à la méthode générale comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        texte:'waderderwaderder';
        sschaine:='der';
        i:=pos(sschaine,texte);
    comme ça ,ça t'évite d'avoir à faire Pas très pratique pour une mise à jour si tu as même juste 400 lignes de code ;ce qui peut être plus simple à faire si tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Delete(texte, i, length(sschaine));
    Et je dirai même que tu peux encore optimiser ce code en supprimer un ou deux trucs
    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
     
    program debutant;{prends le soins de donner des noms de programmes indicatif ,assez simple pour refleter ce que fait le programme}
     
    var 
      i : Byte;
      texte,sschaine : string;
    begin
      texte := 'waderderwaderder';
      sschaine:='der';
      {i := Pos(sschaine, texte); L'utilité de la boucle repeat until permet d'omettre ce genre de chose vu que l'instruction sera executée au moins une fois}
      repeat
        i := Pos(sschaine, texte); 
        Writeln(i);
        Delete(texte, i, length(sschaine));
        Writeln(texte);
        {Writeln(i); Devenu inutile}
      until i = 0;
      Writeln(texte);
      Readln;
    end.
    C'est des details pour un petit programme comme celui la mais pour un gros point pour un long c'est beaucoup

    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    bonsoir....
    merci krachik c'est des remarques en or....

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

Discussions similaires

  1. Trouver la position d'une chaîne dans une chaîne
    Par taka10 dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2007, 23h18
  2. [Tableaux] Retrouver une sous chaîne.
    Par Huntress dans le forum Langage
    Réponses: 8
    Dernier message: 20/03/2006, 15h31
  3. Trouver la position d'une chaine
    Par xave dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2005, 13h48
  4. Réponses: 28
    Dernier message: 22/09/2005, 11h57
  5. [String] Récupérer une sous -chaîne sans split
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2004, 14h45

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