Cours de programmation séquentielle
Écrire un programme permettant de jouer au nombre secret. Le but est de faire chercher à l’utilisateur·trice un nombre déterminé aléatoirement par l’ordinateur. Le nombre de coups mis pour trouver la solution sera compté et affiché à la fin de la partie. La borne maximum pour le choix du nombre caché sera demandée à l’utilisateur·trice.
Pour générer des nombres aléatoires, utiliser la fonction rand() qui
retourne un nombre aléatoire entre 0 et l’entier maximum (cf. la
commande man 3 rand). Pour initialiser le générateur de
nombre aléatoire, appeler la fonction srand() qui prend
en paramètre un entier non signé (la graine). On peut par exemple passer
time(NULL)
en paramètre à srand(). L’appel
time(NULL)
retourne l’horloge système en secondes.
Il est nécessaire d’inclure les bibliothèques suivantes dans le programme:
#include <stdio.h> /* printf(), scanf() */
#include <stdlib.h> /* srand(), rand(), RAND_MAX */
#include <time.h> /* time() */
#include <math.h> /* log() */Lors de la compilation, il faut également lier la bibliothèque
mathématique en ajoutant l’option -lm à la fin de la
commande, après les fichiers sources.
RAND_MAX
(la plus grande valeur que peut retourner rand()). Sinon, ou
si l’entrée n’est pas un nombre, le programme affiche un message
d’erreur et s’arrête.Une fois ce qui précède terminé, échangez les rôles!
Écrire un programme où l’ordinateur et l’utilisateur·trice échangent
leurs rôles. Afin de signifier à l’ordinateur que le nombre secret est
plus grand ou plus petit que sa proposition, l’utilisateur·trice rentre
< ou > respectivement et =
en cas de victoire de l’ordinateur (il se pourrait que le type
char vous soit utile).2 Par exemple, si
l’ordinateur propose 12 et que le nombre secret est 20, il faut répondre
< (car 12 < 20). Le programme demande d’abord le
nombre maximum, comme dans la première partie. Le nombre auquel on pense
doit être compris entre 0 et ce maximum, bornes incluses. Implémentez
différentes stratégies pour l’ordinateur (recherche exhaustive,
bisection, etc.).
L’ordinateur doit pouvoir détecter si vous avez triché! Il y a triche si vos réponses sont contradictoires, c’est-à-dire si plus aucun nombre entre 0 et le maximum ne peut être le nombre secret. Dans ce cas, le programme s’arrête en l’indiquant.
Afin d’avoir des nombres aléatoires différents à chaque exécution, il
faut utiliser la fonction srand() qui vous permet de fixer
la graine du générateur de nombres pseudo-aléatoires
rand(). Pour plus d’information:
man 3 rand
Il se peut que vous décidiez de vérifier les entrées
utilisateurs·trices. Pour ce faire, vous utiliserez probablement la
fonction scanf(). Lorsque les entrées sont mal formées vous
pourriez voir apparaître une boucle infinie. Pour corriger ce problème,
vous pouvez utiliser les lignes magiques après avoir appelé la fonction
scanf():
int c;
while ((c = getchar()) != '\n' && c != EOF) { }Voir le lien suivant pour plus d’informations.