--- title: Algorithmie évaluation tags: algorithmie robots: noindex, nofollow author: Julien Noyer --- # 2050, Mac Donald robotise ses fatsfoods Réalisation d'un robot cuisinier ![](https://i.imgur.com/Mtbpsd9.jpg) Pour valider ce cursus de formation nous vous proposons de travailer sur une projet fictif de développement d'un robot pour la société Mac Donald. Ce robot sera capable de servire uniquement un menu spécifique et dans toutes les déclinaison possible. Nosu allons définir ensemble les étapes et les temps de préparation et vous aurez à réaliser une étude algorithmique complète que vous dervrez baser sur les notions vue lors de ce cursus ## Définition des contraintes Pour la réalisation de cette exercice vous devez penser à toutes les étapes pour permettre à notre robot de fonctionner de la __prise de commande__ à la __distribution du menu__ en passant par __le paiement__. Aucune étapes ne doit être oubliées car vous devez concidérer que le __robot est à 100% autonome__. Nous ajoutons également des contraintes qui sont de nature à vous faire réfléchir sur l'enchainement des tâches et leur organisation : - Le menu est : __Big Mac__ - Les options sont (avec ou sans) : - __salade__ - __tomate__ - __fromage__ - __sauce__ - __double fromage__ - __double steak__ - Les cuissons sont : - __saigante__ - __à point__ - __bien cuit__ - Les quantités sont : - __1__ - __100__ - Le temps d'attente acceptable : __5 minutes pour 1 menu__ - Les moyens de paiement sont : - __espèce__ - __carte bleue__ # Travail à réaliser _Définition des livrabbles_ ![](img/coverExo.jpg) Dans le cadre de ce projet nous vous demandons de fournir tous les éléments qui vous ont permit de réaliser le projet : documentation, liens, ressourses,... L'un des aspect qui sera mit en avant est la capacité à expliquer et de justifier une démarche; il vous est fortement reccomandé de créer un fichier en MarkDown retraçant toutes les étapes que vous avez suivi. En ce qui concerne les éléments obligatoire, vous devrez réaliser : - Un diagramme PERT - La définition du chemin ciritique - Un pseudo-code - Un calcule de la compléxité > Il est probale que les quantités différentes induisent des organisations différentes ## Données à traiter Nous déffinisons les différentes quantités pou chaquer produits constituant le menu - Un sandwish - Pain : 3 portions - Tomate : 40gr - Avec - Sans - Salade : 10gr - Avec - Sans - Fromage : 1 tranche - Avec - Sans - Double : 2 tranches - Sauce: 10 gr - Avec - Sans - Steack : 2 ou 3 steack - Simple - Supplément - Une portion de frite - Normal : 114gr - Grande : 150gr - Une boisson : Evian, jus d'orange - Normal : 33cl - Grande : 50cl Nous déffinisons temps de traitement des actions de base à réaliser - Prendre le pain : 10s. - Prendre les tomate : 10s. - Prendre la salade : 10s. - Prendre le fromage : 5s. ou 10s. - Prendre les steaks : 7s. ou 10s. - Prendre les frites : 10s. ou 15s. - Prendre la boisson : 10s. ou 15s. - Cuisson des steacks : - saigant : 22s. - à point : 30s. - bien cuit : 45s. - Cuisson des frites : 60s. ## Exemple de Diagramme PERT L'exemple ci-dessous vous est proposer afin que vous puissiez évaluer celui que vous avez réalisé. En aucun cas il ne vous est imposé dee partir de ce diagramme pour le suite de votre travail. [![](https://i.imgur.com/d7IBy9M.jpg)](https://i.imgur.com/d7IBy9M.jpg) ### A) Initialisation #### Tâches - __A.1)__ Activer le robot (0.0) - __A.2)__ Afficher le bouton "Start" (0.0) - __A.3)__ Afficher le bouton "Cancel" (0.0) - __A.4)__ Cliquer sur "Start" (0.1) - __B, C)__ Cliquer sur "Cancel" (0.1) - __a)__ Cliquer sur "Cancel" (0.1) - __b)__ Supprimer la commande (0.0) - __c)__ Afficher le bouton "Start" (0.0) - __d__) Eteindre les cuiseur (0) #### Pseudo-code ```bash ALGO BigMacBot # Import du module de configuration de menu IMPORT BigMacConfigurator FROM './BigMacConfigurator.md' # Définition des objets OBJECT ClientOrder: type: STRING beverage: STRING tomato: BOOLEAN salad: BOOLEAN sauce: BOOLEAN cheese: BOOLEAN extraCheese: BOOLEAN extraSteak: BOOLEAN normalCooking: BOOLEAN mediumCooking: BOOLEAN hardCooking: BOOLEAN price: FLOAT END OBJECT OBJECT Button: value: STRING isActive: BOOLEAN onClick: FUNCTION() END OBJECT OBJECT Baking: value: STRING isActive: BOOLEAN duration: NUMBER start: FUNCTION() END OBJECT # # Définition des variables botIsActive: BOOLEAN startButton: Button cancelButton: Button newOrder: ClientOrder fryer: Baking broiler: Baking toaster: Baking # START # Définition # Variables globales botIsActive <- True newOrder <- { null, null, True, True, True, True, False, False, True, False, False, 0.0 } # Interface graphique startButton <- { "Commencer", True } cancelButton <- { "Annuler la commande", True } # Cuiseurs fryer <- { "Friteuse", False, null } broiler <- { "Plaque", False, null } toaster <- { "Grille pain", False, null } # # Méthodes FUNCTION startBigMacBot(){ # Lancer al boucle tant que le bot est en marche WHILE botIsActive === True # Capter le click sur le bouton start startButton.onClick <- startOrder() # Capter le click sur le bouton cancel cancelButton.onClick <- cancelOrder() END WHILE } FUNCTION startOrder(){ # Lancer al boucle tant que le bot est en marche WHILE botIsActive === True # Lancer la commande NEW BigMacConfigurator(newOrder) # Allumer les cuiseurs fryer.isActive <- True broiler.isActive <- True toaster.isActive <- True END WHILE } FUNCTION cancelOrder(){ # Lancer al boucle tant que le bot est en marche WHILE botIsActive === True # Annuler la commande DELETE BigMacConfigurator(newOrder) # Eteindre les cuiseurs fryer.isActive <- False broiler.isActive <- False toaster.isActive <- False END WHILE } # # Lancer l'algorithme startBigMacBot() # END ALGO ``` #### Calcule de la complexité de algorithme BigMacBot __Opérations élémentaires :__ - botIsActive <- True - newOrder <- { undefined, undefined, True, True, True, True, False, False, 0.0 } - startButton <- { "Commencer", True } - __Total__ = 3 __Boucle__ - startButton.onClick <- NEW BigMacConfigurator(newOrder) - startButton.isActive <- False - __Total__ = 2 __Résultat__ La complexité total de l'algorithme BigMacBot par commande est : ```bash T(n) = 5 ``` ### B) Configuration #### Tâches - __B.2)__ Choisir l'option normal ou maxi (10) - __B.3)__ Choisir les options (10) - __B.4)__ Choisir la cuisson des steacks (10) - __B.5)__ Afficher un récapitulatif (10) - __B.6)__ Valider la commande (0.1) - __B.7)__ Allumer les cuiseurs (0) #### Pseudo-code ```bash ALGO BigMacConfigurator # Import du module de paiement IMPORT PayForMenu FROM './PayForMenu.md' # Injecter des valeurs dans l'algorithme CONSTRUCTOR( ClientOrder ) THIS newOrder <- ClientOrder END CONSTRUCTOR # # Définition des objets OBJECT Button: value: STRING isActive: BOOLEAN onClick: FUNCTION() END OBJECT # # Définition des variables optionPrice: ProductPrice chooseBeverageButton: Button confirmOrder: Button evianButton: Button orangeButton: Button menuSizeOptions: ARRAY<Button> burgerOptions: ARRAY<Button> fryer: Baking broiler: Baking toaster: Baking # START # Interface graphique chooseBeverageButton <- { "Choisir une boisson", False } confirmOrder <- { "Valider la commande", False } evianButton <- { "Evian", False } orangeButton <- { "Jus d'orange", False } menuSizeOptions <- [ { "Menu normal", False }, { "Menu maxi", False } ] burgerOptions <- [ { "Tomate", True }, { "Salade", True }, { "Sauce", True }, { "Fromage", True }, { "Supplément fromage", False }, { "Supplément steak", False }, { "Cuisson normal", False }, { "Cuisson à point", False }, { "Cuisson bien cuit", False } ] # # Fonction pour afficher un bouton FUNCTION displayButton(button) START # Vérifier l'état du bouton IF button.isActive === FALSE THEN PRINT button ELSE HIDE button END IF # Invercer l'état du bouton button.isActive <- !button.isActive END FUNCTION # # Fonction pour afficher les options du burger FUNCTION displayBurgerOptions() START # Afficher les boutons pour les option FOR i FROM 0 TO burgerOptions.LENGTH [ i <- i + 1 ] # Afficher le bouton displayButton(option[i]) # Capter le clic sur le bouton option[i].onClick <- editBurgerOption(option[i].value) END FOR # Afficher le pour choisir la boisson displayButton(chooseBeverageButton) # Capter le clic sur le bouton chooseBeverageButton chooseBeverageButton.onClick <- defineBeverage() END FUNCTION # # Fonction pour modifier une option FUNCTION editBurgerOption( type: STRING ) START SWITCH type "Tomate" : newOrder.tomato <- !newOrder.tomato "Salade" : newOrder.salade <- !newOrder.salade "Sauce" : newOrder.sauce <- !newOrder.sauce "Fromage" : newOrder.cheese <- !newOrder.cheese "Supplément fromage" : newOrder.extraCheese <- !newOrder.extraCheese "Supplément steak" : newOrder.extraSteak <- !newOrder.extraSteak "Cuisson normal" : newOrder.normalCooking <- !newOrder.normalCooking && newOrder.mediumCooking = False && newOrder.hardCooking = False "Cuisson à point" : newOrder.mediumCooking <- !newOrder.mediumCooking && newOrder.normalCooking = False && newOrder.hardCooking = False "Cuisson bien cuit" : newOrder.hardCooking <- !newOrder.hardCooking && newOrder.mediumCooking = False && newOrder.hardCooking = False DEFAULT PRINT("Option inconnue") END SWITCH END FUNCTION # # Fonction pour définir la boisson FUNCTION defineBeverage() START # Afficher le choix de boisson displayButton(evianButton) displayButton(orangeButton) # Capter le click pour le choix de la bboisson WHILE newOrder.beverage === undefined evianButton.onClick <- RETURN newOrder.beverage <- evianButton.value orangeButton.onClick <- RETURN newOrder.beverage <- orangeButton.value END WHILE # Masquer le bouton de la boisson non sélectionnée SWITCH newOrder.beverage "Evian" : displayButton(orangeButton) "Jus d'orange" : displayButton(evianButton) END SWITCH # Afficher le bouton pour valider la commande displayButton(confirmOrder) # Capter le click sur le bouton pour valider la commande confirmOrder.onClick <- NEW PayForMenu(newOrder) END FUNCTION # # Lancer l'algorithme WHILE newOrder.type === undefined # Afficher les boutons pour le choix de la taille FOR i FROM 0 TO menuSizeOptions.LENGTH [ i <- i + 1 ] # Afficher le bouton displayButton(option[i]) option[i].onClick <- RETURN newOrder.type <- option[i].value END FOR END WHILE # Masquer le bouton pour le choix de la taille du menu FOR i FROM 0 TO menuSizeOptions.LENGTH [ i <- i + 1 ] displayButton(option[i]) END FOR # Afficher le choix des optionn pour le burger displayBurgerOptions() # Allumer les cuiseurs fryer.isActive <- True broiler.isActive <- True toaster.isActive <- True # # END ALGO ``` #### Calcule de la complexité de algorithme BigMacConfigurator __Opérations élémentaires__ - newOrder <- ClientOrder - chooseBeverageButton <- { "Choisir une boisson", False } - confirmOrder <- { "Valider la commande", False } - evianButton <- { "Evian", False } - orangeButton <- { "Jus d'orange", False } - menuSizeOptions <- [...] - { "Menu normal", False } - { "Menu maxi", False } - burgerOptions <- [...] - { "Tomate", True } - { "Salade", True } - { "Sauce", True } - { "Fromage", True } - { "Supplément fromage", False } - { "Supplément steak", False } - { "Cuisson à point", False }, - { "Cuisson bien cuit", False } - __Total__ = 17 __FUNCTION displayBurgerOptions()__ - FOR i FROM 0 - 0 TO burgerOptions.LENGTH (8) - i + 1 - displayButton(option[i]) - displayButton(chooseBeverageButton) - option[i].onClick <- editBurgerOption(option[i].value) - chooseBeverageButton.onClick <- defineBeverage() - __Total__ = 48 + 1 __FUNCTION editBurgerOption()__ - SWITCH type - "Tomate" : newOrder.tomato <- !newOrder.tomato - "Salade" : newOrder.salade <- !newOrder.salade - "Sauce" : newOrder.sauce <- !newOrder.sauce - "Fromage" : newOrder.cheese <- !newOrder.cheese - "Supplément fromage" : newOrder.extraCheese <- !newOrder.extraCheese - "Supplément steak" : newOrder.extraSteak <- !newOrder.extraSteak - "Cuisson normal" : newOrder.normalCooking <- !newOrder.normalCooking && newOrder.mediumCooking = False && newOrder.hardCooking = False - "Cuisson à point" : newOrder.mediumCooking <- !newOrder.mediumCooking && newOrder.normalCooking = False && newOrder.hardCooking = False - "Cuisson bien cuit" : newOrder.hardCooking <- !newOrder.hardCooking && newOrder.mediumCooking = False && newOrder.hardCooking = False - __Total__ = 16 __FUNCTION defineBeverage()__ - displayButton(evianButton) - displayButton(orangeButton) - evianButton.onClick <- RETURN newOrder.beverage <- evianButton.value - orangeButton.onClick <- RETURN newOrder.beverage <- orangeButton.value - SWITCH newOrder.beverage - displayButton(confirmOrder) - confirmOrder.onClick <- NEW PayForMenu(newOrder) - __Total__ = 9 __Lancer l'algorithme__ - FOR i FROM 0 - 0 TO menuSizeOptions.LENGTH (9) - i + 1 - displayButton(option[i]) - option[i].onClick <- RETURN newOrder.type <- option[i].value - FOR i FROM 0 - 0 TO menuSizeOptions.LENGTH (9) - i + 1 - displayButton(option[i]) - fryer.isActive <- True - broiler.isActive <- True - toaster.isActive <- True - __Total__ = (5 x 9) + (4 x 9) + 3 __Résultat__ La complexité total de l'algorithme BigMacConfigurator par commande est : ```bash T(n) = 175n ``` ### C) Paiement #### Tâches - __C.1)__ Afficher le prix total (0.1) - __C.2)__ Payer la commande (10) - __C.3)__ Valider le paiement (0.1) - __C.4)__ Rendre la monnaie éventuelle (10) #### Pseudo-code ```bash ALGO PayForMenu # Import du générateur de menu IMPORT BigMacGenerator FROM './BigMacGenerator.md' # Injecter une valeur dans l'algorithme CONSTRUCTOR( ClientOrder ) THIS newOrder <- ClientOrder END CONSTRUCTOR # Définition des objets OBJECT Button: value: STRING isActive: BOOLEAN onClick: FUNCTION() END OBJECT # # Définition des variables paiementOption: ARRAY<Button> coinSlot: Button coinSender: Button cardSlot: Button # START # Interface graphique paiementOption <- [ { "Payer en espèce", False }, { "Payer par carte", False } ] # # Objets physiques coinSlot <- { "Monnayeur", False } coinSender <- { "Rendu monnaie", False } cardSlot <- { "Centrale CB", False } # # Fonction pour afficher un bouton FUNCTION displayButton(button) START # Vérifier l'état du bouton IF button.isActive === FALSE THEN PRINT button ELSE HIDE button END IF # Invercer l'état du bouton button.isActive <- !button.isActive END FUNCTION # # Fonction de calcule de prix FUNCTION definePrice() START # Définir le prix du menu IF newOrder.type === "Normal" newOrder.price <- newOrder.price + 8.5 ELSE IF newOrder.type === "Extra" newOrder.price <- newOrder.price + 12.5 END IF # Vérifier le supplément fromage IF newOrder.extraCheese === True newOrder.price <- newOrder.price + 0.8 END IF # Vérifier le supplément steak IF newOrder.extraSteak === True newOrder.price <- newOrder.price + 1.2 END IF # Afficher le prix PRINT("Le prix de votre commande est de " + newOrder.price + "euros" ) # Afficher les bouton pour payer la commande FOR i FROM 0 TO paiementOption.LENGTH [ i <- i + 1 ] # Afficher le bouton displayButton(option[i]) # Capter le clic sur la bouton pour payer la commande option[i].onClick <- payOrder(option[i].value) END FOR END FUNCTION # # Fonction pour payer la commande FUNCTION payOrder( type: STRING ) START IF type === "Payer en espèce" THEN # Activer le monnayeur coinSlot.isActive <- True # Attendre le paiement de la commande WHILE coinSlot.isActive === True # Stopper la boucle quand la commande est payée IF totalCurrency === newOrder.price THEN # Stoper le paiement coinSlot.isActive <- False # Commencer la préparation NEW BigMacGenerator(newOrder) # Vérifier la monnaie sendMonneyBack() END IF END WHILE ELSE IF type === "Payer par carte" THEN # Activer la centrale CB cardSlot.isActive <- True # Attendre le paiement de la commande WHILE cardSlot.isActive === True # Stopper la boucle quand la commande est payée IF totalCurrency === newOrder.price THEN # Stoper le paiement coinSlot.isActive <- False # Commencer la préparation du menu NEW BigMacGenerator(newOrder) END IF END WHILE END IF END FUNCTION # # Fonction vérifier le montant de la monnaie FUNCTION sendMonneyBack() START # Vérifier le montant de la monnaie IF totalCurrency > newOrder.price THEN # Activer le retour de la monnaie coinSender.isActive <- True # Rendre la monnaie coinSender.SEND( newOrder.price - totalCurrency ) # Désactiver le retour de la monnaie coinSender.isActive <- False END IF END FUNCTION # # Lancer l'algorithme definePrice() # END ALGO ``` #### Calcule de la complexité de algorithme PayForMenu __Opérations élémentaires__ - newOrder <- ClientOrder - paiementOption <- [...] - { "Payer en espèce", False } - { "Payer par carte", False } - coinSlot <- { "Monnayeur", False } - coinSender <- { "Rendu monnaie", False } - cardSlot <- { "Centrale CB", False } - __Total__ = 8 __FUNCTION definePrice()__ - IF newOrder.type === "Normal" - newOrder.price <- newOrder.price + 8.5 - ELSE IF newOrder.type === "Extra" - newOrder.price <- newOrder.price + 12.5 - IF newOrder.extraCheese === True - newOrder.price <- newOrder.price + 0.8 - IF newOrder.extraSteak === True - newOrder.price <- newOrder.price + 1.2 - FOR i FROM 0 - 0 TO paiementOption.LENGTH (3) - i + 1 - displayButton(option[i]) - option[i].onClick <- payOrder(option[i].value) - __Total__ = 8 + (5 x 3) __FUNCTION payOrder()__ - IF type === "Payer en espèce" - coinSlot.isActive <- True - WHILE coinSlot.isActive === True - IF totalCurrency === newOrder.price - coinSlot.isActive <- False - ELSE IF type === "Payer par carte" - cardSlot.isActive <- True - WHILE cardSlot.isActive === True - IF totalCurrency === newOrder.price - coinSlot.isActive <- False - __Total__ = 10 __FUNCTION sendMonneyBack()__ - IF totalCurrency > newOrder.price - coinSender.isActive <- True - newOrder.price - totalCurrency - coinSender.isActive <- False - __Total__ = 4 __Résultat__ La complexité total de l'algorithme PayForMenu par commande est : ```bash T(n) = 45 ``` ### D) Préparation #### Tâches - __D.1)__ Récapituler les options (0.1) - __D.2)__ Préparer la boisson (10) - __D.3)__ Prendre les frites (10) - __D.4)__ Faire cuire les frites (60) - __D.5)__ Prendre les steacks (10) - __D.6)__ Cuire les steack (45) - __D.7)__ Prendre et toaster le pain (10) - __D.8)__ Arréter la cuisson du steack (0.1) - __D.9)__ Arréter la cuisson des frites (0.1) - __D.10)__ Assembler les éléments (50) - __D.11)__ Livrer le menu (0.1) - __D.12)__ Réinitialiser la commande (0.0) - __D.13)__ Supprimer la commande (0.0) - __D.14)__ Eteindre les cuiseur (0) - __D.15)__ Afficher le bouton "Start" (0.0) #### Pseudo-code ```bash ALGO BigMacGenerator # Injecter une valeur dans l'algorithme CONSTRUCTOR( ClientOrder ) THIS newOrder <- ClientOrder END CONSTRUCTOR # Définition des objets OBJECT Ingredient: value: STRING weight: NUMBER END OBJECT OBJECT Stock: bread: Ingredient tomato: Ingredient salad: Ingredient cheese: Ingredient sauce: Ingredient steak: Ingredient END OBJECT OBJECT Baking: value: STRING isActive: BOOLEAN duration: NUMBER start: FUNCTION() END OBJECT # # Définition des variables botStock: Stock ingredientCollection: ARRAY<Ingredient> fryer: Baking broiler: Baking toaster: Baking # START # Variables globales botStock <- { bread <- { "Pain", 300 } tomato <- { "Tomate", 4000 } salad <- { "Salade", 1000 } sauce <- { "Sauce", 1000 } cheese <- { "Fromage", 200 } steak <- { "Steak", 300 } } # # Function pour sélectionner les ingrédients FUNCTION selectIngredient() START # Allumer les systèmes de cuisson fryer.isActive <- True boiler.isActive <- True toaster.isActive <- True # Activer la fonction tant qu'il reste du pain en stock WHILE botStock.bread.weight >= 3 # Prendre le pain du stock # Prendre les tomates IF botStock.tomato.weight >= 40 && newOrder.tomato THEN ELSE THEN PRINT("Stock de tomate épuisé") END IF # Prendre la salade IF botStock.salad.weight >= 10 && newOrder.salad THEN ELSE THEN PRINT("Stock de salade épuisé") END IF # Prendre les steaks IF newOrder.type === "Menu normal" && botStock.steak.weight >= 2 THEN ELSE IF IF newOrder.type === "Menu maxi" && botStock.steak.weight >= 3 THEN ELSE THEN PRINT("Stock de steak épuisé") END IF END WHILE END FUNCTION # # Function pour cuire les ingrédients FUNCTION cookIngredient( ingredient: Ingredient, quantity: FLOAT, tool: Baking, duration: NUMBER ) START # Cuire les ingredients tool.start <- COOK(ingredient, quantity) # Attendre la fin de la cuisson WAIT(duration) END FUNCTION # # Function pour assembler les ingrédents FUNCTION gatherIngredient() START # Prendre le pain WAIT( 10 ) # Prendre les tomates IF botStock.tomato.weight >= 40 && newOrder.tomato THEN WAIT( 10 ) END IF # # Prendre le fromage IF botStock.cheese.weight >= 1 && newOrder.cheese && newOrder.extraCheese === False THEN WAIT( 10 ) ELSE IF botStock.cheese.weight >= 2 && newOrder.cheese && newOrder.extraCheese === True THEN WAIT( 10 ) END IF # # Prendre les steaks IF newOrder.type === "Menu normal" THEN WAIT( 7 ) ELSE WAIT( 10 ) # Prendre les trites WAIT( 10 ) # Prendre la boisson WAIT( 10 ) # Livrer la commande PRINT("Votre menu est prêt !") RETURN BurgerBox # Etteindre les systèmes de cuisson fryer.isActive <- False boiler.isActive <- False toaster.isActive <- False END FUNCTION # # Function pour commencer la préparation FUNCTION startCooking() START # Vérifier la quantité de pain avant de commencer la commande IF botStock.bread.weight >= 3 THEN # Cuire les steaks IF botStock.steak.weight >= 2 && newOrder.extraSteak === False THEN # Lancer la cuisson cookIngredient( botStock.steak, 2, broiler, newOrder.baking ) # Réduire le stock botStock.steak.weight <- botStock.steak.weight - 2 ELSE IF botStock.steak.weight >= 3 && newOrder.extraSteak === True THEN # Lancer la cuisson cookIngredient( botStock.steak, 3, broiler, newOrder.baking ) # Réduire le stock botStock.steak.weight <- botStock.steak.weight - 3 ELSE THEN PRINT("Stock de steak épuisé") END IF # # Cuire les frites IF newOrder.type === "Menu normal" && botStock.fries.weight >= 114 THEN # Lancer la cuisson cookIngredient( botStock.fries, 114, fryer, 60 ) # Réduire le stock botStock.fries.weight <- botStock.fries.weight - 114 ELSE IF IF newOrder.type === "Menu maxi" && botStock.fries.weight >= 150 THEN # Lancer la cuisson cookIngredient( botStock.fries, 150, fryer, 60 ) # Réduire le stock botStock.fries.weight <- botStock.fries.weight - 150 ELSE THEN PRINT("Stock de steak épuisé") END IF # # Toaster le pain cookIngredient(botStock.bread, 3, toaster, 20) # # Assembler le menu # Attendre 30 secondes WAIT( 30 ) # Assembler le menu gatherIngredient() # ELSE THEN PRINT("Stock de pain épuisé") END IF # END FUNCTION # # Lancer l'algorithme selectIngredient() # END ALGO ``` #### Calcule de la complexité de algorithme BigMacGenerator __Opérations élémentaires__ - newOrder <- ClientOrder - botStock <- {...} - bread <- { "Pain", 300 } - tomato <- { "Tomate", 4000 } - salad <- { "Salade", 1000 } - sauce <- { "Sauce", 1000 } - cheese <- { "Fromage", 200 } - steak <- { "Steak", 300 } - __Total__ = 8 __FUNCTION selectIngredient()__ - fryer.isActive <- True - boiler.isActive <- True - toaster.isActive <- True - WHILE botStock.bread.weight >= 3 - IF botStock.tomato.weight >= 40 && newOrder.tomato THEN - IF botStock.salad.weight >= 10 && newOrder.salad THEN - IF newOrder.type === "Menu normal" && botStock.steak.weight >= 2 THEN - ELSE IF IF newOrder.type === "Menu maxi" && botStock.steak.weight >= 3 THEN - __Total__ = 12 __FUNCTION gatherIngredient()__ - IF botStock.tomato.weight >= 40 && newOrder.tomato - IF botStock.cheese.weight >= 1 && newOrder.cheese && newOrder.extraCheese === False - ELSE IF botStock.cheese.weight >= 2 && newOrder.cheese && newOrder.extraCheese === True - IF newOrder.type === "Menu normal" - fryer.isActive <- False - boiler.isActive <- False - toaster.isActive <- False - __Total__ = 12 __FUNCTION startCooking()__ - IF botStock.bread.weight >= 3 - IF botStock.steak.weight >= 2 && newOrder.extraSteak === False - cookIngredient( botStock.steak, 2, broiler, newOrder.baking ) - botStock.steak.weight <- botStock.steak.weight - 2 - ELSE IF botStock.steak.weight >= 3 && newOrder.extraSteak === True - cookIngredient( botStock.steak, 3, broiler, newOrder.baking ) - botStock.steak.weight <- botStock.steak.weight - 3 - IF newOrder.type === "Menu normal" && botStock.fries.weight >= 114 - cookIngredient( botStock.fries, 114, fryer, 60 ) - botStock.fries.weight <- botStock.fries.weight - 114 - ELSE IF IF newOrder.type === "Menu maxi" && botStock.fries.weight >= 150 - cookIngredient( botStock.fries, 150, fryer, 60 ) - botStock.fries.weight <- botStock.fries.weight - 150 - __Total__ = 21 __Résultat__ La complexité total de l'algorithme BigMacGenerator par commande est : ```bash T(n) = 53n ```