Aller au contenu

Activités sur les paradigmes de programmation

Programmation fonctionnelle⚓︎

Complète la fonction suivante qui renvoie True si n est pair False sinon.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013oP;f lkg:bry2a1htvw=ue(Sn_s-c)%im/p0d050L0w0r0o0G0g0B0f0D0g0o0B0B0u010r0G0J010406050B0v0H0H0o0l0m040y0b0g0v0$0b0z050I0-0/0;0?0+0J0405160 190I160+0L0G0s0U0W0Y0!0W0z0i0v0o0i0w0C0J0m0r0q0}0f0q0G0i0q0g1B0q0r0)050P0k0g0w1i0X0Z011A1C1E1C0r1K1M1I0r0l171w0U0_0B0J0o0z0!0n011O1k010e0R0w0z0o0H0w1I1*1,1;1Q1@1M1`1|0)0a0f0c0l0b0J0b0B0G0|0z0f0N1(0l0l0w0D2h0 1 0z170I1w2u1!1$1#1J0L211l0G0z1_2e1I1f1h0V1P2E2G0z0b2K1I0J2n172s2u2X0,1+2i2M1=2Q0l0:0g1I0o1z2n0e0!030A0A0D2R0w1E2P0b0C0K0C0p0)0p0 0o2Y2#0*2!202%1Q2)2+2-2/0w2;012?2^2`2|2H2 0C1/040n35371,2u2U0w2u2K2x0L1$2C3c0!2_0N2J1g173z2W382r3Q3J3A3a2i0G0L0!2@2s3q32172.3X3Z3m0N3o2Q3$1:250w3+3T3.2~303%3v3V2D010h0)0N0e3R3x3~3H010t0)0f452t471j3d0e0)0w0B0r0A1+0G0l4d3P3b4g0!0(040x4r4f2N010z0)0~103Q2s3 4w0j4r4c4I480z0k0)2F0r4z4O4u014w0E4V2#3 0b0)0C020i0r0d4M4A2(4R040k0b0_4#4t4B4K4r0+4G464I3*013!2#3q3s053)3Y543,2{2F3p301/0f3=3@3n5f3/5h1I0I360f5t4N4$4841042n0r0v0l4F2X5v4{2(4E4/4W4B4(040F5K5w4X0H0G0)3u502t5G2$4X5N0u0u5Q5H1Q5T0)0K4~4z0I3T3y2V0 3C0 0r3E5`2A2v0o1L3U0I3C4 0N0P0R0B04.

Ensuite écris la fonction prend_si qui retourne tous les éléments d'une liste vérifiant la condition. Teste ta fonction avec prend_si([1,3,4,5,6,8,9,10], est_pair)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013oP;f 8lkg5:,bry2a1éh3tvwT=u6e[(ESn9]x_s-c)7imR/4p0d050Z0D0w0r0S0h0N0f0P0h0r0N0N0A010w0S0X010406050N0B0T0T0r0o0p040H0b0h0B0@0b0I050V0~1012140|0X04051k1d1n0V1k0|0Z0S0x0,0.0:0=0.0I0j0B0r0j0D0O0X0p0w0u1b0f0u0S0j0u0h1P0u0w0`050%0n0h0D1w0/0;011O1Q1S1Q0w1Y1!1W0w0o1l1K0,170N0X0r0I0=0q011$1y010e0)0D0I0r0T0D1W1{1}221(251!282a0`0a0f0c0o0b0X0b0N0S1a0I0f0#1_0o0o0D0P2v1d2d0I1l0V1K2I1=1@1?1X0Z2f1z0S0I272s1W1t1v0-1%2S2U0I0b2Y1W0X2B1l2G2I2/0}1|2w2!232(0o110h1W0r1N2B0e0=030M0M0P2)0D1S2%0b0O0s3d0`0s1d0r2:2?0{2=2e2^1(2`2|2~300D32013436383a2V3d0O20040q3i3k1}3m2G2R013r0r2}1l2 0u313335370#3B2(3D0v0`0v3I2F3l0|3M3p0=3P3R053T3V3x3X3A2T3C3e0W0`0W3*1e3,3n2@1x3q0b2{3Q3t3U3v3W3z3Z3|3#3e0k0`0k422/3-2?3N3;4c3^3y3Y394i3c3e0C0`0C4o443.473:493s3S3u3w4w3{3b3D0R0`0R4F3K4q3o4I3O4K4b4M4d4O3`4h4R3e0g0`0g4W2H1o2-1d2Y2L0Z1@2Q3/014x2X1u1l2,0D2.3l3+3K054x572e0S0Z0=352G3D0s3t5f5h4g4y4-3f0f2j0D5o4x3!4A3f2I3j453N0i0`0#0e594?4H2#010y0`0f5J5d465M0I0e0`550I0Z0M2t5R5D4 0_040F5%5L2_0`1S0N0w0D5-4r5)0`0l5^4Z5U0n5:0S5=5}5T235*0m5R5Q5.3q0`375Z2u0S1b643N5*0Q6j4 0b0`0O020j0w0d695(4!0I60045;0w6n4!5*5|434X6j5n015i2?3D3F3?0f6L4+5q3}3E215u5w4Q6W6Q0V5C6b0=5O040f6.5Q6I5K5_4!0N0Z0`006{5R0|6;5S6S5g6M5#6O3e3%4M6T5p5y3$6Y295v735x4z7c5B704 6^5P6/0U0$0b0B0o2U0f0.7w625?2x0D0+0t0h0t2a0I0w0+390w7B7y5=1#5?0*1_6f2v0F7L0Q0f7C7M0z0o0B5@6 6~2;3M795j3~5m726U7b7:5t7e6!4,6W3 7k6x5M7n6-6/0G0L0D0T0X1!6}6K7=741}3D4l788d7h5r4l7_2a7{6V4j0O8h3*6*01826/0f6s6u8A0d8C5Y5!2t0F0E0s0m0v0m0W0m0k0m0C0m0g0m0J0m0s0Y0K0m7Z5=0M1|0S0o6m7*8c5o7/0O4C8i8p7@8;7d8o7g6#8r8=8u6?816_836.0E8O8S8U8Y0K8b6 5D7.750O4T8?8|7|8r4T8n7f7?7i3e9i905~238x6/6{009c7,4r9f8f4.7;8@9r0O4/9o9I5r4/7k8y80235F042B0w7t1c6 6a91660`0E6w8v0I0`7)2/9#9v1(9U0e499*9$6c049.3l9:651(0b6,2T9_9;3:617Pa5a00=9U0S5I9!9S9{6e1t2E9d8v5*5,am9`a79|6E5M6l9b8-9d0V5c4@564_531d0w4|aG2O2J0r1ZaD0V4`6~0#0%0)0N04.

