Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
710 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  aide sur appel de fonction en pascal

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide sur appel de fonction en pascal

n°1262151
bossgama
Posté le 08-12-2005 à 21:23:31  profilanswer
 

Salut, je cherche à coder une fonction quicksort. Mon problème, c'est que j'ai une erreur à la compilation et je n'arrive pas à savoir pourquoi, quand j'appelle en récursif ma fonction: quicksort(liste_voiture,j + 1, sup);
il ne reconnait pas le j+1. Pourtant sur les quelques codes que j'ai pu récupérer ca marche bien comme ca. Alors pourquoi pas pour moi?
 
Voici mon code pour info:
liste_voiture est un tableau de 20 élement, et tab voiture une structure de donné.
 

Code :
  1. procedure quicksort(var liste_voiture : Tab_voiture; var inf : integer; var sup : integer);
  2.           var
  3.               i,j : integer;
  4.               annee : string;
  5.           begin
  6.                if inf < sup then
  7.                   begin
  8.                        i := inf + 1;
  9.                        j := sup;
  10.                        while ( i < j) do
  11.                              begin
  12.                                   writeln('i:',i,' j:',j);
  13.                                   while ((i = j) or (liste_voiture[inf].annee_immatriculation > liste_voiture[i].annee_immatriculation)) do
  14.                                         begin
  15.                                              inc(i);
  16.                                         end;
  17.                                   while ((j = i - 1) or (liste_voiture[inf].annee_immatriculation <= liste_voiture[j].annee_immatriculation)) do
  18.                                         begin
  19.                                              dec(j);
  20.                                         end;
  21.                                   if i < j then
  22.                                      begin
  23.                                           //permutation des valeurs du vecteur
  24.                                           annee := liste_voiture[i].annee_immatriculation;
  25.                                           liste_voiture[i].annee_immatriculation := liste_voiture[j].annee_immatriculation;
  26.                                           liste_voiture[j].annee_immatriculation := annee;
  27.                                           //j := j - 1;
  28.                                      end;
  29.                              end;
  30.                            
  31.                              //appels récursif de la fonction
  32.                              //Traitement des valeurs plus petites que le pivot
  33.                              if (liste_voiture[j].annee_immatriculation < liste_voiture[inf].annee_immatriculation) then
  34.                                 begin
  35.                                      //dec(j);
  36.                                      quicksort(liste_voiture,inf, j - 1);
  37.                                      //Traitement des valeurs plus grandes que le pivot
  38.                                      //inc(j);
  39.                                      quicksort(liste_voiture,j + 1, sup);
  40.                                 end;
  41.                   end;
  42.           end;


Message édité par bossgama le 08-12-2005 à 21:26:26
mood
Publicité
Posté le 08-12-2005 à 21:23:31  profilanswer
 

n°1262215
bossgama
Posté le 08-12-2005 à 23:12:23  profilanswer
 

Y'a vraiment personne pour me dire pourquoi mon appel de fonction pourrait clocher, pourquoi il accepte de temps en temps une opération dans l'appel et parfois non?

n°1262416
antp
Super Administrateur
Champion des excuses bidons
Posté le 09-12-2005 à 11:16:50  profilanswer
 

Le param est en "var", donc ça veut dire que la fonction peut modifier la variable pour que l'appelant reçoive la nouvelle valeur.
Si tu passes "j+1" et que la fonction le modifie, ça va être un peu compliqué à gérer :D Donc tu dois soit virer le var soit mettre ton j+1 dans une variable temporaire que tu passes à la fonction, selon que la fonction doit pouvoir modifier la valeur de j ou non (à toi de voir ; j'ai pas lu tout le code)
 
Mais vu que t'as mis tous les paramètres en "var" je suppose que c'est une erreur : var dans ce cas-ci ne veut pas dire que tu déclares un param, mais plutôt que la valeur du param doit être renvoyée à l'appelant.
Pour les params,
- soit tu ne mets rien : fonction(param: integer)
dans ce cas il copie la valeur sur la pile pour apeler la fonction, et les modifs que la fonction fait à param sont perdues quand on sort de la fonction
- soit tu mets var : fonction(var param: integer)
dans ce cas il passe le pointeur et si la fonction modifie param la nouvelle valeur sera également appliquée à l'appelant (vu que fonction modifie la variable de l'appelant plutôt d'avoir son propre param)
- soit tu mets out : fonction(out param: integer)
idem que var sauf que la valeur d'origine n'est pas prise en compte, à utiliser si fonction modifie param à tous les coups sans se soucier de la valeur antérieure
- soit tu mets const : fonction(const param: integer)
dans ce cas on passe aussi par pointeur, mais la fonction ne peut pas modifier le param
Dans la majorité des cas il vaut mieux préciser var/out/const (passage par pointeur, plus efficace), sauf si la fonction doit pouvoir modifier le paramètre sans que cette modif n'ait d'influence à l'extérieur


Message édité par antp le 09-12-2005 à 11:21:43

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1263064
bossgama
Posté le 09-12-2005 à 19:57:56  profilanswer
 

coooool, maintenant ca marche. C'est effectivement le var qui posait problème. Merci antp :).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  aide sur appel de fonction en pascal

 

Sujets relatifs
Fonction mail() et smtp distant ?Appel d'un script depuis un autre
Problème pour création de fonctionAide a la compilation d'un programme C mal ecrit...
BESOIN D'AIDE AVEC SAXY+PHP5Besoin d'aide sur setInterval et javascript orienté objet...
[pascal] TextAide sur Projet VBA Excel
[C++]appel de fonction pure 
Plus de sujets relatifs à : aide sur appel de fonction en pascal


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR