TP n°7 – Parcourir un labyrinthe ?

Un dernier TP qui met en œuvre ce qui a été vu en cours :

  • parcourir un labyrinthe en profondeur avec une pile,
  • parcourir un labyrinthe en largeur avec une file,
  • on utilise une liste de listes pour modéliser le labyrinthe,
  • à chaque étape on enregistre un fichier image au format ppm du labyrinthe avec le parcours colorié.

Bonne continuation et bon courage !

Le sujet en page 4 du TP n°6 :

Le corrigé est sur moodle.

J’ai enregistré une vidéo dans laquelle je vous accompagne pour réaliser le TP, chacun d’entre vous, à votre rythme. Elle est ci-dessous en cliquant sur « lire la suite ». Lire la suite

CI n°7 – TD – Parcourir un arbre ?

Un TD qui finalise bien notre travail :

  • une classe pour un arbre,
  • quelques classiques (parcours préfixe, hauteur) des arbres avec fonctions récursives,
  • les applications des piles et des files pour parcourir cet arbre en profondeur ou en largeur.

Le sujet :

Le corrigé est sur moodle.

J’ai enregistré une vidéo dans laquelle je vous accompagne pour réaliser le TD chacun d’entre vous, à votre rythme. Elle est ci-dessous en cliquant sur « lire la suite ». Lire la suite

CI n°6 – Application des files

Rappel préliminaire :

Quand on voudra implémenter des files , on importera les primitives déjà programmées avec

from tp4_C2 import *

On pourra alors utiliser ces quatre primitives :

ma_file = initialisation()
est_vide(ma_file)
enfiler(ma_file, valeur)
valeur = defiler(ma_file)

Les quatre pages développées aujourd’hui en pdf :

Dans le détail ?

Avec commentaires audio / vidéo, ci-dessous :

Lire la suite

CI n°5 – TD Mandelbrot

Un TD pour

  • réactiver la notion de classe
  • introduire la notion d’image pgm (avant les ppm)
  • avec une gestion de fichier par python

Le sujet :

Le fichier de départ :

class Complexe:
    pass

def somme_c(z1, z2):
    """
    z1 et z2 instances de Complexe
    renvoie une instance de Complexe égale à la somme dans C de z1 et z2
    """
    pass

def produit_c(z1, z2):
    """
    z1 et z2 instances de Complexe
    renvoie une instance de Complexe égale au produit dans C de z1 et z2
    """
    pass

def module(z):
    """
        z : une instance de Complexe
        Cette fonction renvoie un flottant : le module de z
    """
    pass

def cree_image_pgm(larg, haut, pixels, fichier):
    pass

def pixel_vers_Complexe(xp, yp, largeur, hauteur, xmin, xmax, ymin, ymax):
    pass

def terme_mandelbrot_suivant(zn, c):
    """
        c : le complexe où est calculé la valeur de la fract
        Préconditions : aucune
        zn: un complexe
        Cette fonction renvoie le terme suivant de la suite de Mandelbrot
    """
    pass

def entier_de_mandelbrot(c, barre):
    """Niveau de gris associé à un complxe

        c : un nombre complexe
        Préconditions : aucune
        Cette fonction calcule la valeur de la fractale de Mandelbrot à partir de z0
        La valeur de retour de cette fonction est un entier compris entre 0 et 255
    """
    pass

def cree_liste_pixels(xmin, xmax, ymin, ymax, largeur, hauteur, barre):
    pass

largeur = 1300
hauteur = 1000

xmin = -2
xmax = 0.6
ymin = -1
ymax = 1
barre = 2

fichier = "mandelbrot.pgm"
liste = cree_liste_pixels(xmin, xmax, ymin, ymax, largeur, hauteur, barre)
cree_image_pgm(largeur, hauteur, liste, fichier)

mandelbrot avec repère min max

Le corrigé est sur moodle.

