D’Algobox à Python et au pseudocode, une transition en douceur

Les expressions régulières permettent d’automatiser la production de pseudocode, à partir d’Algobox ou de Python
dimanche 1er octobre 2017
par  Alain BUSSER

Ci-dessous il y a deux outils :

  • le premier permet de produire du pseudocode similaire à celui du bac 2018, à partir d’un script Python (langage). Il est toujours possible, après cela, de modifier le pseudocode, avant de le copier-coller vers un traitement de texte ;
  • le second outil fait quelque chose de similaire, mais à partir d’« algorithmes » comme ceux du bac 2017, voire de scripts algobox.

Pour les opérations inverses, voir plurialgo pour engendrer de l’algobox, et SofusPy pour passer de l’algorithme en langage naturel, vers le script Python « auto-engendré » .

Voici les outils pour les étudier :

HTML - 6.9 ko

Voici les outils de conversion :

Utilitaires de conversion

Depuis Python

Coller ci-dessous le script Python, puis cliquer ci-dessous... et corriger ci-dessous
Ensuite copier le texte ci-dessus et le coller dans le traitement de texte

Depuis Algobox

Coller ci-dessous l'algobox, puis cliquer ci-dessous ... et corriger le résultat ci-dessous
Ensuite copier le texte ci-dessus et le coller dans le traitement de texte

Scripts

Pour tester l’outil, voici quelques scripts Python, donnés en exemples, dans les onglets suivants :

pgcd

Pour calculer les diviseurs d’un entier :

def diviseurs(unEntier):
        S = set([])
        for d in range(1,unEntier+1):
                if unEntier%d == 0:
                        S.add(d)
        return S

Maintenant, les diviseurs communs à deux entiers :

def divComm(a,b):
        dA = diviseurs(a)
        dB = diviseurs(b)
        return dA.intersection(dB)

Enfin, le pgcd de deux entiers est le plus grand élément de cet ensemble :

def pgcd(a,b):
        return max(divComm(a,b))

Bien entendu on peut aussi calculer un pgcd par l’algorithme d’Euclide :

def euclide(a,b):
    while b!=0:
        a,b = b,a%b
    return a

Collatz

Version classique, avec des affectations :

u = 65
while u >= 2:
        if u%2==0:
                u=u/2
        else:
                u=3*u+1
        print(u)

Et la version Sofus :

u = 65
while u >= 2:
        if u%2==0:
                u /= 2
        else:
                u *= 3
                u += 1
        print(u)

Suites

Extrait du sujet STI2D Polynésie 2017 :

Dans un parc régional, on étudie une espèce de renards. Cette population était de 1 240 renards à la fin de l’année 2016.
On modélise par un le nombre de renards dans le parc régional à la fin de l’année 2016+ n. On a donc u0 = 1240.
On estime à 15 % par an la baisse du nombre un.
On suppose que cette évolution restera identique pour les années à venir.

Déterminer une estimation du nombre de renards présents dans le parc régional à la fin de l’année 2020.

u = 1240
for n in range(5):
        print(n,u)
        u = u-0.15*u

Déterminer la limite de la suite (un). Comment interpréter ce résultat ?

Tout d’abord on vérifie la formule explicite de la suite géométrique :

u = 1240
for n in range(5):
        print(n,1240*0.85**n)

Puis on va, comme dirait Buzz, « vers l’infini et au-delà » :

u = 1240
for n in [0,1,4,10,100,float('inf')]:
        print(n,1240*0.85**n)

Des scientifiques considèrent que l’espèce des renards présents dans le parc sera en situation d’extinction à partir du moment où le nombre de renards deviendra strictement inférieur à 100.
À partir de quelle année l’espèce de renards présents dans le parc sera-t-elle en situation d’extinction ?

u = 1240
n = 0
while u >= 100:
        n = n+1
        u = u-0.15*u
print(n)

Afin de préserver l’espèce, on décide d’introduire à chaque année 30 renards à partir de la fin de l’année 2017.
On note vn le nombre de renards présents dans le parc à la fin de l’année 2016+n.
On estime à 15 % par an la baisse du nombre vn.
On a v0 = 1240.

v = 1240
n = 0
for n in range(100):
        print(v)
        v = v-0.15*v + 30

Équations

Dans le cas général on peut résoudre une équation du type f(x)=0 (« chercher un zéro de f ») par dichotomie :

def f(x):
    return x**2-5
def zero(f,a,b):
    if f(a)*f(b)>0:
        return None
    while(abs(a-b)>1e-14):
        m=(a+b)/2.
        if f(m)*f(a)>0:
            a=m
        else:
            b=m
    return m
   
print(zero(f,0,6))

Pour résoudre l’équation ax²+bx+c=0, on peut faire ainsi :

