Université Louis Pasteur
LICENCE 1ère année
Mercredi 7 mars 2007
 
Travaux Dirigés
Algorithmique et Programmation
(sujet n°3)

Tableaux


Notions et points abordés :

Déclaration d'un tableau à 1 dimension

Syntaxe

Exemple

// Déclaration

type nom[taille];


// Déclaration d'un tableau de 100 variables entières

int prime_numbers[100]

 
Accès aux éléments d'un tableau à 1 dimension (indicés à partir de 0)

Syntaxe

Exemple

nom[index] = value;

// Le premier nombre premier est 2

prime_numbers[0] = 2;

// Le 100ème nombre premier est 541

prime_numbers[99] = 541;

variable = nom[index];

int first_prime;

first_prime = prime_numbers[0];


printf( "%d", nom[index] );

// Affichage du premier nombre premier

printf( "%d", prime_numbers[0] );



scanf( "%d", &nom[index] );
// Lecture du 100ème nombre premier

scanf( "%d", &prime_numbers[99] );


Tableau à 1 dimension en argument d'une fonction

#include <stdio.h>

int sum ( int array [], int size )
{
int i, total = 0;

for( i = 0, sum = 0; i < size; i++)
  total += array [i];

return total;
}

int main()
{
int prime_numbers[] = {2, 3, 5, 7, 11, 13};
int sum_of_primes;

sum_of_primes = sum ( prime_numbers, 6 );

printf( "La somme des 6 premiers nombres premiers est: %d\n", sum_of_primes );


return 0;
}


Attention: Si vous passez un tableau comme paramètre à une fonction, elle peut modifier les éléments du tableau (par effet de bord) !

#include <stdio.h>

void clear_array ( int array [], int size )
{
int i;
for( i = 0; i < size; i++)
  array [i] = 0;
}

int main()
{
int prime_numbers[] = {2, 3, 5, 7, 11, 13};

printf( "Le premier nombre premier est : %d\n", prime_numbers[0] );

clear_array( prime_numbers, 6 );

printf( "Et maintenant : %d\n", prime_numbers[0] );


return 0;
}


Remarque : En C, une chaine de caractère est un tableau à 1 dimension dont le type des éléments est char. Le caractère spécial '\0' est utilisé pour indiquer la fin de la chaine.
 

#include <stdio.h>

int main()
{
char s[255] = {'h','e','l','l','o','\0'};

printf( "%s", s );

return 0;
}


Déclaration d'un tableau à 2 dimensions

Syntaxe

Exemple

// Déclaration

type nom[taille1][taille2];

// Déclaration d'un tableau à 2 dimensions
// de 52x6 variables entières (non initialisées)
// (les 6 numéros sortants des 52 derniers tirages)

int loto_numbers[52][6];

Accès aux éléments d'un tableau à 2 dimensions

Syntaxe

Exemple

nom [index1][index2] = value;

// Les 6 numéros du 1er tirage

loto_numbers[0][0] = 3;
loto_numbers[0][1] = 7;
loto_numbers[0][2] = 9;
loto_numbers[0][3] = 12;
loto_numbers[0][4] = 23;
loto_numbers[0][5] = 34;



variable = nom[index1][index2];

printf( "%d", nom[index1][index2] );

first_number = loto_numbers[0][0];

printf( "%d", loto_numbers[0][0]);

Tableaux à 2 dimensions en argument d'une fonction

#include <stdio.h>

// On doit indiquer le nombre d'éléments sur la deuxième dimension
// (ce n'est pas nécessaire pour la première dimension)

int sum ( int array [][6], int size )
{
int i, j, total = 0;

for( i = 0; i < size; i++)
for( j = 0; j < 6; j++)
  total += array[i][j];

return total;
}

// autre version
int sum2 ( int array [2][6] )
{
int i, j, total = 0;

for( i = 0; i < 2; i++)
for( j = 0, j < 6; j++)
  total += array[i][j];

return total;
}

int main()
{
int naturels[2][6] = { {1, 3, 5, 7, 9, 11}, {2, 4, 6, 8, 10, 12} };
int sum_of_nat, sum2_of_nat;

sum_of_nat = sum(naturels, 2);
printf( "La somme des 6 premiers entiers naturels: %d\n", sum_of_nat );
sum2_of_nat = sum2(naturels);
printf( "La somme des 6 premiers entiers naturels est: %d\n", sum2_of_nat );

return 0;
}


Exercices


Afficher

    Écrire une fonction qui affiche les éléments d'un tableau d'entiers passé en paramètre :

        void print( int array[], int size )

Saisir

    Écrire une fonction qui saisit de l'utilisateur les éléments d'un tableau d'entiers passé en paramètre :

        void read( int array[], int size )

Maximum

    Écrire une fonction qui renvoie le maximum d'un tableau d'entiers passé en paramètre :

        int max( int array[], int size )


Recherche

    Écrire une fonction qui teste si un entier x passé en paramètre est dans un tableau :

        int is_in_array( int array[], int size, int x )


Echange

    Écrire une fonction qui échange dans un tableau deux éléments (d'indices i et j) :

        void swap( int array[], int size, int i, int j )


Occurrences

    Écrire une fonction qui calcule le nombre de fois où un nombre x est présent dans un tableau :

        int occurrences( int array[], int size, int x )


Miroir

    Écrire une fonction qui renverse un tableau (par exemple, {1, 2, 3} devient {3, 2, 1}) :

        void reverse( int array[], int size )


Permutation circulaire

    Écrire une fonction qui effectue une permutation circulaire de la gauche vers la droite d'un tableau (par exemple, {1, 2, 3, 4} devient {4, 1, 2, 3}) :

    void permutate( int array[], int size )


Palindrome

    Écrire une fonction qui teste si un tableau est un palindrome, c'est-à-dire qu'il reste le même si on inverse l'ordre (par exemple {1, 2, 3, 2, 1} est un palindrome, mais {1, 2, 3} ne l'est pas) :

    int is_palindrome( int array[], int size )


Afficher2

    Écrire une fonction qui affiche les éléments d'un tableau à 2 dimensions passé en paramètre :

    void print2( int array[][3], int size )


Saisir2

    Écrire une fonction qui saisit de l'utilisateur les éléments d'un tableau à deux dimensions d'entiers passé en paramètre :
   

    void read2( int array[][3], int size )


Maximum2

    Écrire une fonction qui renvoie le maximum d'un tableau d'entiers à deux dimensions passé en paramètre :

    int max2( int array[][3], int size )


Occurrences2

    Écrire une fonction qui calcule le nombre d'occurrences d'un nombre dans un tableau à deux dimensions :

    int occurrences2( int array[][3], int size, int x )


Sudoku

    Écrire une fonction qui teste si un tableau 3x3 contient la solution du jeu Sudoku (les éléments sont les nombres 1,..,9 sans répétition) :

    int is_sudoku( int array[3][3] )