Tom's Guide > Forum > Programmation > Probleme de tri de vecteur en C

Probleme de tri de vecteur en C

Forum Programmation : Probleme de tri de vecteur en C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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[i] = (rand()%10) + 10;
printf("%d ", vec2[i]);
}
printf("\nVecteur 1 trie : " );
while(vec2[nbel2-1] > 0)
{
i = 0;
while(i < vec2[nbel2-1])
{
if(vec2[i] > vec2[i+1])
{
tmp = vec2[i+1];
vec2[i+1] = vec2[i];
vec2[i] = tmp;
}
i++;
}
nbel2--;
printf("%d ", vec2[i]);
}

/* Tri par extraction */
printf("Vecteur 1 : " );
for(i=0; i<nbel1; i++)
{
vec1[i] = (rand()%10) + 10;
printf("%d ", vec1[i]);
}
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--;
}
}

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

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


Répondre à CRicky

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.

Répondre à CRicky
Tom's Guide > Forum > Programmation > Probleme de tri de vecteur en C
Aller à :

Il y a 336 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens