Votre question

Probleme de tri de vecteur en C

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
21 Novembre 2005 17:21:26

Bonjour à tous,

Voila on me demande de remplir 2 vecteur puis de trier leur elements de manière croissante.
Pour l'un je doit utiliser le tri par extraction et pour l'autre le tri par permutation.
Mais j'ai plusieurs problèmes:
1) Le tri par permutation marche mais il m'affiche les elements dans l'ordre décroissant
2)Le tri par extraction m'affiche comme erreur pour la ligne 83 et 84 : "left operand must be l-value"
3)Ensuite on me demande, lorsque tout est trie, de faire la moyenne des elements du vecteurs 1 puis du vecteur 2 et de mettre les element de ces 2 vecteur dans un troisieme vecteur seulement si il sont superieur a la moyenne et de supprimmer ceux qui apparaissent plusieurs fois :-o
Voila, pour le 3 je ne sais pas du tout comment m y prendre.
Si vous pouviez m'aider en essayant de faire simple, sachant que je n'ai pas encore vu les fonction et autre truc plus rapide....
Merci beaucoup

Voila mon programme :

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main()
{
int vec1[50];
int vec2[50];
int vec3[50];
int nbel1, nbel2, tmp, max;
int i;

srand( (unsigned)time( NULL ) );

/* Saisie du nombre d'éléments des vecteurs */
do
{
printf("Entrez le nombre d elements du VECTEUR 1\n");
fflush(stdin);
scanf("%d", &nbel1);

if(nbel1 <= 0)
{
printf("LE VECTEUR DOIT CONTENIR AU MINIMUM UN ELEMENT\n\n");
}
}while(nbel1 <= 0);

do
{
printf("Entrez le nombre d elements du VECTEUR 2\n");
fflush(stdin);
scanf("%d", &nbel2);

if(nbel2 <= 0)
{
printf("LE VECTEUR DOIT CONTENIR AU MINIMUM UN ELEMENT\n\n");
}
}while(nbel2 <= 0);

/* Tri vecteur par permutation */

printf("Vecteur 2 : ");
for(i=0; i<nbel2; i++)
{
vec2 = (rand()%10) + 10;
printf("%d ", vec2);
}
printf("\nVecteur 1 trie : ");
while(vec2[nbel2-1] > 0)
{
i = 0;
while(i < vec2[nbel2-1])
{
if(vec2 > vec2[i+1])
{
tmp = vec2[i+1];
vec2[i+1] = vec2;
vec2 = tmp;
}
i++;
}
nbel2--;
printf("%d ", vec2);
}

/* Tri par extraction */
printf("Vecteur 1 : ");
for(i=0; i<nbel1; i++)
{
vec1 = (rand()%10) + 10;
printf("%d ", vec1);
}
printf("\nVecteur 1 trie : ");
while(nbel1 > 0)
{
i=2;
while(nbel1-1 < nbel1-i)
{
max = nbel1 - 1;
if(max < nbel1-i)
{
tmp = nbel1-i;
nbel1-i = nbel1-1;
nbel1-1 = tmp;
}
i++;
}
nbel1--;
}
}

Autres pages sur : probleme tri vecteur

a b L Programmation
21 Novembre 2005 21:28:26

Je me permet de reposter avec un truc lisible ;-)

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void main()
  6. {
  7. int vec1[50];
  8. int vec2[50];
  9. int vec3[50];
  10. int nbel1, nbel2, tmp, max;
  11. int i;
  12.  
  13. srand( (unsigned)time( NULL ) );
  14.  
  15. /* Saisie du nombre d'éléments des vecteurs */
  16. do
  17. {
  18. printf("Entrez le nombre d elements du VECTEUR 1\n");
  19. fflush(stdin);
  20. scanf("%d", &nbel1);
  21.  
  22. if(nbel1 <= 0)
  23. {
  24. printf("LE VECTEUR DOIT CONTENIR AU MINIMUM UN ELEMENT\n\n");
  25. }
  26. }while(nbel1 <= 0);
  27.  
  28. do
  29. {
  30. printf("Entrez le nombre d elements du VECTEUR 2\n");
  31. fflush(stdin);
  32. scanf("%d", &nbel2);
  33.  
  34. if(nbel2 <= 0)
  35. {
  36. printf("LE VECTEUR DOIT CONTENIR AU MINIMUM UN ELEMENT\n\n");
  37. }
  38. }while(nbel2 <= 0);
  39.  
  40. /* Tri vecteur par permutation */
  41.  
  42. printf("Vecteur 2 : ");
  43. for(i=0; i<nbel2; i++)
  44. {
  45. vec2[i] = (rand()%10) + 10;
  46. printf("%d ", vec2[i]);
  47. }
  48. printf("\nVecteur 1 trie : ");
  49. while(vec2[nbel2-1] > 0)
  50. {
  51. i = 0;
  52. while(i < vec2[nbel2-1])
  53. {
  54. if(vec2[i] > vec2[i+1])
  55. {
  56. tmp = vec2[i+1];
  57. vec2[i+1] = vec2[i];
  58. vec2[i] = tmp;
  59. }
  60. i++;
  61. }
  62. nbel2--;
  63. printf("%d ", vec2[i]);
  64. }
  65.  
  66. /* Tri par extraction */
  67. printf("Vecteur 1 : ");
  68. for(i=0; i<nbel1; i++)
  69. {
  70. vec1[i] = (rand()%10) + 10;
  71. printf("%d ", vec1[i]);
  72. }
  73. printf("\nVecteur 1 trie : ");
  74. while(nbel1 > 0)
  75. {
  76. i=2;
  77. while(nbel1-1 < nbel1-i)
  78. {
  79. max = nbel1 - 1;
  80. if(max < nbel1-i)
  81. {
  82. tmp = nbel1-i;
  83. nbel1-i = nbel1-1;
  84. nbel1-1 = tmp;
  85. }
  86. i++;
  87. }
  88. nbel1--;
  89. }
  90. }

a b L Programmation
21 Novembre 2005 21:37:58

1. il suffit d'inverser le test.
2. tu as apparemmetn oublié de mettre vect2 [nbel1-i]=...
3. là il faut ça pas à pas, tu fais dans l'ordre ce qu'on te demande et tu ajoutes petit à petit les tests conditionnels. par exemple tu ne t'occupe de ne garder les élément unique qu'aà la fin quand tu as fait tout le reste.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS