J’essaye de coder un programme qui revoit la somme des termes de la suite de Fibonacci petit qu'une certain limite.
--voila ce que j'ai fait :
#include<stdio.h>
void fibo (long int limite,long int fibo1,long int fibo2,long int *somme)
{
long int test;
if (fibo2<=limite)
{
test=fibo1;
fibo1=fibo2;
fibo2=fibo1+test;
(*somme)+=fibo2;
fibo(limite,fibo1,fibo2,&somme);
}
}
int main()
{
long int somme=3;
long int fibo1=1;
long int fibo2=2;
long int limite=100;
fibo (limite,fibo1,fibo2,&somme);
printf("%ld",somme);
getchar();
return 0;
}
--et voila les erreurs :
[Warning] passing argument 4 of 'fibo' from incompatible pointer type
[Note] expected 'long int *' but argument is of type 'long int **'
Merci de m'expliquer les erreurs et pourquoi ça marche pas.
Moi qui ne suis pas du tout un as des pointeurs, j'ai une petite astuce sans doute un peu ridicule mais efficace pour éviter ce genre d'erreur : je fais commencer par un 'p' mes noms de pointeurs. Ainsi, j'aurais défini la fonction ainsi :
void fibo (long int limite,long int fibo1,long int fibo2,long int *psomme)
{
/* ... ... ... */
*psomme+=fibo2;
fibo(limite,fibo1,fibo2,psomme);
}
Grâce à cette lettre 'p', je vois que psomme est déjà un pointeur, donc qu'il ne faut pas mettre un & devant.
Ligne 11 il ne faut pas l'opérateur adresse de & au paramètre somme.
Ça résout les bugs(même ci ça donne pas le résultat souhaité).
Pourriez-vous m'expliquer pourquoi (normalement pour changer la valeur de la variable somme il faut passer par un passage par valeur c'est a dire utiliser & pour passer l'adresse).
#include<stdio.h>
void fibo (long int limite,long int fibo1,long int fibo2,long int *psomme)
{
long int test;
test=fibo2;
fibo2=fibo1+fibo2;
fibo1=test;
if (fibo2<=limite)
{
(*psomme)+=fibo2;
fibo(limite,fibo1,fibo2,psomme);
}
}
int main()
{
long int somme=3;
long int fibo1=1;
long int fibo2=2;
long int limite=100;
fibo (limite,fibo1,fibo2,&somme);
printf("%ld\n",somme);
system("pause");
return 0;
}
Tu n'aurais pas dû modifier le code de ton premier post: la remarque de rouloude ne veut plus rien dire, et j'avoue m'être demandé pourquoi il l'avait faite....
Son premier code comporte toujours l'erreur, il ne me semble pas qu'il l'ai modifié (ligne 11).
edgarjacobs : je crois qu'il a rectifié, du coup c'est ta remarque qui ne veut plus rien dire...
Hich@m : tu n'es pas le seul à trouver ça difficile, on est au moins deux ! (et probablement un petit peu plus). Je pense qu'il faut être très rigoureux et attentif avec ces machins là, en particulier il vaut mieux que lorsqu'une variable est un pointeur, ça se voie comme le nez au milieu de la figure. Les pros nous conseillent toujours de faire attention avec les noms de variables, et je pense que nommer 'somme' un pointeur était une grave erreur puisque ça cachait sa qualité de pointeur.
@AnasRadoui Bonjour, merci de ne pas déterrer d'ancien sujet résolu. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses), un description de votre problématique et le code que vous avez écrit inséré sur le forum à l'aide du bouton code </>.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent