Quelques exercices de programmation classiques

Échauffement

Après :

   1 a = 1
   2 b = 2
   3 a = b
   4 b = a

que valent a et b ?

Ce qui suit est une astuce pythonesque :

   1 a = 1
   2 b = 2
   3 a,b = b,a

Pouvez-vous expliquer la différence ?

Fonctions de base

Écrivez une fonction :

   1 def moy(a,b):
   2         ...

qui renvoie la moyenne des arguments (en supposant qu’il s’agit de nombres).

Écrivez une fonction :

   1 def max2(a, b):
   2         ...

qui renvoie le plus grand des arguments (en supposant que ces arguments peuvent être comparés avec <).

À l’aide de max2, écrivez une fonction

   1 def max3(a, b, c):
   2         ...

qui renvoie le plus grand des arguments parmi trois.

Écrivez une fonction :

   1 def mediane(a, b, c):
   2         ...

qui renvoie l’élément médian.

Boucles

Voici une fonction qui calcule quelque chose :

   1 def f(n,x):
   2         from math import floor
   3         y = floor(x)
   4         x = x-y
   5         for i in range(n):
   6                 x=1/x
   7                 y=floor(x)
   8                 x = x-y
   9         return y

Sans rien comprendre à ce que fait cette fonction, vous devriez pouvoir en écrire une qui fait exactement la même chose, en utilisant une boucle while au lieu de la boucle for.

Voici une autre fonction :

   1 def g(x,y):
   2         r=x
   3         q=0
   4         while r>=y:
   5                 r = r-y
   6                 q = q+1
   7         return q,r

Essayez de deviner ce que renvoie g(5,2), puis vérifiez. Même question pour g(0,2), puis g(100,3). Que fait g(1,0) ? Et finalement que fait g(x,y) quand x et y sont des entiers positifs et y est non nul. Savez-vous le prouver ?

Un peu d’arithmétique

Écrivez une fonction :

   1 def fact(n):
   2         ...

qui renvoie la factorielle de l’entier naturel n.

Écrivez une fonction :

   1 def est_premier(n):
   2         ...

qui renvoie True si l’entier naturel n est premier et False sinon (on ne vous demande pas quelque chose d’astucieux ou d’efficace).

Écrivez une fonction :

   1 def nb_premiers(n):
   2         ...

qui renvoie le nombre de nombres premiers strictement inférieurs à n.

Écrivez une fonction :

   1 def premier_suivant(n):
   2         ...

qui renvoie le premier nombre premier strictement supérieur à n.

Écrivez une fonction :

   1 def premier_numéro(n):
   2         ...

qui renvoie le n-ième nombre premier.

Écrivez une fonction :

   1 def pgcd(p,q):
   2         ...

qui renvoie le PGCD des entiers p et q.

Sommes

Écrivez une fonction :

   1 def somme_1(n):
   2         ...

qui renvoie la somme des entiers naturels de 1 à n.

Écrivez une fonction :

   1 def somme_2(n):
   2         ...

qui renvoie la somme des carrés des entiers naturels de 1 à n.

Écrivez une fonction :

   1 def somme_k(k,n):
   2         ...

qui renvoie la somme des puissances k-ièmes des entiers naturels de 1 à n.

Écrivez une fonction :

   1 def somme_f(f,n0,n1):
   2         ...

qui renvoie la somme des valeurs de f(n) pour n0 <= n <= n1. Notez que le deuxième argument attendu est une fonction, ce qui ne pose aucun problème à python: c’est une valeur comme les autres.

Testez par exemple :

   1 def identite(x):
   2         return x
   3 def carre(x):
   4         return x*x
   5 somme_f(identite,0,10)==somme_1(10)
   6 somme_f(carre,0,10)==somme_2(10)

Écrivez une fonction :

   1 def integrale(f,x0,x1,n):
   2         ...

qui calcule une valeur approchée de l’intégrale de f sur l’intervalle [x0,x1] en suivant la méthode des trapèzes, avec n+1 subdivisions.

La suite

À partir de ce point, les boucles ne devraient plus avoir de secrets pour vous. Travaillons sur des structures de données séquentielles : Autour des listes.

EnsInfo: Algorithmique élémentaire en Python (dernière édition le 2020-09-18 09:35:50 par LionelVaux)