exercices sur les structures de données de base (2)
This commit is contained in:
parent
c8ab39a19e
commit
b49b0690b9
|
@ -1,18 +1,16 @@
|
||||||
Structures de données simples
|
Les structures de données
|
||||||
=============================
|
===========================
|
||||||
|
|
||||||
FIXME
|
Les séquences
|
||||||
|
-------------
|
||||||
|
|
||||||
- tableaux
|
Les types séquences (listes)
|
||||||
- piles
|
|
||||||
- files
|
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
- Recherche dans une liste, recherche du maximum dans une liste
|
# 4::1::5::8::1::[];;
|
||||||
- Recherche d’un mot dans une chaîne de caractères.
|
- : int list = [4 ;1 ;5 ;8 ;1]
|
||||||
|
|
||||||
Les listes
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée.
|
Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée.
|
||||||
Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice.
|
Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice.
|
||||||
|
@ -30,86 +28,8 @@ Chaque fois que l’on doit désigner un élément du tableau, on fait figurer l
|
||||||
- Lists Versus Tuples : types mutables, immutables
|
- Lists Versus Tuples : types mutables, immutables
|
||||||
- Lists Versus Sets : non ordonné, collection simple
|
- Lists Versus Sets : non ordonné, collection simple
|
||||||
|
|
||||||
|
- Recherche dans une liste, recherche du maximum dans une liste
|
||||||
Traduction d'une structure de données dans une autre
|
- Recherche d’un mot dans une chaîne de caractères.
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> listOfStrings = ['One', 'Two', 'Three']
|
|
||||||
>>> strOfStrings = ' '.join(listOfStrings)
|
|
||||||
>>> print(strOfStrings)
|
|
||||||
One Two Three
|
|
||||||
>>>
|
|
||||||
>>> # List Of Integers to a String
|
|
||||||
... listOfNumbers = [1, 2, 3]
|
|
||||||
>>> strOfNumbers = ''.join(str(n) for n in listOfNumbers)
|
|
||||||
>>> print(strOfNumbers)
|
|
||||||
123
|
|
||||||
>>>
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
|
|
||||||
>>> result = []
|
|
||||||
>>> for hostname, ip, macaddress in l:
|
|
||||||
... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress))
|
|
||||||
...
|
|
||||||
>>> result
|
|
||||||
[{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'},
|
|
||||||
{'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}]
|
|
||||||
>>>
|
|
||||||
|
|
||||||
|
|
||||||
Structures de données complexes
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
- graphes
|
|
||||||
- arbres
|
|
||||||
- hachages
|
|
||||||
- le parcours de graphes
|
|
||||||
- les calculs de dates
|
|
||||||
|
|
||||||
|
|
||||||
Les types produits nommés (enregistrements)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# type adresse = { rue : string ; ville : string ; cp : int};;
|
|
||||||
# type fiche = {
|
|
||||||
nom : string ;
|
|
||||||
prenom : string ;
|
|
||||||
adresse : adresse ;
|
|
||||||
date naissance : int * int * int ;
|
|
||||||
tel fixe : string ;
|
|
||||||
portable : string
|
|
||||||
};;
|
|
||||||
# let v1 = { a = 1 ; b = false ; c = 'r'};;
|
|
||||||
|
|
||||||
- les sommes (constructeurs)
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# type couleur = Pique | Coeur | Carreau | Trefle;;
|
|
||||||
# let v = (Pique , Coeur);;
|
|
||||||
val v : couleur * couleur = (Pique , Coeur)
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
type nombre =
|
|
||||||
Ent of int | Reel of float | Cplx of float × float
|
|
||||||
Ent, Reel, Cplx sont les constructeurs du type.
|
|
||||||
|
|
||||||
On voit qu'une expression peut-être complexe, mais dans tous les cas une valeur
|
|
||||||
est renvoyée.
|
|
||||||
|
|
||||||
- les types séquences (listes)
|
|
||||||
|
|
||||||
.. code-block:: ocaml
|
|
||||||
|
|
||||||
# 4::1::5::8::1::[];;
|
|
||||||
- : int list = [4 ;1 ;5 ;8 ;1]
|
|
||||||
|
|
||||||
Algorithme de la longueur d'une liste
|
Algorithme de la longueur d'une liste
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
@ -204,3 +124,78 @@ Les listes chaînées
|
||||||
int elt ;
|
int elt ;
|
||||||
struct list* suivant ;
|
struct list* suivant ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
Traduction d'une structure de données dans une autre
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> listOfStrings = ['One', 'Two', 'Three']
|
||||||
|
>>> strOfStrings = ' '.join(listOfStrings)
|
||||||
|
>>> print(strOfStrings)
|
||||||
|
One Two Three
|
||||||
|
>>>
|
||||||
|
>>> # List Of Integers to a String
|
||||||
|
... listOfNumbers = [1, 2, 3]
|
||||||
|
>>> strOfNumbers = ''.join(str(n) for n in listOfNumbers)
|
||||||
|
>>> print(strOfNumbers)
|
||||||
|
123
|
||||||
|
>>>
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
|
||||||
|
>>> result = []
|
||||||
|
>>> for hostname, ip, macaddress in l:
|
||||||
|
... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress))
|
||||||
|
...
|
||||||
|
>>> result
|
||||||
|
[{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'},
|
||||||
|
{'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}]
|
||||||
|
>>>
|
||||||
|
|
||||||
|
|
||||||
|
Structures de données complexes
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Les types produits nommés
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
On les appelle enregistrements, dictionnaires ou tables de hachage.
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
|
# type adresse = { rue : string ; ville : string ; cp : int};;
|
||||||
|
# type fiche = {
|
||||||
|
nom : string ;
|
||||||
|
prenom : string ;
|
||||||
|
adresse : adresse ;
|
||||||
|
date naissance : int * int * int ;
|
||||||
|
tel fixe : string ;
|
||||||
|
portable : string
|
||||||
|
};;
|
||||||
|
# let v1 = { a = 1 ; b = false ; c = 'r'};;
|
||||||
|
|
||||||
|
- les sommes (constructeurs)
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
|
# type couleur = Pique | Coeur | Carreau | Trefle;;
|
||||||
|
# let v = (Pique , Coeur);;
|
||||||
|
val v : couleur * couleur = (Pique , Coeur)
|
||||||
|
|
||||||
|
.. code-block:: ocaml
|
||||||
|
|
||||||
|
type nombre =
|
||||||
|
Ent of int | Reel of float | Cplx of float × float
|
||||||
|
Ent, Reel, Cplx sont les constructeurs du type.
|
||||||
|
|
||||||
|
Autres structures de données complexes
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- arbres
|
||||||
|
- graphes
|
||||||
|
- dates
|
||||||
|
|
||||||
|
- le parcours de graphes
|
||||||
|
- les calculs de dates
|
||||||
|
|
|
@ -278,12 +278,13 @@ et l'implémentation effective de l'algorithme
|
||||||
# supprime l'entrée avec vérification que les données fournies
|
# supprime l'entrée avec vérification que les données fournies
|
||||||
# sont bien dans l'enregistrement à supprimer
|
# sont bien dans l'enregistrement à supprimer
|
||||||
# applique la nouvelle conf DHCP
|
# applique la nouvelle conf DHCP
|
||||||
route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17") # FIXME
|
route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17")
|
||||||
routes = get_routes()
|
routes = get_routes()
|
||||||
if route_to_del in routes:
|
if route_to_del in routes:
|
||||||
c = creole_loader(load_extra=True, rw=True, owner=MODNAME, mandatory_permissive=False)
|
c = creole_loader(load_extra=True, rw=True)
|
||||||
c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0])
|
c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0])
|
||||||
if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2] and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]:
|
if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2]
|
||||||
|
and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]:
|
||||||
c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id)
|
c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id)
|
||||||
config_save_values(c, MODNAME)
|
config_save_values(c, MODNAME)
|
||||||
return True
|
return True
|
||||||
|
|
Loading…
Reference in New Issue