J’ai enregistré une vidéo à la demande de certain.e.s étudiant.e.s. C’est maladroit et « à l’arrache », mieux au début qu’à la fin, et c’est ci-dessous… Lire la suite

CI n°4 – Application des piles

Rappel préliminaire :

Quand on voudra implémenter des piles , on importera les primitives déjà programmées avec

from tp4_C1 import *

On pourra alors utiliser ces quatre primitives :

pile = initialisation()
est_vide(pile)
empiler(pile, valeur)
valeur = depiler(pile)

Les quatre pages développées aujourd’hui en pdf :

2020-04-27 CI application des piles 01 intro et exemples généralistes2020-04-27 CI application des piles 02 évaluation d'expression - parenthésage2020-04-27 CI application des piles 03 une pile pour le parenthésage2020-04-27 CI application des piles 04 évaluation expression arithmétique généralités
Les étapes présentées pour l’évaluation de cette expression arithmétique préfixée dans l’audio, qu’on vous incite fortement à faire vous-même à la main :
2020-04-27 CI application des piles 04 bis détail calcul expression préfixée
2020-04-27 CI application des piles 05 NPI intro et pas à pas
Les étapes présentées pour l’évaluation de cette expression arithmétique postfixée (ou en NPI) dans l’audio, qu’on vous incite fortement à faire vous-même à la main :
2020-04-27 CI application des piles 05 bis détail calcul expression postfixée
2020-04-27 CI application des piles 06 NPI une pile est une bonne solution

Ici s’arrête le programme de révision pour le TP noté du 5 mai.

Les exemples qui suivent seront développés plus tard et seront à travailler pour l’évaluation finale.

2020-04-27 CI application des piles 08 parcours arbre pile2020-04-27 CI application des piles 09 intro parcours labyrinthe pile2020-04-27 CI application des piles 10 gif parcours labyrinthe pile2020-04-27 CI application des piles 11 parcours labyrinthe pile

CI n°3 – Tableaux, listes chaînées, listes – Piles et files

Bienvenue dans ce troisième CI… Très abstrait, que les TPs devraient éclaircir !

Le pdf complet des chapitres 4 et 5 :

Chapitre 4 : Tableaux et listes chaînées, listes de python

cm 2020-04-06 CI3 01cm 2020-04-06 CI3 02cm 2020-04-06 CI3 03cm 2020-04-06 CI3 04cm 2020-04-06 CI3 05

Chapitre 5 : Piles et files et leurs primitives … à implémenter de trois manières

cm 2020-04-06 CI3 06cm 2020-04-06 CI3 07cm 2020-04-06 CI3 08cm 2020-04-06 CI3 09cm 2020-04-06 CI3 10cm 2020-04-06 CI3 11cm 2020-04-06 CI3 12cm 2020-04-06 CI3 13

Un essai vidéo, c’est pas le top, mais on fait ce qu’on peut…

cm 2020-04-06 CI3 14cm 2020-04-06 CI3 15cm 2020-04-06 CI3 16cm 2020-04-06 CI3 17cm 2020-04-06 CI3 18cm 2020-04-06 CI3 19

CI n°2 – se créer ses propres objets

Bonjour ! Et bienvenue dans cette deuxième semaine.

Le support du jour :


ch3-1-tout-est-objetch3-2-creer-son-propre-objetch3-3-1-creer-une-classech3-3-2-pas-compris-instancech3-3-4-c-est-qui-ce-self-1ch3-3-4-c-est-qui-ce-self-2ch3-4-1ch3-4-2ch3-5


Les exemples du cours et l’autre exemple développé en deuxième partie de cours :

class MaPremiereClasse:
        
    def __init__(self):
        print("constructeur de la classe MaPremierClasse")
        self.nombre = 42     # ajout de l’attribut nombre
        self.nom = "John"

# truc = MaPremiereClasse()

