From e81ad472484827744ab35479f1a5a27a55d7ec47 Mon Sep 17 00:00:00 2001 From: Pierre Kunzli <pierre.kuenzli@unige.ch> Date: Wed, 21 Sep 2022 16:45:22 +0200 Subject: [PATCH] ajout fichiers md --- Exercices/serie_01.md | 48 +++++++++++++++++++++++++++ Exercices/serie_02.md | 77 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 Exercices/serie_01.md create mode 100644 Exercices/serie_02.md diff --git a/Exercices/serie_01.md b/Exercices/serie_01.md new file mode 100644 index 0000000..4b06621 --- /dev/null +++ b/Exercices/serie_01.md @@ -0,0 +1,48 @@ +--- +title: "Programmation séquentielle" +subtitle: "Série 1" +date: 20.09.2022 +--- + +# Exercice 1 + +Ecrire, compiler et exécuter le programme suivant. Comprenez-vous ce qu’il fait ? + +```C +#include <stdio.h> + +void main() { + int i; /* i : variable de type entier */ + int j; /* j : variable de type entier */ + i=22; /* i vaut 22 */ + j=i; /* on recopie la valeur de i dans j */ + /* donc j vaut aussi 22 à présent */ + + printf ("i vaut %d\n", i); /* Affiche la valeur de i */ + printf ("i+j vaut %d\n", i+j); /* Affiche la valeur de i+j */ +} +``` + +# Exercice 2 + +La fonction scanf permet de lire une variable introduite depuis le clavier. Notez le & avant la variable (on verra plus tard dans le cours à quoi ça sert) ; "%d" permet de +spécifier qu’il s’agit d’un entier. Ecrire ce programme, le compiler et l’exécuter. + +```C +void main() { + int age = 0; // On initialise la variable à 0 + printf("Quel age avez-vous ? "); + scanf("%d", &age); // On demande d'entrer l'age avec scanf + printf("Ah ! Vous avez donc %d ans ! \n\n", age); +} +``` + +# Exercice 3 + +Ecrice un programme qui demande à l'utilisateur une somme d'argent inférieure à 1000chf (en nombre entier, sans centimes) et la décompose +en billets de 100, 50, 20, 10 et pièces de 5, 2 et 1 (voir cours). + +# Exercice 4 + +Ecrire un programme qui donne le périmètre et l’aire d’un cercle à partir du rayon +introduit au clavier par l’utilisateur. Utiliser les float au lieu des int. \ No newline at end of file diff --git a/Exercices/serie_02.md b/Exercices/serie_02.md new file mode 100644 index 0000000..31a9571 --- /dev/null +++ b/Exercices/serie_02.md @@ -0,0 +1,77 @@ +--- +title: "Programmation séquentielle" +subtitle: "Série 2 - Le nombre secret" +date: 20.09.2022 +--- + +# Buts + +- Introduction au langage C +- Utilisation des boucles et des tests +- Utilisation des entrées-sorties +- Utilisation de nombres aléatoires + +# Énoncé + +É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é en 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()`{.C} 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()`{.C} qui prend en paramètre un entier non-signé(la graine). On peut par exemple passer `time(NULL)`{.C} en paramètre à `srand()`{.C}. L'appel `time(NULL)`{.C} retourne l'horloge système en secondes. + +\newpage + +Voici un exemple de programme en C permettant de générer des nombres aléatoire : + +```C +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +void main(){ + srand(time(NULL)); + for(int i=0; i<5; i++){ + int n = rand(); + printf("Nombre généré : %d\n", n); + } +} +``` + +Il est nécessaire d'inclure les bibliothèques suivantes dans le programme: + +```C +#include <stdio.h> /* printf(), scanf() */ +#include <stdlib.h> /* srand(), rand() */ +#include <time.h> /* time() */ +#include <math.h> /* log() */ +``` + +A la compilation il faut également ajouter le flag `-lm` pour générer correctement l'exécutable. + +# Déroulement du programme + +- Au début du programme, l’utilisateur·trice entre le nombre maximum avec lequel il veut jouer. +- Le programme générera un nombre pris au hasard entre 0 et ce maximum. +- Dans une boucle, le programme demandera à l’utilisateur·trice d’entrer un nombre, puis lui répondra par plus petit ou plus grand et ceci jusqu’à la découverte du nombre secret. +- Afin de s'assurer que l'utilisateur·trice joue selon les règles, le programme + doit vérifier que le nombre entré par l'utilisateur·trice n'est pas plus + petit que zéro ou plus grand que le nombre maximal autorisé. Si un de ces + deux cas se présente, le programme affichera un message d'avertissement à + l'utilisateur·trice[^1] afin de lui rappeler les règles. +- Chercher le moyen de trouver le nombre caché de manière optimale en moyenne. +- Afficher en fin de partie le nombre de coups mis par le joueur pour découvrir le nombre secret, ainsi que le nombre de coups optimal maximal théorique permettant de déterminer le nombre secret. + +# Exercice supplémentaire + +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 est plus grand ou plus +petit, l'utilisateur·trice rentre `<` ou `>` respectivement et `=` en cas de victoire de +l'ordinateur (il se pourrait que le type `char` vous soit utile). +Implémentez différentes stratégies pour l'ordinateur (recherche +exhaustive, bisection, etc.). + +[^1]: Par exemple: "Vous devez entrer un nombre plus grand ou égal à zéro." ou "Vous devez entrer un nombre plus petit que 'max'.". -- GitLab