Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2965 connectés 

  FORUM HardWare.fr
  Programmation
  C

  programme simple avec fautes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

programme simple avec fautes

n°2238172
francsous
fransou
Posté le 18-09-2014 à 10:08:52  profilanswer
 

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.
mood
Publicité
Posté le 18-09-2014 à 10:08:52  profilanswer
 

n°2238176
theshockwa​ve
I work at a firm named Koslow
Posté le 18-09-2014 à 10:59:37  profilanswer
 

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


---------------
last.fm
n°2238183
rufo
Pas me confondre avec Lycos!
Posté le 18-09-2014 à 11:22:42  profilanswer
 

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
n°2238184
kadreg
profil: Utilisateur
Posté le 18-09-2014 à 11:48:51  profilanswer
 

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 !
n°2238187
francsous
fransou
Posté le 18-09-2014 à 12:47:09  profilanswer
 

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.
n°2238190
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 13:04:37  profilanswer
 

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é!  --
n°2238191
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 13:07:25  profilanswer
 

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é!  --
n°2238192
rufo
Pas me confondre avec Lycos!
Posté le 18-09-2014 à 13:10:11  profilanswer
 

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
n°2238193
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 13:15:28  profilanswer
 

*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é!  --
n°2238196
rufo
Pas me confondre avec Lycos!
Posté le 18-09-2014 à 13:24:11  profilanswer
 

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
mood
Publicité
Posté le 18-09-2014 à 13:24:11  profilanswer
 

n°2238198
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 13:25:56  profilanswer
 

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é!  --
n°2238204
rufo
Pas me confondre avec Lycos!
Posté le 18-09-2014 à 13:39:23  profilanswer
 

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
n°2238217
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 14:12:59  profilanswer
 

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é!  --
n°2238219
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 14:15:58  profilanswer
 

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é!  --
n°2238226
rufo
Pas me confondre avec Lycos!
Posté le 18-09-2014 à 14:34:01  profilanswer
 

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
n°2238237
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 15:05:49  profilanswer
 

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é!  --
n°2238282
francsous
fransou
Posté le 18-09-2014 à 21:58:13  profilanswer
 

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.
n°2238283
gilou
Modérateur
Modzilla
Posté le 18-09-2014 à 22:02:24  profilanswer
 

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é!  --
n°2238284
francsous
fransou
Posté le 18-09-2014 à 22:12:09  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  programme simple avec fautes

 

Sujets relatifs
Déterminer si un programme s'arrête ou non ?Probleme exo simple en C
Programme (comme grep) capable de lire depuis stdinrécupération programme xilinx xc8536xl
aide pour un programme en cDifficulté à compiler un programme
[BATCH] Simple collerProgramme .bat invisible
Programme qui utilise un autre programmeLogiciel ultra simple pour les ainés svp
Plus de sujets relatifs à : programme simple avec fautes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR