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

Turbo Pascal Discussion :

Recherche de doublons dans une chaîne


Sujet :

Turbo Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Recherche de doublons dans une chaîne
    Bonjour,

    d’après ce que j'ai appris, la taille maximum d'une chaîne de caractères est 256.
    Comment puis-je résoudre ce problème ?

    Nom : Capture.PNG
Affichages : 658
Taille : 20,7 Ko

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 968
    Points : 59 666
    Points
    59 666
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Difficile de t'aider si tu ne donnes pas plus de précisions : où rencontres-tu des difficultés ? Peux-tu nous montrer ton code ?


  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    voila mon 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
    31
    32
    33
    34
    35
    36
    program doube;
     
    var
    ch:string;
    p:integer;
    b:boolean;
     
    procedure remplir(var ch:string);
    begin
     
     
    readln(ch);
     
    end;
     
    procedure rech(ch:string; var b:boolean; var p:integer);
    begin
    p:=0;
    b:=false;
    repeat
    p:=p+1;
    if ch[p]=ch[p+1] then
    b:=true;
    until (b=true) or (p=length(ch));
    end;
     
    begin
    remplir(ch);
    rech(ch,b,p);
    while b=true do
    begin
    delete(ch,p,2);
    rech(ch,b,p);
    end;
    write(ch);
    end.

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Vous n'étiez pas très loin de la solution.

    Il y a une première erreur, c'est que vous effacez deux caractères là où il faudrait n'en effacer qu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //delete(ch,p,2);
    delete(ch,p,1);
    Il y a une deuxième erreur, c'est que la dernière comparaison à faire est la comparaison entre l'avant-dernier caractère et le dernier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //until (b=true) or (p=length(ch));
    until (b=true) or (p=length(ch) - 1);
    Une fois ces deux corrections faites, il me semble que le programme donne le résultat attendu.

    Après, certaines améliorations pourraient être apportées. Par exemple, si vous regardez bien, le paramètre p de la procedure rech() ne sert à rien dans l'état actuel du code.

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    même avec vos solution ça marche pas !
    je suis certain qu'il faut effacer deux caractères(lire le sujet)

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par aminebenkraiem Voir le message
    même avec vos solution ça marche pas !
    je suis certain qu'il faut effacer deux caractères(lire le sujet)
    Supprimer les doublons, pour moi ça veut dire par exemple remplacer "aa" par "a". Ce n'est pas ça ?

  7. #7
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 092
    Points : 15 532
    Points
    15 532
    Billets dans le blog
    9
    Par défaut
    L'exemple que vous avez donné (outre qu'il n'est pas très lisible) est bizarre. Quelle est la logique qui fait passer de "baaabbacddc" à "b" ? Je ne comprends pas.

  8. #8
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 586
    Points : 7 724
    Points
    7 724
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    L'exemple que vous avez donné (outre qu'il n'est pas très lisible) est bizarre. Quelle est la logique qui fait passer de "baaabbacddc" à "b" ? Je ne comprends pas.
    • En effet où on garde au moins une note en cas de doublons et cela deviendrait "babacdc";
    • Où ôte entièrement toute séquence de multiple, par exemple "ôter tous les doubles et recommencer" => "bacc" puis finalement "bac".
    • On peut aussi ôter et continuer du point courant : "Baaabbacddc" => "bBbacddc"=> "bAcddc" => "bacC"
    • On peut aussi ôter et reanalyser du point courant : "Baaabbacddc" => "bBbacddc"=> "Acddc" => "acC" => "a'
    • Si ôte tout avec ré-analyse totale après chaque modification, on a la séquence "baaabbacddc" => "bbbacdcc" => "acdcc" => "acdc"
    • Le même méthode partant de la fin : "baaabbacddc" => "baaabbacc" => "baaabba" => "baaaa" => "b"
    Ouf, un semble marcher, mais critère pour le moins curieux

    Il faudrait donc traiter les caractères à partir des derniers.
    Attention, la fonction rech doit en plus de l'indice, rechercher et indiquer le nombre à ôter : NbIdems.
    La delete doit recevoir non pas 1, non pas 2, mais ce NbIdems (mais selon moi un filtre musical utiliserait NbIdems-1 )

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par dalfab Voir le message
    • En effet où on garde au moins une note en cas de doublons et cela deviendrait "babacdc";
    • Où ôte entièrement toute séquence de multiple, par exemple "ôter tous les doubles et recommencer" => "bacc" puis finalement "bac".
    • On peut aussi ôter et continuer du point courant : "Baaabbacddc" => "bBbacddc"=> "bAcddc" => "bacC"
    • On peut aussi ôter et reanalyser du point courant : "Baaabbacddc" => "bBbacddc"=> "Acddc" => "acC" => "a'
    • Si ôte tout avec ré-analyse totale après chaque modification, on a la séquence "baaabbacddc" => "bbbacdcc" => "acdcc" => "acdc"
    • Le même méthode partant de la fin : "baaabbacddc" => "baaabbacc" => "baaabba" => "baaaa" => "b"
    Ouf, un semble marcher, mais critère pour le moins curieux

    Il faudrait donc traiter les caractères à partir des derniers.
    Attention, la fonction rech doit en plus de l'indice, rechercher et indiquer le nombre à ôter : NbIdems.
    La delete doit recevoir non pas 1, non pas 2, mais ce NbIdems (mais selon moi un filtre musical utiliserait NbIdems-1 )
    la chaîne est formé uniquement par 'a' 'b' 'c' 'd' 'e' et 'f' ("il y'a pas des lettres majuscules ") !!
    aucune de vous ma répondre a ma question qui est claire , (est ce que on peut traiter une chaîne de taille >256 )

  10. #10
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 586
    Points : 7 724
    Points
    7 724
    Par défaut
    Oui, en Pascal on peut dépasser 255 caractères, on était limité à 65000 mais c'était avant.
    Mais en Pascal la limite à 255 correspond au fait que l'on stocke que des octets, et donc que certains caractères ne sont pas utilisables.

  11. #11
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Une chaîne de caractères est à considérer comme un tableau d'entiers non signés où le premier élément (indice 0) correspond à la valeur courante de l'attribut de longueur (la même valeur que l'on obtient avec la fonction length).

    Etant donné que cet élément est codé sur un octet non signé, la limite à 255 correspond donc à la valeur maximal d'un octet.

    Mais il existe aussi les chaînes à zero terminale lesquelles ne contiennent pas d'octet de longueur et sont constituées de caractères non nuls, suivis d'un caractère nul (Code ASCII 0).

    Avec elles nous pouvons traiter (à l'aide des fonctions de l'unité Strings) des chaînes de quasi 64ko.

  12. #12
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    j'ai pas bien compris ton idée

  13. #13
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par aminebenkraiem
    est ce que on peut traiter une chaîne de taille >256
    Ma réponse donnait d'une part (et pour information) la raison pour laquelle une chaîne de caractère est limitée à 255 caractères.

    Et d'autre part te suggérait de te renseigner sur les chaînes à zero terminal car...
    avec elles nous pouvons traiter (à l'aide des fonctions de l'unité Strings) des chaînes de quasi 64ko.
    Donc si ton code nécessite des chaînes de longueur supérieur à 255 octets, je te recommande d'étudier


Discussions similaires

  1. Recherche de doublons dans une table
    Par david71 dans le forum Access
    Réponses: 2
    Dernier message: 20/01/2008, 14h41
  2. recherche de doublon dans une table
    Par c+cool dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/01/2008, 14h29
  3. recherche des doublons dans une hash
    Par Jasmine80 dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2007, 12h51
  4. [pl-sql] Recherche de doublons dans une table
    Par tommey dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 23h53
  5. Réponses: 5
    Dernier message: 21/11/2005, 15h24

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