# Initiation à la programmation ENSAE 1A

## td_note_2007.tex

File: td_note_2007.tex, line 63

```
class Date :
def __init__ (self, jour, mois) :
...

```

, correction 2007

```# coding: latin-1
####################################
# exercice 1
####################################

# question 1
def numero (jour, mois, duree = [31, 28, 31,30,31,30,31,31,30,31,30,31] ) :
s = 0
for i in range (0,mois-1) :
s += duree [i]
s += jour - 1
return s+1

# question 2
def conversion_liste (li) :
res = []
for jour,mois in s : res.append ( numero (jour, mois))
# pareil que
# for i in range (0, len (s)) : res.append ( numero (s [i][0], s [i][1]))
return res

def ecart (num) :
res = []
for i in range (1, len (num)) :
d = num [i] - num [i-1]
res.append (d)
return res

s = [ (1,1), (9,4), (1,5), (8,5), (17,5), (4,6), (14,7), \
(15,8), (1,11), (11,11), (25,12) ]
r = conversion_liste (s)
ec = ecart (r)

# question 3
pos = ec.index ( max (ec) )
print "position de l'écart le plus grand ", pos
print "jour ", s [pos], " --> ", s [pos+1]

####################################
# exercice 2
####################################

# question 4
class Date :
def __init__ (self, jour, mois) :
self.jour = jour
self.mois = mois
self.duree = [31, 28, 31,30,31,30,31,31,30,31,30,31]

# question 5
def numero (self) :
s = 0
for i in range (0,self.mois-1) :
s += self.duree [i]
s += self.jour - 1
return s+1

# question 6
def difference (self, autre) :
return self.numero () - autre.numero ()

def conversion_date (s) :
res = []
for jour,mois in s :
res.append ( Date (jour, mois) )
return res

def ecart_date (date) :
ec = []
for i in range (1, len (date)) :
ec.append ( date [i].difference ( date [i-1] ) )
return ec

# question 7
s = [ (1,1), (9,4), (1,5), (8,5), (17,5), (4,6), \
(14,7), (15,8), (1,11), (11,11), (25,12) ]

r = conversion_date (s)
ec = ecart_date (r)
pos = ec.index ( max (ec) )
print "position de l'ecart le plus grand ", pos
print "jour ", s [pos], " --> ", s [pos+1]

# question 8
"""
La conversion en Date est faite une fois pour les dates (1,1) et (25,12)
et 2 fois pour les autres en effet, la méthode difference effectue
la conversion en numéros des dates self et autre
la fonction ecart_date calcule date [i].difference ( date [i-1] ) et
date [i+1].difference ( date [i] )
--> la date [i] est convertie 2 fois
"""

# question 9
"""
On peut par exemple stocker la conversion en numéro
dans le constructeur comme suit :
"""

class Date :
def __init__ (self, jour, mois) :
self.jour = jour
self.mois = mois
self.duree = [31, 28, 31,30,31,30,31,31,30,31,30,31]
self.num = self.numero ()

# question 5
def numero (self) :
s = 0
for i in range (0,self.mois-1) :
s += self.duree [i]
s += self.jour - 1
return s+1

# question 6
def difference (self, autre) :
return self.num - autre.num

r = conversion_date (s)
ec = ecart_date (r)
pos = ec.index ( max (ec) )
print "position de l'écart le plus grand ", pos
print "jour ", s [pos], " --> ", s [pos+1]
```