class Etudiant :
    """Cette classe permet de stocker des informations sur un.e etudiant.e

    Un.e etudiant.e est ici caracterise.e par :
    −> ses nom et prenom
    −> son age
    −> son numero d’etudiant.e
    −> son cursus """

    def __init__(self, prenom, nom, age, numero, cursus):
        """Constructeur de notre classe """
        self.nom = nom
        self.prenom = prenom
        self.age = age
        self.numero = numero
        self.cursus = cursus

from math import sqrt

class NombreComplexe:
    """Une classe exemple meme s’il existe un type complex"""

    def __init__(self, a, b):
        self.re = a
        self.im = b
        self.module = sqrt(a ** 2 + b ** 2)

class Personne:
    """Quelqu'un sur l'arbre généalogique

    Une personne, son genre, ses enfants, ses parents"""

    def __init__(self, prenom, nom, age, genre,
                 conj = None, enfants = None, parents = None):
        """Constructeur"""
        self.prenom = prenom
        self.nom = nom
        self.age = age
        self.genre = genre
        self.conj = conj
        if enfants is None:
            self.enfants = []
        else :
            self.enfants = enfants
        if parents is None:
            self.parents = []
        else :
            self.parents = parents
        
        
def affiche(p):
    print("\n", p.prenom, p.nom, "a", p.age, "ans")
    if p.conj is not None:
        print("En couple avec", p.conj.prenom, p.conj.nom)
    if len(p.enfants) > 0:
        print("Enfants :", end = '')
        for e in p.enfants:
            print(e.prenom, end = '\t')
        print()
    if len(p.parents) > 0:
        print("Parents :", end = '')
        for e in p.parents:
            print(e.prenom, end = '\t')
        print()

Et le shell correspondant

>>> moi = Personne("Christophe", "Marchant", 46, "masculin")
>>> moi.conj = Personne("Barbara", "Marchant", 37, "féminin")
>>> affiche(moi)

 Christophe Marchant a 46 ans
En couple avec Barbara Marchant
>>> affiche(moi.conj)

 Barbara Marchant a 37 ans
>>> moi.conj.conj
>>> moi.conj.conj = moi
>>> affiche(moi.conj)

 Barbara Marchant a 37 ans
En couple avec Christophe Marchant
>>> papa = Personne("Jean-Pierre", "Marchant", 73, "masculin")
>>> 
>>> maman = Personne("Nicole", "Marchant", 72, "feminin", papa)
>>> papa.conj = maman
>>> moi.parents
[]
>>> moi.parents =[maman, papa]
>>> affiche(moi)

 Christophe Marchant a 46 ans
En couple avec Barbara Marchant
Parents :Nicole	Jean-Pierre	
>>> papa.enfants += [moi]
>>> maman.enfants = papa.enfants
>>> papa.enfants += [Personne("Pierre", "Marchant", 49, "masculin", None, None, [papa, maman])]
>>> maman.enfants
>>> maman.enfants += [Personne("Marie", "Marvalin", 41, "féminin", None, None, [papa, maman])]
>>> affiche(moi)

 Christophe Marchant a 46 ans
En couple avec Barbara Marchant
Parents :Nicole	Jean-Pierre	
>>> affiche(papa)

 Jean-Pierre Marchant a 73 ans
En couple avec Nicole Marchant
Enfants :Christophe	Pierre	Marie	
>>> affiche(moi.conj)

 Barbara Marchant a 37 ans
En couple avec Christophe Marchant
		
>>> def fratrie(p):
	liste = []
	for e in p.parents:
		for k in e.enfants:
			if k not in liste and k is not p :
				liste += [k]
	return liste

>>> fratrie(moi)
[, ]
>>> for buddy in fratrie(moi):
	print(buddy.prenom, buddy.nom)

	
Pierre Marchant
Marie Marvalin

 

 

 

