Programmation debutant en C
Résolu/Fermé
A voir également:
- Programmation debutant en C
- Logiciel de programmation pour débutant - Guide
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Programmation télécommande porte de garage brico depot - Forum Matériel & Système
5 réponses
En fait, je précise que le probleme, c'est que si je rentre par exemple 6 (donc n=6), il me renvoie 12.
En fait, il me renvoie toujours 12 pour n>3 (c'est la valeure de u pour n=3)
Je pense qu'il y a un probleme a partir du else (ou du second if), mais je ne voie vraiment pas lequel!!)
Merci d'avance de vos reponses!
En fait, il me renvoie toujours 12 pour n>3 (c'est la valeure de u pour n=3)
Je pense qu'il y a un probleme a partir du else (ou du second if), mais je ne voie vraiment pas lequel!!)
Merci d'avance de vos reponses!
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
28 sept. 2009 à 19:38
28 sept. 2009 à 19:38
Hello,
je vois deux erreurs.
D'abord, à la ligne 20 (d'après ton post)
C'est le genre d'erreur sournoise que le compilateur ne détecte pas :P Il faut utiliser &&
Ta deuxième erreur est plus une erreur de conception : ton programme ne fait pas ce que demande l'énoncé. L'énoncé demande :
1/ tester où est n par rapport à 3 et 7
2/ en fonction du résultat, faire une des trois sommes décrites.
Ton programme fait :
1/ commencer une somme à n tours
2/ à chaque tour, regarder où je suis par rapport à 3 et 7
3/ en fonction du résultat, ajouter une valeur donné par une des trois formules de somme décrites.
Je sais pas si j'explique bien mais j'espère que tu vois la différence ;)
Sinon y'a un truc pas clair dans l'énoncé tel que tu le donnes, « toutes les sommes vont de p à n », c'est comme ça en vrai ?
je vois deux erreurs.
D'abord, à la ligne 20 (d'après ton post)
if (3<i<=7)Tu essayes de tester deux choses en même temps. Le premier test, 3<i, renvoie soit 0 soit 1 (le type booléen n'existe pas en C), et ensuite le deuxième test doit comparer soit 0 soit 1 avec 7. Résultat => toujours vrai !
C'est le genre d'erreur sournoise que le compilateur ne détecte pas :P Il faut utiliser &&
Ta deuxième erreur est plus une erreur de conception : ton programme ne fait pas ce que demande l'énoncé. L'énoncé demande :
1/ tester où est n par rapport à 3 et 7
2/ en fonction du résultat, faire une des trois sommes décrites.
Ton programme fait :
1/ commencer une somme à n tours
2/ à chaque tour, regarder où je suis par rapport à 3 et 7
3/ en fonction du résultat, ajouter une valeur donné par une des trois formules de somme décrites.
Je sais pas si j'explique bien mais j'espère que tu vois la différence ;)
Sinon y'a un truc pas clair dans l'énoncé tel que tu le donnes, « toutes les sommes vont de p à n », c'est comme ça en vrai ?
Ah ouais, merci pour le truc avec le if, il va falloir que j'essaie ca!
Concernant ta deuxieme remarque, le prof nous a expliqué que justement, contrairement a ce que l'on pourrait penser (et c'est d'ailleurs mal formulé je trouve), il faut regarder a chaque tour l'indice n, et calculer en fonction... C'est a dire tel que le programme est ecrit ici.
Enfin, concernant l'enoncé, je savais pas trop comment le tapper... En fait, dans l'enoncé, il y a le symbole Sygma, avec en dessous "p=1", et au dessus "n", c'est a dire "somme de 1 a n", mais c'était pas évident a formuler, et je m'en excuse!
Je souhaiterais rajouter une question : Est ce que ca marche quand j'écrit ca?
u=u+(i-3)/(i+1);
Je voudrais confirmation, comme quoi on peut utiliser / pour la division...
Merci pour tes conseils, je vais essayer ca de suite!
Concernant ta deuxieme remarque, le prof nous a expliqué que justement, contrairement a ce que l'on pourrait penser (et c'est d'ailleurs mal formulé je trouve), il faut regarder a chaque tour l'indice n, et calculer en fonction... C'est a dire tel que le programme est ecrit ici.
Enfin, concernant l'enoncé, je savais pas trop comment le tapper... En fait, dans l'enoncé, il y a le symbole Sygma, avec en dessous "p=1", et au dessus "n", c'est a dire "somme de 1 a n", mais c'était pas évident a formuler, et je m'en excuse!
Je souhaiterais rajouter une question : Est ce que ca marche quand j'écrit ca?
u=u+(i-3)/(i+1);
Je voudrais confirmation, comme quoi on peut utiliser / pour la division...
Merci pour tes conseils, je vais essayer ca de suite!
for(i=1;i<=n;i++)
{
if(i<=3)
u=u+2*i;
else
if(i<=7)
u=u+(i-3)/(i+1);
else
u=u+2*i-3;
}
Eh bien apres modification... Le progamme ne fonctionne toujours pas correctement... Il continue a m'afficher 12 pour tout n>3, ce qui est une abération!
U1 vaut 2
U2 vaut 6
U3 vaut 12
MAIS U4 vaut 12+1\5
Je pense qu'il y a un probleme dans la ligne 21 " u=u+(i-3)/(i+1);" est ce que le symbole "\" peut servir pour la division?
Merci d'avance pour vos reponses!
{
if(i<=3)
u=u+2*i;
else
if(i<=7)
u=u+(i-3)/(i+1);
else
u=u+2*i-3;
}
Eh bien apres modification... Le progamme ne fonctionne toujours pas correctement... Il continue a m'afficher 12 pour tout n>3, ce qui est une abération!
U1 vaut 2
U2 vaut 6
U3 vaut 12
MAIS U4 vaut 12+1\5
Je pense qu'il y a un probleme dans la ligne 21 " u=u+(i-3)/(i+1);" est ce que le symbole "\" peut servir pour la division?
Merci d'avance pour vos reponses!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Eh bien finalement, le probleme venait de la declaration des variables.
En effet, comme i est un entier, la division (i-3)/(i+1) est egalement declarée comme étant un entier!
Il suffisait donc de declarer i comme double ou comme float, et le probleme et résolu!
Merci beaucoup a groarh, sans qui une erreure aurait persister dans ce programme, et pour ces remarques pertinantes!
A bientot!
En effet, comme i est un entier, la division (i-3)/(i+1) est egalement declarée comme étant un entier!
Il suffisait donc de declarer i comme double ou comme float, et le probleme et résolu!
Merci beaucoup a groarh, sans qui une erreure aurait persister dans ce programme, et pour ces remarques pertinantes!
A bientot!