Vous êtes sur la page 1sur 3

INSTITUT SUPERIEUR DES ETUDES

TECHNOLOGIQUES DE SFAX

EXAMEN
Département : Technologies de l’Informatique Date : Juin 2021
Section : LMD1 – Semestre2 Documents : Non autorisés

Matière : ALGORITHMIQUE & PROGRAMMATION II Durée : 1H30’


Nb. Pages : 2 Pages
Enseignants : Mmes ABID S., ELLOUZE S., LARIBI F. et ZRIBI L. & Mrs. FRIKHA N. & BEN YOUNES A.

Enoncé
Le port de Radès (‫ )ميناء رادس‬contient 10 quais (‫ )أرصفة‬de dépôt de marchandises, numérotés de 1
à 10 et classés en trois catégories :
- 1..3 : ne peuvent décharger que les navires de charge moins de 15000 tonnes.
- 4..8 : peuvent décharger les navires de charge comprise entre 15000 et 50000 tonnes.
- 9 et 10 : peuvent décharger les navires de plus de 50000 tonnes.
Dans le but d’optimiser le temps d’attente et de décharge des navires, le responsable du port met
à votre disposition les informations suivantes :
A chaque quai on affecte une file d’attente de navires initialement vide, le nombre de navires de
la file (NbreNav) et le temps pour lequel le quai sera occupé pour la décharge des navires de sa
file (TempsOcc). Ce temps, calculé en minutes, est initialement égal à zéro pour une file d’attente
vide et il sera incrémenté/décrémenté à chaque entrée/sortie d’un navire de cette file pour ce
quai ; sachant qu’une tonne de marchandise nécessite en moyenne 3 minutes pour être
déchargée et qu’un navire est caractérisé par son nom (NomN), le poids de sa charge (PoidsN)et
le poids restant à décharger (PoidsRest : initialement égal au poids de sa charge et décrémenté à
chaque opération de décharge).
A l’arrivée d’un navire au port, on consulte le poids de sa charge et on l’affecte au quai, le moins
occupé (ayant un temps d’occupation minimal), de la catégorie adéquate (‫)المناسبة‬.
Le responsable vous propose l’algorithme principal « GérerPort », ci-après présenté, en spécifiant
les structures de données utilisées, sachant qu’il maintient un tableau TQ regroupant les
informations des 10 quais du port (Les numéros des quais sont représentés par les indices du
tableau).
Algorithme GérerPort
Type Navire = Structure
NomN : Chaîne //Nom du navire
PoidsN : Réel //Poids de la charge portée
PoidsRest : Réel //Poids restant à décharger
Svt : Navire //Pointeur sur le navire suivant de la file
Fin Structure
Quai = Structure
NbreNav : Entier //Nombre de navires dans la file d’attente du quai
TempsOcc : Réel //Temps, en minutes, pendant lequel le quai est occupé
Tête, Queue : Navire //Pointeurs désignant la File d’attente des navires
Fin Structure

1/3
TabQ = Tableau[1..10] de Quai
Var TQ : TabQ
i : Entier
Cet algorithme permet de :
Début
initialiserTab (TQ) - Initialiser le tableau TQ.
Pour i de 1 à 5 Faire - Prendre en charge l’arrivée de 5 navires,
Ecrire("Prise en charge du navire N°", i) en les affectant aux quais adéquats.
ajouterNavire (TQ) - Actualiser les quais du port après
Fin Faire écoulement de 30mn (càd décharge de
Pour i de 1 à 10 Faire 10 tonnes de chaque navire en cours de
Si (Non(FileVide(TQ[i].Tete))) Alors déchargement). On suppose que tous les
actualiserQuai (i, 10, TQ) navires en cours de déchargement
Fin Si nécessitent plus que ce temps.
Fin Faire
Fin

En s’aidant du schéma suivant :

NbreNav TempsOcc Tête Queue ………..….. NbreNav TempsOcc Tête Queue


TQ
2 18000 @1 @12 0 0 Nil Nil
1 ............... 10

@1 Temps d’occupation du quai N°1 : 18000 = 1000 * 3 + 5000 * 3


Salambo 10000 1000 @12

@12 Hannibal 5000 5000 Nil

Travail à Faire (2 pts + 4 pts + 3 pts + 4 pts + 3 pts + 4 pts)


Développez les sous-algorithmes suivants, utilisés pour aboutir à l’algorithme « GérerPort » :
1. Une procédure initialiserTab (S TQ : TabQ) qui initialise le tableau TQ par les informations des
10 quais avec des files d’attente de navires vides au départ. Cette procédure utilise la
procédure prédéfinie « CréerFile » suivante :
Procédure CréerFile (S Tête, Queue : Navire)
Début
Tete  Nil
Queue  Nil
Fin CréerFile
2. Une fonction chercherQuaiAdéquat (TQ : TabQ, poids : Réel) : Entier qui cherche dans le
tableau TQ l’indice du quai ayant le temps d’occupation minimal et pouvant recevoir un
navire avec le poids donné en paramètre.
3. Une procédure Enfiler (E N : Navire ; E/S Tête, Queue : Navire) qui permet d’ajouter un
navire donné à une file d’attente de navires désignée par les pointeurs Tête et Queue. Pour ce
faire, utilisez la fonction prédéfinie « FileVide » suivante :
Fonction FileVide (Tête : Navire) : Logique
Début
FileVide  Tête = Nil
Fin FileVide
2/3
4. Une procédure ajouterNavire (E/S TQ : TabQ) qui permet de :
- saisir les informations d’un navire arrivant,
- chercher le quai adéquat pour sa réception, et
- l’ajouter à la file d’attente du quai trouvé.
Cette procédure doit actualiser pour le quai trouvé :
- le nombre de navires de sa file d’attente, en l’incrémentant de 1.
- son temps d’occupation, en lui ajoutant le temps nécessaire pour le déchargement du
navire entrant.
5. Une procédure Défiler (E/S Tête, Queue : Navire) qui permet de supprimer un navire de la
file d’attente des navires désignée par les pointeurs Tête et Queue.
6. Une procédure actualiserQuai (E i : Entier, PoidsDechargé : Réel ; E/S TQ : TabQ) qui
actualise un quai, sachant son indice i dans le tableau TQ, après une opération de décharge
d’un poids donné (PoidsDéchargé) effectuée sur le premier navire de sa file d’attente. Cette
procédure peut supprimer ce navire de la file d’attente s’il est complètement déchargé et doit
dans tous les cas faire les modifications nécessaires.
NB. Le poids à décharger est supposé <= au poids restant du 1er navire de la file d’attente du
quai d’indice i.

3/3

Vous aimerez peut-être aussi