programme simple avec fautes - C - Programmation
Marsh Posté le 18-09-2014 à 11:22:42
Merde, j'en trouve que 6
Au passage, on fait pas les devoirs, ici. Dis-nous déjà celles que t'as repérées.
Marsh Posté le 18-09-2014 à 11:48:51
la plus grosse des fautes, c'est qu'on a aucune idée de l'usage de ce code en le regardant
Marsh Posté le 18-09-2014 à 12:47:09
salut
alors voila une version plus clair.
j'Ai noté les fautes en commentaires.
et puis je suis encore debutant. donc soyez indulgeants envers moi.
Code :
|
Marsh Posté le 18-09-2014 à 13:04:37
rufo a écrit : Merde, j'en trouve que 6 |
J'ai les 7
A+,
Marsh Posté le 18-09-2014 à 13:07:25
francsous a écrit : |
avec ce commentaire, ça fait une erreur nettement explicitée...
EDIT: j'avais pas vu que c'était volontaire
A+,
Marsh Posté le 18-09-2014 à 13:10:11
La plus grosse faute, c'est de le pas donner des noms explicites aux variables et fonctions
Si j'étais prof de prog et qu'un étudiant me rend un code comme ça avec de tels noms de variables et fonctions, c'est 0 direct
*p(int*)malloc(n*sizeof(int)); -> sans une opération d'affectation, aucune chance que ça marche
Petit indice : à aucun moment, tu ne vérifies que n > 0
Marsh Posté le 18-09-2014 à 13:15:28
*p(int*)malloc(n*sizeof(int));
Il a juste fait une faute de frappe dans son commentaire:
Il voulait écrire
*p = (int*)malloc(n*sizeof(int));
qui serait pas faux, mais en général on ne caste pas le retour d'un malloc en C, c'est pas une erreur, mais c'est inutile.
Une ligne valable serait donc *p = malloc( n * sizeof(int) );
aux considérations sur le fait que n soit positif près.
A+,
Marsh Posté le 18-09-2014 à 13:24:11
C'est surtout à la ligne 17 qu'un n = 0 va poser pb
Et je ne parle même pas de la ligne 7 qui "pousse le bouchon trop loin"
Marsh Posté le 18-09-2014 à 13:25:56
francsous a écrit : bonjour cher(e)s internautes, |
En rouge les 7 erreurs du jeu (en tout cas, clairement celles attendues par qui a pondu l'exo).
A+,
Marsh Posté le 18-09-2014 à 13:39:23
Gilou, pour le for(i = n-1; i >= 0; i++), c'est pas plutôt le i++ qui pose pb (devrait être i-- à mon sens) ?
Et bizarrement, tu relèves pas la ligne 17 qui ne vérifie pas que n est différent de 0. Pourtant, en saisissant 0, on y passera bien à cette ligne
Edit : pour la L24, je suis partagé. Pour moi, ça va afficher que la partie entière de ce que retourne c(). Ca va pas lever d'erreur d'exécution (contrairement à la L17 avec un n = 0) mais ça sera pas forcément le résultat attendu, sauf si le but du programme est de n'afficher que la partie entière de la moyenne des nbs saisis...
Marsh Posté le 18-09-2014 à 14:12:59
D'après moi il y a inversion des deux conditions:
for(i = n-1; i >= 0; i++) => for(i = 0; i <= n-1; i++)
Mais c'est vrai que for(i = n-1; i >= 0; i--) a tout autant de sens
Mais bon, remplir un tableau de valeurs en commençant par la fin, bof...
A+,
Marsh Posté le 18-09-2014 à 14:15:58
Citation : Et bizarrement, tu relèves pas la ligne 17 qui ne vérifie pas que n est différent de 0. Pourtant, en saisissant 0, on y passera bien à cette ligne |
Je n'ai relevé que celles existant, même si les meilleures datas sont fournies en entrée.
Parce que sinon, le premier point, c'est qu'il n'y a aucun commentaire avant les implémentations de fonctions, et le second, c'est qu'on utilise scanf pour de l'input console
A+,
Marsh Posté le 18-09-2014 à 14:34:01
Je trouve pourtant que c'est une bonne idée d'inculquée dès le début qq bonnes pratiques telles que :
- toujours vérifier qu'une alloc ne retourne pas NULL (vérif pas faite L6 au passage ). Ca marche aussi avec l'ouverture d'un fichier.
- avant une division, toujours vérifier que le dénominateur n'est pas nul
- lors d'une comparaison entre une variable et une valeur, mettre la valeur à gauche du == (comme ça, si le dév se plante en mettant qu'un =, le compilo le verra, ça pourra pas faire une affectation )
...
Marsh Posté le 18-09-2014 à 15:05:49
On est bien d'accord la dessus.
pour sa 2e fonction, un truc dans ce genre aurait été un peu plus clean:
double c(int p[], int n) {
int sum = 0, i = n;
while (i) {
sum += p[--i];
}
return (n?sum/n:0);
}
A+,
Marsh Posté le 18-09-2014 à 21:58:13
gilou a écrit : J'ai les 7 |
Merci les gars. tout est rentré dans l'ordre. mille fois merci.
Marsh Posté le 18-09-2014 à 22:02:24
Leur place est indiquée en rouge dans une de mes réponses.
A+,
Marsh Posté le 18-09-2014 à 22:12:09
gilou a écrit : Leur place est indiquée en rouge dans une de mes réponses. |
merci . tout est rentré dans l'ordre.... ca marche
Marsh Posté le 18-09-2014 à 10:08:52
bonjour cher(e)s internautes,
ce programme a exactement 7 fautes.
je vous prierai de me les retrouver car je ne suis pas un as de la programmation. j'apprends encore.
merci et bonne journée
---------------
apprend , appris, j'ai compris.