Vous êtes sur la page 1sur 118
ape Les 1° et 2° années ~ eo ME ‘ ss. TOUS LES ° § ALGORITHMES PROGRAMMATION PYTHON TOUS LES % ALGORITHIMES PROGRAMMATION PYTHON Prépa scientifique 1'° et 2° années Avant-propos Les scientifiques, jusqu’a récemment, se reconnaissaient 4 leurs instruments : Vastronome a sa lunette, le chimiste 4 sa cornue... et le mathématicien a sa blouse blanche et sa craie. Aujourd’hui tous utilisent le méme outil : ordinateur. Michel Serres (1930-) Pourquoi ce livre ? En prépa, un bon moyen de préparer I'épreuve informatique est de bien connaitre des algorithmes classiques. N'importe quel sujet pouvant tomber, ce n’est pas forcément Vaboutissement du projet que I’examinateur recherche mais de voir si le candidat maitrise les principes de bases de Python : programmation d'une fonction, maitrise de la récursivité, manipulation des listes. Les mathématiques nous offrent l’opportunité de maitriser ces principes et de voir des algorithmes puissants, la plupart historiques, permettant d’obtenir des approximations (de solutions d’équations, de constantes célébres, de calculs d’intégrales, etc.) ou permettant la gestion de listes (tris, recherche d’éléments, etc). Comment se procurer Python ? Sur Internet, en téléchargement gratuit aux adresses suivantes : http:/Awww.python.org/ ou www.continuum.io/downloads (pour la version Anaconda et Spyder, qui dispose de bonnes librairies graphiques). Comment est construit ce livre ? De maniére a programmer tout de suite, sans avoir & se taper 30 pages d’explications théoriques, de syntaxe épouvantable... On s'est mis & la place d’un lecteur qui veut voir un algorithme fonctionner immédiatement et effectuer la tache précise qui lui est dédiée. La mise en page choisie (un algo par page, en gros) vous permettra de repérer ou de retrouver trés vite l’algorithme que vous cherchez ! Tous les algorithmes sont écrits sous Python Idle sauf quelques-uns (immédiatement identifiables car possédant des numéros de lignes) sous Anaconda Spyder, pour des raisons de librairie graphique ou d’outils matriciels. Note : es algorithmes signalés par un astérisque (*) sont ceux mentionnées explicitement dans le programmes de prépa (donc exigibles).. Que Surtout ne pas s’énerver. II y a de fortes chances que la cause soit une faute de frappe ou méme un oubli (une parenthése, une majuscule, une virgule au lieu d’un point, etc.), mais ou ? Le logiciel ne nous donne pas hélas beaucoup d’indications sur l’endroit ou se trouve I’erreur (on a l’impression qu’il s’en fiche royalement). Ne désespérez pas trop non plus : placer des « print » a des endroits stratégiques (pour repérer ou |’ordinateur a changé une valeur qu'il n’aurait pas dd) peut étre bénéfique. Sinon, la bonne vieille aide Internet (avec forums ou tutos pour la plupart en anglais...) peut s‘avérer salvatrice voire miraculeuse (a condition d’étre patient, voire bilingue...) car erreur que vous avez commise a probablement été commise par quelqu’un d’autre, avant vous, et qui a la bonne idée d’en témoigner... Les erreurs en programmation restent souvent une occasion de progresser et provoquent une joie immense lorsqu’on les élimine. S'il y a une erreur, prenez un bon bol d’air avant toute crispation | C’est 4 force de recopier et de lire des lignes de programme, qu’on se forge une culture de la programmation et qu’on devient soi-méme un bon programmeur. Courage ! ire si un algorithme ne marche pas ? Chapitre 1. Tous les algorithmes de 1 année Résolution d'une équation par dichotomie"... Résolution d'une équation par la méthode de la fausse position Résolution d'une équation par la méthode de la sécante. Résolution d'une équation par la métho—de de Newton” ....-.cccrscsnnsernnneneensiees 19) Calcul (approché) d'une intégrale par la méthode des rectangles" Calcul (approché) d'une intégrale par la méthode des trapézes* Calcul (approché) d'une intégrale par la méthode de Simpson... Approximation de e par le calcul intégral et la dichotomie Résolution d'une équation différentielle (cas simple) par la méthode d’Euler*...... Résolution d'une équation différentielle (cas général) par la méthode d’Euler* Algorithme qui donne la liste des diviseurs d'un entier. 20 Algorithme qui teste si un entier est premier Algorithme qui donne la liste des diviseurs premiers d'un entier.. Indicatrice d’Euler Algorithme qui détermine la liste des nombres parfaits. Algorithme qui détermine les couples de nombres amicaux eee cco Algorithme qui détermine les nombres intouchables... Algorithme qui donne la liste des nombres premiers. Algorithme qui donne la liste des nombres premiers jumeaux 28 Algorithme qui donne la liste des nombres premiers de Sophie Germain. 29 Algorithme de décomposition d'un entier en produit de facteurs premiers... Algorithme de la division euclidienne .... Algorithme qui détermine le reste modulo n d'un entie’ Extracteur de chiffres d'un entier n.... Algorithme qui détermine les nombres symétriques. Algorithme qui détermine les nombres premiers « reimerp » Détermination du PGCD par lalgorithme d’Euclide. Algorithme qui détermine une relation de Bézout.. Evaluation d'un polynéme en un point... Evaluation d'un polynéme en un point par la méthode de Homer. Multiplication de deux polynémes. Algorithme qui détermine les racines d'un polyndme de degré 2... Algorithme qui détermine les racines d'un polynéme de degré 3 (Cardan). Polyndme interpolateur de Lagrange (degré 1) passant par deux points. Polynéme interpolateur de Lagrange (degré 2) passant par trois points... Calcul de la trace d'une matrice .. Calcul de la transposée d'une matrice .. Calcul de la puissance d'une matrice .. Calcul d'un déterminant d'ordre 2... Calcul d'un déterminant d’ordre Résolution d'un systéme linéaire dordre 2 par les formules de Cramer... Résolution d'un systéme linéaire d’ordre 3 par les formules de Cramer... Résolution d'un systéme linéaire par la méthode du pivot de Gauss* Résolution d'un systéme linéaire par la méthode itérative de Jacobi..... Recherche d'un élément dans une liste* Recherche du maximum d'une liste*.... Recherche du minimum d’une liste*.. Calcul de la moyenne et de la variance d'une liste... Calcul de l'écart type d'une liste* Recherche par dichotomie d'un élément dans une liste triée*... Recherche d'un mot dans un texte (ou chaine de caractéres) *. Droite de régression linéaire... Tracé d'une courbe paramétrée .. Longueur d'une courbe paramétrée Génération de points aléatoires sur le cercle unité Théoréme de Cesaro....... Chapitre 2. Tous les algorithmes de 2° année . 68 Fonction push (Metre dessus) * Fonction pop (Retirer du dessus) * Echanger deux termes d'une liste Conversion décimal-binaire Conversion binaire-décimal .. Puissance x" ‘Somme de puissances >; Suite récurrente linéaire d’ordre 1 . Suite récurrente linéaire d'ordre 2... Dichotomie (récursive). Approximation de J/a par l'algorithme de Babylone...... Approximation de \/2 par les fractions de Bhaskara-Brouckner.... Approximation de /2 par Bombelli 80 Approximation du nombre d'or «p = 1 a 81 ‘Approximation de la constante d’Euler ¥ .. 82 Factorielle n! Approximation de e* Approximation de cos(x) et sin(x) Coefficient binomial (?) “5 Triangle de Pascal Fonction zéta de Riemann Approximation de x par Archiméde..... Approximation de x par Cues .... Approximation de x par Viéte.. 92 93 Approximation de x par Al-Kashi.... Approximation de = par Machin... Approximation de = par Ramanujan ... Approximation de x par Gauss-Legendre-Brent-Salamin Approximation de x par des fractions .. Tours de Handi... Flocon de Von Koch ... Anti-flocon de Von Koch Triangle de Sierpinski... Carré de Sierpinski... Nombre de partitions d'un entier Tri a bulles (Bubblesort) ..... Tri par sélection (Selection Sort) 103 Tri par insertion (Insertion sort) *. 105 Tri rapide (Quicksort) *. Tri par fusion (Mergesort) *.. 107 Recherche du maximum et du minimum d'une liste de nombres... Recherche de la médiane d'une liste de nombres* 110 Suite de Syracuse et altitude maximale ........ 111 Ensemble de Mandelbrct...... 112 113 114 Suite de Syracuse et temps de vol..... Ensemble de Julia .. Fougére de Barnsley (Barnsley's Fern). Aide-mémoire des instructions Python. 115 Chapitre 1. Tous les algorithmes de 1°¢ année Chapitres concernés : Fonctions, résolution approchée d’équations Calcul intégral (approché) Equations différentielles Arithmétique Polynémes Matrices Déterminants Systémes linéaires Listes Courbes paramétrées Probabilités Algorithmes de nnée _Résolution d’une équation par dichotomie* — * Chapitre concerné : Fonctions, résolution approchée d’équation. * Ce que fait I'algorithme : il résout Equation f(x)=0 de maniére approchée avec une certaine précision. * Lalgorithme (ici on veut résoudre f(x)=0 avec f(x)=x?-2). def £(x): x*#2-2 tomie (£,a,b,précision) ; b-a>précision: = (ath) /2 £ (a) *£(m) <0: b=m jef dic * Exemple : On veut résoudre x? -2-=0 avec une précision au milliéme sur Fintervalle [0;2]. Si >>> _dichotomie(£, 0,2, 0.001) Affichage : 50390625 Cela signifie que l'équation x?-2=0 a pour solution approchée 1,415 (au milliéme). Algorithmes de 1" année Résolution d’une équation par la méthode de la fausse position + Chapitre concerné : Fonctions, résolution approchée d’équation. * Ce que fait l'algorithme : il résout "equation f(x)=0 de maniére approchée avec une certaine précision, a l'aide de la suite (x,) définie par [nag =o =e ea: | Xnet = Xo. Txn)=f(%) 7) Ire + L’algorithme (ici on veut résoudre f(x)=0 avec f(x)= 4. de x0 =3). def f(x): 1/4*x*#2-x-1 E ition (£, Précision) : s (y-x) >Précision: 0-(y-x_0) / (£(y) -£ (x_0) ) *£ (x_0) + Exemple : on veut résoudre }x?-x-1=0 avec une précision au milieme. Saisie: [>>> Pausse position(f,0.001) Affichage : r- Cela signifie que la valeur approchée (au milligme) d'une solution de réquation 4x2—x-1=0 est 4,829. " Algorithmes de 1" année Pee ee _ Résolution d’une équation par la méthode | de la sécante * Chapitre concerné : Fonctions, résolution approchée d’équation. * Ce que fait l'algorithme : il résout |'équation f(x)=0 de maniére approchée avec une certaine précision, a l'aide de la suite (x,) définie par bx, (0)-A(%) |") (oa a etb sont tls que f(a)<0 et f(b}>0) . Kot Xa 7 Xo=a L’algorithme (ici on veut résoudre f(x)=0 avec f(x)=1x2—x-1 , a=3 [car {(3)=-175] et b=5 [car f(5)=0,25)) def f(x) sturn 1/4*x**2-x-1 ante (f, Précision): def — (5-x) / (£ (5) ~£ (x) ) *£ (x) e abs (y-x)>Précision: = (S-y) / (£(5)-£ (y)) *£(y) return y Exemple : on veut résoudre 4x?-x-1=0 avec une précision au miliéme. Saisie: [>>> Sécante (f, 0.001) 509603073 Affichage : Cela signifie que la valeur approchée (au milliéme) d'une solution de réquation pe-x-1-0 est 4,828 Algorithmes de 1" année ésolution d’u de Newton* * Chapitre concerné : Fonctions, résolution approchée d’équation. * Ce que fait l'algorithme : il résout equation f(x)=0 de maniére approchée avec une certaine précision, a l'aide de la suite (x,) définie par 2x,-f0') Sere Xo, * L’algorithme : (ici on veut résoudre f(x)=0 avec foq= pet [f(09=3x-t] en partant de x) =3). 1/4*x**2-x-1 (x): urn 1/2*x-1 ton (£,df, Précision) : ~f£ (x) /df (x) le abs (y-x)>Précision: x y=y-f (y) /df (y) ny + Exemple : on veut résoudre }x?—x-1=0 avec une précision au miliéme, Saisie: |>>> Newton(f,df,0.001) Affichage : Cela signifie que la valeur approchée (au milliéme) d'une solution de Véquation 4x?-x-1=0 est 4,828. Algorithmes de 1" année 4 Calcul (approché) d’une intégrale par la méthode des rectangles* * Chapitre concerné : Calcul intégral (approché). r * Ce que fait I'algorithme : il détermine une valeur approchée de [f(x)dxa 5 vat aide de la formule [f(x)dx = >° f(x)h ot n-P2 et x,=a+ih (plus N est grand, meilleure est la précision). . * L’algorithme : (ici on veut une valeur approchée de Jx?dx) (x): xt#2 R sles (f,a,b,N): Pas=(b-a) /N Intégrali i in range(1,N+1): Intégrale=Intégraletf (a) *Pas a=a+Pas Intégrale + Exemple : On souhaite une valeur approchée de [x*dx. Q Saisie : > Rectangles (£, 0,1, 1000) Affichage : Cela signifie que tdx= i Algorithmes de 1 année Calcul (approché) d’une intégrale par | méthode des trapézes* * Chapitre concerné : Calcul intégral (approché). * Ce que fait lalgorithme : il détermine une valeur approchée de [f(x)dxa ‘ vee Taide de la formule Jrojox='S)edefGi2m), ou n-Es et x,=a+ih (plus N est grand, meilleure est la précision). * L’algorithme : (ici on veut une valeur approchée de Jxdx) (x) return x**2 s(£,a,b,N) ¢ b-a) /N Intégrale=0 i in range(1,N+1): Intégrale=Intégralet (f(a) +f (a+Pas))/2*Pas a=a+Pas Intégrale ‘+ Exemple : On souhaite une valeur approchée de | x’dx Saisie: [>> Trapézes (f,0,1, 1000) Affichage : 733333350000000 ay i 1 Cela signifie que [x’dx =~ ignifie q 5 : Algorithmes de 1"° année 16 Calcul (approché) d’une intégrale par la méthode de Simpson Chapitre concerné : Calcul intégral (approché). Ce que fait l’'algorithme . ae Vaide de la formule [Ploqer= 8/400) -4 SF) 2 2N © f(a) +f (an) Be 22 ot x,=a+ih (plus N est grand, meilleure est la précision). ® * L’algorithme : (ici on veut une valeur approchée de J x?dx) xet2 pson (f,a,b,N) = Pas=(b-a) / (2*N) Intégrale=0 N1=2*N+1 range (1,N1,2): X=ati*Pas Intégrale Exemple : On souhaite une valeur approchée de Jxax 5 ° Saisie: [>>>_Simpson (£,0,1,5) Affichage : Cela signifie que {x"dx a Somme=Somme+£ (X) Intégrale=Somme*4 Somme=0 for i in range(2,N2,2): X=ati*Pas Somme=Somme+f (X) Intégrale=Intégrale+2*Somme+f (a) +£ (b) Intégrale=Intégrale*Pas/3 ® il détermine une valeur approchée de [f(x)dx& | 22 = Algorithmes de 1" année Approximation de e par le calcul intégral | et la dichotomie * Chapitre concerné : Calcul intégral, dichotomie. * Ce que fait il détermine une valeur approchée de e (nombre exponentielle) défini par I'égalité [lax-t1, & l'aide de la méthode des trapézes et de la dichotomie. * L’algorithme : bo: r n 1/x apéze (£,a,x,N) = Pas=(x-a) /N Intégrale=0 i range (1,N+1) : Intégrale=Intégralet (f(a) +f (atPas)) *Pas/2 a-a+Pas Intégrale (x): t Trapéze(£,1,x,10000)-1 1 mie (f,a,b,précision) : b-a>précision: m=(atb) /2 £ (a) *£ (m) <0: b=m a=m b e (précision) : d=dichotomie (g,2.6,2.8,précision) a * Exemple : On souhaite une valeur approchée de e a 10°. >> e0**=87 18281823396683 Cela signifie que e = 2,71828182. 7 Algorithmes de 1" année _ Résolution d’une équation différentielle (cas simple) par la méthode d’Euler* Chapitre concert Ce que fait l'algorithme: il résout |'équation différentielle { graphiquement la solution trouvée avec la solution théorique. L’algorithme (ici, 'équation est { =x,+04 y, +0,1x2y, Equations différentielles. y=2y y(0)= les suites sont donc { 1from math import exp 2import matplotlib.pyplot as plt 3def x(n): 4 if n=0: 5 return 0 6 else: re 7 8def y(n): a if om: urn x(n-1)+0.1 10 return 1 41 else: 12 return y(n-1)+0.1*(2*y(n-1)) 13 for n in range(0,10) : 14 plt.scatter(x(n) ,y(n) ,s=100) 15 a=0 16while a<=1: 17 ltt. scatter(a,exp(2*a) , s=100) 18 aea+0.1 Sai Affichage : jucune. y=2y y(0)=1 maniére approchée (avec pour pas 0,1) par la méthode d’Euler et compare Xp = Yo alors que la solution théorique vaut y(x) =e”). ° ot de + Chapitre concen + Ce que Résolution d’une équation différentielle (cas général) par la méthode d’Euler* né : Equations différentielles. Algorithmes de 1" année ‘algorithme : il résout I'équation différentielle { y(t)=f(ty ¥(to)=Yo 4 maniére approchée par la méthode d’Euler (qui admet pour solution Yow = approchée : 1=Yn thF(tYn) =t+h solution trouvée avec la solution théorique. * L’algorithme (ici f(ty)=-y+t+1, t)=0, yy=1 en prenant pour pas Saisie : aucune. Affichage : ‘on résout ee a1 st y(0)=1 Tfrom math import exp ‘i i Y(t) =Yo 2import matplotlib.pyplot as plt adef f1t.y): return -y+tel Sh=0.1 Gdef t(n): 7 if n=9: 8 return 0 9 else: 10 return t(n-1)+h Lidef y(n): 12 if n=0: B return 1 14 else: 8 return y(n-1)+h*#(t(n-1),y(n-1)) 16N=int(1/h) VW for A in range(O,N): 18 _plt.scatter(t(n), y(n), s=106 19-0 while acl: 21 plt.scatter(a,exp(-a)+a,: 2 azath 0) 100) 0.1), 6quation avec ou h est le pas souhaité) et compare la 19 Algorithmes de 1" année Algorithme qui donne la liste des diviseurs d’un entier * Chapitre concerné : Arithmétique. © Ce que fait l'algorithme : il donne [a liste des diviseurs d'un entier saisi + L’algorithme seurs (n) = Liste_div=[] i range (1,n+1) : n& : Liste_div.append(i) urn Liste div * Exemple : demandons la liste de tous les diviseurs (positifs) de 60. Saisie: |>>> diviseurs (60) Affichage : Cela signifie que 60 admet pour diviseurs positifs, les entiers 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60. 20 Algorithmes de 1"° année Algorithme qui teste si un entier est | __ premier — * Chapitre concerné : Arithmétique. * Ce que fait I’algorithme : Si un entier est premier, il sort 1 (valeur booléenne désignant « True »), s'il ne l'est pas, il sort 0 (« False »). * L’algorithme rier (n): if nti p=0 return p + Exemple : demandons si 17 est premier. Saisie: [>>_premier (17) Affichage : Cela signifie que 17 est bien premier. 21 Algorithmes de 1" année Algorithme qui donne la liste des diviseurs premiers d’un entier + Chapitre concerné : Arithmétique. * Ce que fait I'algorithme : I détermine la liste des diviseurs premiers de n. + Lalgorithme ur apie Liste_div.append (i) urn Liste div emier (k): p=1 for i te x s(n): iit atarcivspreniors= fT iin diviseurs(n): premier (i)= Liste_div premiers. append (i) 1 Liste_div_premiers demandons les diviseurs premiers de 60. >>> diviseurs premiers (60) Affichage : 3 Cela signifie que les diviseurs premiers de 60 sont 2, 3 et 5. 22 Indicatrice d’Euler Algorithmes de 1” année Chapitre concerné : Arithmétique. Ce que fait I’algorithme : il détermine la valeur de @(n) pour tout n (@ étant Vindicatrice d’Euler [1707-1783}), représentant le nombre d'entiers premiers . avec n sachant que o(o)=af1(-2) ou les p, sont les diviseurs premiers den. Lalgorithme : iseurs(n) = Liste div=[] i in range (2,n+1): if ns Liste_div.append(i) Liste div ex (kt i in range (2,k): ke P: np Liste_div_premier: i in diviseur premier (i)==1: Liste_div_ premiers. append (i) Liste div premiers Indicatrice Euler(n): phi-n i in diviseurs_premiers(n): phi=phi* (1-1/1) urn phi HL Py Exemple : déterminons (20) (le nombre d'entiers premiers avec 20). Saisie: [>>> Indicatrice Euler (20) Affichage : Cela signifie que (20) =8, c'est-d-dire qu'il y a huit entiers qui sont premiers avec 20. 23 Algorithmes de 1" année 24 Algorithme qui détermine la liste des nombres parfaits Chapitre concerné : Arithmétique. Ce que fait I’algorithme : il donne la liste des entiers parfaits compris entre 1 et un entier qu'on saisit (un entier est parfait, lorsqu’il est égal a la somme de ses diviseurs stricts), Lalgorithme nbi Liste_div. append (i) Liste div f liv(n): L=diviseurs (n) S=sum(L) 8 it(n): Liste_parfait=[] ivin range (1,n+1) Somme_div (i tees patted t >>_parfait (1000) Affichage : fos 296] Cela signifie que les seuls entiers parfaits compris entre 1 et 1000 sont : 6, 28 et 496, Algorithmes de 1" année Algorithme qui détermine les couples de nombres amicaux * Ce que fait entre 1 et un entier qu'on saisit (entiers dont la somme des diviseurs stricts est égal & l'autre [et réciproquement] comme 220 et 284 [220 a pour diviseurs stricts : 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 dont la somme vaut 284. 284 a pour diviseurs stricts : 1, 2, 4, 71, 142 dont la somme vaut 220)).. * Lalgorithme 8 s (n): k in range(1,n+1): j range (k+1,n) som_div_str(k som_div_str(j print (j,"et",k, “sont amicaux") + Exemple: demandons [a liste de tous les couples de nombres amicaux compris entre 1 et 2000. Saisie: [>>> Nombres_amicaux (2000) Affichage: [707 ot Cela signifie que les nombres amicaux compris entre 1 et 2000 sont : (284 et 220), (1210 et 1184). 28 Algorithmes de 1" année | Algorithme qui détermine les nombres L intouchables * Chapitre concerné : Arithmétique. * Ce que fait lalgorithme : il donne la liste des nombres intouchables compris entre 2 et un nombre qu'on saisit (entiers qui ne sont la somme des diviseurs stricts d’aucun entier [comme 2, 5, 52, 88, etc.}). * L’algorithme “stricts(n): Liste_div=[] for i range (1,n): if nsi==0: Liste_div.append (i) n Liste_div o me (n): L=diviseurs_stricts(n) S=sum(L) return S$ def intouchables(n): L=[] for i in range(2,n): a=0 jin range (4,n**2): omme_div_str(3): * Exemple : demandons la liste des nombres intouchables inférieurs a 125. Saisie: >>> intouchables (125) Affichage = Cela signifie que les nombres intouchables compris entre 2 et 125 sont : 2, 5, 52, 88, 96, 120 et 124. 26 Algorithmes de 1" année Algorithme qui donne la liste des nombres premiers * Chapitre concerné : Arithmétique. * Ce que fait l'algorithme : il donne la liste des nombres premiers compris entre 2 et un entier qu'on saisit. + L’algorithme : (ny: Liste_pre=[] i premier (i Liste_pre.append (i) Liste_pre * Exemple : on veut a liste des nombres premiers compris entre 2 et 100. Saisie: |>>> liste premiers (100) Affichage : Cela signifie que les nombres premiers compris entre 2 et 100 sont 2, 3, 5, 7, 11, ete, 27 | Algorithme « qui donne la liste des nombres premiers jumeaux | ‘* Chapitre concerné : Arithmétique. * Ce que fait lalgorithme : il donne la liste des nombres premiers jumeaux compris entre 2 et un entier qu'on saisit (deux nombres premiers jumeaux sont deux nombres premiers distants de 2, comme 3 et 5 par exemple). + L’algorithme : def liste premiers (n): Liste » pre=[] iin range (2, ntl): if premier (i) Liste_pre.append (i) return Liste pre premiers jumeaux (n): iste premiers (n) i in range(0,len(L)-2): if L[i+1]-L[i]== print (L[i],L{it1]) + Exemple : on veut la liste des couples de nombres premiers jumeaux compris. 2et 100. Saisie: [>>> premiers _jumeaux (100) Affichage : Cela signifie que les nombres premiers jumeaux compris entre 2 et 100 sont Set 5, 5et7, 11 et 13, etc. 28 Algorithmes de 1" année Algorithme qui donne la liste des nombres premiers de Sophie Germain Chapitre concerné : Arithmétique. © Ce que fait l’algorithme : il donne la liste des nombres premiers de Sophie Germain (1776-1831) (c’est-a-dire les entiers p tels que p et 2p+1 sont premiers) compris entre 2 et 1000. (Par exemple 11 est un nombre premier de Sophie Germain puisque 11 et 2x11+1=23 L’algorithme sont premiers.) p=1 i j range (2,1000): premier (j)==1 print (3, premier (2*}+1)= Exemple : on veut la liste des nombres premiers de Sophie Germain compris entre 2 et 1000. Saisie : aucune. Affichage = Cela signifie que les nombres premiers de Sophie Germain compris entre 2 et 1000 sont 2, 3, 5, 11, 23, 29, 41, etc. Algorithmes de 1" Algorithme de décomposition d’un entier en produit de facteurs premiers _ ‘* Chapitre concerné : Arithmétique. * Ce que fait Valgorithme: il décompose un entier n sous la forme n=p,"xp,":=-xp,% (produit de facteurs premiers). * L’algorithme : math = t (input ("Val de n 2")) ange (2, floor (n/2)): puissance=1 j=i/p J*p= puissance=puissancet1 /p yend='") * Exemple : demandons la décomposition en facteurs premiers de 28800. Saisie 228800 Affichage : Cela signifie que 28800 = 2” x3*x5?. Algorithmes de 1" année Algorithme de la division euclidienne ‘* Chapitre concerné : Arithmétique. ‘* Ce que fait I’algorithme : il donne le résultat de la division euclidienne de a par b (c'est-a-dire 'égalité : a=bq+r, en précisant le quotient q et le reste r). + Lralgorithme : imp * print ("a=",b,"*",q,"4", 1) * Exemple : demandons la division euclidienne de 72 par 5. 72,b=5 x14+2 ». Cela signifie que q=14 et r=2 31 Algorithmes de 1" année | Alg Algorithme qui | détermine le reste modulo | nd’un entier * Chapitre concerné : Arithmétique. * Ce que fait lalgorithme : il détermine le reste modulo n d'un entier a. * L’algorithme : ja=int (input ("Valeur de a ?")) In=int (input ("Valeur de n 2")) r=atn eine (raster ween ) « Exemple : demandons la valeur de 75 modulo 6. Saisie: a=75,n=6 Affichage : « 75=3(6] » 32 Extracteur de chiffres d’un entier n Algorithmes de 1"* année Chapitre concerné : Arithmétique. Ce que fai L’algorithme : xtracteur i (n): lombre_de _chiffres s_entier (n) ] Chiffres=[] i range (1,a+1): L. append (int (n) $10) pena for n ra. (0, 1len(L)): chiffres. append (L{len(L)-1-] chiffres Exemple : demandons la liste des chiffres qui composent 123456. Saisie: >> Extracteur_de_chiffres (123456) Affichage : 'algorithme : il crée la liste des chiffres qui composent un entier. 33 Algorithmes de 1" année Algorithme qui détermine les nombres ss symétriques Chapitre concerné : Arithmétique. Ce que fait I'algorithme : il détermine les nombres symétriques pour la multiplication (par exemple 26 et 31 sont symétriques pour la multiplication car 26x31= 62x13) compris entre deux entiers m et n (qu'on sa L’algorithme : Je_chiffres(n): a=Nombre_de_chiffres_entier(n) ange (1,a+1)+ L. append (int (n) $10) 710 j in range(0,len(L)): Chiffres.append(L{len(L)-1-}]) Chiffres Nombre_inversé(n)+ LeExtracteur_de_chiffres(n) a-0 i in range(len(L)): a=a+L{1en (L)-1-i] *10** (1en (L)-1-i) ra r triques (m,n): i in range (m,n): for } in range(it1,n): if i*}=-Nombre_inversé (i) *Nombre_inversé(j): rint (i,j) Exemple : demandons la liste des nombres symétriques entre 25 et 50. Saisie: [>>> Nombres_symétriques (25,50) Affichage : Cela signifie que 26x31=62x13, 28x41=82x14, etc. Algorithmes de 1"° année Algorithme qui détermine les nombres premiers « reimerp » Chapitre conceré : Arithmétique. Ce que fait Valgorithme: il détermine les nombres «reimerp », qui possadent la propriété d’étre a la fois premier et premier a l'envers (d'ou le nom de reimerp) comme 13 par exemple (car 13 et 31 sont premiers). L’algorithme : Fa ET (ny: i=l n>10: n=n/10 iit w@ f (n= a=Nombre_de_chiffres_entier(n) I=) chiftres=[] i in range (1,a+1): L.append (int (n) $10) n=n/10 j ange (0, len (L)) Chiffres.append(L[1en (L)-1-J]) chiffres ‘ (nm): L-Extracteur_de chiffres(n) a=0 i nge (Len (L)) : a=a+L [len (L) -1-i] *10** (len (L)-1-i) n) premier (i)==1 premier (Nombre_inversé (i) L. append (i) Exemple : demandons la liste des nombres « reimerp » entre 11 et 150. Saisie: [5>>_Nombres_reimerp (150) Affichage = Cela signifie que les nombres «reimerp» compris entre 11 et 150 sont 11,13... 35 Algorithmes de 1" année Détermination du PGCD par l’algorithme d’Euclide * Chapitre concerné : Arithmétique. * Ce que fait I'algorithme : il détermine le pgcd de deux entiers a et b par Valgorithme d'Euclide (325-270 av. J.-C.), c'est-a-dire le dernier reste non nul dans les divisions successives. * L’algorithme * Exemple : On veut déterminer pgcd(25,360) . Saisie > pged (25, 360) Affichage : Cela signifie que pged(25,360) =5. 36 Algorithmes de 1" année | Algorithme qui détermine une relation de Bézout q * Chapitre concerné : Arithmétique. © Ce que fait I'algorithme : On suspecte a et b d’étre premiers entre eux, Valgorithme cherche s'il existe une relation pouvant le prouver, c'est-a-dire deux entiers u et v vérifiant 'égalité au +bv =1. Cette égalité est alors qualifiée de relation de Bézout (1730-1783). * L’algorithme : (ici on suspecte 539 et 150 d’étre premiers entre eux). u nge (-500, 500): for v in range (-500,500): 539*ut+150*v==1: pri 7a," et v=",v) * Exemple : On cherche une (ou plusieurs) relation de Bézout entre 539 et 150, (dans la zone de recherche : -500 a 500). Saisie : aucune. Affichage : (u,v) = (-91,327) et (u,v) = (59,-212) Cela donne les relations de Bézout 539 x (-91) + 150 x 32 539 x 59 + 150 x (-212) =1 pged(539,150) = et Lune comme [autre prouvant que 37 Evaluation d’un polynéme en un point Chapitre concerné : Polynémes. Ce que fait l'algorithme : |! évalue P(x) pour une valeur de x qu'on saisit. L’algorithme : leg=int ( P=[] iin range (0,deg+1): print ("Coefficient de x*",i,"_? ") P. append (float (input (""))) n.d n_x(P, x): input ("Degré du polynéme ?-")) Px=P[0] i range (1,deg+1) : Px=Px+P[i]} *x**i Px x=float (input ("Valeur de x :")) print ("P(",x,")=",Evaluation_de_P_en_x(P,x)) fl Exemple : On veut évaluer P(6) avec P(x) = 3x? - 5x +4. Saisie : Degré du polynéme=2 ; Coefficient de x0 : 4 ; Coefficient de x" : -5 ; Coefficient de x2: 3 ; Valeur de x : 6. Affichage : « P( Cela signifie que P(6) = 82 Algorithmes de Evaluation d’un polynéme en un point par | _la méthode de Horner ‘* Chapitre concerné : Polynémes. * Ce que fait I'algorithme : Il évalue P(x) pour une valeur de x qu'on saisit par la méthode de William Hérer (1786-1837) * L’algorithme : er (Coeff,x): loeff [0] iin rai (1, len (Coeff) ): *x+Coeff [i] FE * Exemple : On veut évaluer P(4) avec P(x) =x? -5x+6. Saisie: [>>> Horner (Coeff, 4)| Affichage : Cela signifie que P(4) = 2 Algorithmes de 1" année Multiplication de deux polynémes _ + Chapitre concerné : Polynémes. * Ce que fait l'algorithme: II détermine A(x)*B(x) ob A et B sont deux polynémes. + Lalgorithme : legA=int (input ("Degré du polynéme A? ")) ldegB=int (input ("Degré du polynéme B? ")) degP=degA+degB A,B, P=(],(],(] for i in range (0,degP+1): P. append (0) i in range (0,degA+1): print ("Polynéme A, Coeffi A. append (float (input (""))) i in range (0,degB+1) : P B. append (float (input ( i (0, degA+1) : : ange (0,degB+1) : P{itj]+A(i] *Bl3] 2 (0,degP) : print (P[i],"x*", i, "+",end="") print (P[degP],"x*",degP) nt("Polynéme B, Coefficient de x*",i "))) © Exemple : On veut déterminer le produit (52 -x+ 3)(-2x +4) Saisie : Degré du polynéme A=2 ; Degré du polynéme B=1 Polynéme A, Coefficient de x0 : 3 ; Coeff de x" : -1 ; Coeff de x"2: 5; Polynéme B, Coefficient de x0 : 4 ; Coeff de x" : -2 ; Affichage : «12.0x * 0 + -10.0x * 14 22.0x 2+ -10.0x *3». Cela signifie que (5x? -x+ 3)(-2x +4) = 12- 10x + 22x2 - 10x3. Algorithm je 1" année * Chapitre concerné : Polynémes. ‘* Ce que fait I’algorithme : il détermine les racines du polynéme ax? + bx +¢ par la méthode du discriminant. « L’algorithme : i=complex (0,1) ja=float (input ("Valeur de a Ib=float (input ("Valeur de b lc=float (input ("Valeur de c Delta=b**2-4*a*c f Delta>0: -b+Delta**0.5) /(2*a) ~b-Delta**0.5) /(2*a) Racine=(x1, x2) lif Delta==0: x0=-b/ (2*a) Racine=(x0) -b+i* (-Delta) **0.5)/(2*a) ~b-i* (-Delta) **0.5) /(2*a) Racine=(z1,22) print (Racine) ‘+ Exemple : On veut les racines de x* +x +1. a=1,b=1,c=1. (0.540 ,8660254037044 Cela signifie que les racines sont +} + pe et +4 - ws 2 at Algorithmes de 1" année Algorithme qui détermine les racines d’un polynéme de degré 3 (Cardan) * Chapitre concerné : Polynémes. * Ce que fait I'algorithme : il détermine les racines du polyndéme ax? + bx? + cx +d par la méthode de Jéréme Cardan (1501-1576). + Lralgorithme : math * plex (0, 1) (input ("valeur de a ("valeur de t "valeur de at (input ("Valeur de d :")) D=9**3+R**2 D>=0: R+D**0.5)*%0.5 T=(R-D*#0.5)**0.5 alpha=-1/3*a_2+(S+T) beta=-1/3*a_2-1/2* (S+T) +1/2*i*3**0.5* (S-T) gamma=-1/3*a_2-1/2* (S+T) -1/2*i*3**0.5* (S-T) Theta=acos (R/(-Q**3) **0.5) alpha=2* (-Q) **0.5*cos (Theta/3) -1/3*: beta=2* (-Q) **0.5*cos ( (Theta+2*pi) /3)-=1/3*a_; gamma=2* (~Q) **0.5*cos ( (Theta+4*pi) /3)-1/3*a_! Racines=(alpha, beta, ga print ("Les racines sont a) Racines) + Exemple : On veut résoudre connaitre les racines de 2x? + 6x? 12x -16 (c'est-d-dire résoudre I'6quation du 3° degré 2x? + 6x? — 12x - 16 = 0). Saisie: a=2, b=6,c=-12,d=-16. Affichage : « Les racines sont (2.0, -4.0,-1.00000000000000007) ». Cela signifie que les racines sont -4, -1, et 2. Algorithmes de 1" année Polyndme interpolateur de Lagrange __ (degré 1) passant par deux points ‘© Chapitre concerné : Polyndmes. * Ce que fait I'algorithme: II détermine le polynéme degré 1 dont la représentation graphique (une droite) passe par les points (x py)» (x,¥9)- + L’algorithme : math i float (input ("Valeur de cat (input ("Valeur de at (input ("Valeur de oat (input ("Valeur de y_2-y_1)/(x_2-x_1) 2*y_1-x_1¥y_2)*(x_2-x_1) = (A, "xt", B) * Exemple : On veut connaitre le polynéme de degré 1 dont la représentation graphique passe par les points (2;5), (3:9) Saisie : x, =2, y,=5, x, =3, ¥, = Affichage : «4.0x - 3». Cela signifie que le polyndme cherché est 4x -3. 43 Algorithmes de 1" année Polynéme interpolateur de Lagrange (degré 2) passant par trois points * Chapitre concern * Ce que fait représentation graphique (une parabole) passe par les points (xpy,)s (x De 5) et (x5.¥5) + Lalgorithme : Polynémes. igorithme : Il détermine le polynéme degré 2 dont la x Valeur de y . 2)*(x_1-x_3) -x_1) * (x_2-%_3) ) ) Es ) 3-x_1)* (x_3-x_2)) 1*x 2ta 3 tc 2c 3 t(A,"x2#",B, "x4", C. + Exemple : On veut connaitre le polynéme de degré 2 dont la représentation graphique passe par les points (-1;8), (2;-1), (4:3). Saisie: x, = -1, y, =8, x, =2, y) =-1, X =4, ¥3 =3 3 Affichage : «1.0x 2+ -4.0x +3». Cela signifie que le polynéme cherché est x? - 4x +3. a4 Algorithmes de 1" année Calcul de la trace c d’une matrice | * Chapitre concerné : Matrices. Ce que fait I'algorithme : Il calcule la trace de la matrice M. 123 + L’algorithme (ici on a pris M=|4 5 6] ). 789 Timport numpy as 2M=np.array([{{1,2, ol, (4,5,6],[7,8,9]]) 3 Trace=0 4for i in range(o,3 5 Trace=Trace+M[. 6print (Trace) a ae ean © * Exemple : On souhaite connaitre la trace de la matrice Saisie : aucune Affichage : « 15 ». Cela signifie que tr(M)=15. Algorithmes de 1" année Calcul de la transposée d’une matrice * Chapitre concerné : Matrices. Ce que fait l'algorithme : |! calcule la transposée ‘M de la matrice M re 2 3 + L’algorithme (ici on a pris M=|4 5 6). 789, Timport numpy as np 2M=np.array([[{1,2,3],[4,5,6],[7,8,9]] 3 Transposée=np. zeros((3,3)) 4for i in range(0,3): 5 for j in range(0,3): 6 Transposée[i, j]J=M[j,i] 7 print (Transposée) oan Ce) >_déterminant (M) Sai Affichage : Cela signifie que det(M) = Algorithmes de 1"° année Calcul d’un déterminant d’ordre 3 Chapitre concerné : Déterminants. Ce que fait l'algorithme : II calcule det(M) lorsque M est une matrice carrée d'ordre 3 (en utilisant la régle de Sarrus). 145 1-13}. 261 Lalgorithme : (ici on a pris m 1()*™ *m[2) (1]* *M[0] [1] *ML 1 4 5) Exemple :OnaM=| 1 -1 3], on veut connaftre : det(M). 26 1 Saisie: [>>> déterminant (M) Affichage : Cela signifie que det(M)=11. a9 Algorithmes de 1" année Résolution d’un systéme linéaire d’ordre 2 par les formules de Cramer | Chapitre concerné : Systémes linéaires, déterminants. Ce que fait l’algorithme: II résout le systeme fear bt par les |arX1 + @z2X2 = be lay are 1 Baa| L’algorithme : (ici on a pris le systéme fe lars by| = [2r_be| formules de Cramer x: = aestay [3x1 +4x2=9 IM=( (1,21, (3,4]] B=(1,9] def déterminant (M) : (0] [0] *M(1} [1]-M[1] [0] *M[0] [1] urn d Jef X(M,B): =[{B{0],M[0](1]], (B(1],M(1} (1]}) éterminant (MX) éterminant (M) Num/Den def Y(M,B): My=((M[0] [0],B(0}], (M(1] (0],B(1]]] Num=déterminant (MY) Den=déterminant (M) return Num/Den print (x (M, B) , ¥ (M,B) ) Xs + 2x2 =1 Eanes 3x; +4 n veut résoudre le systéme { Saisie : Aucune. Affichage : 7.0 =3.0 Cela signifie que le systéme a pour solution fs Algorithmes de 1" année Résolution d’un systéme linéaire d’ordre 3 par les formules de Cramer Chapitre concerné : Systémes linéaires, déterminants. : . ak + a1ax2 + ayaxs =br Ce que fait 'algorithme : II résout le systéme }azix; +az2%2 +a23Xs =be par les six: +anaKa + anaX9 =Do ban as lan by arg jan aie by Ibe azz a) lac be aay lass zo by] Ibo ase ass} last bs ass lasr_axe_be| formules de Cramer =|", “Ta atta ghee! lay az nl’ lan an as a a a) @s1 G32 Ass| j@s1 @s2 33) x1 + 4x2 +5x3 =3 L’algorithme : (ici on a pris le systéme }x;-x2 +3x=15 __), = 2x1 + 6x2 + Xa =—17 IM=[[-1, 4,5], (1e-1, 3) (206/11) Be (3, 15, -17 on: M{0} (0] *M{1} (2] *M{2} [2] @2-M(1) (0] *M12) [1] *ML0} (2) 3eM(2] [0] *M10] [1] 401) (2) 0} (2) *M(1] [1] *M{2] [0] (2) {2} *M12) [1] M0} (0) 3 M12] [2] #M{0} (1] ML ded 1d 2t4 3-dm_1-dm_2-dn a (1,8) {(BLO} MEO} (2 MCO} (2]}, (BLL) /MED] (2) /M(2) (211, (B12) M121 111, M12) (2) Nunedéterminant (18) Den-déterminant (M) Num/Den H,2) MY={{M{0} [0] ,B(0} MLO} (2), (ME) (01 BEX) MLL) (211, (M{2} {0}, (21 M12) (211) Num=determinant (MY) Den=déterminant (M) Wum/Den (H,B) : MY=(([M{O] [0] ,M[O] (1) ,B(0}}, (12) (01 ,ME1) (1), B(2}], (M12) (01 /M(2] (1) ,BL211) Num=déte My) Den=déterminant (M) Nun/Den print (X (M, BD ¥(M,B) 2 (M,B)) x1 + 4x2 + 5X5 =3 Exemple : On veut résoudre le systéme }xi—%2+3%0=15 2x1 + 6x2 +X3 =-17 Saisie : Aucune. Affichage : Cela signifie que le syst@me a pour solution x:=4, x Algorithmes de 1" année Résolution d’un systéme linéaire parla méthode du pivot de Gauss* | * Chapitre concerné : Systémes linéaires. Ce que fait l'algorithme : II résout le syst8me linéaire AX=B. (2x-y+z=5 ici on a pris le systéme {x1 3y-22-3_). -2x+y+4z=15 + Lalgorithm: feta tome Be Gee ee a A= ((2,-1, 11, (1,3,-2], (-2,1,4]] B=((5), (31, (15]] partiel (A, i): n range (it+1,len(A[0])): if abs (A(k] [i])>abs(A[j] [i]): j-k (Ai, 3): ange (len (A[0})) : ALA) 0k] ,A(3] Ue] =A(3) 0c) ,ACG) Oe) ection (A, i, j,M) for k in range (len(Al0])): ALi] Oe) =A C4) (ie) +45) 0) £ résolution (A,B): X=[0, 0,0] for i in range(len(A[0])): j=pivot_partiel (A, i) £ j>i: échange_de_lignes (A, i, j) échange_de_lignes (B, i, j) k in range(i+1,1en(A(0})): L=-A(k] (4) /A(i) (i) transvection(A,k, i, L) transvection (B, k, i, L) i in range (len (A[0])~1,- s=0 rj in range (it1,1len(A[0])): +ALL) (5) *X C5] (BEi] [0]-S) /ATi} (4) 1): 2x-y+ * Exemple : On veut résoudre le systeme (est ~22=3 -2x+y+4z=15° Saisie: [>>> résolution (A,B) Affichage : [2-0 3.0, 407 Cela signifie que la solution du systéme est : x=2, y=3, 2=4. Algorithmes de 1" année Résolution d’un systéme linéaire par la méthode itérative de Jacobi + Chapitre concerné : Systémes linéaires. : lax +azy +ansz=br Ce que fait I’algorithme : Il résout le systéme linéaire jasix+any+anz=be Bax + Asay + A302 =bs 1 (b,-anyn a1sZn) Xoo ay par la méthode itérative : } Yn == (bz —@2i%0—2ax2n) et fe 2o= Znst =—(bs —A31%n —As2Yn) ae 3x-y+z=7 + L’algorithme : (ici on a pris le systéme }x+4y-2z=6 _). -2x+y +42 =15 Timport numpy 25 np Aenp.array({(3,-1,1],[1,4,-21,[-2,1,4]]) bey eae (61, (1511) x(n) 8 return 1/A(0,0]*(B{0]-AL0,1]*y(n-1) -A[0,2]#z(n-1)) Sdef y(n): 0 if eturn 1/A(L,1]*(BE1]-A[1,0]*x(n-1)-A[1,2]*z(n-1)) 2(n): if h7 else he turn 1/A[2,2]*(B[2]-Al2,0]*x(n-1) -A[2, 1]*y(n-2)) 9 print (x(15) ,y(25),2(15)) 3x-y+z=7 + Exemple : On veut résoudre le systeme {x+4y—2z -ax+y+4z=15° Saisie : Aucune Afficha 200095272 3.0062389. 3.9984 376} Cela signifie que la solution du systéme est : x=2, y=3, z=4 53 Algorithmes de 1"° année liste* _ __ Recherche d’un élément dans une liste* _ * Chapitre concerné : Listes. Ce que fait l’algorithme : Il recherche si un élément qu'on saisit appartient & une liste donnée. * L’algorithme (ici on a pris la liste : Liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3]) a ee om Re liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3] loat (input ("Quel élément recherchez-vous ?")) le i> Maximum Liste (liste) Affichage : 55.3 Cela signifie que le maximum de la liste vaut 55,3. je 1" année liste Algorithmes de 1" année Recherche du minimum d’une liste* + Chapitre concerné : Listes. Ce que fait ’algorithm« + L’algorithme (ici on a pris la list : Liste=| trouve le minimum d'une liste de nombres. 7,1,2,3,5,8.5,13.5,21.2,34,55.3]) (liste): Min=liste[0] i r Min>liste[i]: Min=liste[i] Liste=[7,1,2,3,5,8.5)13.5, 21.2, 34, 55.3] nge (0, len (liste) ): Min « Exemple: On veut connaitre le minimum de la liste=| 3,5,8.5,13.5,21.2,34,55.3] Minimum Liste (liste) Affichage : Cela signifie que le minimum de la liste vaut 1. 56 liste Algorithmes de 1" année SI ~ Calcul de la moyenne et de la variance ‘dune liste* * Chapitre concerné : Listes. Ce que fait I’algorithme : I calcule la moyenne et la variance d'une liste de nombres. ‘* L’algorithme (ici on a pris la liste : Liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3]) liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3] def Moyenne Liste (liste) : Moy=0 for i in range(0,len(liste)): Moy=Moy+liste[il Moy=Moy/len (liste) return Moy def Variance_Liste (liste): Var=0 or i in range(0,len(liste)): Var=Var+ (liste[i]-Moyenne_Liste (liste) )**2 var=Var/len (liste) return Var « Exemple: On veut connaitre la moyenne de ia _ liste liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3] >>> Moyenne Liste (liste) Affichage : Saisic Cela signifie que la moyenne vaut environ 15,05. * Exemple: On veut connaltre la variance de a liste liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3] Saisie: [>>> Variance Liste (liste) Affichage : Cela signifie que la variance vaut environ 274,1. 87 Algorithmes de 1" année Calcul de l’écart type d’une liste* * Chapitre concerné : Listes. Ce que fait 'algorithme : II calcule I'écart type d'une liste de nombres. ‘+ Lralgorithme (ici on a pris la liste : Liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3]) list 7,1,2,3,5,8.5,13.5, 21.2, 34, 55.3] Jef Moyenr te (liste): Moy=0 for i in range(0,len(liste)): Moy=Moy+liste[i] Moy=Moy/len (liste) r n Moy Va € te (liste): Var=0 or i in range(0,len(liste)): Var=Var+ (liste[i]-Moyenne_Liste (liste) )**2 Var=Var/len(liste) n Var Jef Ecar pe_Liste (liste): Sigma=Variance_Liste (liste) **0.5 Sigma * Exemple: On veut connaitre 'écart type de la __ liste liste=[7,1,2,3,5,8.5,13.5,21.2,34,55.3] Saisie >> Ecart_type Liste (liste) Affichage : Cela signifie que I'écart type vaut environ 16,56. Algorithmes de 1" année | Recherche par dichotomie d’un élément dans une liste triée* * Chapitre concerné : Listes. Ce que fait 'algorithme : Ii cherche la position d'un élément dans une liste triée (par la méthode de la dichotomie). L’algorithme (ici on a pris la liste : Liste=[1,2,4,6,8,9,10,13,15,19,20]) Liste=[1,2,4,6,8,9,10,13,15,19,20] from math import * def recherche_par_dichotomie (élément, Liste) : a=0 b=len (Liste) m=floor ( (a+b) /2) while aListe[m]: =m =m m=floor ( (atb) /2) rn m « Exemple ; On cherche la position de I'éiément 15 dans la liste. Saisie: [>>> recherche par dichotomie (15, Liste) Affichage : Cela signifie que I'élément 15 se trouve en position n°8 de la liste. Algor rithmes de 1" année Recherche d’un mot dans un texte (ou chaine de caractéres)* Chapitre concerné : Listes. Ge que fait I'algorithme : II recherche si un mot qu'on a saisi appartient ou non a un texte et affiche sa position. L’algorithme : (ici, il donne la position(s) ol! se trouve le mot « on » dans le texte : « Moins on pense, plus on parle » [Montesquieu}). [Feat Format Far Opans Winter Ta joins on pe @, plus on parle” echerche (mot, texte) : positions _du_mot=[] (0, len (texte) ) : en (mot) mot [j]==texte[i+j]): positions _du_mot.append(i) positions du_mot Saisie : recherche(mot,texte) Affichage : «{6,21] ». Cela signifie que le mot « on » se trouve deux fois dans le texte, la te fois ala position n°6 et la 2° fois a la position 21. Algorithmes de 1" année Droite de régression linéaire Chapitre concerné : Listes. Ce que fait I'algorithme : II donne la droite de régression linéaire (d’équation y=mx-+p) par la méthode des moindres carrés de Gauss : Lxdy-O+gdny, ’ Lavdn-dx Dy m= 5S) i t pat (Sx) -(0+)S (Sx) =(n+4) x; L’algorithme (ici on a pris les listes : L1=[1,2,3,4,5,6] et L2=[4,6,8,9,11,15]) 1213/4, 6] L2=[4,6,8, 9, 11,15) nme (1) ¢ aL [0] i ange (1, len(L)): arath [i] re (L)? ct) i ge (0, len (L)) = C.append (L[i]**2) c (11,12): De(] for i in range(0,len(L1)): D.append(L1 [1] *12i]) D (11,12): omme (11) sme (1.2) mame (carré (L1) ) mme (produit (LL, L2)) (11) *SomearréX mY Len (L1) *Somprod) /Den p= (Somprod*Som-SomcarréX*SomY) /Den mp Exemple : On veut la droite de régression linéaire liant la liste L1=[1,2,3,4,5,6] des valeurs de x et la liste L2=[4,6,8,9,11,15] des valeurs de y Saisie : [>>> _reglin(Li, L2) Affichage : 1 , 1.7333. ) Cela signifie que la droite de régression reliant les listes L1 et L2 a pour équation y =2,03x+1,73 Algorithmes de 1" année |__ Tracé d’une courbe paramétrée + Chapitre concerné : Courbes paramétrées. x(t) y(t)” Ce que fait I’algorithme : II trace la courbe paramétrée { x(t) =4cos*(t) y(t) =4sin®(t) + L’algorithme : (ici on a pris Vastroide { avec 0>>_Longueur_de_la_courbe (f,0,2*pi, 1000) Affichage : x(t) =4cos*(t) Cela signifie que |'astroide owe y(t) =4sin®(t) (pour t compris entre 0 et 2x) a pour longueur 24. 63 Algorithmes de 1" année Génération de points aléatoires sur le _ cercle unité * Chapitre concerné : Probabilités. Ce que fait 'algorithme : Ii génére cing cent points au hasard sur le cercle unité. + L’algorithme : Ee Timport matplotlib.pyplot as pit 2from random import * 3for i in range(1,500): 4 niform(-1,1) 5 ni form(-1,1) 6 if x1**2+x2**2<1: 7 X=(XL4#2-x2*#2) / (x1 **2+x2**2) 8 9 0 x; y= (2*x1*x2) / (x1**24x2**2) plt.plot(x,y,'.') plt.show() Exemple : On veut générer 500 points au hasard sur le cercle unité. Saisie : Aucune. Affichage : Algorithmes de 1" année Théoreme de Cesaro Chapitre concerné : Probabilités, Arithmétique. Ce que fai théoréme de Cesaro: limp, = ot P, désigne la probabilité que deux ® entiers inférieurs a n soient premiers entre eux. L’algorithme : random - range (1,10**12): c=random.randint (1,N) d=random. randint (1,N) pgcd (c,d) ==1 S=S+1 S=S/10**12 L=(6/S)**0.5 arn Lb Exemple : On veut une approximation de x pour n=10". Saisie: |>>> Pi(10**12) Affichage : Cela signifie que n=3,141 ‘algorithme : lI donne une approximation de en utilisant le 65 i \ Chapitre 2. Tous les algorithmes de 2° année Chapitres concernés : Piles (listes) Récursivité Algorithmes de tri Images Algorithmes de 2° année Fonction push (Mettre dessus)* * Chapitre concerné : Piles (listes) * Ce que fait I’algorithme : Il ajoute un élément sur le dessus d'une pile. + Lalgorithme Pile=[14, 23,15, 6] (Pile, élément) : Pile. append (élément) Pile + Exemple : On veut ajouter |'élément « 7 » a la pile [14,23,15,6]. Saisie: >>> Push (Pile,7) Affichage : roma 68 Algorithmes de 2° année | + Chapitre concerné : Piles (listes) ‘* Ce que fait l'algorithme : Il retire I'élément du dessus de la pile. * Lalgorithme Pili "[14, 23,15, 6] Pop (Pile) : Pile[-1] return Pile + Exemple : On veut retirer I'élément du dessus de la pile (14,23,15,6] Saisie: P>> Pop(Pile) Affichage : 1a, 23, Algorithmes de 2° année Echanger deux termes d’une liste * Chapitre concerné : Piles (listes) * Ce que fait l’algorithm échange deux termes de la liste. + Lalgorithme List 6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8] math * (Liste, i,j): iste[j] e[j]=Liste[i] a Ly Liste(i]=a + Exemple : On veut échanger les termes Liste[0] et Liste[17] Saisie Affic! Algorithmes de 2° année Conversion décimal-binaire Chapitre concerné : Récursivité Ce que fait I'algorithme : Ii convertit un nombre écrit en « syst8me décimal » (base 10) en nombre « binaire » (écrit en base 2). L’algorithme from math import * Jef Binaire(n): if n>l: Binaire (floor (n/2)) print (n&2,end="") Exemple : On veut convertir le nombre 35 en binaire. Saisie: [>>> Binaire (35) Affichage : 100011 Cela signifie que 35,, = 100011,, c’est-a-dire que 3549 =1x2° + 0x24 +0x2° +0x2? +1x2'+1x2°. nm Algorithmes de 2° année ___ Conversion binaire-décimal Chapitre concerné : Piles (liste) Ce que fait 'algorithme : II convertit un nombre écrit en « systéme binaire » (base 2) en nombre écrit en « systme décimal » (base 10). Lalgorithme conversion en Liste (n): str (n) iin J: L.append (int (i)) eturn L versebinaire(n): a=Conversion_en_Liste(n) b=len (a) k=0 for i in range(0,b’ kekta[i]*2** (b-i-1) return k Exemple : On veut convertir le nombre binaire 100011 en décimal. Saisie >>>_Inversebinaire (100011) Affichage : 55 Cela signifie que 100011, = 35,,, c'est-a-dire que 4x25 +0x2! +0x2°+0x2?+1x2'+1x2" =35,9. Algorithmes de 2° année Puissance xn Chapitre concerné : Récursivité Ce que fait I’algorithme : II calcule x". L’algorithme eturn (puissance (x,n-1) *x) Exemple : On veut connaitre la valeur de 2° Saisie: [>> puissance (2,5) Affichage : «32 » Cela signifie que 2° = 32. 73 Algorithmes de 2° année * Chapitre concerné : Récursivité (série numérique) + Ce que fait 'algorithme : Il calcule 5° x". & * L’algorithme lief puissance (x,n): if n==0: return 1 elif n==1: return x else: return (puissance (x, n-1) *x) lef somme_puissances (q,n) : if nm return 1 else: return (somme_puissances (q,n-1) +puissance(q,n) ) + Exemple : On veut connaitre la somme 1+2+27+2°+...+2°. Saisie : [>>> somme ssances (2,9) Affichage : «1023 ». Cela signifie que 1+2+2?+2°+...+2°=1023. 4 Suite récurrente linéaire d’ordre 1 * Chapitre concerné : Récursivité (suites) Algorithmes de 2° année * Ce que fait I'algorithme : II calcule n‘importe quel terme d'une suite récurrente linéaire d'ordre 1. «© L’algorithme (ici on a pris la suite (u,) définie par {is i oe Bu, +2 0.8*u(n-1) +2 * Exemple : On veut connaitre la valeur de u, . Saisi : B> wu) Affichage : Cela signifie que u, = 8,464 ) 75 Algorithmes de 2° année 76 Chapitre concerné : Récursivité (suites) Ce que fait I’algorithme: II calcule n’importe quel terme d'une suite récurrente linéaire d’ordre 2. +h | appelée Lalgorithme (ici on a pris la suite (f,) définie par {es suite de Fibonacci). return f(n-1)+f(n-2) Exemple : On veut connaitre la valeur de f,. Saisie: [>> £(6) Affichage : 13 Cela signifie que f, =13. Algorithmes de 2° année _ Dichotomie (récursive) * Chapitre concerné : Récursivité (résolution approchée d’équations) © Ce que fait I’algorithme : II résout 'équation f(x) =0 par la méthode de la dichotomie. * L’algorithme (ici on veut résoudre f(x)=0 avec f(x)=x?-2). eee ichotomie(f£,a,b,précision) : s (b-a) > dichotomie(f,1,2,0.0000001) Affichage : Cela signifie que V2 = 1,4142136... 7 Algorithmes de 2° année 78 par ’algorithme de Babylone Chapitre concerné : Récursivité (suites) Ce que fait 'algorithme : Ii calcule une approximation de Va parla suite de 1 uy =4 (appelée suite de Babylone) définie par | L’algorithme 2 1/2*(u(n-1,a)+a/u(n-1,a)) Exemple : On veut connaitre une approximation de J2 grace a u,, Saisie: |>>> u(10,2) Cela signifie que V2 = 1,4142135. Algorithmes de 2° année Approximation de /2 par les fractions de Bhaskara-Brouckner © Chapitre concerné : Récursivité (suites) * Ce que fait I'algorithme : II donne une fraction d'entiers, (2) trés proche de Pa) qa = 2Aqy +8, [Prez = 2Pres + Pn 2 alaide des suites définies par |a, =4 et Jp, =1 ( =o) ( =2 * L’algorithme 2*a (n-1) +a (n-2) 1 2 2*p(n-1) +p(n-2) f ion (n) print(a(n),"/",p(n)) « Exemple : On veut connaitre une fraction d’entiers proche de J2 Saisie: |>>> fraction(5) Affichage : 99 Cela signif =. ela signifie que V2 = >> 79 Algorithmes de 2° année . Chapitre concerné : Récursivité (suites) Ce que fait I’algorithme : |i donne une valeur approchée de /2 (solution de 1 x=1+7 ) par la suite de Bombeli (1626-1872) : Pent eu. eS at Lalgorithme £ Bombelli (n): if n==0: return 1 else: return 1+1/(1+Bombelli(n-1)) Exemple : On veut connaitre une valeur approchée de V2 . Saisie : b> Bombelli (5) Affichage : 1.4142857142857144 Cela signifie que V2 = 1,414285... Algorithmes de 2° année Approximation du nombre d’or os * Chapitre concerné : Récursivité (suites) © Ce que fait I'algorithme : II donne une valeur approchée de 1* ah (solution u, 1 de équation x = 1+) para suite |°** s u,=1 + L’algorithme (n): urn 1 1+1/Nombre_d_or(n-1) 1405 * Exemple : On veut connaitre une valeur approchée de Saisie: [>>> Nombre d_or (20) Affichage : 4+V5 2 Cela signifie que 81 Algorithmes de 2° année A _ Approximation de la constante d’Euler y — * Chapitre concerné : Récursivité (série numérique) © Ce que fait l’algorithme : || donne une approximation de la constante y 1 dal 1 d'Euler (1707-1783) définie par: y = lim 1+2+—+—+---—-In(n) uler ( ) définie par: y= lim 1+ +347 +7 —In(n) * Lalgorithme From math 4 else: eturn Série_harmonique(n-1)+1/n stante_Euler(n): série _harmonique (n) -log(n) def Cc ret « Exemple : On veut connaitre une valeur approchée de la constante d’Euler. Saisie : [>>> Constante Euler (900) Affichage : 0.577771111576444 Cela signifie que y= lim 43424241 in(n)=0,5778. 82 Algorithmes de 2° année Factorielle n! Chapitre concerné : Récursivité (suites) Ce que fait I’algorithme : II calcule la valeur de n! (pour tout n), définie par : nl=nx(n—1)x(N=2)x-3x2x1. L’algorithme n*factorielle (n-1 Y Exemple : On veut connaitre la valeur de 5! Saisi : B>> factorielle(5) Affichage : Cela signifie que 5!=120. Algorithmes de 2° année ___ Approximation de e~ | * Chapitre concerné : Récursivité (série entiére) * Ce que fait l'algorithme : II calcule une approximation de e” a l'aide de la série entiére e* =~. ant * Lalgorithme urn (exp (x,n-1) +x**n/factorielle(n) ) On veut connaitre une approximation de e grace a u,,. >>>_exp (-1, 10) Affichage : 5794642857144 Cela signifie que e 0,367879... Algorithmes de 2° année Head ~ Approximation dei cos(x) et sin(x) * Chapitre concerné : Récursivité (série entiere) * Ce que fait l'algorithme : Il détermine une valeur approchée de cos(x) et de sin(x) pour ee el angle x en ralane & Tele des eéres enbres: cos(x) = 5 (1) any 10280") LC) TeaEE + Lalgorithme om math urn (cos (x,n-1) + ( (-1) **n/factorielle (2*n) ) *x** (2*n)) eturn(sin(x,n-1)+((-1)**n/factorielle(2*n+1) ) *x**(2*n+1)) + Exemple : On veut une approximation de cos(17°) et de sin(43°). Saisie: [5>>_cos(17*pi/180, 5) Puis p>>_sin(43*pi/ie0, 5) Affichage >>3_cos (17*pi/180,5) >>> sin (43*pi/180, 5) 0.6819 Cela signifie que cos(17°) = 0,956305 et sin(43*) = 0,681998. Algorithmes de 2° année Coefficient binomial ("|-—_"! p) pl(n-p)! Chapitre concerné : Récursivité (probabilités, dénombrement) * Ce que fait l’algorithme : Il calcule la valeur de n! (pour tout n), définie par : °] —__ ou par ia formule de Pascal (P(e) p) pl(n—p p) \p-1) \p + Lalgorithme n*factorielle(n-1) (ny): factorielle(n) /(factorielle(p) *factorielle(n-p)) u (formule de Pascal) n(n, Pp)? i Coeff_binom(n-1,p-1)+Coeff_binom(n-1,p) © Exemple : On veut connattre la valeur do (>) Saisie Algo 1: Coefficient binomial (5,2) Saisie Algo 2: 5>_Coeff_binom(5,2) Affichage : Cela signifie que (3) =10. Algorithmes de 2* année Triangle de Pascal * Chapitre concerné : Récursivité (probabilités, dénombrement) © Ce que fait l'algorithme : | affiche le triangle de Blaise Pascal (1623-1662). * L’algorithme return Coeff_binom(n-1,p-1)+Coeff_binom(n-1,p) de_Pascal(n)+ range (0,n+1): ecm) j in range(0,i+1): print (Coeff_binom(i,j),end=" ') * Exemple : On veut connaitre le triangle de Pascal jusqu’a la ligne n = 4 Sai b>> Triangle de Pascal (4) Affichage : Algorithmes de 2° année ___ Fonction zétade Riemann * Chapitre concerné : Récursivité (suites, séries) © Ce que fait l'algorithme : Il calcule ¢(n) = pe a l'aide de la formule 5(2P)=Bal oy: yi ?° ou B, désigne le n-iéme nombre Pp. - 4 et(nsd de Bernoulli définie par la relation B, = B, et B, n+igl k * Lalgorithme fractions * (n)e n==0 or ne=l: 1 nt facto(n-1) (n,p): facto (n) / (facto(p) *facto(n=p)) Berr (m) 1 5-0 k ange (0,m) + S=S+Coeff_binom(m+1,k) *Bernoulli (k) Fraction (-1/(m+1) *S) .1imit_denominator (10000) 4 (n)= aco: (n)t n§2== (val_abs (Bernoul1i (n)) * (2** (n-1))/ (facto (n)), "Pi*",n) + Exemple : On veut connaitre la valeur de ¢(2) Saisie: [>> Fonction _dzeta Riemann (2) Affichage : 7 oe Cela signitie que 1+ 52+ 55+ grt ea Algorithmes de 2° année Approximation de 1 par Archiméde Chapitre concerné : Récursivité (suites) Ce que fait lalgorithme : II donne un encadrement de x a l'aide de la méthode d'Archiméde (287-212 av. J.-C.) clesta-dire des deux suites (Xn) et = [nt¥on, af = 2 et ceed . Llencadrement de x étant =*n*¥n Y= Xn*¥n x (Vn) définies par : Yan alors : 6x20 x Xp, 99 <<6x2" Yocom + Lalgorithme : x(n) if 1 els ( (x (n/2) *y (n) ) /2) **0.5 y(n) if 3 urn 2/3**0.5 return (x(n/2) *y(n/2))/(x(n/2) +y (n/2)) Al iméde (n) print (6*2**n*x(6*2**n),"_< Pi < ",6*2**n*y(6*2**n)) Exemple : On veut un encadrement de x pour n=4, ce qui revient @ obtenir Fencadrement 96x Xgg <™< 96x Yog - Si b>>_Archiméde (4) Affichage : Cela signifie que 3,14145 >_Approximation_pi (15) Affichage : a Cela signifie que 3,141592652 < x <3,141592656 . Algorithmes de 2° année Approximation de m par Vite * Chapitre concerné : Récursivité (suites) * Ce que fait I’algorithme : Il donne une approximation de x par les suites de 2 Frangois Vidte (1540-1603) définies par |%~!~ V2*%o ot |Your =Yo% x= V2 Wie + L’algorithme (2+x(n-1))**0.5 ny (n-1) #2/x(n-1) Exemple : On veut une approximation de x. Saisie: [5>>_y (20) Affichage : 41592653588619 Cela signifie que x =3,14159.... Algorithmes de 2° année Approximation de 7 par Al-Kashi * Chapitre concerné : Récursivité (suites) * Ce que fait l'algorithme : II donne une approximation suivant la méthode d’ Al Kashi (1380-1429) de x en utilisant les suites (c,) et (x,) définies par tm, = 3x2"xC,. co =1 + Lalgorithme urn (2-(4-c (n-1) **2) **0.5)**0.5 return 3*2**n*c(n) * Exemple : On veut une approximation de x. Saisie: >>> pi (10) Affichage : 1415925165881546 Cela signifie que x= 3,14159.... Algorithmes de 2° année Chapitre concerné : Récursivité (série entiére) Ce que fait I’algorithme : I détermine une valeur approchée de x par la formule de John Machin (1680-1751) : x= ‘arctan ¢ \- sarctan( 15) Bae — race ala série entire arctan(x)= 3:(-1)" 35 * L’algorithme n (arctan (x,n-1) + ( (-1) **n/ (2*n+1) *x** (2*n+1) ) E Mi a(n) = return 16*arctan(1/5,n)-4*arctan(1/239,n) © Exemple : On veut une approximation de x Saisie: [>>> _Pi_par Machin (10) Affichage : 3.14159: Cela signifie que x =3,14159.... 93 Algorithmes de 2° année Approximation de 7 par Ramanujan * Chapitre concerné : Récursivité (série numérique) * Ce que fait I’'algorithme : |! détermine une valeur approchée de x parla formule de Ramanujan (1887-1920) : i c ve ¥ (4n)!_ 26390 +1103 980155 (n!) L’algorithme nt fac (n-1) 1) + (fac (4*n) )* (1103+26390"n) / ( (fac (n)) **4*396** (4*n) } (m: 9801/(8**0.5*u(n)) fn 8 pi(d)) Exemple : On veut une approximation de x Saisie : aucune Affichage : Cela signifie que x= 3,14159... (le résultat ci-dessus comporte 50 décimales exactes !). 94 Algorithmes de 2° année par Gauss-Legendre-Brent-Salamin _ * Chapitre concerné : Récursivité (suites) * Ce que fait I'algorithme : II détermine une valeur approchée de x par utilisation d'une suite et de quatre suites auxiliaires (méthode mise au point par Richard Brent et Eugene Salamin en 1976 a partir de travaux de Carl Friedrich Gauss [1777-1855] et Adrien-Marie Legendre (1752-1833]). + L’algorithme g jef a(n) return (a(n-1)#b(n-1))/2 1/aes0.5, return (a(n-1)*b(n-1))**0.5 2*c(n-1) t 0.25 d(n-1)-c(n-1) * (a(n-1) -a(n)) **2 eturn (14+1/2*#*0.5)**2 (a (n-1) +b (n=1) ) ##2/ (4*d(n-1)) + Exemple : On veut une approximation de x. Saisie: [>>> Pi (4) Affichage : 3.141592653589794 Algorithmes de 2° année | Approximation de 7 par des fractions _ ‘+ Chapitre concerné : Récursivité (liste). * Ce que fait I'algorithme : Il détermine des fractions d’entiers proches de x fare 338, etc. comme réduites de fractions continues. + Lalgorithme 3 int (1/b(n-1)) (ny: f n= math.pi-3 1/b(n-1)~int (1/b(n-1)) rac(n): L=[] i in range(1,n): L. append (a(i)) (n) *N(n-1) +N (n-2) ¢ (n): L=Frac (n+2) meior iL (n] *D (n=1) +D (n- H tion_pi(n): nt (N(n) , "/",Din)) + Exemple : On veut une approximation de x par une fraction. Saisi S5>_ fraction pi (4) 103993 33102 © Affichage : « 103993/33102 ». Cela signifie que x = Algorithmes de 2* année Le Tours de Hanoi ‘+ Chapitre concerné : Récursivité ‘© Ce que fait I’algorithme : II donne les coups a jouer pour réussir ce jeu inventé par Edouard Lucas en 1882 (déplacer les disques du pilier A vers le pilier C en s’aidant du pilier B (tout en respectant la condition : jamais un gros disque sur un petit), et ce en un minimum de coups). * Lalgorithme "du",A, "vers le",C) Hanoi (n-1,A,B,C) print ("Bouger le disque de taille",n,"du",A,"vers le",C) Hanoi (n-1,B,C,A) janoi (n) + PI ci les ",2**n-1," mouvements a effectuer :") Hanoi (n,"Pilier A","Pilier C","Pilier B") * Exemple : On veut réussir le jeu avec trois disques. Sai >>> _Solution_Hanoi (3) Affichage 7 Algorithmes de 2° année Flocon de Von Koch ‘* Chapitre concerné : Récursivité (images) + Ce que fait I'algorithme : II trace le flocon de Helge Von Koch (1870-1924) (fractale).. * Lalgorithme =400 F Motif_Von_Koch (Lyn) : speed(0) pencolor ("black") fF peed forward (L) Motif_Von_Koch(L/3,n-1) left (60) Motif Von Koch (L/3,n-1) right (120) Motif_Von_Koch (L/3,n-1) left (60) Motif_Von_Koch(L/3,n-1) £ Flocon_de Von Koch(n): Motif Von Koch (Lyn) right (120) Motif_Von Koch (Ln) right (120) Motif_Von_Koch (L,n) On veut tracer le flocon de Von Koch (a l'ordre 2). >>>"Flocon de Von Koch(2) Affichage : Algorithmes de 2° année | -Anti-flocon de Von Koch | * Chapitre concerné : Récursivité (images) * Ce que fait 'algorithme : II trace l'anti-flocon de Von Koch (fractale). + Lalgorithme turtle * L=400 M (2,n) + speed(0) pencolor ("black") forward(L) Motif _Anti_Von_Koch (L/3,n-1) left (=60) Motif Anti_Von_Koch(L/3,n-1) right (-120) Motif_Anti_Von_Koch(L/3,n-1) left (=60) Motif_anti_Von_Koch(L/3,n-1) : ‘ (n): Motif_Anti_Von Koch (L,n) right (120) Motif_Anti_vo right (120) Motif Anti_Von_Koch(L,n) 1_Koch (L,n) © Exemple : On veut tracer 'anti-flocon de Von Koch (a l'ordre 3). >> Anti_Flocon de Von Koch (3] Affichage : Sai Algorithmes de 2* année 100 Triangle de Sierpinski Chapitre concerné : Récursivité (images) Ce que fait l'algorithme : Il trace le triangle de Waclaw Sierpinski (1882- 1969) (fractale). Lalgorithme i (Lyn): speed (0) pencolor ("white") ne==0: begin_fi11() forward(L) left (120) forward (L) left (120) forward(L) Left (120) end_fil1Q Motif_Sierpinski (L/2,n-1) forward (L/2) Motif Sierpinski (L/2,n-1) left (120) forward (L/2) right (120) Motif Sierpinski (L/2,n-1) right (120) forward (L/2) left (120) f Triangle de Sierpinski (n): Motif Sierpinski (L,n) Exemple : On veut le 5° triangle de Sierpinski. Saisie: [>>> Triangle de Sierpinski (5) Affichage : Algorithmes de 2° année Carré de Sierpinski Chapitre concerné : Récursivité (images) ‘+ Ce que fait I’algorithme : Il trace le carré de Sierpinski (fractale). ‘+ Lalgorithme lect (90) forwara(t) forwara (1) forwara(L) Sierpinski (L/3,n-1) we © Exemple : On veut le 4° carré de Sierpinski >>> _Carré_de Sierpinski (4)] Saisie: Affichage : 101 Algorithmes de 2° année _ Nombre de partitions d’unentier Chapitre concerné : Récursivité (arithmétique). * Ce que fait I’algorithme : Il donne le nombre de partitions p(n) d'un entier n. [par exemple p(5)=7 car 5 peut s'écrire de sept maniéres différentes comme somme d'entiers strictement positifs: 5=5 (dordre 1), 5=4+1 (d'ordre 2), 5=3+2 (ordre 2), 5=3+1+1 (dordre 3), 5=2+2+1 (ordre 3), 5=2+1+14+1 (dordre 4), 5=1+1+1+1+1 (dordre 5)]. Pour cela, il utilise la formule p(n) = }’p(k,n) ot p(k,n) est le nombre de partitions de n d’ordre k vérifie la relation de récurrence: p(k,n)=p(k—1n-1)+p(k,n-k) avec P(A,n) =1, p(tn)=1 et pik,n)=0 si k>n. + Lalgorithme turn p(k-1,n-1) +p (k,n-k) ition (n): k in range(1,n+1): +p (k,n) return j + Exemple : On veut connaitre le nombre de partition de l'entier 50 (le nombre de maniére de décomposer 50 en somme d'entiers strictement positifs). Saisie: [>>_partition (50) Affichage : 204226 Cela signifie quill y a 204226 maniéres différentes d’écrire 'entier 50 comme somme d'entiers strictement positifs. 102 Tria bulles (Bubblesort) Chapitre concerné : Algorithmes de tri Ce que fait l'algorithme : I! trie une liste par ordre croissant. L’algorithme (on a pris la liste : Liste=| Algorithmes de 2° année .4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8]) math x (Liste,i,4): a=Liste(4] Liste([j]=Liste[i} Liste[i]=a es (Liste): j in range (0, i): if Liste[j+1]>_tri_a_bulles (Liste) Affichage : >>> tri_a bulles (i 103 Algorithmes de 2° année Tri par sélection (Selection sort) 104 Chapitre concerné : Algorithmes de tri Ce que fait I'algorithme : Il trie une liste par ordre croissant. L’algorithme (on a pris la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8]) Liste=[6,4,7, 1,3,8,2,5,3,13,2,15,5,12,1,7,5,8] par_sélection (Liste) : in range(0,len(Liste)): def tri range (i+1,len(Liste) ): if Liste[j]>Liste[k]: j=k Liste(j],Liste[i]=Liste[i],Liste[j] return (Liste) Exemple : On veut trier la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8] >>_tri_par_sélection (Liste) >> tri_par_sélection (Liste) Algorithmes de 2° année Tri par insertion (Insertion sort)* Chapitre concerné : Algorithmes de tri Ce que fait I’algorithme : Il trie une liste par ordre croissant. L’algorithme (on a pris la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8]) 71) 1,3;8,2)5,3,13,2/15,5/12,1,1,5,8] (Liste): (1, len (Liste) ): Liste[j]>c: Liste[j+1]=Liste[j] -1 Liste[j+1]=c (Liste) © Exemple : On veut trier la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8) Saisie: >> tri_par_insertion (Liste) Affichage : tri_par_insertion (Liste) 105 Algorithmes de 2° année Tri rapide (Quicksort)* * Chapitre concerné : Algorithmes de tri * Ce que fait l’algorithme : II trie une liste par ordre croissant. * L’algorithme (on a pris la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8)) =[6, 4, 7,1, 3,8,2,5, 3, 13,2,15,5,12)1,7,5,8) Liste math tt pivot (Liste, gauche, droite) : Liste [floor ( (gauche+droite) /2)] =gauche, droite wt ae Liste[a]p: b=b-1 a>b: Liste(a],Liste[b]=Liste (b] ,Liste[a} a,b=a+1,b-1 gauche>> tr le (Liste) Affichage : f>> tri_rapide (Liste) fase ES ares rer rae 13, 15) Algorithmes de 2° année Tri par fusion (Mergesort)* + Chapitre concerné : Algorithmes de tri * Ce que fait l’algorithme : |i trie une liste par ordre croissant. * L’algorithme (on a pris la liste : Liste=| 1,3,8,2,5,3,13,2,15,5,12,1,7,5,8)) (ab) iclen(a)_and $>> tri_par_fusion (Liste) Affichay B>> tri_par_fusion (Liste) 107 Algorithmes de 2° année 108 Recherche du maximum et du minimum | d’une liste de nombres Chapitre concerné : Algorithmes de tri (application) Ce que fait I’algorithme : II donne le maximum et le minimum d'une liste & l'aide d'un algorithme de tri. L’algorithme (on a pris la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8]) List ect (Liste): range (0, len (Liste)): ge (it+1,len(Liste)): Liste[j]>Liste[k]: j=k Liste[j],Liste[i]=Liste[i],Liste[j] Liste Maximum (Liste) : ri_par_sélection (Liste) return a{Ten(a)-1] Minimum (Liste) : a=tri_par_sélection (Liste) a[0]} F417 1,9 7072757371972, 15,5 ,02 nd, tneel Exemple : On veut connaitre le minimum et le maximum de la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8] Saisie: >>> Maximum (Liste) Affichage : 15 Saisie: [>>> Minimum(Liste) Affichage : Algorithmes de 2° année ‘Recherche de la médiane d’une liste de _ nombres* + Chapitre concerné : Algorithmes de tri (application) Ce que fait I’algorithme : II donne la médiane d'une liste, c’est-a-dire la valeur centrale (ou la moyenne des deux valeurs centrales) de la liste une fois triée par ordre croissant. L’algorithme (on a pris la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7.5,8)) Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,81 nsertion (Liste) e j>=0 and Liste[j]>c: Liste[j+1]=Liste[j] j=j-2 Liste [j+1 if len (Liste) $2==0: m=floor (len (Liste) /2) médiane= (Liste [m] +Liste[m+1]) /2 floor (len (Liste) /2) +1 médiane=Liste [m] print (médiane) Exemple : On veut trier la liste : Liste=[6,4,7,1,3,8,2,5,3,13,2,15,5,12,1,7,5,8] Saisie : >>> _médiane obtenue par tri par insertion(Liste) Affichage : Cela signifie que la médiane vaut 5,5. 109 Algorithmes de 2° année 0 Suite de Syracuse et temps de vol _ Chapitre concerné : Récursivité (liste) Ce que fait I'algorithme : 1! calcule (dans une liste) les termes de la suite de Syracuse selon le principe suivant : « Prenez un entier (au hasard). S'il est pair, divisez-le par 2. S'il est impair, multipliez-le par 3 et ajoutez-lui 1. Puis répétez lopération. A la fin, vous aboutirez toujours a la suite 4, 2,1, 4, 2, 1, ete. Ex: 6310-95 9168-94 92919452 515--, Ex: 13> 40-+20 +10 +5 916 98-45 29134-92915 Ce résultat n'est toujours pas démontré (c'est une conjecture) mais algorithme montre que ga a lair d’étre vrai quelque soit lentier de départ ! » De plus, il peut calculer la durée de vol par rapport au nombre de départ, Cest-a-dire le plus petit indice n oi Ia suite vaut 1) L’algorithme 1) ns 3 Liste.extend (Syracuse (n/2) ) Liste.extend (Syracuse (n*3+1) ) Liste jef Temps_de L(n) = Syracuse (n) int (len (Syracuse (n) ) -1) Exemple : On veut connaitre la suite de Syracuse lorsque n vaut 15. Saisie: Syracuse (15) Affichage : Exemple : On veut connaitre le temps de vol lorsque n vaut 147. Saisie: [>> _Temps_de_vol (147) Affichage : Cela signifie qu'l faut attendre le terme de rang 116, pour obtenir 1. Algorithmes de 2° année * Chapitre concerné : Récursivité (liste) Ce que fait l'algorithme : II calcule (dans une liste) les termes de la suite de ‘Syracuse selon le principe suivant : « Prenez un entier (au hasard). S'll est pair, divisez-le par 2. Sil est impair, multipliez-le par 3 et ajoutez-lui 1. Puis répétez lopération. A la fin, vous aboutirez toujours a la suite 4, 2,1, 4, 2, 1, etc. Ex: 63410-5916 98 94-5291-44-2515 Ex : 13-440 +20 410-45 16 98 94929142515. Ce résultat n'est toujours pas démontré (c'est une conjecture) mais algorithme montre que ¢a a I'air d’étre vrai quelque soit lentier de départ ! » De plus, il peut déterminer la hauteur maximale atteinte par la suite (c'est-a- dire le terme le plus grand, au cours de son vol). + Lalgorithme (n) n] n¥2==0: Liste.extend (Syracuse (n/2)) Liste. extend (Syracuse (n*3+1)) Liste nb peLRULYON (Liste): fl range (0, len(Liste) ): jai or k in range (#1, 1en(Liste)): Liste(}]>Liste[k]: j-k Liste(4],Liste[1]=Liste[i],Liste[j] Liste alt maximale (n) : astri_par_sélect ion (Syracuse (n)) turn aflen(a)-1] * Exemple : On veut connaitre |'altitude maximale de la suite de Syracuse lorsque n vaut 127. Saisie: [>>> Altitude maximale (127) Affichage Cela signifie que la valeur maximale de la suite (dont le premier terme est 127) vaut 4372. m1 Algorithmes de 2° année Ensemble de Mandelbrot * Chapitre concerné : Images, Fractales, Complexes * Ce que fait ’algorithme : II trace 'ensemble de Benoit Mandelbrot (1924- 2010) défini par {C:(z,) estbornée} (ou (z,) est définie par z,,,=Z, +C). * Lalgorithme (on a pris z, =0 et pour bome 10) Ifrom matplotlib.pyplot import imshow 2import numpy as np 3 4def Module(z): 5 return(z.real**2+z.imag**2)**0.5 6 7def Mandelbrot (c,n): 8 zt 9 for i in range(0,n): 10 zez*z+c 11 if Module(z)>=10: 12 return i 13 return -40 15 Tableau=np. zeros ( (200, 300) ) i/ def Ensemble_Mandelbrot (Tableau, n): for i in range(®, 300) : 19 x=-2+i/100 20 for j in range(o,200): 21 y=-1+j/100 2 c=complex(x,y) 23 Tableau j, i]=Mandelbrot(c,n) 24 ___return imshow(Tabieau) « Exemple : on veut l'ensemble de Mandelbrot au rang 25. Ensemble Mandelbrot (Tableau, 25) Affichage : 2 _Ensemble de Julia Algorithmes de 2° année Chapitre concerné : Images, Fractales, Complexes Ce que fait I’algorithme : II trace l'ensemble de Gaston Julia (1893-1978), defini par {z, :(z,) est bornée} (ou (z,) est définie par z,,,=z,+C). L’algorithme (ici on a pris C = 0,3+0,5i et pour borne 10). 3 4def 5 6 Tdef 8 9 10 11 12 13 14 16 17 def 18 19 20 21 22 23 24 Tfrom matplotlib.pyplot import imshow 2import numpy as np Module (z) : return(z, real**2+z. imag**2)**0.5 JuLia(z0,n): z=20 for i in range(,n): z=2*z+complex(0.3,0.5) if Module(z)>=10: return i return -40 15 Tableau=np. zeros ( (300, 300)) Ensemble_Julia(Tableau,n) : for i in range(0,300): x=-1.5+i/100 for j in range(@,300): 1.5+j/100 z0=complex(x,y) Tableau[j,iJ=Julia(z0,n) return imshow(Tableau) Exemple : on veut l'ensemble de Julia au rang 50. Ss Ensemble _Julia(Tableau, 50)| Affichage : 13 Algorithmes de 4 * année Fougére de Barnsley (Barnsley’s Fern) © Chapitre concerné : Images, Fractales, suites récurrentes + Ce que fait l'algorithme : Il trace la fougére de Michael Barnsley (1946-) a Vaide de la suite des coordonnées (x,,y,,) définie par le principe suivant : on tire un nombre au hasard entre 0 et 1. Si le nombre est inférieur & 0.01, alors /%»+1 =0 nv =0,16n 0,85%y +0,04y Sile nombre est compris entre 0,01 et 0,86 alors (hee oO sot +16 ned Si le nombre est compris entre 0,86 et 0,93, alors ae =0,2%q—0,26yn ns 0,23%q +0,22¥n +1,6 15%p +0,28Yn ? in: Sile nombre est compris entre 0,93 et 1, alors { eee ayo orad * L’algorithme (ici on a pris 1000000 d’itérations, et a es Timport matplotlib.pyplot as plt 2inport numpy as np def Barnsley(M): 4 herandom.random() 5 if heO.0 6 M=(0,0.16*M[1}] elif 0.01

Vous aimerez peut-être aussi