Forum Clubic

Langage C : Tri de vecteurs

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
    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--;
}
}

nbel1-i = nbel1-1;
nbel1-1 = tmp;

left operand must be l-value = l’opérande de gauche n’est pas assignable.

(ce qui est vrai)

  1. ben t’as qu’à afficher dans l’ordre décroissant le truc qui est dans l’ordre décroissant. T’auras l’ordre croissant :smiley:

  2. premièrement, calcul la moyenne
    crée un tableau de taille(tableau1) + taille(tableau2) éléments -> T
    crée une variable stockant le nombre d’élément dans le tableau -> n = 0
    parcours ton premier tableau, et fous dans T[n] vec1[i] si celui-ci est >= m, et s’il n’est pas présent, incrémente n (n++).
    idem pour le second tableau…

salut je vais essayer de te proposer un code. j’appelle cela un pseudo code C parce que je suis pas sur qu’il n’yait pas d’erreur de syntaxe. Toute façon regarde ce code attentivement et essayer de corriger d’eventuelle erreur de syntaxe. car ça fait un peu vieux q j’ai fait du C. Contente moi si t’as des pepin

[CODE]

/* cette fonction permet de retourner la moyenne des elements d’un tableau
Prend en parametre le tableau en question et nombre d’elements de ce tableau
je supppose là que le premier element du tableau commence a l’index 0

*/

int MoyenneTab(int Tab[],int nbelt){
int somtab=0;
int Moyenne=0;
/* Calcul de la somme des elements du tableau */
for(int i=0; i<nbelt; i++){
somtab+=Tab[i];
}
Moyenne=somtab/nbelt;
return Moyenne;
}

/*fonction presence dans tableau
c’est une fonction qui retourne 1 si l’element cherché est trouvé sinon 0
*/
int PresenceTab(int Tab[], int deb, int fin, int eltcherche){
int cpt=deb;
int trouve=0;
while ((cpt<=fin)&&(trouve=0)){
if (Tab[cpt]==eltcherche){
trouve=1;
}
cpt++;
}
return trouve;
}

/*fonction permettant de repondre a la troisieme partie de ton exercice
Là je suppose que ton vecteur 3 a la taille requise. c’est a dire que sa taille maxi
doit ete la somme de la taille des deux(2) autres vecteurs
*/

void Partie3Exercice(int Vect1[],int Vect2[],int Vect3[],int nbeltvect1,int nbeltvect2){
int MoyVect1, MoyVect2;
MoyVect1=MoyenneTab(Vect1,nbeltvect1);
MoyVect2=MoyenneTab(Vect2,nbeltvect2);
for (int i=0; i<nbeltvect1;i++){

	if ((vect1[i]&gt;=MoyVect1)&amp;&amp;(PresenceTab(Vect3[],0,i-1,Vect[i])==0)){
		vect3[i]=Vect1[i];
	}
}

/* on fait le meme traitement que celui appliqué sur  le vecteur 1 

ici on part de la valeur actuelle du compteur i afin d'eviter d'ecraser les elements contenu déja dans le vecteur3
*/
for (int j=0; j&lt;nbeltvect2;j++){
		
	if ((vect2[j]&gt;=MoyVect2)&amp;&amp;(PresenceTab(Vect3[],0,i-1,Vect[j])==0)){
		vect3[i]=Vect2[j];
		i++;
	}
}

}