programme simple avec fautes

programme simple avec fautes - C - Programmation

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.
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void b(int**p, int n){
  4.   int i;
  5.   *p = (int*)malloc(n*sizeof(char));
  6.     for(i = 0; i <= n; i++)
  7.     scanf("%d", &((*p)[i]));
  8.   }
  9. double c(int *p, int n){
  10.     int i;
  11.     int a;
  12.     a = 0;
  13.       for(i = n-1; i >= 0; i++)
  14. a = a + (p + i);
  15.   free(p);
  16.     return a / n;
  17.   }
  18. int main(void){
  19.   int n;
  20.   int *d;
  21.     scanf("%d", &n);
  22.     b(d, n);
  23.     printf("%d\n", c(d, n));
  24. return 0;
  25. }


 
merci et bonne journée


---------------
apprend , appris, j'ai compris.
Reply

Marsh Posté le 18-09-2014 à 10:08:52   

Reply

Marsh Posté le 18-09-2014 à 10:59:37    

t'es sur qu'il n'y en a pas un peu plus ?  [:cerveau manust]


---------------
last.fm
Reply

Marsh Posté le 18-09-2014 à 11:22:42    

Merde, j'en trouve que 6 :cry:
 
Au passage, on fait pas les devoirs, ici. :o Dis-nous déjà celles que t'as repérées.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 18-09-2014 à 12:47:09    

salut  :hello:  
alors voila une version plus clair.
 
j'Ai noté les fautes en commentaires.
et puis je suis encore debutant. donc soyez indulgeants envers moi. :bounce:  :bounce:  

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //1er fction: creation de n champs de nombre á enregistrer.
  4. void b(int**p, int n){
  5.   int i;
  6.   *p = (int*)malloc(n*sizeof(char)); // *p(int*)malloc(n*sizeof(int));
  7.     for(i = 0; i <= n; i++)
  8.     scanf("%d", &((*p)[i]));
  9.   }
  10. double c(int *p, int n){ // 2eme fction: calcul de la moyenne des nombres enregistrés.
  11.     int i;
  12.     int a;
  13.     a = 0;
  14.       for(i = n-1; i >= 0; i++)
  15. a = a + (p + i); // a=a + *(p+i);
  16.   free(p);
  17.     return a / n;
  18.   }
  19. int main(void){// corps du sujet.
  20.   int n;
  21.   int *d;
  22.     scanf("%d", &n); // enregistrement du nombre de champs á creer.
  23.     b(d, n); // b(&d, n); // creation des champs.
  24.     printf("%d\n", c(d, n)); // peut etre encore printf("%f\n", c(&d, n))
  25. return 0;
  26. }


---------------
apprend , appris, j'ai compris.
Reply

Marsh Posté le 18-09-2014 à 13:04:37    

rufo a écrit :

Merde, j'en trouve que 6 :cry:
 
Au passage, on fait pas les devoirs, ici. :o Dis-nous déjà celles que t'as repérées.

J'ai les 7 [:python]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2014 à 13:07:25    

francsous a écrit :


    printf("%d\n", c(d, n)); // peut etre encore printf("%f\n", c(&d, n))

avec ce commentaire, ça fait une erreur nettement explicitée...
EDIT: j'avais pas vu que c'était volontaire
A+,


Message édité par gilou le 18-09-2014 à 13:19:30

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 :o
 
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 :fou:  
 
*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 :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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+,


Message édité par gilou le 18-09-2014 à 13:18:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2014 à 13:24:11    

C'est surtout à la ligne 17 qu'un n = 0 va poser pb :whistle:  
 
Et je ne parle même pas de la ligne 7 qui "pousse le bouchon trop loin" :o


Message édité par rufo le 18-09-2014 à 13:24:31

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-09-2014 à 13:24:11   

Reply

Marsh Posté le 18-09-2014 à 13:25:56    

francsous a écrit :

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.
 
 
#include <stdio.h>
#include <stdlib.h>
 
void b(int**p, int n){
  int i;
  *p = (int*)malloc(n*sizeof(char));
    for(i = 0; i <= n; i++)
    scanf("%d", &((*p)[i]));
  }
double c(int *p, int n){
    int i;
    int a;
    a = 0;
      for(i = n-1; i >= 0; i++)  // ou for(i = n-1; i >= 0; i++) au choix
 a = a + (p + i);
   free(p);
    return a / n;
  }
int main(void){
  int n;
  int *d;
    scanf("%d", &n);
    b(d, n);
    printf("%d\n", c(d, n));
return 0;
}  
 
merci et bonne journée


En rouge les 7 erreurs du jeu (en tout cas, clairement celles attendues par qui a pondu l'exo).
A+,


Message édité par gilou le 18-09-2014 à 22:04:28

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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...


Message édité par rufo le 18-09-2014 à 13:42:01

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 [:buggy]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 ;) )
...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2014 à 21:58:13    

gilou a écrit :

J'ai les 7 [:python]  
A+,


 
Merci les gars. tout est rentré dans l'ordre. mille fois merci. :jap:  :jap:  :jap:  :bounce:  :bounce:  :hello:


Message édité par francsous le 18-09-2014 à 22:10:13

---------------
apprend , appris, j'ai compris.
Reply

Marsh Posté le 18-09-2014 à 22:02:24    

Leur place est indiquée en rouge dans une de mes réponses.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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.
 
A+,


merci . tout est rentré dans l'ordre.... ca marche :pt1cable:  :pt1cable:  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed