moyen
Carrés semi-magiques (POO)
Carrés semi-magiques (POO)
Nous travaillons dans cet exercice sur des tableaux carrés d'entiers positifs.
Nous appelons « carré d'ordre \(n\) » un tableau de \(n\) lignes et \(n\) colonnes dont chaque case contient un entier positif.
Carré semi-magique
Un carré est dit « semi-magique » lorsque les sommes des éléments situés sur chaque ligne, chaque
colonne sont égales. Cette somme est appelée constante magique ou densité du carré semi-magique.
Exemples avec trois carrés
Carré d'ordre 2 : carre_2 Carré d'ordre 3 : carre_3 Carré d'ordre 3 : carre_3_bis
carre_2 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 8.
carre_3 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 12.
carre_3_bis n'est pas semi-magique car la somme de la première ligne est égale à 15 alors que celle de la deuxième ligne est égale à 10.
La classe Carre ci-après contient des méthodes qui permettent de manipuler des carrés.
La méthode __init__ permet de créer un carré sous forme d'un tableau à deux dimensions
à partir d'un p-uplet d'entiers nombres. Nous remarquons que l'ordre du carré créé est la racine carrée de la longueur du p-uplet passé en paramètre. Par exemple avec un p-uplet de taille 4, on crée un carré d'ordre 2, avec un de taille 9, un carré d'ordre 3.
La méthode affiche permet d'afficher le carré créé.
Exemples
>>> nombres_3 = ( 2 , 9 , 4 , 7 , 0 , 3 , 6 , 1 , 8 )
>>> carre_3_bis = Carre ( nombres_3 )
>>> carre_3_bis . affiche ()
[2, 9, 4]
[7, 0, 3]
[6, 1, 8]
La méthode somme_ligne prend en paramètre un entier i et renvoie la somme des éléments de la ligne i du carré.
Exemple
>>> carre_3_bis . somme_ligne ( 0 )
15
La méthode somme_colonne prend en paramètre un entier j et renvoie la somme des éléments de la colonne j du carré.
Exemple
>>> carre_3_bis . somme_colonne ( 1 )
10
La méthode est_semi_magique renvoie True si le carré est semi magique,
False sinon.
Exemples
>>> carre_2 . est_semi_magique ()
True
>>> carre_3 . est_semi_magique ()
True
>>> carre_3_bis . est_semi_magique ()
False
Compléter le code ci-dessous, puis le tester sur les carrés carre_2, carre_3 et carre_3_bis.
.128013snTc)wNuqAl3 j(;ébokp/h1t,[aRPmy7!]f4L_296ev-8F*+dCiSg:5=.0r050Y0R0z0C0!0l0b0n0e0l0C0b0b0)010z0!0v010406050b0i0F0F0C0,0G040#0t0l0i100t0c0n020C0F0v0q0n0D0R1a0,0j0i0R0b050w17191b1d150v041B1I051L0w1L1N1I150Y0!0S0^0`0|0~0x0!0$0x0l1#0x0z13050:0s0l0R1W0{0}011!1$1(1$0z1.1:1,0z0s0t0Y1d1-0,1J0z0x0^1g0b0v0C0c0~0O011=1Y010K0=0R0c1o0R1,2d2f2k1@2n1:2q0F2s040a0n0E0,0t0v0t0b0!1j1l0.2b0,0,0R0e2N1B2u0c1J0w292Z0z2726280Y2w0~1(0c2p2K1,1T1V0_1?2-0!2/0c231U1,0v2S1J2X2Z34162e1l2^2l2}0,1a0l130n0y2W3814372v3a1@3c3e3g0O3j2f3l2X2,013q0C3f040n0m3u2Y153x3o0~3A3C0n0L3G3w383y3M3g0(3Q3I3S3K3z0t3d3B3g0Q3X3m391X3p3$3r3D0H3+3J3.3L3:3(3D0U3@3Z3_3#3%3N0P3 3n413U040y0+463-2_423;0y3i1C3k3Y474f490y3t4k3v4m4e3b3{3C0y3F4s3H3,3T4x130y3P4B3R4n4w434G3W4J4u4E4N4a3*4Q4D3!4p3?4W3^4o4F4a3~4#404%4T0y454+4L3/4T0O4c4;4v4?3;0O4j344R4Y4(0O4r504X48534A564$4M4}4I5b4,5d3|0O4P5g4=3`4@4V5m4{5o4}4!5r4S4}4*5w524@4:5A584T0m4_5E4-3;0m4 4l575K3|0m555O5c4|5R5a5U5h5W3C0m5f5Z5n4g5R5l5)5s5+5$5q5.5x5R5v5?5B5L5z3k1K321B2?2$0Y2*3y0e232C0-1U1J310R335~4J05670.6f5*0u0c130K2H0F3Q5P2l0g3g6t5V3L6o041a296y5!0~6w3D6F6m6B0!1p3$0z3Q0n6u3p130b0j0,6Q4Q0651410u133o6K5/6I6S6h6z3z0e130Z1b2S6+3y12040%3X0n706S6:6(040.0K6`3!6-78410K0F130N0N2{2M7g7b4f6|0p7l2l0s6|0b0R0l776/6G016|0A6R6T3L132}0F0s2S1A7x5*6|0f6~4Q717R727y7r6V7u7w366:0t130*7p6U043$0Y6_4J7T5*7#040)7C6:0c0s132{6Z7Z7y7n7(7E046W6Y817z137o7L5/7_132z86808a3T7F0t7H7J8f130f8p6 7S707D017V837X867;7%8h4Y131~0R0C0i7@7y7;7?7.8u6|0B8r8s7R8O138Q8C488j8l1z8n048W7~5*6B0o8J7:130X8-8b7{8;3y7;0W8@3!8w7t7v8z7$866B7+7-8)5/6|0J8{6%6p3$9a4o138,8N7!6I2{9e3b7`040,2f0$0R8$89963y8}8y8X4f8A9213949t9A2l7N997Q8S8T739c0,9m7)0!9R0~0t9k0c9U3z9o9q0c9s9u869y8 9H1@9C9-829F8$0f8R7S8U049K50069N7y7476867a9:3z0K130C0K2n0e0x9G9w3!8gaf419+7Y5~6:7N7P5J6v3g8S860b0Y1301ay0kaa0!ac1;0i396^0ray019^9 6m9P9Z6B1{2/9Z9W7{9Y9i7U7s9zai9B91a56B8F8H8$ap4l9MaM8b9o317|9)a(8d1#aSa57N3X9~718ua10Ral3v8ua4a#3ba7838k2B0NaRaeam7 889*aZ9,b91@7AaP8?a}8oa-4tb7as8sauaw04aJ6@0l0e0i1:0n0`0n0bbd1;0.0@0S3B0R0i0,0@2PbKbg0n0!aJaLb17^6VbNaT138M347/5/0Fb#045Ia.at9O040K9daX8*9gaT9XaP9#9rbhb6anbka5ak90048Bbo9;0,7,c72Y9`7Ob%bzb)bc19ck6J7!b-brcr2Bb,048:b 5/cca59/cg3z8E0C1/8G8Ibt8%9D049TcP0J8(bic0049hcI98cob:3y742S0zbUaWb/8u6BbMcsa a:c)13a2a5b8cX8bbbc=be670l1ka|c#cacIcFd7047BcD8icZ9?bv4C6:6-ata5avaxaybEbGbIbKd1bO1z0nbR1:bUbW1;bKd3d51;0ob$9Lcp7yc;b+de3!8L9Zb=13b^4t9Mb2aOdP8YcSc2aVc4139$9(cP9vc~9xbmb5clcvcecR9=cPcndKa/c:b*c?d!a$7=cxdvcAcCc/6:dad/dQa%cIa)cL1:a+cPcWc8dMbsdbcVcRc!ec41c$d}c^3!c*0/c-e5dO9}ex9b75b4a36xa(bb1z0z0N7tb=0N1a0$0!1xct9`d.em5*ebe!97buc%d cy0R0N6719aFctc(ede4e27qd;cdcfet9fe,bfa{eXc904eZd?7ydTb@9?e*b{b}9Qe_7)0ud%cSc.3ke?48c59%f3bjf5bl7Wbne~2lcHfx7)d`dbd|50a/b(a07{d=cuaYfvfK8ufze%dfdvf10$d6fA0~ahfXcJ04fid{cA0Ib.fme+fTe/0Fe;a,c%dXb{c+eBfg0~0u6=040V3B7tf?fHaNcSfKfn4fe$f78.d^a_f0dF0cfWfRagd8f!6Bf%fDf)f+3vg83be0d2bdf;cPdi14fGdLg5f_0,flgsb2f~g00?ctb0gD5/ezc,gG9Zf}130d0,1y3+0w6j6e5 g%0w621B0z64g,2(2!22242$ehg)621H6l5/2S0F0N0K0C0ue-0x0m131t1veW0@gA1K3l2?3y0C0Y0F1k2M0!1kb!0cb}131Hhghihk2N0T100z1 f 1k2Uhm1l6i6883181Bg$2Z1R1M040h0t0i0@8H0,hE0@0v0i0n1i0=0!7t0,bJ0C0nb}0chDhn8v0i0=0z0T2{2jhG6k1DhKhH0n2P0E0G291khdg{0M0!2pdy0RbVh*i00tbG2B0c0:2N2Fi30xhn0%6Sh+0x2S0K1Z1}0v0b0%0wg*ig0b0*0vin1k0*3$0$0w6q0w0m0w1(7I1FiMaFh/0ciE1*0F0l031D6VhJ0w0ChM3lg*6b1S0/0;0?0n2I2p9V0v2phr16181v1d0D0r2JiXdx3B0zic2q100S8#1Ci 1F3l1I0k1i2S0n2J0|0!0sh$0z0ri01;0,j31k7t7KhNhf3!1_1%1)1+g|3y2y2p2r132E0#0ehV0v0zimi4gHcl6dg|355~hLdYeHfOdkeKefd0bNfUgigbe(ftcbe{cPdde9end$d{gA6$4fdl8tdnbB00k6drbHdDh+dvjubQbSdBjuiebZ0!k6009^f-eDf,d@gr2Ygt3p9oh}d-fu8xfwgj41fQj;dfa*cOdbelkF8Dj}ep9@d}j%gFjWfLcYe66!k02lb3j)7yc}kC4oj-cse.1gdGa^d9j^dbj`kqj|esk(9Ie)4`3yk26.cIdo04klk8dtkbbNkddykfidbXh+gg2/0n0oklknf^eAgTf{9!i(6skyj@fNe|cRkH8$kKjIkMcTeplze+k_kLeu139|k@g5fecxlClL5/aUfkd)9pc6k/f!galAkDeegm9Eci95f!7NkP56g#hHg(2Zg`61i;0=0bi-0.0:l_04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)