from math import *
def solutions(a,b,c):
        S = set([])
        Delta = b**2-4*a*c
        if Delta >= 0:
                r = sqrt(Delta)
                x1 = (-b-r)/(2*a)
                x2 = (-b+r)/(2*a)
                S.add(x1)
                S.add(x2)
        return S

Hasard

Pour lancer un dé 600 fois puis voir la répartition de chaque face obtenue, on peut utiliser ce script :

from random import *
liste = []
for indice in range(600):
        result = randint(1,6)
        liste.append(result)
for face in range(1,7):
        print(face,liste.count(face))

Pour choisir un nombre premier au hasard, on peut faire

from random import *
print(choice([2,3,5,7,11]))

Pour simuler une variable aléatoire binomiale de paramètres 8 et 0,4 on peut passer par une approximation hypergéométrique, basée sur un tirage sans remise (comme 8 est petit par rapport à la taille 100 de l’urne, ça revient presque au même). On commence donc par remplir une urne, avec 40 boules rouges et 60 boules bleues, puis on y effectue des tirages de 8 boules, et à chaque fois, on compte le nombre de boules rouges :

from random import *
urne = ['rouge']*40+['bleu']*60
liste = []
for tirage in range(1000):
        echantillon = sample(urne,8)
        rouges = echantillon.count('rouge')
        liste.append(rouges)
for nsucces in range(9):
        print(nsucces,liste.count(nsucces))

Pour simuler une variable aléatoire exponentielle de paramètre 0,5 on fait

from random import *
print(expovariate(0.5))

Et pour simuler une variable aléatoire normale de paramètres 25 et 3,5 on fait

from random import *
print(gauss(25,3.5))

Tortue

Pour dessiner un coquillage à motif hexagonal :

from turtle import *
def hexagone(cote):
        for etape in range(6):
                forward(cote)
                left(60)
for longueur in range(20):
        hexagone(10*longueur)
        left(18)

La recette du mouvement brownien est assez simple :

from turtle import *
from random import *
speed(0)
for pas in range(100):
        left(uniform(0,360))
        forward(5)

Utilitaire

D’autres utilitaires sont présentés ici :

Le script suivant affiche dans la console, l’état des variables, à chaque fois qu’on invoque la fonction voir() :

def voir():
    v = {k:v for k,v in globals().iteritems() if k[:2]!="__" and k!="voir"}
    print(v)
 

On peut l’utiliser par exemple de cette manière :

S = 0
for n in range(8):
    S = S+n
    voir()

Certes on pouvait avoir le même effet avec

S = 0
for n in range(8):
    S = S+n
    print(n,S)

et les variables sont automatiquement affichées dans l’onglet variables de Spyder. Mais cette variante dessine vraiment les boîtes avec les étiquettes collées dessus :

#! /usr/bin/python3
# -*- coding: utf-8 -*-
from graphviz import Digraph
def voir(nom="boite1",afficher=True):
        g = Digraph(format='png')
        v = {k:v for k,v in globals().iteritems() if k[:2]!="__" and k!="voir" and k!="Digraph"}
        for k in v:
                g.node(k,k,shape="note",style="filled",fillcolor="lightyellow")
                g.node(str(v[k]),str(v[k]),shape='box3d',style="filled",fillcolor="orange")
                g.edge(k,str(v[k]))
        g.render(nom,view=afficher)

Ce script engendre des dessins :

S = 0
for n in range(8):
        S = S+n
        voir("somme"+str(n),False)

Les dessins portent les noms somme0, somme1 etc et peuvent ensuite être assemblés pour faire un dessin animé.

Des outils similaires existent aussi ailleurs :


[1cet article contient des compte-rendus de TP utilisant cette fonctionnalité.


Commentaires

Navigation

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 11 octobre 2017, 14h-18h, campus du Tampon
- Mercredi 22 novembre 2017, 14h-18h, campus du Tampon
- Mercredi 7 février 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 7 mars 2018, 14h-18h, campus du Tampon
- Mercredi 4 avril 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 2 mai, 14h-18h, campus du Tampon
- Mardi 5 juin 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 6 juin, 14h-18h, campus du Tampon

Fête de la science

Du 13 au 18 novembre 2017.
Thème : « La recherche à l’heure du numérique »

Semaine des mathématiques

Du 26 au 31 mars 2018.
Thème : « Mathématiques et mouvement »


Brèves

Décès de Roger Mohr

mardi 27 juin

On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

dimanche 22 octobre 2017

Publication

772 Articles
Aucun album photo
133 Brèves
11 Sites Web
132 Auteurs

Visites

673 aujourd'hui
782 hier
2133142 depuis le début
35 visiteurs actuellement connectés