Egalité de tableau

Résolu
yumimitsuki -  
 yumimitsuki -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
 
merci encore!! ça a marché^^
0
nicocorico
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
nicocorico
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
nicocorico
 
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
nicocorico
 
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
nicocorico
 
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
nicocorico
 
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