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 shell : problème de décalage


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Tri shell : problème de décalage
    salut les programmeurs ;
    J'ai un petit problème concernant le tri Shell ;
    voilà tout dabord son 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
    procedure trishell (var t:tab; n:integer ) ;
     var    p,i,j,v: integer;
     begin    
         p:=0;
         while p<= n do    
         p:= 3*p+1;
         while p <> 0 do
          begin
              p:=p div 3;
              for i:= p to n do
               begin
                    v:=t[i];
                    j:=i;
                    while (j > p-1) and (t[j-p] > v ) do
                     begin
                          t[j]:=t[j-p];
                          j:=j-p;
                     end;
                    t[j]:=v;
               end;
          end;
     end;
    et le problème se trouve au niveau de décalage ; c'est à dire au niveau :
    while (j > p-1) and (t[j-p] > v ) do
    cette instruction va nous amener à l'indice zéro (t[0] ) !!!! c'est mon problème ? est alors ! y-a-t-il une solution ?
    une remarque tres importante : si ma remarque concernant cette boucle est dans sa place, alors les livres scolaires (4 ieme SI) est aussi mal rédiger
    car ils comportes tous cette solution ?

    MErci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut
    Holla
    Le tri shell a été enlevé du programme notamment le tri fusion.
    CIAO

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut je n'interresse pas !!!
    Citation Envoyé par WhiteTigerZ Voir le message
    Holla
    Le tri shell a été enlevé du programme notamment le tri fusion.
    CIAO
    quand même ; je doit savoir et pouvoir corriger ses genres d'erreurs ok !

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par WhiteTigerZ Voir le message
    Holla
    Le tri shell a été enlevé du programme notamment le tri fusion.
    CIAO
    Comment est-ce que tu le sais ?
    Merci.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  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
    @ katrena99 et WhiteTigerZ plutot que de passer le temps à regler vos histoire des "programmes" ça n'apporte rien au posteur ces genre d'ecrits
    Et j'ajoute ce n'est pas parce que un cours n'est pas ou est dans le programme qu'il ne faut apprendre à faire des exercices portant dessus....
    @+
    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

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par krachik Voir le message
    @ katrena99 et WhiteTigerZ plutot que de passer le temps à regler vos histoire des "programmes" ça n'apporte rien au posteur ces genre d'ecrits
    Et j'ajoute ce n'est pas parce que un cours n'est pas ou est dans le programme qu'il ne faut apprendre à faire des exercices portant dessus....
    @+
    Merci pour le conseil krachik. Seulement, nous avons beaucoup de matières, vraiment beaucoup. Alors il est important pour nous de savoir ce à quoi il ne faut pas faire attention.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par petit programmeur Voir le message
    salut les programmeurs ;
    J'ai un petit problème concernant le tri Shell ;
    voilà tout dabord son 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
    procedure trishell (var t:tab; n:integer ) ;
     var    p,i,j,v: integer;
     begin    
         p:=0;
         while p<= n do    
         p:= 3*p+1;
         while p <> 0 do
          begin
              p:=p div 3;
              for i:= p to n do
               begin
                    v:=t[i];
                    j:=i;
                    while (j > p-1) and (t[j-p] > v ) do
                     begin
                          t[j]:=t[j-p];
                          j:=j-p;
                     end;
                    t[j]:=v;
               end;
          end;
     end;
    et le problème se trouve au niveau de décalage ; c'est à dire au niveau :

    cette instruction va nous amener à l'indice zéro (t[0] ) !!!! c'est mon problème ? est alors ! y-a-t-il une solution ?
    une remarque tres importante : si ma remarque concernant cette boucle est dans sa place, alors les livres scolaires (4 ieme SI) est aussi mal rédiger
    car ils comportes tous cette solution ?

    MErci d'avance
    il n'y a pas de problème dans ton procédure

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Non je dit bien il y a un problème !!
    Citation Envoyé par benmansouran Voir le message
    il n'y a pas de problème dans ton procédure
    Non Mr Benmansouran !! pour moi, il y a un problème, j'explique encore ;
    au niveau de la boucle :

    while ( (j>p-1) and (t[j-p]) ) do
    t[i] := t[j-p]
    ......
    précisament c'est au niveau de :
    t[j-p]
    ; cette instruction va donner t[0] qui est impossible en Pascal !!

    j'ai besoin d'aide pour comprendre comment se fonctionne cette boucle ?


    Merci d'avance

  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
    Gio,
    Citation Envoyé par petit programmeur Voir le message
    Non Mr Benmansouran !! pour moi, il y a un problème, j'explique encore ;
    au niveau de la boucle :



    précisament c'est au niveau de : ; cette instruction va donner t[0] qui est impossible en Pascal !!:(

    j'ai besoin d'aide pour comprendre comment se fonctionne cette boucle ?


    Merci d'avance
    D'où tires-tu ça ?

    En Pascal, on peut même avoir des indices négatifs, tout dépend de la manière dont on définit le type pour le tableau.
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut voila mon vrai problème avec tri shell
    Citation Envoyé par droggo Voir le message
    Gio,

    D'où tires-tu ça ?

    En Pascal, on peut même avoir des indices négatifs, tout dépend de la manière dont on définit le type pour le tableau.
    Au nivau de (while), la comparaison se fait ente t[0] et aux . c'est vrai ou non !
    tandis que la valeur de t[0] ne figure pas dans T !! voila mon vrai problème.
    car T commence dans sa declaration par [1..50] par exp.
    et si vous voulez j'explique comment T[0] ? :

    - On a : i := p (for i:= p to n Do) ; ensuite aux := T[i] ; puis j:= i ; enfin
    on arrive au pble ; c'est lorsque :
    - On a while (j>p-1 and T[j-p]>aux) Do ????? dans ce cas là, je n'interresse pas est ce que turbo Pascal accepte ou non T[0] ; mais quelles la valeur de T[0] ???? voila mon vrai pble !!! et Merci.

  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
    Gio,
    Citation Envoyé par petit programmeur Voir le message
    Au nivau de (while), la comparaison se fait ente t[0] et aux . c'est vrai ou non !
    tandis que la valeur de t[0] ne figure pas dans T !! voila mon vrai problème.
    car T commence dans sa declaration par [1..50] par exp.
    et si vous voulez j'explique comment T[0] ? :

    - On a : i := p (for i:= p to n Do) ; ensuite aux := T[i] ; puis j:= i ; enfin
    on arrive au pble ; c'est lorsque :
    - On a while (j>p-1 and T[j-p]>aux) Do ????? dans ce cas là, je n'interresse pas est ce que turbo Pascal accepte ou non T[0] ; mais quelles la valeur de T[0] ???? voila mon vrai pble !!! et Merci.
    Je répondais à l'affirmation

    cette instruction va donner t[0] qui est impossible en Pascal !!

    Qui est parfaitement fausse sans autre information, et je précisais que cela dépendait de la définition du type pour le tableau, que nous ne trouvions nulle part jusqu'à ce que tu viennes nous le donner.

    Ma boule de cristal est en panne (pour deviner cette définition), mais cela ne m'empêche pas de répondre à ce genre d'affirmation dans le vide : sans information suffisante, elle est fausse. Point.
    Si les cons volaient, il ferait nuit à midi.

  12. #12
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut meme problème (autre formulation)
    Citation Envoyé par droggo Voir le message
    Gio,

    Je répondais à l'affirmation

    cette instruction va donner t[0] qui est impossible en Pascal !!

    Qui est parfaitement fausse sans autre information, et je précisais que cela dépendait de la définition du type pour le tableau, que nous ne trouvions nulle part jusqu'à ce que tu viennes nous le donner.

    Ma boule de cristal est en panne (pour deviner cette définition), mais cela ne m'empêche pas de répondre à ce genre d'affirmation dans le vide : sans information suffisante, elle est fausse. Point.
    Mon problème : est ce que dans ce programme le tableau T commence par l'indice 0 ou non ?

  13. #13
    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
    Fio,
    Citation Envoyé par petit programmeur Voir le message
    Mon problème : est ce que dans ce programme le tableau T commence par l'indice 0 ou non ?
    Comme déjà dit, ma boule de cristal est en panne.

    C'est TON code, c'est donc toi qui sais comment tu as défini le type de ton tableau.

    Tu sais, les 2 valeurs entre crochets, séparées par .., ce sont les limites min et max des indices valides pour ton tableau.

    Si tu définis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Type
      table = Array [min..max] of ...
    les indices autorisés vont de min à max (la syntaxe impose que min <= max).

    Je ne vois pas où peut se situer ton problème, tu utilises un type que tu as défini, tu connais donc ces limites.

    Bon, je crois que je suis en train de taper pour mieux enfoncer le clou.
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    le code n'est pas érroné mais tous simplement basé sur le langage C et pas Pascal
    en tous cas c'est bien de trouver quelques fautes veut dire que tu es un bon programmeur
    mais fait attention les indices d'un tableau en pascal dépend que de la déclaration veut dire on peut retrouver t[0] autrement le code sera juste si on déclare t:array[0..100]of integer; par exemple
    bien c tous bon travail

  15. #15
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut le problème resiste encore pour moi !!!
    Citation Envoyé par haythem78 Voir le message
    le code n'est pas érroné mais tous simplement basé sur le langage C et pas Pascal
    en tous cas c'est bien de trouver quelques fautes veut dire que tu es un bon programmeur
    mais fait attention les indices d'un tableau en pascal dépend que de la déclaration veut dire on peut retrouver t[0] autrement le code sera juste si on déclare t:array[0..100]of integer; par exemple
    bien c tous bon travail
    Merci haythem ,ainsi tous les autres programmeurs qui ont participés ;
    mais cette faute se trouve dans le manuel scolaire (4 si ) c'est pour cela je suis sur le point d'affirmer que le tableau commence par l'indice 0 , car cela se trouve dans ce livre scolaire. mais pas problème car j'ai la traversée.
    merci encore.

Discussions similaires

  1. Besoin d'aide : gros problème de décalage
    Par vallica dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/06/2006, 14h10
  2. Problème de décalage sur une page
    Par baleiney dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 26/05/2006, 17h54
  3. [CSS]Problème de décalage
    Par arnaud_verlaine dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 30/04/2006, 15h31
  4. Problème de décalage : Wi-Fi ?
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 19
    Dernier message: 29/11/2005, 09h41
  5. Réponses: 4
    Dernier message: 30/10/2005, 09h13

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