Initiation à la programmation ENSAE 1A

ecrit_2008_rattrapage.tex

File: ecrit_2008_rattrapage.tex, line 33


def u (n) :
    if n <= 2 : return 1
    else : return u (n-1) + u (n-2) + u (n-3)

File: ecrit_2008_rattrapage.tex, line 46


def u_non_recursif (n) :
    if n <= 2 : return 1
    u0 = 1
    u1 = 1
    u2 = 1
    i = 3
    while i <= n :
        u  = u0 + u1 + u2
        u0 = u1
        u1 = u2
        u2 = u
        i += 1
    return u

File: ecrit_2008_rattrapage.tex, line 72


def fonction (n) :
    return n + (n % 2)
    
print fonction (10)
print fonction (11)

File: ecrit_2008_rattrapage.tex, line 91


10
12

File: ecrit_2008_rattrapage.tex, line 101


def fonction3 (n) :
    k = 0
    while k < n : k += 3
    return k

File: ecrit_2008_rattrapage.tex, line 112


def fonction3 (n) :
    if   n % 3 == 0 : return n
    elif n % 3 == 1 : return n + 2
    else : return n + 1

File: ecrit_2008_rattrapage.tex, line 123


def fonction3 (n) :
    if n % 3 == 0 : return n
    else : return n + 3 - (n % 3)

File: ecrit_2008_rattrapage.tex, line 140


def division (n) :
    return n / 2
    
print division (1)
print division (0.9)

File: ecrit_2008_rattrapage.tex, line 158


0
0.45

File: ecrit_2008_rattrapage.tex, line 197


def compare_liste (p,q) :
    i = 0
    while i < len (p) and i < len (q) :
        if   p [i] < q [i] : return -1  # on peut décider
        elif p [i] > q [i] : return  1  # on peut décider
        i += 1                          # on ne peut pas décider
    # fin de la boucle, il faut décider à partir des longueurs des listes
    if   len (p) < len (q) : return -1
    elif len (p) > len (q) : return  1
    else : return 0

File: ecrit_2008_rattrapage.tex, line 214


def compare_liste (p,q) :
    i = 0
    while i < len (p) and i < len (q) :
        c = cmp (p [i], q [i])
        if c != 0 : return c            # on peut décider 
        i += 1                          # on ne peut pas décider
    # fin de la boucle, il faut décider à partir des longueurs des listes
    return cmp (len (p), len (q))

File: ecrit_2008_rattrapage.tex, line 238


l = [0,1,2,3,4,5,6,7,8,9]
i = 1
while i < len (l) :
    print l [i], l [i+1]
    i += 2

File: ecrit_2008_rattrapage.tex, line 250


1 2
3 4
5 6
7 8
9
Traceback (most recent call last):
  File "examen2008_rattrapage.py", line 43, in <module>
    print l [i], l [i+1]
IndexError: list index out of range

File: ecrit_2008_rattrapage.tex, line 285


def suite_geometrique_1 (r) :
    x = 1.0
    y = 0.0
    n = 0
    while x > 0 :
        y += x
        x *= r
        n += 1
    return y,n
    
print suite_geometrique_1 (0.5)  #affiche (2.0, 1075)

File: ecrit_2008_rattrapage.tex, line 303


def suite_geometrique_2 (r) :
    x = 1.0
    y = 0.0
    n = 0
    yold = y + 1
    while abs (yold - y) > 0 :
        yold = y
        y += x
        x *= r
        n += 1
    return y,n
    
print suite_geometrique_2 (0.5)  #affiche (2.0, 55)

File: ecrit_2008_rattrapage.tex, line 348


def hyper_cube_liste (n, m = [0,0]) :
    if n > 1 :
        m [0] = [0,0]
        m [1] = [0,0]
        m [0] = hyper_cube_liste (n-1, m [0])
        m [1] = hyper_cube_liste (n-1, m [1])
    return m
h = hyper_cube_liste (3)
print h                     # affiche [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]

File: ecrit_2008_rattrapage.tex, line 365


def hyper_cube_dico (n) :
    r = { }
    ind = [ 0 for i in range (0,n) ]
    while ind [0] <= 1 :
        cle                 = tuple (  ind ) # conversion d'une liste en tuple
        r [cle]             = 0
        ind [ len (ind)-1] += 1
        k                   = len (ind)-1
        while ind [ k ] == 2 and k > 0 :
            ind [k]    = 0
            ind [k-1] += 1
            k         -= 1
    return r
h = hyper_cube_dico (3)
print h        # affiche {(0, 1, 1): 0, (1, 1, 0): 0, (1, 0, 0): 0, (0, 0, 1): 0, 
               #          (1, 0, 1): 0, (0, 0, 0): 0, (0, 1, 0): 0, (1, 1, 1): 0}

File: ecrit_2008_rattrapage.tex, line 389


def occurrence (l,n) :
    d = ....... # choix d'un hyper_cube (n)
    .....
    return d
suite = [ 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1 ]
h = occurrence (suite, 3)
print h

File: ecrit_2008_rattrapage.tex, line 407


def occurrence (l,n) :
    d = hyper_cube_dico (n)
    for i in range (0, len (l)-n) :
        cle = tuple (l [i:i+n])
        d [cle] += 1
    return d

File: ecrit_2008_rattrapage.tex, line 421


def occurrence (l,n) :
    d = { }
    for i in range (0, len (l)-n) :
        cle = tuple (l [i:i+n])
        if cle not in d : d [cle] = 0
        d [cle] += 1
    return d

File: ecrit_2008_rattrapage.tex, line 436


def occurrence (l,n) :
    d = hyper_cube_liste (n, [0,0])         # * remarque voir plus bas
    for i in range (0, len (l)-n) :
        cle = l [i:i+n]
        t   = d                       # 
        for k in range (0,n-1) :      # point clé de la fonction : 
            t = t [ cle [k] ]         #                accès à un élément
        t [cle [ n-1] ] += 1
    return d

File: ecrit_2008_rattrapage.tex, line 454


Traceback (most recent call last):
  File "examen2008_rattrapage.py", line 166, in <module>
    h = occurrence (suite, n)
  File "examen2008_rattrapage.py", line 160, in occurrence
    t [cle [ n-1] ] += 1
TypeError: 'int' object is not iterable

File: ecrit_2008_rattrapage.tex, line 468


def fonction (l = [0,0]) :
    l [0] += 1
    return l
    
print fonction ()         # affiche [1,0] : résultat attendu
print fonction ()         # affiche [2,0] : résultat surprenant
print fonction ( [0,0])   # affiche [1,0] : résultat attendu

File: ecrit_2008_rattrapage.tex, line 483


import copy
def fonction (l = [0,0]) :
    l = copy.copy (l)
    l [0] += 1
    return l

File: ecrit_2008_rattrapage.tex, line 495


def hyper_cube_liste (n, m = [0,0]) :
    m = copy.copy (m)		
    if n > 1 :
        m [0] = [0,0]
        m [1] = [0,0]
        m [0] = hyper_cube_liste (n-1, m [0])
        m [1] = hyper_cube_liste (n-1, m [1])
    return m