exercices (maximum d'une liste)
This commit is contained in:
parent
141f4a12a7
commit
310d8021b4
|
@ -1,6 +1,22 @@
|
||||||
Les structures de données
|
Les structures de données
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
ATD
|
||||||
|
|
||||||
|
Abstract Data Type, structure de données abstraites.
|
||||||
|
La représentation des données est forcément un choix.
|
||||||
|
Il est impossible de rendre compte globalement d'un élément du réel,
|
||||||
|
il faut en faire une interprétation abstraite.
|
||||||
|
|
||||||
|
**Exemple**:
|
||||||
|
|
||||||
|
- Un être humain peut être représenté par les données présentes dans sa
|
||||||
|
carte d'identité. Mais un être humain n'est pas sa carte d'identité.
|
||||||
|
- Un être humain peut être représenté par les données présentes dans ses préférences
|
||||||
|
de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net.
|
||||||
|
|
||||||
Les séquences
|
Les séquences
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@ -16,6 +32,15 @@ Un ensemble de valeurs portant le même nom de variable et repérées par un nom
|
||||||
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.
|
||||||
Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément.
|
Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément.
|
||||||
|
|
||||||
|
**manipulation** :
|
||||||
|
|
||||||
|
- `insert()`
|
||||||
|
- `append()`
|
||||||
|
- `remove()`
|
||||||
|
- `find()`
|
||||||
|
- `print()`
|
||||||
|
- ...
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
zoo = ['bear', 'lion', 'panda', 'zebra']
|
zoo = ['bear', 'lion', 'panda', 'zebra']
|
||||||
|
@ -73,6 +98,42 @@ Cette fonction est prédéfinie en Ocaml : `List.length`
|
||||||
[0, 1, 2, 3, 4, 5]
|
[0, 1, 2, 3, 4, 5]
|
||||||
>>>
|
>>>
|
||||||
|
|
||||||
|
|
||||||
|
.. ifconfig:: exercice
|
||||||
|
|
||||||
|
**Exercice** : Calcul du premier élément maximal dans une liste,
|
||||||
|
proposer une implémentation en python qui renvoie le maximum et
|
||||||
|
la position du max dans la liste.
|
||||||
|
|
||||||
|
.. ifconfig:: correction
|
||||||
|
|
||||||
|
**Correction** :
|
||||||
|
|
||||||
|
.. code-block: python
|
||||||
|
|
||||||
|
def max_list(L) :
|
||||||
|
k = len(L)
|
||||||
|
max, x = L[0], 0
|
||||||
|
i = 1
|
||||||
|
while i < k :
|
||||||
|
if max < L[i]:
|
||||||
|
max = L[i]
|
||||||
|
x = i
|
||||||
|
i = i + 1
|
||||||
|
return max, x
|
||||||
|
|
||||||
|
couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7])
|
||||||
|
print ’Max de L est ’, couple[0]
|
||||||
|
print ’et se trouve à la position ’, couple[1]
|
||||||
|
|
||||||
|
Exemple de généricité : ce code fonctionne avec une chaîne de caractères.
|
||||||
|
|
||||||
|
.. code-block: python
|
||||||
|
|
||||||
|
couple = max_list(’totovaaumarche’)
|
||||||
|
print ’Max de L est ’, couple[0]
|
||||||
|
print ’et se trouve à la position ’, couple[1]
|
||||||
|
|
||||||
.. glossary::
|
.. glossary::
|
||||||
|
|
||||||
Matrice
|
Matrice
|
||||||
|
@ -183,6 +244,23 @@ soit une liste l à trier :
|
||||||
- : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9]
|
- : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9]
|
||||||
|
|
||||||
|
|
||||||
|
Définition d'un itérateur
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
>>> l = range(10)
|
||||||
|
>>> for i in l:
|
||||||
|
... print l[i]
|
||||||
|
...
|
||||||
|
0
|
||||||
|
...
|
||||||
|
8
|
||||||
|
9
|
||||||
|
>>> l.__iter__()
|
||||||
|
<listiterator object at 0x7f78bb450410>
|
||||||
|
|
||||||
|
|
||||||
Les listes chaînées
|
Les listes chaînées
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -193,6 +271,25 @@ Les listes chaînées
|
||||||
struct list* suivant ;
|
struct list* suivant ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
**Outils de manipulation** :
|
||||||
|
|
||||||
|
- `next()`
|
||||||
|
- `pointer()`
|
||||||
|
- `insert(l, a)`
|
||||||
|
- `remove(a, n)`
|
||||||
|
|
||||||
|
|
||||||
|
Les piles
|
||||||
|
----------
|
||||||
|
|
||||||
|
**manipulation**
|
||||||
|
|
||||||
|
- `insert()` : insérer un élément à la fin de la pile
|
||||||
|
- `dequeue()` : (remove and return) : retirer un élément du haut de la pile
|
||||||
|
- FIFO : "first in first out"
|
||||||
|
|
||||||
|
|
||||||
Traduction d'une structure de données dans une autre
|
Traduction d'une structure de données dans une autre
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -241,7 +241,7 @@ niveau
|
||||||
cfg.read(CONFIG_FILE)
|
cfg.read(CONFIG_FILE)
|
||||||
|
|
||||||
if name == "SUBNETS":
|
if name == "SUBNETS":
|
||||||
return eval(cfg.get('eole', 'subnets')) # c'est une liste de tuple # FIXME
|
return eval(cfg.get('eole', 'subnets'))
|
||||||
elif name == "LEASES_FILE":
|
elif name == "LEASES_FILE":
|
||||||
DHCP_PATH = cfg.get('eole', 'container_path_dhcp')
|
DHCP_PATH = cfg.get('eole', 'container_path_dhcp')
|
||||||
return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases')
|
return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases')
|
||||||
|
|
|
@ -348,11 +348,18 @@ Il est possible de communiquer de la manière suivante avec un programme :
|
||||||
|
|
||||||
- lire et écrire sur l'entrée/sortie standard
|
- lire et écrire sur l'entrée/sortie standard
|
||||||
- lire et écrire dans un fichier
|
- lire et écrire dans un fichier
|
||||||
- afficher du texte ou un nombre
|
- afficher (du texte, un nombre...)
|
||||||
- lire du texte ou un nombre
|
- lire (du texte, un nombre...)
|
||||||
- manipuler les prompts
|
- interagir avec les prompts
|
||||||
|
|
||||||
Exemple de lecture d'une entrée utilisateur
|
.. ifconfig:: exercice
|
||||||
|
|
||||||
|
**Exercice** : écrire un algorithme qui demande le prénom d'une personne
|
||||||
|
et renvoie "bonjour, je m'appelle <Prénom>"
|
||||||
|
|
||||||
|
.. ifconfig:: correction
|
||||||
|
|
||||||
|
**Correction** : (implémentation en python)
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@ -415,3 +422,8 @@ Le prompt OCaml (utop)::
|
||||||
val y : int = 3
|
val y : int = 3
|
||||||
# y * y;;
|
# y * y;;
|
||||||
- : int = 9
|
- : int = 9
|
||||||
|
|
||||||
|
Lire et écrire dans un fichier
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
Loading…
Reference in New Issue