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

  FORUM HardWare.fr
  Programmation
  C++

  [C] Débutant: je trouve pas les erreurs !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Débutant: je trouve pas les erreurs !!

n°231338
*LighTninG​*
Posté le 20-10-2002 à 18:04:23  profilanswer
 

Salut!
Etant débutant en C, je n'arrive pas à comprendre où se situent les erreurs dans ce petit programme.
Il s'agissait de rédiger un programme qui tri les valeurs d'un tableau par ordre croissant.
 
 
-----------------------------------------------------------------

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //saisie du tableau
  4. void saisir_tableau(int tab[],int nbentiers)
  5. {
  6. int i;
  7. int entier;
  8. i=0;
  9. printf("Combien d'entiers? (2 minimum) \n" );
  10. scanf("%i",&nbentiers);
  11. while(nbentiers<2)
  12. {
  13. printf("Erreur ! Combien d'entiers? (2 minimum) \n" );
  14. scanf("%i",&nbentiers);
  15. }
  16. tab=(int *) malloc (nbentiers * sizeof(int) );
  17. for(i=0;i<nbentiers;i++)
  18. {
  19. printf("Entrez la %ie valeur du tableau: ",i+1);
  20. scanf("%i",&tab[i]);
  21. }
  22. }
  23. //affichage tableau
  24. void affiche_tableau(int tab[],int nbentiers)
  25. {
  26. int i;
  27. int entier;
  28. entier=0;
  29. i=0;
  30. while(i<=nbentiers)
  31. {
  32. printf("%i \n",tab[i]);
  33. i++;
  34. }
  35. }
  36. //tri
  37. void tri_bulles(int tab[],int nbentiers) 
  38. {
  39. int i,j,min,aux;
  40. int perm;
  41. aux=0;
  42. i=0;
  43. j=2;
  44. min=j;
  45. perm=1;
  46. while(perm=1)
  47. {
  48. min=j;
  49. perm=0;
  50. for(i=nbentiers;i>=min;i--)
  51.  {
  52.  if (tab[i]<tab[i-1])
  53.   {
  54.   aux=tab[i];
  55.   tab[i]=tab[i-1];
  56.   tab[i-1]=aux;
  57.   j=i;
  58.   perm=1;
  59.   }
  60.  }
  61. }
  62. }
  63. //fonction principale
  64. main()
  65. {
  66. int nbentiers;
  67. int *tab;
  68. nbentiers=0;
  69. tab=0;
  70. saisir_tableau(tab,nbentiers);
  71. affiche_tableau(tab,nbentiers);
  72. tri_bulles(tab,nbentiers);
  73. affiche_tableau(tab,nbentiers);
  74. free(tab);
  75. }


-----------------------------------------------------------------
 
Donc si vous pouviez m'aider ce serait sympa, ca fait déjà 2h que je bloque.
 
Merci d'avance.


Message édité par *LighTninG* le 20-10-2002 à 18:08:43
mood
Publicité
Posté le 20-10-2002 à 18:04:23  profilanswer
 

n°231341
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 18:07:05  profilanswer
 

c quoi le message d'erreur ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°231342
*LighTninG​*
Posté le 20-10-2002 à 18:10:09  profilanswer
 

Ben il compile bien le prog, il le lance, je peux saisir les valeurs dans le tableau mais au moment du tri il y a une erreur et le prog s'arrete

n°231346
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 18:16:11  profilanswer
 

la voila ton erreur :
 
int nbentiers;  
int *tab;  
     
nbentiers=0;  
tab=0;
 
 
tu donnes à un pointeur la valeur 0, et comme tu utilises ce pointeur dans ta fonction de tri à bulles, tu lis ou écris à cet emplacement mémoire, ce qui est interdit !
 
et en plus, ton tableau n'est meme pas initialisé, la mémoire n'est pas réservée, bref, c pas la joie !!


Message édité par Harkonnen le 20-10-2002 à 18:19:45

---------------
J'ai un string dans l'array (Paris Hilton)
n°231353
*LighTninG​*
Posté le 20-10-2002 à 18:29:38  profilanswer
 

Ben oui Harkonnen c'est bien pour ca que je suis un débutant :)
 
Mais euh qu'est ce t'entend par initialiser le tableau? Reserver la memoire? Pourtant j'ai mis un malloc dans la fonction saisie ca suffit pas?
 
Sinon le debuggeur m'indique que ca merde au niveau du printf
je comprend tjs pas pkoi
 

Code :
  1. //affichage tableau  
  2.  
  3.   void affiche_tableau(int tab[],int nbentiers)
  4.   {
  5.     int i;
  6.     int entier;
  7.    
  8.     entier=0;
  9.     i=0; 
  10.    
  11.     while(i<=nbentiers)
  12.      {
  13.        printf("%i \n",tab[i]);
  14.        i++;
  15.      }
  16.   }


Message édité par *LighTninG* le 20-10-2002 à 18:30:24
n°231358
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 18:36:20  profilanswer
 

Ca merde au niveau du printf parce que tu demandes à lire une valeur qui se trouve à un emplacement mémoire interdit !
 
Vire déja le tab=0 dans le main.
 
Ensuite, toujours dans le main, réserve la mémoire nécessaire à ce tableau, avant la fonction saisir_tableau :
 
tab=(int *)calloc(nbentiers * sizeof(int) );
 
j'ai remplacé malloc par calloc pour initialiser ton tableau à 0
 
vire la ligne équivalente dans ta fonction saisir_tableau
 
ça devrait déja aller un peu mieux :)


---------------
J'ai un string dans l'array (Paris Hilton)
n°231366
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 18:45:02  profilanswer
 

t'aime pas les for ?


---------------
du bon usage de rand [C] / [C++]
n°231381
*LighTninG​*
Posté le 20-10-2002 à 19:00:38  profilanswer
 

taz@ppc > Si si j'aime bien aussi les for :)
 
Bon merci harkonnen déjà c'est mieu en effet, mais ya encore des pbs: Au moment d'afficher le tableau avant le tri il n'affiche que la premiere valeur de celui ci et n'effectue pas la boucle  :??: J'ai essayé avec une boucle for et ca change rien.
 
Et d'ailleurs au niveau du tri j'ai l'impression que ca ne fonctionne pas non plus .


Message édité par *LighTninG* le 20-10-2002 à 19:01:37
n°231384
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 19:12:31  profilanswer
 

de toutes facon le tri par bulles c'est le plus nul  :o   :D


---------------
du bon usage de rand [C] / [C++]
n°231400
*LighTninG​*
Posté le 20-10-2002 à 19:31:04  profilanswer
 

Ben peut etre mais c'est le boulot qu'on ma donné à faire donc y vaut mieu que je fasse comme on me l'a indiqué :)

mood
Publicité
Posté le 20-10-2002 à 19:31:04  profilanswer
 

n°231402
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 19:33:36  profilanswer
 

si ton tableau fait nbentiers, alors
 
i=nbentiers; et tab[i] ca marche pas...


---------------
du bon usage de rand [C] / [C++]
n°231411
Kristoph
Posté le 20-10-2002 à 19:51:39  profilanswer
 

Code :
  1. while(perm=1)


 
Voila la grosse bourde classique ;)
 
C'est pas une comparaison, c'est une affectation
 

n°231413
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 19:54:36  profilanswer
 

comme koi ca peut servir de regarder ses warnings de compilation  :sarcastic:


---------------
du bon usage de rand [C] / [C++]
n°231414
*LighTninG​*
Posté le 20-10-2002 à 19:55:19  profilanswer
 

Kristoph > Merci :)
 
Taz@PPC > Bah justement ya pas de warnings
 
Mais kk1 peut il m'expliquer pkoi il me fait pas cette boucle ?
Je sais je sais je suis franchement pas doué mais bon...


Message édité par *LighTninG* le 20-10-2002 à 19:55:57
n°231415
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 19:56:37  profilanswer
 

Lightning >> j'éspère quand même que t'as compris ce que je t'ai dit de faire et pourquoi il faut le faire ! Sinon ça sert à rien... :(


---------------
J'ai un string dans l'array (Paris Hilton)
n°231416
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 19:57:15  profilanswer
 

ben tu as décidé de parcourir le tableau de la fin vers le debut donc
 
fo(i=nbentiers-1; i!=0; --i)
{
  // ...
}


---------------
du bon usage de rand [C] / [C++]
n°231419
*LighTninG​*
Posté le 20-10-2002 à 20:00:06  profilanswer
 

Oui harknonnen j'ai compris ce que tu ma dis de faire et la je  ne referais plus cette connerie :)


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

  [C] Débutant: je trouve pas les erreurs !!

 

Sujets relatifs
pitie aidez moi (débutant en C)débutant !
[ADA], je ne trouve pas ADA95 :/questions debutant (c++ entrees sorties)
Problème lors de l'upload, il me trouve pas d'attributs snifff2 questions de débutant !?
TextBox on change -> update automatique -> Trouvé !!![Java Script] Débutant
erreur sql ca doit pas etre grand chose mais trouve pasDebutant en C comment faire ca:
Plus de sujets relatifs à : [C] Débutant: je trouve pas les erreurs !!


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