@ -0,0 +1,6 @@ |
|||||
|
\relax |
||||
|
\select@language{french} |
||||
|
\@writefile{toc}{\select@language{french}} |
||||
|
\@writefile{lof}{\select@language{french}} |
||||
|
\@writefile{lot}{\select@language{french}} |
||||
|
\@writefile{toc}{\contentsline {part}{I\hspace {1em}Objectifs de ce TL}{3}} |
||||
@ -0,0 +1 @@ |
|||||
|
\select@language {french} |
||||
@ -0,0 +1,25 @@ |
|||||
|
\documentclass[french]{article} |
||||
|
|
||||
|
\usepackage{pgfplots} |
||||
|
\usepackage{tikz} |
||||
|
\usetikzlibrary{arrows,automata} |
||||
|
\usepackage{MyPack2} |
||||
|
|
||||
|
\usepackage{diagbox} |
||||
|
|
||||
|
\geometry{top=2cm, bottom=2cm, left=2cm, right=2cm} |
||||
|
\title{Étude de laboratoire - ASD} |
||||
|
\author{Binôme A11 \\ \bsc{Simon} Léo, \bsc{Levy--Falk} Hugo \\ Supélec, promo 2020} |
||||
|
\date{\today} |
||||
|
|
||||
|
\begin{document} |
||||
|
\maketitle |
||||
|
\tableofcontents |
||||
|
\clearpage |
||||
|
\listoffigures |
||||
|
\newpage |
||||
|
\initPage{TL - ASD}{\today}{\bsc{Simon}, \bsc{Levy--Falk}} |
||||
|
|
||||
|
\part{Objectifs de ce TL} |
||||
|
|
||||
|
\end{document} |
||||
@ -0,0 +1,2 @@ |
|||||
|
\select@language {french} |
||||
|
\contentsline {part}{I\hspace {1em}Objectifs de ce TL}{3} |
||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
@ -1,136 +1,138 @@ |
|||||
# coding: utf-8 |
# coding: utf-8 |
||||
|
|
||||
|
|
||||
class Tas: |
class Tas: |
||||
class Element: |
class Element: |
||||
def __init__(self, valeur, priorite, index): |
def __init__(self, valeur, priorite, index): |
||||
self.valeur = valeur |
self.valeur = valeur |
||||
self.priorite = priorite |
self.priorite = priorite |
||||
self.index = index |
self.index = index |
||||
|
|
||||
def __str__(self): |
def __str__(self): |
||||
return str(self.valeur) |
return str(self.valeur) |
||||
|
|
||||
def __init__(self, fonctionPriorite): |
def __init__(self, fonctionPriorite): |
||||
self.L = [] |
self.L = [] |
||||
self.fonctionPriorite = fonctionPriorite |
self.fonctionPriorite = fonctionPriorite |
||||
|
|
||||
def __str__(self): |
def __str__(self): |
||||
s = "[" |
s = "[" |
||||
for elt in self.L: |
for elt in self.L: |
||||
s += " " + str(elt) |
s += " " + str(elt) |
||||
s += "]" |
s += "]" |
||||
return s |
return s |
||||
|
|
||||
def __parent(self, elt): |
def __parent(self, elt): |
||||
if(elt.index == 0): |
if(elt.index == 0): |
||||
return None |
return None |
||||
else: |
else: |
||||
return self.L[(elt.index-1) // 2] |
return self.L[(elt.index - 1) // 2] |
||||
|
|
||||
def __fils_gauche(self, elt): |
def __fils_gauche(self, elt): |
||||
i = 2 * elt.index + 1 |
i = 2 * elt.index + 1 |
||||
if(i < len(self.L)): |
if(i < len(self.L)): |
||||
return self.L[i] |
return self.L[i] |
||||
else: |
else: |
||||
return None |
return None |
||||
|
|
||||
def __fils_droit(self, elt): |
def __fils_droit(self, elt): |
||||
i = 2 * elt.index + 2 |
i = 2 * elt.index + 2 |
||||
if(i < len(self.L)): |
if(i < len(self.L)): |
||||
return self.L[i] |
return self.L[i] |
||||
else: |
else: |
||||
return None |
return None |
||||
|
|
||||
def __deplace(self, elt, index): |
def __deplace(self, elt, index): |
||||
assert isinstance(elt, Tas.Element) |
assert isinstance(elt, Tas.Element) |
||||
ancien = elt.index |
ancien = elt.index |
||||
self.L[index] = elt |
self.L[index] = elt |
||||
elt.index = index |
elt.index = index |
||||
return ancien |
return ancien |
||||
|
|
||||
def __promeut(self, elt): |
def __promeut(self, elt): |
||||
while(True): |
while(True): |
||||
parent = self.__parent(elt) |
parent = self.__parent(elt) |
||||
if(parent == None): |
if(parent == None): |
||||
break |
break |
||||
if(parent.priorite >= elt.priorite): |
if(parent.priorite >= elt.priorite): |
||||
break |
break |
||||
elt.index = self.__deplace(parent, elt.index) |
elt.index = self.__deplace(parent, elt.index) |
||||
self.__deplace(elt, elt.index) |
self.__deplace(elt, elt.index) |
||||
|
|
||||
def actualise(self, elt): |
def actualise(self, elt): |
||||
assert isinstance(elt, Tas.Element) |
assert isinstance(elt, Tas.Element) |
||||
elt.priorite = self.fonctionPriorite(elt.valeur) |
elt.priorite = self.fonctionPriorite(elt.valeur) |
||||
self.__promeut(elt) |
self.__promeut(elt) |
||||
|
|
||||
def ajoute(self, valeur): |
def ajoute(self, valeur): |
||||
elt = Tas.Element(valeur, self.fonctionPriorite(valeur), len(self.L)) |
elt = Tas.Element(valeur, self.fonctionPriorite(valeur), len(self.L)) |
||||
self.L.append(elt) |
self.L.append(elt) |
||||
self.__promeut(elt) |
self.__promeut(elt) |
||||
return elt |
return elt |
||||
|
|
||||
def empty(self): |
def empty(self): |
||||
return len(self.L) == 0 |
return len(self.L) == 0 |
||||
|
|
||||
def pop(self): |
def pop(self): |
||||
n = len(self.L) |
n = len(self.L) |
||||
if(n == 0): |
if(n == 0): |
||||
return None |
return None |
||||
|
|
||||
tete = self.L[0] |
tete = self.L[0] |
||||
elt = self.L[n - 1] |
elt = self.L[n - 1] |
||||
elt.index = 0 |
elt.index = 0 |
||||
|
|
||||
while True: |
while True: |
||||
filsGauche = self.__fils_gauche(elt) |
filsGauche = self.__fils_gauche(elt) |
||||
filsDroit = self.__fils_droit(elt) |
filsDroit = self.__fils_droit(elt) |
||||
plusPrioritaire = elt |
plusPrioritaire = elt |
||||
if(filsGauche != None and filsGauche.priorite > plusPrioritaire.priorite): |
if(filsGauche != None and filsGauche.priorite > plusPrioritaire.priorite): |
||||
plusPrioritaire = filsGauche |
plusPrioritaire = filsGauche |
||||
if(filsDroit != None and filsDroit.priorite > plusPrioritaire.priorite): |
if(filsDroit != None and filsDroit.priorite > plusPrioritaire.priorite): |
||||
plusPrioritaire = filsDroit |
plusPrioritaire = filsDroit |
||||
elt.index = self.__deplace(plusPrioritaire, elt.index) |
elt.index = self.__deplace(plusPrioritaire, elt.index) |
||||
if(plusPrioritaire is elt): |
if(plusPrioritaire is elt): |
||||
break |
break |
||||
self.L.pop() |
self.L.pop() |
||||
return tete.valeur |
return tete.valeur |
||||
|
|
||||
######################################### |
######################################### |
||||
# Exemple d'utilisatio de la classe Tas # |
# Exemple d'utilisatio de la classe Tas # |
||||
# Tri de tâches par ordre chronologique # |
# Tri de tâches par ordre chronologique # |
||||
######################################### |
######################################### |
||||
|
|
||||
|
|
||||
class Tache: |
class Tache: |
||||
'''Tache devant être effectuée avant une date limite''' |
'''Tache devant être effectuée avant une date limite''' |
||||
def __init__(self, jour, nom): |
|
||||
self.jour = jour |
def __init__(self, jour, nom): |
||||
self.nom = nom |
self.jour = jour |
||||
# Cet attribut servira à accueillir la clé du tas |
self.nom = nom |
||||
self.cle = None |
# Cet attribut servira à accueillir la clé du tas |
||||
|
self.cle = None |
||||
def __str__(self): |
|
||||
return self.nom + " ({})".format(self.jour) |
def __str__(self): |
||||
|
return self.nom + " ({})".format(self.jour) |
||||
|
|
||||
|
|
||||
if __name__ == "__main__": |
if __name__ == "__main__": |
||||
|
|
||||
# Le niveau de priorité d'un événement x est -x.jour : on trie donc les événements par ordre chronologique |
# Le niveau de priorité d'un événement x est -x.jour : on trie donc les événements par ordre chronologique |
||||
def calculePriorite(tache): |
def calculePriorite(tache): |
||||
return -tache.jour |
return -tache.jour |
||||
|
|
||||
# On crée un tas dont les éléments sont des événements triés par ordre chronologique |
# On crée un tas dont les éléments sont des événements triés par ordre chronologique |
||||
T = Tas(calculePriorite) |
T = Tas(calculePriorite) |
||||
|
|
||||
# Ajoute des événements au tas |
# Ajoute des événements au tas |
||||
evts = [ Tache(5, "T1"), Tache(10, "T2"), Tache(5, "T3"), Tache(3, "T4")] |
evts = [Tache(5, "T1"), Tache(10, "T2"), Tache(5, "T3"), Tache(3, "T4")] |
||||
for evt in evts: |
for evt in evts: |
||||
evt.cle = T.ajoute(evt) |
evt.cle = T.ajoute(evt) |
||||
|
|
||||
# Supposons que la tache 2 devienne soudain assez urgente |
# Supposons que la tache 2 devienne soudain assez urgente |
||||
evts[1].jour = 4 |
evts[1].jour = 4 |
||||
T.actualise(evts[1].cle) |
T.actualise(evts[1].cle) |
||||
|
|
||||
# Retirons dans l'ordre chronologie les éléments du tas |
# Retirons dans l'ordre chronologie les éléments du tas |
||||
while(not T.empty()): |
while(not T.empty()): |
||||
print(T.pop()) |
print(T.pop()) |
||||
|
|
||||
|
|
||||
|
|||||