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 :

Tri par comptage avec 3 tables [FAQ]


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Tri par comptage avec 3 tables
    bonjour, je suis débutante en pascal et j'ai un problem avec ce programme:

    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
     
    program ttpp22;
    type tab=array[1..100]of integer; 
    var nb:integer; 
    x,y:tab; 
    procedure lect1d(var t:tab; taille: integer); 
    var i: integer; 
    begin 
        writeln('donnez la taille du tableau'); 
        readln(taille); 
        for i:=1 to taille do 
            begin 
                writeln ('t[',i,']='); 
                readln(t[i]); 
            end; 
    end; 
     
    procedure ecr1d(t:tab;taille:integer); 
    var i:integer; 
    begin 
         for i:=1 to taille do 
          writeln(t[i]); 
    end; 
    procedure tricpt_3(t:tab;ta:integer;var res:tab); 
    type tab=array[1..100] of integer; 
    var j:integer; 
    zc:tab; 
    function elem_inf(n,ind:integer;t:tab;taille:integer):integer; 
      var i, cpt:integer; 
      begin 
          cpt:=0; 
          for i:=1 to taille do begin
             if (n>=t[i]) and (i<>ind)then 
             cpt:=cpt+1; 
          end;
       elem_inf:=cpt; 
      end; 
    procedure ecr1d(t:tab;taille:integer); 
      var i:integer; 
      begin 
            for i:=1 to taille do 
            writeln(t[i]); 
      end; 
    begin 
          for j:=1 to ta do 
             begin 
                 zc[j]:=elem_inf(t[j],j,t,ta); 
                 res[zc[j]+1]:=t[j]; 
              end; 
          ecr1d(res,ta); 
    end; 
    begin 
        lect1d(x,nb); 
        tricpt_3(x,nb,y); 
        ecr1d(y,nb); 
        readln; 
       readln; 
    end.
    il se compile mais il s'execute pas?! help please

  2. #2
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    C'est tout à fait normal, plusieurs remarques:

    1° tu ne dois pas redéfinir un type pour une procédure. Elle utilise les types qui sont dans l'en-tête de ton programme.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     procedure tricpt_3(t:tab;ta:integer;var res:tab); 
    ...
    function elem_inf(n,ind:integer;t:tab;taille:integer):integer;
    Ceci est complètement faux, tu déclares une fonction dans une procédure. Ca n'a pas de sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure ecr1d(t:tab;taille:integer); 
      var i:integer; 
      begin 
            for i:=1 to taille do 
            writeln(t[i]); 
      end; 
    begin 
          for j:=1 to ta do 
             begin 
                 zc[j]:=elem_inf(t[j],j,t,ta); 
                 res[zc[j]+1]:=t[j]; 
              end; 
          ecr1d(res,ta); 
    end;
    , tu ne mais aucune en-tete de procédure ou de fonction et tu démarres un bloc begin/end?


    Un conseil, relis tes notions de procédures/fonctions ainsi que celles de types

    Un autre conseil, si tu nous donnes un programme sans nous dire ce qu'il est censé faire, on ne peut pas plus t'aider que ça...Ou alors utilise des noms de variables et de fonctions plus appropriés


    @++
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  3. #3
    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
    Dei,
    Citation Envoyé par Tuxico Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     procedure tricpt_3(t:tab;ta:integer;var res:tab); 
    ...
    function elem_inf(n,ind:integer;t:tab;taille:integer):integer;
    Ceci est complètement faux, tu déclares une fonction dans une procédure. Ca n'a pas de sens.
    en Pascal, c'est parfaitement légal, et je dirais même conseillé si la procédure/fonction ainsi déclarée n'est appelée que par la procédure/fonction parente, car elle est ainsi cachée au reste du programme.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    j'ai corrigé mes fautes le programme s'execute mnant mais moi je veux afficher trois tables bon voici le sujet:

    1ere etape:
    pour chaque élément on compte le nombre d'elements qui lui sont inférieurs et on range le résultat trouvé dans un tableau de comptage de taille identique a celle du tableau a trier.

    2ème étape:
    l'élément dont le compteur est egal a 0 est permuté avec le 1er élément du tableau, l'élément dont le compteur est egal a 1 est permuté avec le 2ème élément du tableau etc...
    (faudra pas oublier de permuter aussi les éléments de la zone de comptageen mème temps que ceux du tableau à trier)

    en résumé:
    il faut afficher 3 tables :
    le tableau a trier
    la table de comptage
    le résultat dans une 3ème table.

    et moi c que le résultat qui s'affiche.

  5. #5
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    mea-culpa alors mais ca m'étonne fortement...je n'avais jamais vu ça et pourtant j'en ai mangé du pascal
    Enfin bon, c'est sur que c'est un peu une méthode privée en java à la sauce pascal mais est-ce que tous les compilateurs acceptent ça?
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    c bon j'ai résolu mon problem merci pour votre aide.

  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
    Dea,
    Citation Envoyé par Tuxico Voir le message
    mea-culpa alors mais ca m'étonne fortement...je n'avais jamais vu ça et pourtant j'en ai mangé du pascal
    Enfin bon, c'est sur que c'est un peu une méthode privée en java à la sauce pascal mais est-ce que tous les compilateurs acceptent ça?
    Oui, c'est du Pascal basique (ça en fait partie depuis la création du langage par Niklaus Wirth).
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    mmmh, je ne vois quand-même pas l'utilité d'une telle approche dans un langage non-objet, le fait que la procédure/fonction soit cachée du programme principal entre "" n'a pas vraiment de sens ici.
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  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
    Fei,
    Citation Envoyé par Tuxico Voir le message
    mmmh, je ne vois quand-même pas l'utilité d'une telle approche dans un langage non-objet, le fait que la procédure/fonction soit cachée du programme principal entre "" n'a pas vraiment de sens ici.
    Par exemple, on a une fiche de données (record ou autre), et on veut soit l'afficher sur l'écran, soit l'imprimer.
    On peut faire

    Pour afficher :
    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
    procedure affiche(const fiche : ficheType);
     
      procedure entete(....)
      begin
        ...
      end;
     
      procedure donnees(...)
      begin
        ...
      end;
     
    begin
      ....
    end;
    Pour imprimer:
    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
    procedure imprime(const fiche : ficheType);
     
      procedure entete(....)
      begin
        ...
      end;
     
      procedure donnees(...)
      begin
        ...
      end;
     
    begin
      ....
    end;
    Seul le code des procédures internes est à changer, et le code les appelant n'a pas besoin de varier.

    On peut même ajouter un niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure affimp(const fiche : ficheType; affi_ou_imprime : boolean)
     
      procedure afficher(...)
      ....
     
      procedure imprimer(...)
      ...
     
    begin
     ...
    end;
    Bien entendu, avec les systèmes de fenêtres modernes, on ne ferait qu'une procédure qui s'adapterait au contexte, mais les procédures "internes" restent pratiques pour découper le code en éléments logiques.
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    ok, je vois mieux, merci de ton temps
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    En plus, cela peut faciliter la récursion, parce que les fonctions/procédures internes ont accès aux variables des fonctions qui les contiennent. Ca rend la récursion beaucoup plus propre qu'en C (ou soit beaucoup plus efficace, soit nettement plus réentrante). Franchement pour un langage de haut-niveau qui veut faciliter la récursion, c'est très important de permettre au moins cela (et si tu as de vrais closures c'est encore mieux, bien sûr).

    --
    Jedaï

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

Discussions similaires

  1. [Free Pascal] Tri par comptage avec un seul tableau
    Par ima_med dans le forum Free Pascal
    Réponses: 6
    Dernier message: 03/02/2011, 00h55
  2. Problème de tri par défaut dans les tables 9i
    Par Mospaeta dans le forum Oracle
    Réponses: 1
    Dernier message: 18/02/2008, 17h46
  3. Réponses: 3
    Dernier message: 07/09/2007, 15h29
  4. [MySQL] Tri par date avec timestamp
    Par shutdown76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/01/2007, 02h37
  5. probleme avec le tri par comptage et le tri par permutation
    Par argon dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 06/06/2006, 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