Les seuls documents papier autorisés sont vos notes de cours, de travaux dirigés et de
travaux pratiques. Les documents électroniques autorisés sont les documents présents sur
les machines de l'IUT et dont vous êtes l'unique auteur (ainsi que les éventuels
documents de cours). En dehors de la machine qui vous est attribuée et de votre matériel
de composition (crayons, stylos, …), aucun matériel n'est autorisé. L'usage de
Visual Studio Code
(ou OSS Code
) est proscrit.
Toutes les réponses devront prendre la forme de fichiers source en langage C (plus les scripts de compilation). Suivez scrupuleusement les instructions de ce sujet, vos réponses doivent correspondre aux exemples d'exécution : soyez rigoureux !
Sauf indication contraire, vous pouvez supposer que les données fournies sur la ligne de commande ou l'entrée standard respectent les restrictions de l'énoncé et ne nécessitent donc pas de contrôle.
Assurez-vous que votre copie de travail est à jour (git pull). Dans le
répertoire dédié au module (normalement, ~/DEV/DEV1.1/
), créez un nouveau
répertoire nommé CM1
. Faites-en votre répertoire courant et placez-y tous
les fichiers générés durant l'épreuve.
Effacez tous les fichiers temporaires et ne gardez que les fichiers d'extension
.c
, .h
et les éventuels Makefile
(attention à ne
pas effacer vos fichiers source !). Placez-vous ensuite dans le répertoire
immédiatement au dessus de CM1
et archivez votre travail,
par exemple par la commande :
bob@box:DEV1.1$ tar czvvf dummy_CM1.tar.gz CM1Remplacez le mot dummy par votre login. Téléversez l'archive ainsi obtenue à cet endroit.
Attention Vous utiliserez obligatoirement
les options -ansi -pedantic
lors de la compilation.
Chien. (2 points) Écrivez dans un fichier nommé
exo1.c
un programme qui affiche la figure suivante :
__ (___()'`; /, /` \\"--\\
Complétion. (2 points) Placez dans un fichier nommé
exo2.c
l'ébauche de programme suivante :
#include <stdio.h> #include <stdlib.h> int main(void) { ... a = 7; ... b = 77; ... c = 777; ... d = 7777; printf("%03hd\n", a); printf("%c\n", b); printf("%.0f\n", c); printf("%lx\n", d); return EXIT_SUCCESS; }
Remplacez les points de suspension pour que les variables aient un type approprié aux formats utilisés dans les appels à printf. Ne modifiez rien d'autre dans ce programme.
Craps. (6 points) Dans le jeu de craps, on lance deux dés à six faces. Parmi les résultats possibles, on retiendra ici :
Écrivez dans un fichier nommé exo3.c
un programme qui demande à
l'utilisateur de saisir la valeur obtenue sur chaque dé, puis affiche un message si l'une
des trois situations décrites plus haut est détectée.
bob@box:CM1$ ./a.out Entrez le premier dé : 1 Entrez le second dé : 1 Snake eyes
Chance. (5 points) Dans la plus récente version des règles de Donjons et Dragons, on résoud une action en lançant un dé à vingt faces (numérotées de 1 à 20) et en espérant obtenir la plus grande valeur possible. Si la situation est favorable, on lance deux dés et on retient le meilleur résultat. Ça a clairement l'air mieux, mais à quel point ?
Écrivez dans un fichier nommé exo4.c
un programme qui simule toutes les
combinaisons possibles en lançant deux dés à vingt faces et qui affiche la moyenne de
tous les résultats retenus.
Coulé. (5 points) Dans une partie de bataille navale, un joueur place ses navires (sans qu'ils se touchent) sur une grille de 10 lignes par 10 colonnes :
L'autre joueur ne voit pas cette grille. À chaque tour, il choisit une case et on lui répond «dans l'eau» si la case est vide, ou «touché» si la case est occupée par un navire. Le but est de couler toute la flotte en un minimum de coups.
Écrivez dans un fichier nommé exo5.c
un programme qui joue le rôle du
défenseur. La grille de départ est fixe et décrite directement dans le code.
L'utilisateur indique quelle la case viser et le programme répond comme expliqué plus
haut. Lorsque la flotte est coulée, le programme affiche le nombre de coups utilisé puis
s'arrête. Aucun affichage de la grille n'est demandé.
bob@box:CM1$ ./a.out Coordonnées ? 4 7 Touché Coordonnées ? 4 8 Dans l'eau Coordonnées ? 4 6 Touché ... Partie terminée en 76 coups