Contrôle Machine n°1

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 CM1
Remplacez 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.

  1. Singe. (2 points) Écrivez dans un fichier nommé exo1.c un programme qui affiche la figure suivante :

       .-"-.
     _/.-.-.\_
    ( ( o o ) )
     |/  "  \|
      \ .-. /
      /`"""`\
     /       \
    

  2. Similitude. (2 points) Placez dans un fichier nommé exo2.c l'ébauche de programme suivante :

    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
      ... a = 1;
      ... b = 11;
      ... c = 111;
      ... d = 1111;
     
      printf("%e\n", a);
      printf("%7o\n", b);
      printf("%c\n", c);
      printf("%2hd\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.

  3. Section. (6 points) Écrivez dans un fichier nommé exo3.c un programme qui demande à l'utilisateur de taper un caractère, puis affiche l'un des messages suivants :

    voyelle
    une voyelle minuscule
    minuscule
    une minuscule, mais pas une voyelle
    autre
    un cas différent des cas précédents

    Pour simplifier l'exercice, les caractères accentués donneront systématiquement le message autre.

    bob@box:CM1$ ./a.out
    Entrez un caractère : g
    minuscule
    

  4. Sélection. (5 points) Dans une vielle version des règles de Donjons et Dragons, le titre de paladin ne pouvait être conféré à un personnage que si sa force vaut au moins 15. Sachant que cette caractéristique est générée en faisant la somme des résultats de trois dés à six faces, on se demande quelles sont les chances d'atteindre le seuil requis.

    Écrivez dans un fichier nommé exo4.c un programme qui simule toutes les combinaisons de résultats possibles en lançant trois dés et qui affiche la probabilité d'obtenir au moins 15 (c'est à dire le nombre de combinaisons qui produisent 15 ou plus, divisé par le nombre total de combinaisons).

  5. Sortie. (5 points) On souhaite proposer à l'utilisateur un jeu où il doit sortir d'un labyrinthe. On considère que le labyrinthe est formé de 10 lignes et 10 colonnes. Chaque case de cette grille est vide ou pleine. La position de départ est forcément une case vide, mais son emplacement dans la grille est inconnue du joueur.

    À chaque tour, le joueur peut tenter de se déplacer vers le nord, le sud, l'est ou l'ouest. Si ce déplacement l'amène en dehors du labyrinthe, il a gagné. Si ce déplacement va vers une case pleine, alors il est refusé. Si le déplacement va vers une case vide, il est accepté.

    Écrivez dans un fichier nommé exo5.c un programme qui accepte les ordres de l'utilisateur et indique leur conséquence, en boucle. Lorsque le joueur sort du labyrinthe, le programme affiche le nombre de tours écoulés et s'arrête.

    La grille qui représente le labyrinthe est fixe et décrite directement dans le code. Il en est de même pour la position de départ. Aucun affichage du labyrinthe n'est requis, ni souhaitable.

    bob@box:CM1$ ./a.out
    Vers où ? N
    Bloqué
    Vers où ? S
    OK
    Vers où ? E
    OK
    ...
    Vers où ? O
    Vous êtes sorti au bout de 76 tours.
    

retour à la page d'accueil

retour au sommet