TD-TP 5 - Université d`Angers

Transcription

TD-TP 5 - Université d`Angers
Introduction à l'algorithmique
TD-TP 5
L1MPCIE 2013-2014
Procédures, Fonctions, Tableaux : Problèmes
1. Configuration d'un ordinateur (Manipulations simultanées de plusieurs tableaux)
On souhaite écrire un programme qui permette de configurer les différents composants d'un ordinateur portable et
d'en calculer le prix, ceci afin d'établir un devis pour le client.
Une configuration peut inclure les composants suivants : Processeur, Système d'exploitation, Écran, Mémoire, Carte
Graphique, Disque Dur, Lecteur Optique, Alimentation, Sacoche, WebCam; on considèrera donc au maximum
MaxComp=11 composants. Chaque composant sera décrit par :
 sa fonction (Processeur, Écran …)
 son nom (Intel Pentium i7, Intel Pentium i5 ...)
 sa caractéristique numérique (nombre de cœurs pour le processeur, taille pour l'écran, espace pour le disque
dur...)
 son prix HT
Voici un exemple de configuration :
Processeur
Intel I7
4
200
Système
Windows
7
100
Mémoire
DDR3
4
80
Ecran
Full HD
15
300
Carte Graphique
FX1800
1
300
Disque Dur
Flash SSD
128
200
Lecteur Optique
DVD +/- RW
1
50
Alimentation
Batt. 6 Cell.
1
50
1
10
1
10
Sacoche
WebCam
Intégrée
Pour représenter une configuration, on doit donc mémoriser, pour chaque ligne, quatre valeurs dans 4 tableaux à une
dimension.
a.
b.
c.
d.
Définir les types de données.
Écrire une procédure de saisie d’un composant (fonction, nom, caractéristique, prix).
Écrire une procédure de saisie d’une configuration.
Écrire une procédure qui vérifie si une configuration est correcte, c'est à dire qu'elle inclut au moins un
processeur, une mémoire, un écran et un disque dur.
e. Écrire une fonction qui calcule le montant TTC de la configuration.
f. Écrire une procédure qui affiche la configuration comme ci-dessus.
L1MPCIE – Introduction à l'algorithmique – TD5 – Université d'Angers
2. Le dentiste (Manipulation d'un tableau à une dimension)
Un dentiste veut informatiser le suivi de ses patients. On commencera par s’intéresser à une seule mâchoire (la
mâchoire supérieure par exemple). Il souhaite saisir pour chaque dent, numérotée de 1 à 16, une information relative
à l’état de la dent :

0 si la dent est saine,

1 si la dent est cariée et non soignée,

2 si la dent est soignée,

3 si la dent est recouverte par une couronne,

4 si la dent est arrachée.
a. Définir un type Machoire correspondant aux données que l’on souhaite saisir.
b. Écrire une procédure saisie permettant de saisir l’ensemble de l’état de la mâchoire d’un patient (c’est à dire
une valeur pour chaque dent)
c. Écrire une procédure soin qui permet de transformer l’état d’une dent cariée, dont on donne le numéro d, en
une dent soignée. Attention si la dent d n’était pas cariée, on affichera un message d’erreur ‘Opération
impossible’.
d. Écrire un sous-programme sain qui retourne le nombre de dents saines présentes dans la mâchoire.
e. Écrire un sous-programme état qui retourne la valeur d’état représentative du plus grand nombre de dents
dans la mâchoire. Par exemple pour une mâchoire : « 0021004003000000 », la valeur retournée sera 0 (qui a
12 occurrences).
f. Écrire un sous-programme bridge qui permet d’afficher le nombre de dents qui peuvent faire l’objet d’un
bridge : une dent peut faire l’objet de la pose d’un bridge si cette dent est arrachée et que la dent précédente
et la dent suivante ne sont pas arrachées. Attention aux cas limites (première et dernière dent).
g. On veut à présent enregistrer l’état des dents du patient pour la mâchoire inférieure et supérieure. Définir un
type bouche comme un tableau à deux dimensions adapté à ce nouveau problème.
h. Écrire un sous-programme alerte qui affiche toutes les paires de dents telles que la dent de la mâchoire
supérieure et celle correspondante de la mâchoire inférieure soient arrachées.
i. Écrire un sous-programme affichage qui affiche une bouche avec la mâchoire supérieure au-dessus de la
mâchoire inférieure. On affichera un ‘-‘ pour les dents saines, soignées ou recouvertes d’une couronne et une
‘*’ pour les autres.
L1MPCIE – Introduction à l'algorithmique – TD5 – Université d'Angers
3. Réservations pour un spectacle (Manipulation d'un tableau à deux dimensions)
On souhaite gérer la réservation des places pour un spectacle. Suivant les spectacles, des fauteuils peuvent être
installés en fonction d'un capacité maximale prévue sur au plus NmaxRangées de NmaxSièges donnant ainsi au plus
NmaxRangées x NmaxSièges places disponibles. Pour chaque place on indiquera si la place est libre (L), réservée
avec option à confirmer (R) ou confirmée (C). Ces informations seront stockées dans un tableau à deux dimensions.
a. Définir un type de tableau adapté
b. Écrire une procédure Initialisation qui met toutes les places à libre (L)
c. Écrire une fonction booléenne Libre qui détermine si une place située siège S de la rangée R est libre ou non.
d. Écrire une procédure Réserve qui permet de réserver une place pour le siège S de la rangée R si cette place
est libre et renvoie un message d'erreur sinon.
e. Écrire une procédure PremièrePlace qui permet de réserver la première place libre en partant de la
première rangée et dans les numéros de sièges croissant.
f. Écrire une procédure MeilleurePlace qui permet de réserver la première place libre en partant de la
première rangée et la plus centrale possible sur la rangée disponible.
g. Écrire une procédure Groupe qui permet de réserver N places l'une à côté de l'autre si cela est possible sur la
première rangée libre.
Note : on suppose que le nombre de rangées et le nombre de sièges par rangée seront saisis dans le programme
principal au début de celui-ci.
h. Les tarifs des places varient en fonction de la rangée. On supposera donc donné dans un tableau Tarif à une
dimension d'au plus NmaxRangées, le prix Tarif[i] d'une place dans la rangée i.
i. Définir le type du tableau Tarif
j. Écrire une fonction Recette qui calcule la recette potentielle pour toutes les places qui ont été réservées
(confirmées ou non).
La veille du spectacle, on doit faire le point sur la situation réelle pour proposer les places restantes à l'achat le soir
du spectacle.
k. Écrire une procédure MiseAJour qui remet à libre toutes les places réservées et non confirmées.
l. Écrire une procédure Affiche qui affiche un plan de salle avec un O pour chaque place réservée et confirmée
et un espace pour les places libres et qui affiche également en dessous le montant de la recette prévue.
m. Écrire un programme principal pour saisir la taille de la salle et accéder aux procédures prévues ci-dessus.
L1MPCIE – Introduction à l'algorithmique – TD5 – Université d'Angers
4. Poker (Manipulation de deux tableaux à une dimension fixe)
On souhaite représenter un main de 5 cartes par deux tableaux à une dimension. Un tableau
valeur qui contient les valeurs des cartes (A,K,Q,J,10,9,8,7,6,5,4,3,2) et un tableau couleur qui contient les
couleurs (Pique,Cœur,Carreau,Trèfle) des cartes. Par exemple, la main :
sera représentée par les deux tableaux :
K K A A A
Carreau
Pique
Carreau
Coeur
Pique
a. Définir les types de tableaux nécessaires. Les valeurs des cartes seront des entiers de 2 à 14 (11 pour J, 12 pour Q,
13 pour K et 14 pour A).
b. Écrire une procédure changeCarte qui permet de remplacer dans une main la carte numéro K par une carte de
valeur V et de couleur C données.
c. Écrire une procédure afficheMain qui permet d'afficher le contenu d'une main. Écrire dans un premier temps
une procédure afficheValeur qui affiche une valeur en transformant l'entier en la valeur de carte
correspondant.
d. Écrire les types qui permettent de représenter un paquet de 52 cartes.
e. Écrire une procédure creePaquet qui met l'ensemble des 52 cartes possibles dans un paquet.
f. Écrire une procédure melange qui mélange un paquet de 52 cartes.
g. Écrire une procédure donneCarte qui permet de donner/remplacer une carte k d'une Main en prenant une
carte au sommet du paquet (qui n'est pas forcément plein).
h. Écrire une fonction cCouleur qui indique si une main ne contient que des cartes de la même couleur.
i. Écrire une fonction memeValeur qui renvoie le nombre de cartes d'une main ayant la valeur V donnée.
j. Écrire une fonction valeurMax qui renvoie la valeur de la carte qui apparaît le plus grand nombre de fois dans
une main. En cas d'égalité, on renverra la carte de valeur la plus élevée.
k. Écrire une procédure Affiche meilleureSerie qui affiche le nom de la combinaison la meilleure et sa hauteur.
On se limite ici aux combinaisons suivantes : Paire (deux cartes identiques), Brelan (trois cartes identiques) et Carré
(quatre cartes identiques). (Difficile) Modifier le sous-programme pour tenir compte des double paires et du Full
(une paire et un brelan), en affichant les différentes hauteurs.
l. (Plus difficile) Écrire une fonction quinte qui permet de déterminer si une main est formée de cartes
consécutives dans l'ordre des valeurs. Indice : on peut d'abord convertir les hauteurs en nombres entiers, trier le
tableau et vérifier si les cartes sont bien consécutives. En déduire une fonction quinteFlush (quinte ET couleur).
m. En transformant meilleureSerie en fonction, proposer une procédure qualiteMain, qui affiche la
meilleur combinaison de la main. Ordre des mains : rien, paire, double paire, brelan, quinte, couleur, full, carré,
quinte flush.
n. Combiner les sous-programmes précédents dans un programme principal en distribuant deux mains au hasard.
Chaque utilisateur peut alors changer une carte, puis on affiche la meilleure combinaison de chaque joueur. On
pourra améliorer/modifier le programme pour afficher globalement la meilleure combinaison obtenue en intégrant
les règles complètes du poker.
L1MPCIE – Introduction à l'algorithmique – TD5 – Université d'Angers