exercices (maximum d'une liste)
This commit is contained in:
parent
141f4a12a7
commit
310d8021b4
@ -1,6 +1,22 @@
|
||||
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
|
||||
-------------
|
||||
|
||||
@ -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.
|
||||
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
|
||||
|
||||
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]
|
||||
>>>
|
||||
|
||||
|
||||
.. 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::
|
||||
|
||||
Matrice
|
||||
@ -183,6 +244,23 @@ soit une liste l à trier :
|
||||
- : 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
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -193,6 +271,25 @@ Les listes chaînées
|
||||
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
|
||||
-----------------------------------------------------
|
||||
|
||||
|
@ -241,7 +241,7 @@ niveau
|
||||
cfg.read(CONFIG_FILE)
|
||||
|
||||
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":
|
||||
DHCP_PATH = cfg.get('eole', 'container_path_dhcp')
|
||||
return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases')
|
||||
|
@ -348,17 +348,24 @@ 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 dans un fichier
|
||||
- afficher du texte ou un nombre
|
||||
- lire du texte ou un nombre
|
||||
- manipuler les prompts
|
||||
- afficher (du texte, un nombre...)
|
||||
- lire (du texte, un nombre...)
|
||||
- interagir avec les prompts
|
||||
|
||||
Exemple de lecture d'une entrée utilisateur
|
||||
.. ifconfig:: exercice
|
||||
|
||||
.. code-block:: python
|
||||
**Exercice** : écrire un algorithme qui demande le prénom d'une personne
|
||||
et renvoie "bonjour, je m'appelle <Prénom>"
|
||||
|
||||
# coding: utf-8
|
||||
prenom = raw_input("quel est ton prénom ? \n")
|
||||
print("bonjour, je m'appelle " + prenom.capitalize())
|
||||
.. ifconfig:: correction
|
||||
|
||||
**Correction** : (implémentation en python)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# coding: utf-8
|
||||
prenom = raw_input("quel est ton prénom ? \n")
|
||||
print("bonjour, je m'appelle " + prenom.capitalize())
|
||||
|
||||
|
||||
La REPL (boucle d'interaction)
|
||||
@ -415,3 +422,8 @@ Le prompt OCaml (utop)::
|
||||
val y : int = 3
|
||||
# y * y;;
|
||||
- : int = 9
|
||||
|
||||
Lire et écrire dans un fichier
|
||||
------------------------------
|
||||
|
||||
FIXME
|
||||
|
Loading…
Reference in New Issue
Block a user