TD5 - Les tableaux statiques

Les tableaux statiques

Durée : 1h30

Inès de Courchelle

Attention :

À chaque étape de programmation, vous devez vérifier si le programme :

  • Compile sans warning
  • Obtient les résultats attendus
  • Avant de coder, il faut écrire un algo avec un papier et un stylo !

Rappels

Pour compiler un programme, on utilise l’instruction suivante :

gcc -Wall exo.c -o nomExecutable

Pour executer un programme, on utilise l’instruction suivante :

./nomExecutable

Exercice 1 : Les tableaux statiques

  1. Créer le fichier exo1.c (Pas de compilation séparée pour cet exercice) :
#include <stdio.h>
#include <stdlib.h>

int main(){
    printf("Les tableaux en C \n");
    return 0;
}
  1. Écrire une procédure qui permet de créer un tableau 1D contenant des valeurs aléatoires.
/* Auteur : Inès de Courchelle */
/* Date : 12/11/25 */
/* Résumé : créer un tableau aleatoire contenant des valeurs entre 0 et 10 */
/* Entrée(s) : le tableau et le nombre de case que l'on souhaite mettre */
/* Sortie(s) : aucune */
void aleatoire(int monTab[N], int taille);
  1. Écrire une procédure afficherTab qui permet d’afficher un tableau d’entier de taille N.
/* Auteur :  */
/* Date :  */
/* Résumé : affiche un tableau 1D  */
/* Entrée(s) : un tableau 1D, et la taille du tableau */
/* Sortie(s) : aucune */
void afficherTableau(int monTab[N], int taille);
  1. Écrire un prédicat qui permet de vérifier qu’un tableau 1D de taille N ne contient que des entiers de même signe.
/* Auteur :  */
/* Date :  */
/* Résumé : predicat permettant de savoir si un tableau contient des entiers du même signes  */
/* Entrée(s) : un tableau 1D, et la taille du tableau */
/* Sortie(s) : 1 => Vrai si tous les entiers sont du même signe et 0 => FAUX s'ils ne sont pas du même signe */
int estDuMemeSigne(int monTab[N],int taille);

Exercice 2 : Le carré magique

Un carré magique d’ordre n est un tableau n x n tel que la somme des entiers de chaque ligne, chaque colonne et des deux diagonales est identique.

Exemple : Tableau carré magique d’ordre 3

  1. Créer les fichiers carre.c, carre.h et main.c et le makefile associé.

  2. Ajouter dans le programme principal la définition d’une matrice déjà remplie

TIPS : comment remplir directement un tableau en C ?

Un tableau 1D
int tab[3]={8, 1, 6};

Attention Il faut le faire la déclaration et l’affectation en même temps, sinon ça ne marche pas.

Un tableau 2D
int carre[3][3]=
{
    {8, 1, 6},
    {3, 5, 7},
    {4, 9, 2}
};

Attention Il faut le faire la déclaration l’affectation en même temps, sinon ça ne marche pas.

  1. Ecrire une procédure permettant d’afficher une matrice carré.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
void afficherTableau(int carre[N][N], int taille);
  1. Écrire une fonction permettant de faire la somme d’une ligne passée en paramètre.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int cptLigne(int carre[N][N],int ligne, int taille);
  1. Écrire une fonction permettant de faire la somme d’une colonne passée en paramètre.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int cptColonne(int carre[N][N],int colonne,int taille);
  1. Écrire une fonction permettant de faire la somme de la diagonale du carré en partant d’en bas à gauche.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int cptDiag1(int carre[N][N],int taille);
  1. Écrire une fonction permettant de faire la somme de la diagonale du carré en partant d’en haut à gauche.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int cptDiag2(int carre[N][N],int taille);
  1. Écrire un prédicat permettant de dire si un carré passé en paramètre est magique. Vous utiliserez les fonctions précédement créées.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int estMagique(int carre[N][N], int taille);
  1. Compléter le programme principal afin de faire appel au prédicat permettant de vérifier si un carré est magique.

Exercice 3 : Le morpion

  1. Créer les fichiers morpion.c, morpion.h et main.c et le makefile associé.

  2. Créer une procédure initGrille qui permet d’initialiser la grille, lorsqu’aucun joueur n’a joué. Elle contiendra uniquement la valeur -1

/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
void initTableau(int grille[N][N], int taille);
  1. Créer une procédure affGrille qui permet d’afficher la grille, selon les valeurs contenues dans chaque case :
  • Si la case contient un -1, alors j’affiche un espace
  • Si la case contient un 1, alors j’affiche un ‘X’
  • Si la case contient un 2, alors j’affiche un ‘O’
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
void afficherGrille(int grille[N][N], int taille);
  1. Créer une procédure tour2jeu qui prend en paramètre la grille de jeu, le joueur à jouer, qui demande au joueur de choisir une case vide (ligne+colonne, à vérifier), et si la case est bien vide qui joue le coup.
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
void tour2jeu(int grille[N][N],int joueur);
  1. Écrire un prédicat aGagne qui prend en paramètre un joueur, la grille et qui vérifie si le joueur a gagné
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int aGagne (int grille[N][N], int joueur,int taille);
  1. Créer le programme principal qui affiche la grille puis alterne les tours de jeu jusqu’à ce qu’un joueur gagne ou que toutes les cases soient remplies, sans vainqueur. Vous afficherez alors le nom du vainqueur ou bien “match nul”