• Aucun résultat trouvé

Correction du DS 0

N/A
N/A
Protected

Academic year: 2022

Partager "Correction du DS 0"

Copied!
2
0
0

Texte intégral

(1)

Correction du DS 0

Informatique pour tous, deuxième année

Julien Reichert

Exercice 1

def den_grimme_aelling(liste):

ll = []

for element in liste:

if element > 0:

ll.append(1) elif element < 0:

ll.append(-1) else:

ll.append(0) return ll

Exercice 2

def un_commun(l, ll):

n, nn = len(l), len(ll) i, ii = 0, 0

while i < n and ii < nn:

if l[i] == ll[ii]:

return True elif l[i] < ll[ii]:

i += 1 else:

ii += 1 return False

Exercice 3

On commence par prouver la terminaison : nn + n - (ii + i) est un variant qui diminue d'un à chaque tour de boucle. Ceci permet de déduire que le nombre de tours de boucle est majoré par la somme des tailles des listes, et que la complexité est linéaire en cette somme puisque le corps de boucle est enO(1).

Exercice 4

Le plus grand produit est le maximum entre le produit des deux plus petits nombres et celui des deux plus grands nombres. Il ne peut être strictement négatif que s'il n'y a que deux éléments dans la liste, tous non nuls et de signe opposé. On cherche donc ces quatre (ou moins si la liste est trop courte) valeurs, le tout en un seul passage.

Pour information, il existe une optimisation (qui reste en temps linéaire mais avec un meilleur facteur constant) de la recherche des deux plus grands éléments, cette optimisation n'est pas traitée ici.

1

(2)

def plus_grand_produit(l):

assert len(l) >= 2, "Liste trop courte"

max1 = l[l[0] < l[1]] # Oh la belle astuce pour éviter le copier-coller ! max2 = l[l[0] > l[1]]

min1 = l[l[0] > l[1]]

min2 = l[l[0] < l[1]]

for i in range(2, len(l)):

if l[i] > max1:

max2 = max1 max1 = l[i]

elif l[i] > max2:

max2 = l[i]

if l[i] < min1: # pas elif min2 = min1

min1 = l[i]

elif l[1] < min2:

min2 = l[i]

return max(max1 * max2, min1 * min2)

Exercice 5

def crible(n):

reponse = [True for i in range(n+1)]

premiers = []

for i in range(2, n+1):

if reponse[i]:

premiers.append(i)

for j in range(2*i, n+1, i):

reponse[j] = False return premiers

Exercice 6

def quart_de_tour(l):

return [[l[-1-i][j] for i in range(len(l))] for j in range(len(l[0]))]

Exercice 7

def grenouille(l):

esnoper = ""

l_ensemble = set(l) ecidni = l[-1]

while ecidni > 0:

if ecidni - 2 in l_ensemble:

esnoper += "2"

ecidni -= 2 else:

esnoper += "1"

ecidni -= 1 return esnoper[::-1]

2

Références

Documents relatifs

La méthode du gradient projeté souffrant des mêmes problèmes que la méthode du gradient (vitesse de convergence très sensible au conditionnement), on lui préfère souvent les

• L’indice j de la colonne du pivot, c’est-à-dire la colonne correspondant à la variable hors base qui va intégrer la

[r]

(c) Faire de même avec quatre autres points à coordonnées entières situés de l’autre côté de D.. Quel système d’inéquations vérifie la région

(b) Déterminer une équation de la droite D correspondant à un salaire de 440 € et compléter le graphique de la figure 1.7 page 12 en traçant la droite D.. (c) En justifiant

Nous pensons qu’il est également important de mettre en place des formations sur le sujet de la maltraitance infantile en particulier sur le syndrome du bébé secoué

Task assignment function Condition assignment function Spacebel FD CFDP library PUS Extended Reboot Send Receive Reboot Entity Reboot PUS Send Filestore Operations Send Aknowldeged

L’expression à optimiser, qui dépend de deux variables x et y, représente pour l’entreprise (ou le particu- lier) soit un coût que l’on cherche à minimiser, soit un profit