Egalité de tableau

Résolu/Fermé
yumimitsuki - 18 juin 2011 à 23:22
 yumimitsuki - 19 juin 2011 à 10:28
Bonjour tout le monde!
Jai un programme en c que je n'ai pas pu resoudre. Dans le programme on doit tester si deux tableaux sont egaux ou pas.
voici le programme que j'ai realisé:


#include<stdio.h>
int egalite(int tab1,int tab2)
{ int i,j,s,n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)

if(i==j)
{ if(tab1==tab2)
s=s+1;
}
if(s==n)
return(1);
else
return(0);
}
void main()
{
int i,j,s,n,a[50],b[50];
printf("donnez la taille des tableaux");
scanf("%d",&n);

for(i=0;i<n;i++)
printf("a[%d]=",i);
scanf("%d",&a[i]);


for(j=0;j<n;j++)
printf("b[%d]=",j);
scanf("%d",&b[j]);
if(egalite(a,b)==1)
printf("les tableaux sont egaux");
else
printf("les tableaux ne sont pas egaux");
}


Je sais qu'il y a quelques erreurs.
Pouvez vous m'aider?merci d'avance!!

4 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 18/06/2011 à 23:46
Si tu compares deux tableaux tu dois passer des tableaux en paramètres de ta fonction... Et de même taille, sinon c'est évident qu'ils ne sont pas égaux.

int egalite(int tab1[], int tab2[], int n);
Apprends à te servir d'un compilateur, ce genre d'erreurs sont faciles à identifier !

Sinon, tu n'as pas besoin de compter le nombre de cases bien rempli pour être sûr qu'ils sont égaux, dès que tu as un élément différent tu sors de la fonction avec 1...
Et surtout pas avec un double parcours (i,j) un seul itérateur suffit !

Et puis dans le main il te manque des accolades pour tes for de remplissage de tableaux
La confiance n'exclut pas le contrôle
1
yumimitsuki
19 juin 2011 à 00:06
merci beaucoups pour la reponse! je vous pose quand meme une question, pourquoi vous avez declare n comme variable globale dans la fonction egalite??^_^
1
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 19/06/2011 à 00:12
Elle n'est pas déclarée comme variable globale mais comme paramètre...

Si ton main est bien fait il devrait ressembler à ceci d'où l'intérêt des paramètres !

int main()
{
	int n = entrerNombre("Taille des tableaux : ",0,50);

	int a[50], b[50];
	remplir(a,n,"a");
	remplir(b,n,"b");

	if (egalite(a,b,n)) 
		printf("les tableaux sont egaux"); 
	else 
		printf("les tableaux ne sont pas egaux"); 

	system("PAUSE");
	return 0;
} 

Mais tu es encore loin d'avoir ça !
0
yumimitsuki
19 juin 2011 à 10:28
merci encore!! ça a marché^^
0
Tout à fait, ma logique pascal suggérerait
int egalite(int tab1,int tab2)
{ int i,n;
for(i=0;i<n;i++)
if(tab1<>tab2)
return(0);

return(1);
}
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juin 2011 à 23:49
Plutôt d'accord excepté qu'on doit connaitre la valeur de n à un moment donné.
Note : en C la différence s'exprime avec l'opérateur !=
0
Je note.
et pourquoi les indices des deux tableaux ne sont pas spécifiés, ou du moins ça n'a pas l'air de vous choquer ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juin 2011 à 23:54
Autant pour moi j'avais mal regardé ton code ^^ Si ils doivent être spécifiés bien sûr.
Tant pis, je donne la réponse pour que tu comprennes :p

int egalite(int tab1[],int tab2[], int n) 
{
	int i; 
	for (i=0; i<n; i++)
		if (tab1[i]!=tab2[i])
			return 0;
	return 1;
}
0
ha oui, je comprends beaucoup mieux...
et aurais appris plus en C que jamais auparavant, c'est dire si je suis juste !
Et désolé de t'avoir forçé à donner une réponse complète, il est clair qu'à ce niveau de simplicitée, il faut commencer par prendre le temps de réfléchir...
0
Car il n'est pas déclaré en global, il est présent qu'au niveau du corps du programme, donc il faut le préciser à la fonction...
0
Plus précisément, n est déclaré dans l'en-tête de la fonction, donc il se trouve sur la pile ou dans un registre, et non pas dans le tas global permanent.
En fait, on utilise n dans le corps du programme et dans la fonction, mais il ne s'agit pas de la même variable, le n de la fonction étant rempli par le programme lors de l'appel de ladite fonction...
0
haha je suis noté sévèrement là ! il est vrai que dans ma première réflexion j'en était resté au programme initial sans n dans l'en-tête de fonction, et le C est encore loin d'avoir pour moi la clartée du pascal !
0