moyen
Diverses files
Un exercice : deux versions
Cet exercice sur les files est proposé en deux versions :
On s'intéresse sur cette page au type abstrait de données « File » que l'on munit des fonctions primitives suivantes :
cree_file_vide () : crée et renvoie une file vide ;
est_vide ( f ) : renvoie le booléen indiquant si la file f passée en paramètre est vide ou non ;
enfile ( f , x ) : enfile la valeur x à la queue de la file f ;
defile ( f ) : défile et renvoie la valeur à la tête de la file f . Provoque une erreur si la file est vide.
Ces diverses fonctions sont déjà chargées.
Les lignes ci-dessous présentent un exemple d'utilisation. On prendra soin, dans les différents exercices, de n'utiliser que les fonctions présentées ci-dessous .
Utilisation
>>> f = cree_file_vide () # création d'une file vide
>>> est_vide ( f ) # la file est-elle vide ? -> Oui
True
>>> enfile ( f , 0 ) # enfile 0 dans la file
>>> est_vide ( f ) # la file est-elle vide ? -> Non
False
>>> enfile ( f , 1 ) # enfile 1 dans la file
>>> f # affichage du contenu de f
1 | 0 <- tête
>>> defile ( f ) # défile une valeur
1
>>> f
1 <- tête
>>> q = cree_file_vide ()
>>> enfile ( q , 1 )
>>> q
1 <- tête
>>> f == q # les files f et q sont-elles égales ? -> Oui
True
Les exercices ci-dessous sont indépendants. Ils sont néanmoins présentés dans un certain ordre permettant d'aborder successivement plusieurs techniques.
Jouons le jeu !
Disons-le dès maintenant : les files mises en œuvre ici utilisent la classe deque du module collections et peuvent donc subir toutes les opérations classiques applicables à ces objets.
Toutefois , ces exercices visent à utiliser certaines techniques classiques liées aux files. Il est donc demandé de les traiter en se limitant à l'utilisation des fonctions primitives présentées .
1. Calculer la taille d'une file
Écrire la fonction taille qui prend en paramètre une file et renvoie son nombre d'éléments.
A l'issue du traitement, la file doit avoir retrouvé son état initial.
>>> f = cree_file_vide ()
>>> taille ( f )
0
>>> enfile ( f , "a" )
>>> enfile ( f , "b" )
>>> taille ( f )
2
Aide
On pourra utiliser un compteur et une file annexe.
Version vide Version à trous
.1280135tf4)+2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050Q0D0c0m0p0A0l0o0F0A0m0l0l0E010c0p0y010406050l0q0u0u0m0i0G040M0n0A0q0,0n0z050N0?0^0`0|0;0y04151c051f0N1f1h1c0;0Q0p0I0!0$0(0*0C0p0r0C0A1v0C0c0/050V0O0A0D1q0%0)011u1w1y1w0c1E1G1C0c0O0n0Q0|1D0i1d0c0C0!0 0l0y0m0z0*0h011I1s010d0X0D0z0m0u0D1C1*1,1;1K1@1G1`1|0/0a0o0w0i0n0y0n0l0p120z0o0T1(0i0i0D0F2h151 0z1d0N1$2u0c1!1Z1#0Q210*1y0z1_2e1C1n1p0#1J2E0p2G0z1W1o1C0y2n1d2s2u2Y0=1+2i2M1=2R0i0_0A0/0v2r2$0:2#202(1K2*2,0/0h2:1,2=2s2D012`0m2-040j2~2t0;312^0*34360e39302$323f0/0b3i3b3k3d330n2+350/0x3p2?2%1r2_3u2{040B3z3c3C3e3E3w040t3I3r3K3t3v360J3i1e2W152K2x0Q2B320F1W1}1d3#1g3Z2!162;053*0T2X3R2N010R0/0T0d3X3J3|0L0/0o423{2)0d0/0V0X1G482@3S0.040K4g3B3|0z0/413=2 3A324j0f0H3p0o4A47432)0/0r3i4C491K0n0/0E4H4u3s4p040F2n0D0P234V0I0p0T4m4v0/0K0f4z4B4P3S4R0c4O4D4K4M4;4J0*0u0p0/0s4+4A4-3|3~040L1u4f4s2t4I4h3|0n45042R4:58045a4n4E040D0l0c0P4Z4#5i511=4j4l5u4=3e4q4$3s4w4y5i064B5J5k3l4c4^5b1=4L040g4N5i5L3s4{2.4 5K5v2_0/1_4X5D4i4(5+4o4F5.5w0/0k5O5l5%04401^5;1K5x5~5B044r2!5A014w4*5H5J5$0*53555}5V6c015d0/5g5^5M5n5p5r4!0D61675-5z4_335:6x5P5 0/4x5!6b664R5)6g656y606B5_62643?664j5@6h6I3 0D5*6P4%4k6u4R4G6$5E6E692Y5I4,66532n0c0q0i146X6y4/3z0N3^0D2u2V733!1o3$2x2z2v1V1X2x0m1F760N3#0;7j0U0W0Y04.
.1280135tf4)+2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050Q0D0c0m0p0A0l0o0F0A0m0l0l0E010c0p0y010406050l0q0u0u0m0i0G040M0n0A0q0,0n0z050N0?0^0`0|0;0y04151c051f0N1f1h1c0;0Q0p0I0!0$0(0*0C0p0r0C0A1v0C0c0/050V0O0A0D1q0%0)011u1w1y1w0c1E1G1C0c0O0n0Q0|1D0i1d0c0C0!0 0l0y0m0z0*0h011I1s010d0X0D0z0m0u0D1C1*1,1;1K1@1G1`1|0/0a0o0w0i0n0y0n0l0p120z0o0T1(0i0i0D0F2h151 0z1d0N1$2u0c1!1Z1#0Q210*1y0z1_2e1C1n1p0#1J2E0p2G0z1W1o1C0y2n1d2s2u2Y0=1+2i2M1=2R0i0_0A0/0v2r2$0:2#202(1K2*2,0/0h2:1,2=2s2D012`0m2-040j2~2t0;312^0*34360e39302$323f0/0b3i3b3k3d330n2+350/0x3p2?2%1r2_3u2{040B3z3c3C3e3E3w040t3I3r3K3t3v360J3i1e2W152K2x0Q2B320F1W1}1d3#1g3Z2!162;053*0T2X3R2N010R0/0T0d3X3J3|0L0/0o423{2)0d0/0V0X1G482@3S0.040K4g3B3|0z0/413=2 3A324j0f0H3p0o4A47432)0/0r3i4C491K0n0/0E4H4u3s4p040F2n0D0P234V0I0p0T4m4v0/0K0f4z4B4P3S4R0c4O4D4K4M4;4J0*0u0p0/0s4+4A4-3|3~040L1u4f4s2t4I4h3|0n45042R4:58045a4n4E040D0l0c0P4Z4#5i511=4j4l5u4=3e4q4$3s4w4y5i064B5J5k3l4c4^5b1=4L040g4N5i5L3s4{2.4 5K5v2_0/1_4X5D4i4(5+4o4F5.5w0/0k5O5l5%04401^5;1K5x5~5B044r2!5A014w4*5H5J5$0*53555}5V6c015d0/5g5^5M5n5p5r4!0D61675-5z4_335:6x5P5 0/4x5!6b664R5)6g656y606B5_62643?664j5@6h6I3 0D5*6P4%4k6u4R4G6$5E6E692Y5I4,66532n0c0q0i146X6y4/3z0N3^0D2u2V733!1o3$2x2z2v1V1X2x0m1F760N3#0;7j0U0W0Y04.
2. Échanger les deux valeurs de tête
Écrire la fonction echange qui prend en paramètre une file contenant au moins deux éléments et échange l'ordre des deux valeurs de tête.
La fonction ne renvoie rien, c'est la liste passée en paramètre qui est modifiée à la fin du traitement. On dit qu'elle est modifiée en place .
>>> f = cree_file_vide ()
>>> enfile ( f , "a" )
>>> enfile ( f , "b" )
>>> enfile ( f , "c" )
>>> f
c | b | a <- tête
>>> echange ( f )
>>> f
c | a | b <- tête
Version vide Version à trous
.1280135tf4)2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050P0C0c0l0o0z0k0n0E0z0l0k0k0D010c0o0x010406050k0p0t0t0l0h0F040L0m0z0p0+0m0y050M0=0@0_0{0:0x04141b051e0M1e1g1b0:0P0o0H0Z0#0%0)0B0o0q0B0z1u0B0c0.050U0N0z0C1p0$0(011t1v1x1v0c1D1F1B0c0N0m0P0{1C0h1c0c0B0Z0~0k0x0l0y0)0g011H1r010d0W0C0y0l0t0C1B1)1+1:1J1?1F1_1{0.0a0n0v0h0m0x0m0k0o110y0n0S1%0h0h0C0E2g141~0y1c0M1#2t0c1Z1Y1!0P200)1x0y1^2d1B1m1o0!1I2D0o2F0y1V1n1B0x2m1c2r2t2X0;1*2h2L1;2Q0h0^0z0.0n0u2q2#0/2!1 2%1J2)2+2-0g2:1+2=2r2C012`0l2,040n0i2~2s0:312^0)34360n0e3a302#323g2-0b3k3c3m3e330m2*352-0w3r2?2$1q2_3w2{370A3B3d3E3f3G3y370s3K3t3M3v3x3h0I3S2@3U3o040u0r3k1d2V142J2w0P2A320E1V1|1c3.1f3,2Z152;053?0S2W3T2M010Q0.0S0d3*3L450K2-4b442(0d0.2n0B1+0q0C4g3!450-040J4q3D450y0.4a3~2 3C324t0f0G3r0n4K0n4E3u4z040C0z0c0O2/4C2s4M4c1;0m0.0D3k4Y4h2_480C224p4W434r1;4t4v4:4N3#4A4w4F0.0f4J4L4`4y4k4S0O2}4:4)4=1J4#044%59532(4,4.4}3u4@5l4{044B2Z4Z1J4G514K5h4+040q4(5y0)5d5f2X5a4x5i040E2m0C0O4.0O0H0o0S5o4s0.0J504:064L5I3247040K1t1F5C5t5E4e042Q0c5.4*3f4k0k4T5S5U4_5/015n605_334|645b0)4G4I5!5$5$5D664Q0y5k685J5u5X5V5K5B6l4~040j5^696h491@6p6n4u6B5`5q6E624 5Z2X5#52614P1^6k5s65636S6x4P5r3 614t6v5g6O554T586V6m6a4 5w5%4O4k6j6A6s5m6o6_5p6Y4D6!0.6$5H6g6P564V6,6t6K2;6M5x615)5+6^73610m5;5?6w6-6h0C5|5R5T4/786`6D6|545A6H6b6:6f6(6i6R6Z6T6{7v6}7B717n3n5j7h7I6x6U7T7o4P6r7L5W040f7a2 0:0M410C2t2U7-3-1n3/2w2y2u1U1W2w0l1E7:0M3.7*0S0U0W0k04.
.1280135tf4)2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050P0C0c0l0o0z0k0n0E0z0l0k0k0D010c0o0x010406050k0p0t0t0l0h0F040L0m0z0p0+0m0y050M0=0@0_0{0:0x04141b051e0M1e1g1b0:0P0o0H0Z0#0%0)0B0o0q0B0z1u0B0c0.050U0N0z0C1p0$0(011t1v1x1v0c1D1F1B0c0N0m0P0{1C0h1c0c0B0Z0~0k0x0l0y0)0g011H1r010d0W0C0y0l0t0C1B1)1+1:1J1?1F1_1{0.0a0n0v0h0m0x0m0k0o110y0n0S1%0h0h0C0E2g141~0y1c0M1#2t0c1Z1Y1!0P200)1x0y1^2d1B1m1o0!1I2D0o2F0y1V1n1B0x2m1c2r2t2X0;1*2h2L1;2Q0h0^0z0.0n0u2q2#0/2!1 2%1J2)2+2-0g2:1+2=2r2C012`0l2,040n0i2~2s0:312^0)34360n0e3a302#323g2-0b3k3c3m3e330m2*352-0w3r2?2$1q2_3w2{370A3B3d3E3f3G3y370s3K3t3M3v3x3h0I3S2@3U3o040u0r3k1d2V142J2w0P2A320E1V1|1c3.1f3,2Z152;053?0S2W3T2M010Q0.0S0d3*3L450K2-4b442(0d0.2n0B1+0q0C4g3!450-040J4q3D450y0.4a3~2 3C324t0f0G3r0n4K0n4E3u4z040C0z0c0O2/4C2s4M4c1;0m0.0D3k4Y4h2_480C224p4W434r1;4t4v4:4N3#4A4w4F0.0f4J4L4`4y4k4S0O2}4:4)4=1J4#044%59532(4,4.4}3u4@5l4{044B2Z4Z1J4G514K5h4+040q4(5y0)5d5f2X5a4x5i040E2m0C0O4.0O0H0o0S5o4s0.0J504:064L5I3247040K1t1F5C5t5E4e042Q0c5.4*3f4k0k4T5S5U4_5/015n605_334|645b0)4G4I5!5$5$5D664Q0y5k685J5u5X5V5K5B6l4~040j5^696h491@6p6n4u6B5`5q6E624 5Z2X5#52614P1^6k5s65636S6x4P5r3 614t6v5g6O554T586V6m6a4 5w5%4O4k6j6A6s5m6o6_5p6Y4D6!0.6$5H6g6P564V6,6t6K2;6M5x615)5+6^73610m5;5?6w6-6h0C5|5R5T4/786`6D6|545A6H6b6:6f6(6i6R6Z6T6{7v6}7B717n3n5j7h7I6x6U7T7o4P6r7L5W040f7a2 0:0M410C2t2U7-3-1n3/2w2y2u1U1W2w0l1E7:0M3.7*0S0U0W0k04.
3. Récupérer la dernière valeur de la file
Écrire la fonction dernier qui prend en paramètre une file contenant au moins un élément et renvoie la valeur de l'élément en queue de file.
À l'issue du traitement, la file doit avoir retrouvé son état initial.
>>> f = cree_file_vide ()
>>> enfile ( f , "a" )
>>> enfile ( f , "b" )
>>> enfile ( f , "c" )
>>> f
c | b | a <- tête
>>> dernier ( f )
'c'
>>> f
c | b | a <- tête
Aide
On pourra défiler un élément avant de rentrer dans la boucle classique.
Version vide Version à trous
.1280135tf4)2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050P0C0c0l0o0z0k0n0E0z0l0k0k0D010c0o0x010406050k0p0t0t0l0h0F040L0m0z0p0+0m0y050M0=0@0_0{0:0x04141b051e0M1e1g1b0:0P0o0H0Z0#0%0)0B0o0q0B0z1u0B0c0.050U0N0z0C1p0$0(011t1v1x1v0c1D1F1B0c0N0m0P0{1C0h1c0c0B0Z0~0k0x0l0y0)0g011H1r010d0W0C0y0l0t0C1B1)1+1:1J1?1F1_1{0.0a0n0v0h0m0x0m0k0o110y0n0S1%0h0h0C0E2g141~0y1c0M1#2t0c1Z1Y1!0P200)1x0y1^2d1B1m1o0!1I2D0o2F0y1V1n1B0x2m1c2r2t2X0;1*2h2L1;2Q0h0^0z0.0n0u2q2#0/2!1 2%1J2)2+2-0g2:1+2=2r2C012`0l2,040n0i2~2s0:312^0)34360n0e3a302#323g2-0b3k3c3m3e330m2*352-0w3r2?2$1q2_3w2{370A3B3d3E3f3G3y370s3K3t3M3v3x3h0I3S2@3U3o040u0r3k1d2V142J2w0P2A320E1V1|1c3.1f3,2Z152;053?0S2W3T2M010Q0.0S0d3*3L450K2-4b442(0d480C0h0y0o4l4g3!450-040J4q3D450y0.4a3~2 3C324t0f0G3r0n4K0n4E3u4z040q3k4M4c1;0m0.0D4S4N3#0.0E2m0C0O224)0H0o0S4w4F0.0J0f4J4L4!4y0.0C0z0c4Z4U1J4W044Y4C2s4T4h2_4k4+4:3u4t4v56434r2(4A5d3U4G4^4K4`1;47040K1t1F50590)0m4e042Q4 5h585j5a040C0k0c0O4-4/5h5r1J5f5m4{044B2Z510)4G4I5h064L5*5H4x5k5K0y5c5R5!015U5=5z330.4R5_5I5#0.0j5y5 5{5K4~5V1;5o5(5+4_5?4P4}5F2X5,3253556i5S3f5b1@685T4=6s6p5X6v5@0.4@6b6d5`5t5v6r5G6o015B0.5E635-5J5L5N5P0C6y5^5Z5`4P5}6X645$5p5+6J6f5:6H6#6P604u6y4P5Y3 5?4t626I6e6q5x5~6/6z6;703n5|6V6A6B2X5)6D646+5;6.4;737g4O5l745e616O75666h6^5`6a7a5*6J5t2m0c0p4m7p7k7r3B0M410C2t2U7K3-1n3/2w2y2u1U1W2w0l1E7N0M3.0:7!0T0V0X04.
.1280135tf4)2r3,sao iug08m1P6pnl7he=cy:v9(wS/b_dk050P0C0c0l0o0z0k0n0E0z0l0k0k0D010c0o0x010406050k0p0t0t0l0h0F040L0m0z0p0+0m0y050M0=0@0_0{0:0x04141b051e0M1e1g1b0:0P0o0H0Z0#0%0)0B0o0q0B0z1u0B0c0.050U0N0z0C1p0$0(011t1v1x1v0c1D1F1B0c0N0m0P0{1C0h1c0c0B0Z0~0k0x0l0y0)0g011H1r010d0W0C0y0l0t0C1B1)1+1:1J1?1F1_1{0.0a0n0v0h0m0x0m0k0o110y0n0S1%0h0h0C0E2g141~0y1c0M1#2t0c1Z1Y1!0P200)1x0y1^2d1B1m1o0!1I2D0o2F0y1V1n1B0x2m1c2r2t2X0;1*2h2L1;2Q0h0^0z0.0n0u2q2#0/2!1 2%1J2)2+2-0g2:1+2=2r2C012`0l2,040n0i2~2s0:312^0)34360n0e3a302#323g2-0b3k3c3m3e330m2*352-0w3r2?2$1q2_3w2{370A3B3d3E3f3G3y370s3K3t3M3v3x3h0I3S2@3U3o040u0r3k1d2V142J2w0P2A320E1V1|1c3.1f3,2Z152;053?0S2W3T2M010Q0.0S0d3*3L450K2-4b442(0d480C0h0y0o4l4g3!450-040J4q3D450y0.4a3~2 3C324t0f0G3r0n4K0n4E3u4z040q3k4M4c1;0m0.0D4S4N3#0.0E2m0C0O224)0H0o0S4w4F0.0J0f4J4L4!4y0.0C0z0c4Z4U1J4W044Y4C2s4T4h2_4k4+4:3u4t4v56434r2(4A5d3U4G4^4K4`1;47040K1t1F50590)0m4e042Q4 5h585j5a040C0k0c0O4-4/5h5r1J5f5m4{044B2Z510)4G4I5h064L5*5H4x5k5K0y5c5R5!015U5=5z330.4R5_5I5#0.0j5y5 5{5K4~5V1;5o5(5+4_5?4P4}5F2X5,3253556i5S3f5b1@685T4=6s6p5X6v5@0.4@6b6d5`5t5v6r5G6o015B0.5E635-5J5L5N5P0C6y5^5Z5`4P5}6X645$5p5+6J6f5:6H6#6P604u6y4P5Y3 5?4t626I6e6q5x5~6/6z6;703n5|6V6A6B2X5)6D646+5;6.4;737g4O5l745e616O75666h6^5`6a7a5*6J5t2m0c0p4m7p7k7r3B0M410C2t2U7K3-1n3/2w2y2u1U1W2w0l1E7N0M3.0:7!0T0V0X04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)