Comparaison de deux tableaux en C
adri10
-
adri10 -
adri10 -
Bonjour à tous,
J'ai encore quelques difficultés en c et j'aurais donc besoin de votre aide^^.
J'ai tenté de créer un programme dans lequel je dois entrer deux tableaux distincts et ensuite, comparer le 1er élément du tableau 1 avec le 1er élément du tableau 2 et afficher l'élément le plus grand dans un 3eme tableau, ainsi de suite pour chacun des éléments.
Les deux premiers tableaux s'affichent convenablement mais pas le 3ème :/
Pouvez-vous me mettre sur la bonne piste pour afficher correctement le 3eme tableau?
Exemple : tableau 1 : 45 78 96
tableau 2 : 74 63 14
tableau 3: 74 78 96
Voici mon code
Merci beaucoup
J'ai encore quelques difficultés en c et j'aurais donc besoin de votre aide^^.
J'ai tenté de créer un programme dans lequel je dois entrer deux tableaux distincts et ensuite, comparer le 1er élément du tableau 1 avec le 1er élément du tableau 2 et afficher l'élément le plus grand dans un 3eme tableau, ainsi de suite pour chacun des éléments.
Les deux premiers tableaux s'affichent convenablement mais pas le 3ème :/
Pouvez-vous me mettre sur la bonne piste pour afficher correctement le 3eme tableau?
Exemple : tableau 1 : 45 78 96
tableau 2 : 74 63 14
tableau 3: 74 78 96
Voici mon code
#include<stdio.h> #include<stdlib.h> int lecture1(int tab1[]) { int tabtemp1,i1; i1=0; do { printf("nombre du vecteur 1 "); scanf("%d",&tabtemp1); if(tabtemp1>10) { if(tabtemp1<100) { tab1[i1]=tabtemp1; i1++; } else if(tabtemp1!=0) printf("erreur de saisie\n\n"); } else if(tabtemp1!=0) printf("erreur de saisie\n\n"); if(tabtemp1==0) i1=i1-1; } while (tabtemp1!=0); return i1; } int lecture2(int tab2[]) { int tabtemp2,i2; i2=0; do { printf("nombre du vecteur 2 "); scanf("%d",&tabtemp2); if(tabtemp2>10) { if(tabtemp2<100) { tab2[i2]=tabtemp2; i2++; } else if(tabtemp2!=0) printf("erreur de saisie\n\n"); } else if(tabtemp2!=0) printf("erreur de saisie\n\n"); if(tabtemp2==0) i2=i2-1; } while (tabtemp2!=0); return i2; } void affiche1(int tab1[],int i1) { int n1; for(n1=0;n1<=i1;n1++) { printf(" %d ",tab1[n1]); } } void affiche2(int tab2[],int i2) { int n2; printf("\n\n\n\n"); for(n2=0;n2<=i2;n2++) { printf(" %d ",tab2[n2]); } } int comparaison(int tab3[], int tab1[],int tab2[],int i1,int i2) { int n3,n1,n2,i3; i3=i1; for(n1=0;n1<=i1;n1++) { for(n2=0;n2<=i2;n2++) { for(n3=0;n3<=i3;n3++) { if (tab1[n1]>tab2[n2]) { tab3[n3]=tab1[n1]; } else tab3[n3]=tab2[n2]; } } } return n3; } void affiche3(int tab3[],int n3) { int f3; for(f3=0;f3<=n3;f3++) { printf(" %d ",tab3[f3]); } } int main() { int tab1[50],nbt1,nbt2,tab2[50],nbt3,tab3[50]; nbt1=lecture1(tab1); nbt2=lecture2(tab2); affiche1(tab1,nbt1); affiche2(tab2,nbt2); printf("\n\n"); nbt3=comparaison(tab3,tab1,tab2,nbt1,nbt2); affiche3(tab3,nbt3); system("pause"); }
Merci beaucoup
A voir également:
- Comparer deux tableaux en c
- Fusionner deux tableaux excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
- Tableaux croisés dynamiques - Guide
5 réponses
Salut !
Ton problème vient de ta fonction de comparaison !
Alors déjà ton algorithme ne m'a pas forcément l'air au point, ou alors c'est voulu... mais j'en doute un peu...
Pour commencer lors de la saisie de tes tableaux, ils n'ont pas forcément la même taille ! Je ne sais pas si tu l'avais remarqué ou si c'est volontaire. Bref je vais considérer que l'utilisateur a saisi autant de nombres pour les 2 tableaux pour faciliter la comparaison.
Ensuite lors de la comparaison, si j'ai bien compris ce que tu dis au début du post tu souhaites comparer les éléments de chaque tableau un à un.
Et c'est là que ça coince totalement !
Tu pars du premier élément de tab1 et tu le compares à l'ensemble des éléments de tab2 (première incohérence) et ensuite tu vas écrire (i3-1) fois le même nombre (en fonction de ton résultat if) dans ton tableau tab3.
D'ailleurs ce nombre devrait être le résultat issu du if entre le premier élément de tab1 et du dernier élément de tab2 !
Je me trompe ?
Ton problème vient de ta fonction de comparaison !
Alors déjà ton algorithme ne m'a pas forcément l'air au point, ou alors c'est voulu... mais j'en doute un peu...
Pour commencer lors de la saisie de tes tableaux, ils n'ont pas forcément la même taille ! Je ne sais pas si tu l'avais remarqué ou si c'est volontaire. Bref je vais considérer que l'utilisateur a saisi autant de nombres pour les 2 tableaux pour faciliter la comparaison.
Ensuite lors de la comparaison, si j'ai bien compris ce que tu dis au début du post tu souhaites comparer les éléments de chaque tableau un à un.
Et c'est là que ça coince totalement !
Tu pars du premier élément de tab1 et tu le compares à l'ensemble des éléments de tab2 (première incohérence) et ensuite tu vas écrire (i3-1) fois le même nombre (en fonction de ton résultat if) dans ton tableau tab3.
D'ailleurs ce nombre devrait être le résultat issu du if entre le premier élément de tab1 et du dernier élément de tab2 !
Je me trompe ?
Kuku007
Messages postés
183
Date d'inscription
Statut
Membre
Dernière intervention
23
Ah même pas ! Au final tu fais la comparaison entre le dernier élément de tab1 et le dernier élément de tab2 et c'est cette même valeur qui est dupliqué i1 fois dans tab3.
Bonjour et merci pour ta réponse.
Alors je ne devrais pas faire de boucle for pour les éléments du 2eme tableau et je ferais une boucle for simplement pour le 1er tableau et ensuite une boucle if pour le second?
Pour le 3ème tableau, je retirerais aussi la boucle for (qui ne me paraissait pas très correcte) je le l'écrirais alors comme ceci:
si tab1[i1]>tab2[i2]
tab3[i3]=tab1[i1]
sinon tab3[i3]=tab2[i2]???
Alors je ne devrais pas faire de boucle for pour les éléments du 2eme tableau et je ferais une boucle for simplement pour le 1er tableau et ensuite une boucle if pour le second?
Pour le 3ème tableau, je retirerais aussi la boucle for (qui ne me paraissait pas très correcte) je le l'écrirais alors comme ceci:
si tab1[i1]>tab2[i2]
tab3[i3]=tab1[i1]
sinon tab3[i3]=tab2[i2]???
Bonjour,
J'ai modifié mon code pour les fonctions comparaison et affiche3 mais j'ai maintenant un gros plantage :/
J'ai modifié mon code pour les fonctions comparaison et affiche3 mais j'ai maintenant un gros plantage :/
int comparaison(int tab3[], int tab1[],int tab2[],int i1,int i2) { int n1,n2,n3; for(n1=0;n1<=i1;n1++) { if(tab1[n1]>tab2[n2]) { tab3[n3]=tab1[n1]; n2++; n3++; } else { tab3[n3]=tab2[n2]; n2++; n3++; } } return n3; } void affiche3(int tab3[],int n3) { int f3; for(f3=0;f3<=n3;f3++) { printf(" %d ",tab3[f3]); } }
Normal que ça plante !
Tu n'initialises pas tes compteurs n2 et n3.
C'est pas grave c'est de toute manière pas la bonne démarche !
Si tu fais bien de la comparaison une à une ! C'est simple : tu conserves que n1 !!!
Un seul compteur de boucle suffit si tous les tableaux ont la même tailles.
du style
int comparaison(int tab3[], int tab1[],int tab2[],int i1)
{
int n1;
for(n1=0;n1<i1;n1++)
{
if(tab1[n1]>tab2[n1])
tab3[n1]=tab1[n1];
else
tab3[n1]=tab2[n1];
}
return n1;
}
Tu n'initialises pas tes compteurs n2 et n3.
C'est pas grave c'est de toute manière pas la bonne démarche !
Si tu fais bien de la comparaison une à une ! C'est simple : tu conserves que n1 !!!
Un seul compteur de boucle suffit si tous les tableaux ont la même tailles.
du style
int comparaison(int tab3[], int tab1[],int tab2[],int i1)
{
int n1;
for(n1=0;n1<i1;n1++)
{
if(tab1[n1]>tab2[n1])
tab3[n1]=tab1[n1];
else
tab3[n1]=tab2[n1];
}
return n1;
}
Salut !
Désolé j'étais parti en grand week end de mariage donc pas d'internet ;-)
J'essaierais de regarder ça ce soir si j'oublie pas héhé.
Désolé j'étais parti en grand week end de mariage donc pas d'internet ;-)
J'essaierais de regarder ça ce soir si j'oublie pas héhé.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question