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 :

[Débutante] Tri ordre lexicographique


Sujet :

Pascal

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut [Débutante] Tri ordre lexicographique
    salut à tous!!! entant que palme d'or de la pas douée attitude j'ai besoin d'aide pour un tp... apres avoir fait entrer un certain nombre de villes dans un tableau par un utilisateur(ça c'est bon ) il faut afficher un tableau annexe qui affiche l'ordre lexicographique de la ville puis trier les villes par ordre croissant.
    please HELP

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 961
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 961
    Par défaut
    Qio,

    C'est quoi "l'ordre lexicographique" dans ton problème, si ce n'est pas l'ordre alphabétique ?

    Pour trier ton tableau, comme je suppose qu'il n'y a pas beaucoup de nom à trier, tu peux utiliser un sytème de tri basique, tu dois en connaître au moins un, sinon on ne te demanderait pas de trier un tableau.

    Avec quand même un précaution à prendre : la comparaison des chaînes de caractères se fait en fonction des codes numériques des caractères, et le résultat n'est donc pas correct si les noms comprennent un mélange de majuscules/minuscules/caractères accentués.

    A toi de tout ramener au même type de caractères avant de trier, c'est à dire :
    - remplacer les caractères accentués par leur équivalent sans accent (éàï devient eai)
    - tout passer en majuscules ou minuscules

  3. #3
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Bonsoir, il y a eu sur ce forum il y a 1 mois une discussion assez longue et complète sur le sujet.

    http://www.developpez.net/forums/sho...d.php?t=292015

    Cela pourra certainement t'être utile et instructif et je te conseil donc d'y jeter un oeil attentif.

  4. #4
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour je crois qu'il serait plus interessant qu'il choisisse d'abord la méthode de tri qui il veut utiliser et il doit en connaitre un comme c'est deja sinon t'a qu'a consulter la fac ou les tuto il y a plein de ressources et cours pour t'aider
    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut thanks
    merci beaucoup pour vos lumieres!!! peut etre à bientot...
    pour répondre à la question oui l'odre lexicographique désigne alphabétique dans mon énoncé et non on n'a pas vu de systèmes de tri en cours mais je pense m'en sortir grace au site et au net.
    ciao

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut du mal à écrire la suite de mon programme
    je vous met mon programme initial... mon probleme c'est que les mots sont entrés par l'utilisateur (la prof le jour du tp en fait) et je n'arrive pas à déterminer comment programmer un test comparatif avec les caracteres ascii pour une variable... je ne sais pas si ce que j'essaie de dire est clair...



    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
      program Tableau_villes2;
     
    const
        N_MAX=100;
    type
        Tab=array[1..N_MAX]of string;
    var
        t:Tab;
        i,j,nbr_villes,rang:integer;                                 (*déclarations*)
        nom_ville: string;
        presence:boolean;
     
    begin
         writeln('entrez le nombre de villes, inférieur à 100, que vous souhaitez afficher');        (*saisie du nombre de cases par l'utilisateur*)
         readln(nbr_villes);
         for i:=1 to nbr_villes do
            begin
               writeln('entrez un nom de ville');          (*remplissage du tableau*)
               readln(nom_ville);
               t[i]:=nom_ville;
            end;
         for i:=1 to nbr_villes do                        (*affichage du tableau*)
             writeln(t[i]);
     
         writeln('maintenant, entrez un nom de ville');          (*recherche d'une ville dans le tableau*)
         readln(nom_ville);
         for j:= 1 to nbr_villes do
              begin
                if t[j]= nom_ville then                     (*test*)
                    begin
                         writeln('le rang de ',nom_ville,' est ',j);      (*affichage du rang si ville présente*)
                         presence:=true;
                    end ;
              end;
                                                                               (*instructions si ville absente*)
         if  (presence=not true) then
         writeln(nom_ville,' ne se trouve pas dans le tableau');
     
        writeln('entrez le rang dont vous voulez découvrir la ville');      (*recherche d'une ville à partir de son rang*)
        readln(rang);
        if (rang <= nbr_villes) then
           writeln ('la ville au rang ',rang,' est ',t[rang])         (*affichage de la ville correspondant au rang entré par l'utilisateur*)
         else
           begin
             repeat
               writeln('ce rang n''existe pas dans le tableau, entrez en un autre');    (*cas où l'utilisateur entre un rang erroné*)
               readln(rang);
             until  (rang <= nbr_villes);
             writeln ('la ville au rang ',rang,' est ',t[rang]);
           end;
        readln;
     
    end.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut and so on...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i:=1 to nbr_villes do
           begin
              taille:=0 ;
              for j :=1 to length(t[i]) do
                   begin
                    taille:=taille + ord(t[i]);
                         tab_annexe[i]:=taille;
                   end;
              writeln(tab_annexe[i]);
            end;
            readln;
    end.
    voilà le morceau qui correspond à l'entrée de la "taille " du mot dans un tableau annexe; mais comme je disais j'ai un pb pour effectuer la programmation sans avoir de donnée fixe , ce que j'ai mis engras est incompatible et je ne vois pas comment faire autrement...

    rdv tt à l'heure pour la suite si j'arrive à faire un tri bulle pour classer mes villes...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut
    aaaaaaaaaaaaaargh nouvel essai...
    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
    program tableau_villes3;
          const
        N_MAX=100;
    type
        Tab=array[1..N_MAX]of string;
    var
        t:Tab;
        tab_annexe:array[1..N_MAX]of integer;
        i,j,nbr_villes,rang,taille:integer;                                 (*déclarations*)
        nom_ville,villei: string;
        presence:boolean;
     
    begin
         writeln('entrez le nombre de villes, inférieur à 100, que vous souhaitez afficher');        (*saisie du nombre de cases par l'utilisateur*)
         readln(nbr_villes);
         for i:=1 to nbr_villes do
            begin
               writeln('entrez un nom de ville');          (*remplissage du tableau*)
               readln(nom_ville);
               t[i]:=nom_ville;
            end;
         for i:=1 to nbr_villes do                        (*affichage du tableau*)
             writeln(t[i]);
     
         writeln('maintenant, entrez un nom de ville');          (*recherche d'une ville dans le tableau*)
         readln(nom_ville);
         for j:= 1 to nbr_villes do
              begin
                if t[j]= nom_ville then                     (*test*)
                    begin
                         writeln('le rang de ',nom_ville,' est ',j);      (*affichage du rang si ville présente*)
                         presence:=true;
                    end ;
              end;
                                                                               (*instructions si ville absente*)
         if  (presence=not true) then
         writeln(nom_ville,' ne se trouve pas dans le tableau');
     
        writeln('entrez le rang dont vous voulez découvrir la ville');      (*recherche d'une ville à partir de son rang*)
        readln(rang);
        if (rang <= nbr_villes) then
           writeln ('la ville au rang ',rang,' est ',t[rang])         (*affichage de la ville correspondant au rang entré par l'utilisateur*)
         else
           begin
             repeat
               writeln('ce rang n''existe pas dans le tableau, entrez en un autre');    (*cas où l'utilisateur entre un rang erroné*)
               readln(rang);
             until  (rang <= nbr_villes);
             writeln ('la ville au rang ',rang,' est ',t[rang]);
           end;
     
        for i:=1 to nbr_villes do
           begin
              taille:=0 ;
              for j :=1 to length(t[i]) do
                   begin
                     taille:=taille + ord (nom_ville[j]);
                     tab_annexe[i]:=taille;
                   end;
              writeln('la taille de la chaine' ,i, 'est',tab_annexe[i]);
            end;
            readln;
     
    end.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 961
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 961
    Par défaut
    Lax,
    Citation Envoyé par débutantepascal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i:=1 to nbr_villes do
           begin
              taille:=0 ;
              for j :=1 to length(t[i]) do
                   begin
                    taille:=taille + ord(t[i]);
                         tab_annexe[i]:=taille;
                   end;
              writeln(tab_annexe[i]);
            end;
            readln;
    end.
    voilà le morceau qui correspond à l'entrée de la "taille " du mot dans un tableau annexe; mais comme je disais j'ai un pb pour effectuer la programmation sans avoir de donnée fixe , ce que j'ai mis engras est incompatible et je ne vois pas comment faire autrement...

    rdv tt à l'heure pour la suite si j'arrive à faire un tri bulle pour classer mes villes...
    Je ne vois pas du tout ce que tu cherches à faire avec cette "taille".

    Au sens habituel, la taille d'une chaîne est tout simplement sa longueur.

    D'autre part, je ne vois nulle part une quelconque tentative de tri, et ton programme ne correspond donc pas à l'énoncé.

    De plus, il serait profitable de découper tout ça en procédures/fonctions, ça rend le code plus facile à écrire/maintenir/comprendre.

    A propos de la mise en forme, évite de mettre des commentaires longs à la suite d'une ligne de code elle-même déjà longue.
    En général, on évite les lignes de plus de 80 caractères, largeur standard d'une fenêtre MSDOS, ça permet de maintenir une bonne lisibilité du code.

    Toujours sur la mise en forme, mais il s'agit plutôt de préférence que de standard, ta manière d'intenter déclae trop vite les blocs vers la droite, ce qui conduit rapidement à dépasser les 80 caractères par ligne.
    Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         writeln('maintenant, entrez un nom de ville');          (*recherche d'une ville dans le tableau*)
         readln(nom_ville);
         for j:= 1 to nbr_villes do
              begin
                if t[j]= nom_ville then                     (*test*)
                    begin
                         writeln('le rang de ',nom_ville,' est ',j);      (*affichage du rang si ville présente*)
                         presence:=true;
                    end ;
              end;
    Peut s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         (*recherche d'une ville dans le tableau*)
         writeln('maintenant, entrez un nom de ville');
         readln(nom_ville);
         for j:= 1 to nbr_villes do
         begin
           if t[j]= nom_ville then  (*test*)
           begin
             (*affichage du rang si ville présente*)
             writeln('le rang de ',nom_ville,' est ',j);
             presence:=true;
           end ;
         end;

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut petite précision
    j'ai oublié de préciser que je ne suis pas sensee mettre de procedures ni de fonctions dans mon programme. pour que tout soit clair je vous met l'enoncé... c'est dur d'etre débutant dans ce monde de geek...
    Images attachées Images attachées

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut pff
    désolée je n'honore pas ce forum par ma jugeotte mais je suis DEBUTANTE c'est pas pour rien que j'ai choisi ce pseudo.... je bidouille plus qu'autre chose quand je suis en terrain inconnu. Merci pour l'info sur les indentations ça explique peut etre quelques plantages du logiciel lors d'exrcices précédents.

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 961
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 961
    Par défaut
    Qio,
    Citation Envoyé par débutantepascal
    désolée je n'honore pas ce forum par ma jugeotte mais je suis DEBUTANTE c'est pas pour rien que j'ai choisi ce pseudo.... je bidouille plus qu'autre chose quand je suis en terrain inconnu. Merci pour l'info sur les indentations ça explique peut etre quelques plantages du logiciel lors d'exrcices précédents.
    En aucun cas l'indentation ne peut provoquer un plantage du logiciel, ce n'est qu'une mise en forme pour faciliter la lecture du code.

    Pour ton exercice, j'ai lu le fichier joint, et je ne vois toujours pas ce que tu cherches à faire avec le code que j'ai déjà signalé.
    A quoi te sert la variable "taille" ?

    Citation Envoyé par débutantepascal
    j'ai oublié de préciser que je ne suis pas sensee mettre de procedures ni de fonctions dans mon programme. pour que tout soit clair je vous met l'enoncé...
    Et encore un enseignant dans les choux.

    Citation Envoyé par débutantepascal
    c'est dur d'etre débutant dans ce monde de geek...
    Ça c'est dur, confondre programmeur et geek

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut aaaaaaaaaaah
    en fait mon pb c'est que je cherche tjrs midi à 14H... voici ce qe ça donne(il ne me reste plus qu'à insérer un tableau annexe où figure l'ordre initial sous forme ordinale... je pense que ce n'est pas insurmontable...

    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
    program tableau_villes3;
    const
        N_MAX=100;
    type
        Tab=array[1..N_MAX]of string;
        Tab2=array[1..N_MAX]of integer;
    var
        t:Tab;
        tab_annexe1: Tab2;
        i,j,nbr_villes:integer;                (*déclarations*)
        nom_ville,m: string;
     
    begin
         (*saisie du nombre de cases par l'utilisateur*)
         writeln('entrez le nombre de villes, inférieur à 100, que vous souhaitez afficher');
         readln(nbr_villes);
         for i:=1 to nbr_villes do
          begin
           writeln('entrez un nom de ville');    (*remplissage du tableau*)
           readln(nom_ville);
           t[i]:=nom_ville;
          end;
          writeln('les ',nbr_villes,' villes sont: ');
          for i:=1 to nbr_villes do                    (*affichage du tableau*)
           writeln(t[i]);
     
        for i:= 1 to (nbr_villes-1) do     (*tri des villes par ordre alphabétique dans le tableau*)
        begin
        for j:=(i+1) to nbr_villes do
            begin
            if t[j]<t[i] then
               begin
               m:=t[j];
               t[j]:=t[i];
               t[i]:=m;
               end;
            end;
        end;
        writeln('voici donc ces mêmes villes par ordre alphabétique: ');
        for i:=1 to nbr_villes do
         writeln(t[i]);                   (*affichage du nouvel ordre*)
        readln;
    end.

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

Discussions similaires

  1. [débutant] Tri de fichiers par ordre alphabétique
    Par NicaeaCivitas dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2006, 15h25
  2. [XSL][débutant]trié l'ordre des éléments d'un fichier xml
    Par pistache42 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/04/2006, 10h37
  3. [débutant] Tri sur un select
    Par moog dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/06/2005, 11h06
  4. [débutant] tri vecteur string ordre alphabétique
    Par Tom Sawyer dans le forum SL & STL
    Réponses: 2
    Dernier message: 26/07/2004, 17h40
  5. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55

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