aide sur appel de fonction en pascal - Delphi/Pascal - Programmation
Marsh Posté le 08-12-2005 à 23:12:23
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?
Marsh Posté le 09-12-2005 à 11:16:50
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 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
Marsh Posté le 09-12-2005 à 19:57:56
coooool, maintenant ca marche. C'est effectivement le var qui posait problème. Merci antp .
Marsh Posté le 08-12-2005 à 21:23:31
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é.
Message édité par bossgama le 08-12-2005 à 21:26:26