TP de Programmation en C

n°1

Les types entiers et leurs limites, les tableaux et la fonction main() paramétrée

http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c/

IUT GTR Sophia Antipolis

Oct 2000

Recommandations importantes :

Exercice 1 (fichier fahrenheitCelsius.c)

Affichez la table des températures en degrés Fahrenheit et leurs équivalents en degrés Celsius (minimum 0 °F, maximum 300 °F, incrément de 20 °F).

  1. Calculez et affichez cette table. Voici la formule : °C = 5*(°F-32)/9
  2. Trouvez-vous la même chose avec une machine à calculer (tapez xcalc si vous êtes sous Unix) ? Si non, pourquoi ?
  3. Changez légèrement l'ordre de la formule : °C = (5/9)*(°F-32). Que se passe-t-il ?
  4. Changez de nouveau la formule °C = (5.0/9)*(°F-32) (5.0 étant un nombre à virgule ou flottant). Le type de la variable contenant le résultat doit être remplacé par float et le %d du printf en %6.2f. Maintenant la table est juste.

Exercice 2 (fichier matriceAddition.c)

Additionnez 2 matrices (une matrice étant un tableau à 2 dimensions).

Rappel : R = C + D

R matrice résultat, C et D les matrices à additionner

R, C et D doivent avoir le même nombre de lignes et de colonnes

Voilà comment calculer la valeur de la case de ligne i et de colonne j : Rij = Cij + Dij

Exemple de définition en C d’une matrice :

int matrice[NB_LIG][NB_MAX] = {{1,2,3}, {4,5,6}} ;

  1. Vérifiez que les tailles des matrices sont compatibles.
  2. Stockez le résultat de cette addition dans une troisième matrice.
  3. Affichez cette dernière.

Exercice 3 (fichier matriceMultiplication.c)

Multipliez 2 matrices.

Rappel : R = C*D

R matrice résultat, C et D les matrices à multiplier

C ayant n lignes et o colonnes, D ayant o lignes et p colonnes et R ayant n lignes et p colonnes

Voilà comment calculer la valeur de la case de ligne i et de colonne j : Rij = åkCik*Dkj

  1. Vérifiez que les tailles des matrices sont compatibles.
  2. Stockez le résultat de cette multiplication dans une matrice résultat.
  3. Affichez la matrice résultat.

Exercice 4 (fichier factorielle.c)

Calculez n! en utilisant la relation de récurrence : n! = n*(n-1)! avec 1!=1

  1. Calculez de façon itérative n! (n étant une constante du programme e.g. 5)
  2. Nous souhaitons maintenant pouvoir donner une valeur à n pour généraliser le programme (cela serait utile d’avoir un programme calculant n! et pas seulement 5!).

Deux solutions :

Codez la deuxième solution.

Voici le prototype de main : int main(int nbArg, char* argL[]) ;

L'appel de votre programme (appelé par exemple factorielle) se fera par factorielle 6

nbArg sera égal à 2, argL[0] = ² factorielle² et argL[1] = ²² .

Si l'utilisateur n'a tapé que factorielle, affichez une message d’erreur.

Pour convertir la chaîne contenant la valeur de n en int, il faut utiliser la fonction

int atoi(const char *s) ; de la bibliothèque stdlib.h.

  1. Modifiez le type de la variable contenant le résultat en :

Rappel : -2n-1 £ nombre signé £ 2n-1-1 (n étant le nombre de bits)

0 £ nombre non signé £ 2n-1

Exercice 5 (fichier morpion.c)

Implantez le jeu du morpion en C.

Vous avez besoin d’une grille 3*3 et de 2 joueurs ayant des pions différents.

A tour de rôle, chaque joueur positionne un de ses pions sur la grille. Le jeu se finit quand un joueur a réalisé une ligne, une colonne ou une diagonale avec ses pions (c'est le gagnant) ou quand la grille est pleine (pas de gagnant).

La grille est représentée par un tableau à 2 dimensions, global au module (i.e. accessible de n'importe quelle fonction). Chaque case contiendra soit VIDE, ROND ou CROIX.

Algorithme principal :

Initialisation de la grille à vide

Tant que (pas de gagnant ou pas grille pleine)

Afficher grille

Mettre un pion sur la grille

Nous vous fournissons le corps du programme. Votre rôle est de compléter ces quatre fonctions :

/* Initialise la grille du morpion à vide */

void initialiseGrille() ;

/* Affiche la grille du morpion

_ indique case vide, O pion joueur 1 et X pion joueur 2 */

void afficheGrille() ;

/* Saisie les coordonnées du nouveau pion à mettre sur la grille

Si les coordonnées sont en dehors de la grille ou si la case possède déjà un pion, la saisie est refusée, un message d'erreur est affiché, et le joueur doit rejouer

*/

void metUnPionSurLaGrille() ;

/* Teste si l'un des joueurs a gagné (ligne, colonne ou diagonale remplie de pions semblables). Dans ce cas, affiche un message pour indiquer le joueur qui a gagné.

S'il n'y a pas de gagnant, teste que la grille n'est pas pleine. Si elle est pleine, affiche un message indiquant qu'aucun des joueurs a gagné

Retourne TRUE si la grille est pleine ou si un joueur a gagné

FALSE sinon

*/

Boolean testeFinJeu() ;

Commencez d'abord par les deux premières fonctions et testez. Puis continuez avec la fonction metUnPionSurLaGrille et testez. Et enfin, terminez avec la fonction testeFinJeu qui est un peu plus complexe.