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 :

Exercice sur les chaînes de caractères


Sujet :

Pascal

  1. #1
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut Exercice sur les chaînes de caractères
    Salut à tous,

    J'ai un exercice en Pascal dont le sujet est le suivant :
    La donnée en entrée de ce problème est une chaîne de caractères comportant éventuellement des parenthèses. On suppose que l'utilisation des parenthèses dans cette chaîne est correcte. La donnée en sortie sera cette même chaîne à laquelle on aura enlevé les parenthèses et la portion de la chaîne qu'elles délimitent.
    La donnée en entrée peut être sans parenthèses comme elle peut en comporter plusieurs.

    Exemple :
    Entrée : ordinate(erreur)sites
    Sortie : ordinatesites
    Trouvez-vous que la meilleur réponse est de chercher tout d'abord la position des deux parenthèses dans deux compteurs différents et de supprimer cmp2 - cmp1 ? Ou bien y a t-il une solution plus simple ?

    Merci pour votre aide ....

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    C'est, à mon avis, la meilleure solution aussi. En tout cas, la plus simple à coder, tu peux regarder du côté de delete, ca va te servir ici.

  3. #3
    Futur Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    il faudrait crée une procédure qui parcourt la chaine de caractères et cherche le 1er "(" puis efface jusqu'à arrive au ")" mais le problème il faudrait décompose toute la chaine jusqu'à le trouver et c'est ça le problème j'étais pas d'une grande aide désole ...

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    je te propose cette solution (attention suppression de tous les caractères entre la première '(' jusqu'à la dernière ')'
    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
     
    Program suppression;
    Uses wincrt;
     
    Var ch1,ch2 : string ;
    i,x,y : integer ;
    Begin
    readln(ch1);
    x:= pos('(',ch1);
    ch2:= '';
     
    for i:=1 to length(ch1) do
    ch2 := ch1[i] + ch2;
     
    y := pos(')',ch2);
    if y>0 then
    y:= length(ch1) - y + 1 ;
    delete(ch1,x,y-x+1);
    writeln(ch1);
     
    End.

  5. #5
    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
    Ce qui manque à ce code c'est l'indentation et l'utilisation de nom de variables indicatifs
    POur le moment on est du coté simple de la chose avec une parenthèse ouvrante et fermante et si on passait du coté pimenté de la chose?
    La donnée en entrée peut être sans parenthèses comme elle peut en comporter plusieurs.
    Même dans ce cas je verrai dans le genre dans le principe d'un mini parseur où on notera quand on a rencontré une parenthèse ouvrante et du coup on supprime tout jusqu'à rencontrer la parenthèse fermante.Avec un boolean qui nous dit si on est a l'intérieur d'une parenthèse ou pas !!!!

    Cordialement

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    salut,
    Citation Envoyé par krachik Voir le message
    on notera quand on a rencontré une parenthèse ouvrante et du coup on supprime tout jusqu'à rencontrer la parenthèse fermante.
    s'il manque la parenthèse fermante on risque d'aboutir à une boucle infini !
    je propose ce code :
    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
     
    Program suppression;
    Uses wincrt;
     
    function supp(var s: string;x: integer;y: integer) : string ;
    begin
         delete(s,x,y-x+1);
         supp := s ;
    end;
     
     
    Var ch1 : string ;
    x,y : integer ;
    Begin
         readln(ch1);
         repeat
              x:= pos('(',ch1);
              y := pos(')',ch1);
              if (x<y) and (x<> 0) then
                 ch1 := supp(ch1,x,y)  {parenthese ouvrante puis fermante}
              else
                  if y<>0 then
                     delete(ch1,y,1)   {parenthese fermante avant parenthese ouvrante}
                  else
                      x := 0 ;          {pas de parenthese ouvrante ou fermante}
         until (x=0);
     
         writeln(ch1);
     
    End.
    je crois qu'il traite tous les cas possible.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 947
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 947
    Points : 5 660
    Points
    5 660
    Par défaut
    Lai,
    Citation Envoyé par paskal++ Voir le message
    s'il manque la parenthèse fermante on risque d'aboutir à une boucle infini !
    Et le contrôle sur la longueur de la chaîne, qu'en fais-tu ?

    D'ailleurs, le problème ne se pose pas dans le cadre de cet exercice, puisque
    Citation Envoyé par L'aigle de Carthage Voir le message
    Salut à tous,

    J'ai un exercice en Pascal dont le sujet est le suivant :
    La donnée en entrée de ce problème est une chaîne de caractères comportant éventuellement des parenthèses. On suppose que l'utilisation des parenthèses dans cette chaîne est correcte. La donnée en sortie sera cette même chaîne à laquelle on aura enlevé les parenthèses et la portion de la chaîne qu'elles délimitent.
    La donnée en entrée peut être sans parenthèses comme elle peut en comporter plusieurs.

    Exemple :
    Entrée : ordinate(erreur)sites
    Sortie : ordinatesites
    Trouvez-vous que la meilleur réponse est de chercher tout d'abord la position des deux parenthèses dans deux compteurs différents et de supprimer cmp2 - cmp1 ? Ou bien y a t-il une solution plus simple ?

    Merci pour votre aide ....

Discussions similaires

  1. [Encodage] Fonctions sur les chaînes de caractères multi-octets
    Par Rémy DEV dans le forum Langage
    Réponses: 0
    Dernier message: 25/07/2012, 10h33
  2. [TPW] Exercice sur les chaînes
    Par xaviroi dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 16/01/2012, 18h26
  3. [Turbo Pascal] Exercice sur une chaîne de caractères
    Par mah00 dans le forum Turbo Pascal
    Réponses: 35
    Dernier message: 10/01/2010, 13h47
  4. Besoin d'exercices sur les chaînes de caractères
    Par Elammath dans le forum Général Python
    Réponses: 7
    Dernier message: 30/06/2008, 13h09
  5. [requète] travail sur les chaînes de caractères
    Par just xav dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/07/2007, 14h08

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