POO⚓︎

Soit la classe Personnage suivante :

Python
1
2
3
4
5
6
7
class Personnage:
    def __init__(self, nbreDeVie):
        self.vie=nbreDeVie
    def donneEtat (self):
        return self.vie
    def perdVie (self,nbPoint):
        self.vie=self.vie-nbPoint
Ajoutez une méthode soigne qui permettra d'augmenter l'attribut vie d'une valeur nbr (nbr sera un paramètre de la méthode soigne).

Testez cette méthode en saisissant dans la console Python les instructions suivantes (les unes après les autres) :

  • toto = Personnage(15)

  • toto.donneEtat()

  • toto.perdVie(2)

  • toto.soigne(3)

  • toto.donneEtat()

activité 2 POO⚓︎

Écrivez une classe Voiture qui aura un attribut vitesse et 3 méthodes :

  • une mĂ©thode accelere qui permettra d'incrĂ©menter l'attribut vitesse d'une unitĂ©
  • une mĂ©thode freine qui permettra de diminuer la vitesse
  • une mĂ©thode getVitesse qui renverra la valeur de la vitesse

activité 3 POO⚓︎

À partir de la classe créée à l'activité 2 POO, écrivez un programme qui permettra d'atteindre la vitesse de 3 km/h, d'afficher cette vitesse dans la console puis de freiner jusqu'à l'arrêt complet du véhicule.

activité 4⚓︎

Cette activité porte sur le problème des Tours de Hanoi. Voici un extrait de l'article Wikipédia consacré aux Tours de Hanoi (https://fr.wikipedia.org/wiki/Tours_de_Hano%C3%AF) :

Les tours de Hanoï (originellement, la tour d'Hanoïa) sont un jeu de réflexion imaginé par le mathématicien français Édouard Lucas, et consistant à déplacer des disques de diamètres différents d'une tour de « départ » à une tour d'« arrivée » en passant par une tour « intermédiaire », et ceci en un minimum de coups, tout en respectant les règles suivantes :

  • on ne peut dĂ©placer plus d'un disque Ă  la fois ;
  • on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.

On suppose que cette dernière règle est également respectée dans la configuration de départ.

Dans la suite de cette activité nous allons utiliser la classe Tour donnée ci-dessous :

Python
class Tour:
    def __init__(self, nom, n = 0):
        self.s=[]
        self.nom = nom
        for i in range (n, 0, -1):
            self.s.append(i)
    def empile(self, d):
        assert len(self.s) == 0 or self.s[-1] > d, 'Mouvement interdit'
        self.s.append(d)
        print(f"Ajout du disque {d} sur la tour ", self.nom)

    def depile(self):
        assert len(self.s) != 0, 'Impossible, la tour est vide'
        d = self.s.pop()
        print(f"Retire le disque {d} de la tour ",self.nom)
        return d

    def affiche(self):
        if len(self.s)==0:
            print(f"la tour {self.nom} est vide")
        else :
            print (f"Tour {self.nom}")
            for d in reversed(self.s):
                print("| ",d," |")
1-⚓︎

Après avoir étudié attentivement la classe Tour, écrivez les instructions Python permettant de créer 3 instances de la classe Tour (une instance permettant de modéliser une tour du jeu). Une tour sera créée avec 2 disques (cette tour sera nommée "A"), les 2 autres tours seront au départ vide (tour "B" et tour "C"). On notera que chaque disque est identifié par un entier (cet entier représente le diamètre du disque correspondant).

2-⚓︎

Écrivez une fonction mouvement, cette fonction prendra 2 paramètres t1 et t2, tous les deux de type Tour (instance de Tour). Le but de cette fonction est de permettre le passage d'un disque de la tour t1 vers la tour t2.

3-⚓︎

Écrivez la suite d'instructions permettant de résoudre le jeu avec 2 disques (la tour "A" sera la tour de "départ", la tour "B" sera la tour "intermédiaire" et la tour "C" sera la tour "arrivée"). Vous vérifierez votre réponse en affichant le contenu de la tour "C" après l'exécution de votre programme.

4-⚓︎

Écrivez une fonction récursive resoudre permettant de résoudre le jeu "Tours de Hanoi" dans tous les cas (avec n disques). Cette fonction prendra 4 paramètres : un entier représentant le nombre de disques et trois instances de la classe Tour (représentant la tour "départ", la tour "arrivée" et la tour "intermédiaire").

Deux conseils :

  • rĂ©flĂ©chissez bien au cas de base de votre fonction rĂ©cursive
  • inspirez-vous de ce que vous avez fait dans la question 3