Boris Eng

R&D Engineer at OCamlPro, PhD in computer science [first name][last name]@proton.me
« Return to Teaching

Entraînement sur les tableaux en C

Fonctions sur les tableaux

  1. int eqtab(int tab1[], int tab2[], int taille1, int taille2) qui renvoie TRUE si les tableaux ont les mêmes éléments et FALSE sinon.

  2. int index(int x, int tab[], int taille) qui renvoie l’indice du premier x s’il est dans le tableau, sinon -1.

  3. int occ(int x, int tab[], int taille) qui renvoie le nombre de fois que x apparaît dans tab.

  4. int bounded_by(int tab[], int taille, int limite) qui renvoie TRUE si tous les éléments de tab sont inférieurs (<=) à limite et FALSE sinon.

  5. int palindrome(int tab[], int taille) qui renvoie TRUE si le tableau est palindrome et FALSE sinon. Un tableau est palindrome lorsqu’il est la fusion d’un tableau et de son inverse. Par exemple : {1, 2, 1} ou {1, 2, 3, 3, 2, 1}.

Tester les fonctions

Mettez ces tests dans votre fonction main. Passez-vous tous les tests ? (1=correct, 0=incorrect) Si ce n’est pas le cas, corrigez vos fonctions (ou les tests s’ils sont incorrects).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int t0[1] = {1};
int t1[3] = {8, 1, 4};
int t2[3] = {4, 1, 8};
int t3[4] = {8, 1, 4, 1};
int t4[3] = {1, 2, 1};
int t5[4] = {1, 2, 2, 1};

printf("test eqtab : %d\n", eqtab(t1, t1, 3, 3));
printf("test eqtab : %d\n", !eqtab(t1, t2, 3, 3));
printf("test eqtab : %d\n", !eqtab(t1, t3, 3, 4));

printf("test index : %d\n", index(0, t1, 3)==-1);
printf("test index : %d\n", index(8, t1, 3)==0);
printf("test index : %d\n", index(4, t1, 3)==2);

printf("test occ : %d\n", occ(8, t3, 4)==1);
printf("test occ : %d\n", occ(0, t3, 4)==0);
printf("test occ : %d\n", occ(1, t3, 4)==2);

printf("test bounded_by : %d\n", !bounded_by(t1, 3, 0));
printf("test bounded_by : %d\n", bounded_by(t1, 3, 8));
printf("test bounded_by : %d\n", bounded_by(t1, 3, 9));

printf("test palindrome : %d\n", !palindrome(t1, 3));
printf("test palindrome : %d\n", palindrome(t4, 3));
printf("test palindrome : %d\n", palindrome(t5, 4));

Quelques corrections

eqtab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define TRUE 1
#define FALSE 0

int eqtab(int tab1[], int tab2[], int taille1, int taille2)
{
	// Si les deux tableaux n'ont pas la même taille, ils sont forcément différents

	if (taille1 != taille2)
		return FALSE;
		
	// Cas où les deux tableaux ont la même taille

	int i;
	for (i=0; i<taille1; i++)
	{
		// Si trouve une différence en les comparant, les tableaux sont différents

		if (tab1[i] != tab2[i])
			return FALSE;
	}
	
	// Si tous les tests ont été passés, les tableaux sont bien égaux

	return TRUE;
}