CI n°1 (#1) – Accueil, réviser et bonnes pratiques

Bonjour et bienvenue aux étudiants pour ce cours

« algorithmique et programmation, structures de données »

pour les étudiants de l’unistra en L1S2 de printemps 2020, fac de maths-info, parcours « maths »


Temps de lecture / écoute estimé : 15 minutes

Temps de travail après écoute : au moins 15 minutes


cm 2020-03-23 CI1-01

cm 2020-03-23 CI1-02cm 2020-03-23 CI1-03cm 2020-03-23 CI1-04cm 2020-03-23 CI1-05

Voilà, je vous laisse chercher.

cm 2020-03-23 CI1-06cm 2020-03-23 CI1-07

Ce cours sera complété avec commentaires audio d’ici lundi fin de matinée, ce qui vous laissera le temps d’en prendre connaissance d’ici le salon de discussion programmé à 14h30.

 Les corrections et la suite, ici.

CI n°1 (#2) réviser et bonnes pratiques

Suite du CI n°1 (#1)

L1S2 (maths) – Algo prog – UFR Maths-Info Strasbourg


Temps de lecture / écoute estimé : 30 minutes


🙂 Rassurez-vous ! Ça va bien se passer ! 💡 Si vous êtes assidu.e.s et si vous vous investissez en TP !

  • Le support de cours est disponible sur moodle.

  • Salon de discussion sur ce CI avec l’application discord ce lundi à partir de 14h30. Explications sur moodle.


On suppose que vous ayez « joué le jeu » et essayé de répondre à la consigne donnée précédemment :

On veut implémenter en python un petit programme de résolution des équations du second degré.

En entrée on attend donc a \text{, }b \text{ et } c trois réels avec a \neq 0 et le programme qu’on veut implémenter doit renvoyer l’unique solution ou un tuple de solutions réelles de (E):ax^2+bx+c=0 ou indiquer le cas échéant (dans un premier temps) que (E) n’admet pas de solutions réelles.

cm 2020-03-23 CI1-08

En cliquant sur « lire la suite » en fin de cet article, vous pourrez copier/coller le code que je présente ici dans cette vidéo.

😳 Excusez les hésitations et autres balbutiements ! 🙄

Je ne suis pas un « influenceur » youtube et j’essaie de faire au mieux en cette période compliquée !

cm 2020-03-23 CI1-10

RESTART: /home/.../UFR Maths/2020-L1S2-AlgoProg2-Python'...
Printemps/.../cm 2020-03-23 ex cours delta et racines.py

Ce programme propose de resoudre dans IR ax^2 + bx + c = 0

Saisissez a (non nul) : 1
Saisissez b : 1
Saisissez c : 1
Solution(s) eventuelle(s) :
	 pas de solution reelle !
>>> help(racines)
Help on function racines in module __main__:

racines(a, b, c)
    resolution de l'equation

    attend a, b, c , a non nul
    teste suivant la valeur du discriminant
    s'il y a des racines
    et les renvoie alors

>>> help(discriminant)
Help on function discriminant in module __main__:

discriminant(a, b, c)
    attend trois reels a, b, c, calcule le discriminant et le renvoie

>>>

cm 2020-03-23 CI1-11

❗ ➡ Attention : le soucis de documentation sera évalué lors des TPs et des contrôles.

cm 2020-03-23 CI1-12cm 2020-03-23 CI1-13cm 2020-03-23 CI1-14cm 2020-03-23 CI1-15cm 2020-03-23 CI1-16cm 2020-03-23 CI1-17

🙂 Rassurez-vous ! Ça va bien se passer ! 💡 Si vous êtes assidu.e.s et si vous vous investissez en TP !

  • Le support de cours est disponible sur moodle.
  • Salon de discussion sur ce CI avec l’application discord ce lundi à partir de 14h30. Explications sur moodle.
  • TPs ce jeudi via discord
    • groupes 5a et 5b à 13h30,
    • groupes 6a et 6b à 15h30.
    • Connectez-vous dans le bon salon de discussion, correspondant à votre groupe de TP.

Lire la suite