Vous êtes sur la page 1sur 4

Tronc Commun

Langage C

Travaux Pratiques

Pr. Nabila ZRIRA


Département Informatique

Année Universitaire : 2021-2022


Travaux pratiques Tronc Commun
Langage C Année : 2021 - 2022

TP 2 : Les tableaux

On souhaite simuler des lancements de dés et analyser les statistiques des résultats obtenus.

Partie 1 : Cas d'un seul dé.


1- Comment obtenir un entier compris entre 1 et 6, pour simuler les 6 faces du dé.
2- Proposer les lignes de code qui permettent de créer un tableau de N entiers (N sera fixé
en constante, à 1000 par exemple, moins en phase de test !), et de le remplir de chiffres
aléatoirement pris entre 1 et 6.
3- A l'aide d'une variable intermédiaire, compter le nombre de "1" présents dans le tableau
et afficher ce résultat. Recommencer pour compter le nombre de "2".
4- Effectuer ce comptage pour les 6 valeurs possibles en utilisant une seule boucle. Penser
à un autre tableau de taille 6.
5- Tester votre programme et afficher les probabilités d'apparition des différentes valeurs.
6- Peut-on dire que les tirages sont aléatoires ?

Partie 2 : Cas de deux dés indiscernables.


Dans le cas de deux dés indiscernables, nous pouvons soit considérer que nous effectuons deux
tirages (on jette un dé deux fois et on fait la somme des valeurs obtenues), soit on fait un seul
tirage d'un nombre compris entre 2 et 12.
7- Modifier votre programme pour traiter ces deux façons de faire.
8- Afficher et comparer les probabilités d'apparition des différentes valeurs de ces deux
méthodes.
9- Quelle méthode donne les tirages les plus équiprobables ?

Un nombre entier 𝑝 ∈ 𝑁 est premier si 𝑝 > 1 et 𝑝 n’est divisible que par 1 et par lui-même. On
notera 𝑃 = {2,3,5,7, … } l’ensemble des nombres premiers. De plus pour tout 𝑖 ∈ 𝑁, 𝑝𝑖 sera le
𝑖 è𝑚𝑒 nombre premier, de sorte que 𝑝0 = 2 , 𝑝1 = 3, 𝑝2 = 5, 𝑝3 = 7, etc.

Approche naïve
1- Écrivez un programme qui demande à l’utilisateur d’entrer un nombre entier naturel, et qui
teste si ce nombre est premier. Si le nombre n’est pas premier, le programme doit afficher
le plus petit diviseur. Le programme devra tester tous les diviseurs possibles en partant de
2.

Pr. Nabila ZRIRA Page 2 sur 4


Travaux pratiques Tronc Commun
Langage C Année : 2021 - 2022

2- Dans la fonction main(), faites une copie du code source de votre programme précédent,
et modifiez-la de manière à afficher tous les nombres premiers compris entre 1 et la valeur
entrée par l’utilisateur (en incluant cette valeur).
3- Faites une copie de votre programme précédent, et modifiez-le de manière à stocker tous
les nombres premiers dans un tableau nommé premier, avant de les afficher. L’élément 𝑖
du tableau doit contenir le 𝑖 è𝑚𝑒 nombre premier : premier[0] contient 2,
premier[1] contient 3, premier[2] contient 5, premier[3] contient 7 , etc.

Crible d’Ératosthène
L’inconvénient de l’algorithme naïf est qu’il effectue de nombreuses divisions inutiles. Par
exemple, il peut tester la divisibilité par 6 d’un entier qui n’est divisible ni par 3, ni par 2.
Ératosthène était un scientifique de l’antiquité, qui a proposé un algorithme appelé Crible
d’Ératosthène, qui permet d’éviter ces calculs inutiles.
4- L’algorithme du Crible d’Ératosthène pour déterminer les nombres premiers compris entre
2 et N est le suivant :

• On considère un tableau contenant tous les entiers de 2 à N.

• On supprime tous les multiples de 2 (sauf 2).

• Parmi les nombres restants, on supprime tous les multiples de 3 (sauf 3).

• On répète ce traitement jusqu’à ce qu’il n’y ait plus de nombre à traiter.

• Les nombres restants à la fin du traitement sont les nombres premiers recherchés.
Appliquez manuellement cet algorithme pour trouver les nombres premiers compris entre
1 et 30.
5- Il est peu pratique d’implémenter directement cet algorithme ici, en raison de la difficulté
à supprimer des éléments dans un tableau. On se propose plutôt d’adapter notre programme
de façon à exploiter le principe d’Ératosthène :

• Soit le tableau premier, utilisé pour stocker les nombres premiers ;

• On considère chaque entier de 2 jusqu’à N ;

• Pour chaque entier n, on teste s’il est premier en le divisant par les nombres
premiers inférieurs à n (qui sont contenus dans le tableau premier) ;

• Si n est premier, on le rajoute dans le tableau. Sinon, on ne fait rien ;

• On passe à n+1.

Faites une copie du programme précédent et modifiez-le pour y intégrer cette modification.

Pr. Nabila ZRIRA Page 3 sur 4


Travaux pratiques Tronc Commun
Langage C Année : 2021 - 2022

Amélioration
L’implémentation de cet algorithme nécessite de déclarer un tableau de taille N, ce qui
requiert une grande quantité de mémoire (si N est grand). Pourtant, on identifie forcément
moins de N nombres premiers, donc une partie de ce tableau est inutilisée. Il est possible
d’utiliser un tableau plus petit en utilisant la propriété suivante :

  n
P1 : n  P   p  P   2;   , p ne divise pas n
  2

6- Faites une copie de votre dernier programme, et modifiez-la de manière à intégrer cette
amélioration permettant d’utiliser un tableau de taille N⁄2 au lieu de N.

Ecrire un programme de jeu de dames très simplifié (un seul pion !). On demande à l’utilisateur
dans quelle case se trouve le pion, on affiche le damier puis on demande à l’utilisateur quel
mouvement il veut effectuer : 0 (en haut à gauche), 1 (en haut à droite), 2 (en bas à gauche), 3
(en bas à droite). On mettra en place un contrôle de saisie afin de vérifier la validité des valeurs
entrées.
Si le mouvement est impossible, on le signale à l’utilisateur et on arrête. Sinon, on déplace le
pion et on affiche le damier résultant. On affichera un « O » pour une case vide et un « X »
sinon.

Pr. Nabila ZRIRA Page 4 sur 4

Vous aimerez peut-être aussi