zouzzz Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 (modifié) Salut, j'aurais besoin d'un coup de main pour un code lua. Voilà j'ai 10 donnés nommées : A, B, C, D, E, F, G, H, I, J. Chaques lettres correspondent à une image ou un son. Elles ont toutes été prises au hasard sur 100. aga = Sound.load("aga.wav")baba = Sound.load("baba.wav")...............A=math.random(100)B=math.random(100)..............if A == 10 then screen:blit(100,100,aga) endif A == 11 then screen:blit(100,100,baba) endif B == 15 then screen:blit(100,100,baba) end.... En fonction du nombre qui leur a été attribuée par les math.random, j'aimerai faire un code ou une fonction pour classer les lettres dans un ordre croissant ou décroissant. C'est à dire si les math.random me donne : A = 13 B = 12 C = 14 D = 10 E = 9 F = 20 G = 17 H = 23 I = 2 J = 8 J'aimerai qu'un code les classent dans l'ordre croissant : I J E D B A C G F H pour faire apparaitre les images ou les sons dans l'ordre définit par les math.random. Voilà. Merci de votre précieuse aide. Modifié le 15 septembre 2006 par zouzzz
JangoKing Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 Voilà. Merci de votre précieuse aide. tu dois utiliser l'algo du tri a bulle (Bubble Sort) voila le lien avec les explications: Bubble Sort L'adaptation en lua sera simple je pense et des exemples en différents language sont donnés. Dans ton cas tu dois avoir deux tableaux, tu trie les deux en meme temps mais tu fait tes comparaisons sur le premier (celui avec les chiffres bien sur).
zouzzz Posté(e) le 14 septembre 2006 Auteur Posté(e) le 14 septembre 2006 Merci pour ton aide. Il me faudrait donc une fonction genre le tempValue du Delphi / Pascal pour Lua. J'ai essayé avec : ...if A < B thenA = BB = Aend... Mais au bout d'un moment je me retrouve avec toutes les valeurs égales (A = B = C ...= une valeur entre 1 et 100)
JangoKing Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 Merci pour ton aide. Il me faudrait donc une fonction genre le tempValue du Delphi / Pascal pour Lua. J'ai essayé avec : ...if A < B thenA = BB = Aend... Mais au bout d'un moment je me retrouve avec toutes les valeurs égales (A = B = C ...= une valeur entre 1 et 100) c'est une erreur classique, je l'ai eu aussi, tu t'est trompé qqu part mais je ne sait pas dire ou, post une fois ton code de tri complet que je regarde
zouzzz Posté(e) le 14 septembre 2006 Auteur Posté(e) le 14 septembre 2006 Merci pour ton aide. Il me faudrait donc une fonction genre le tempValue du Delphi / Pascal pour Lua. J'ai essayé avec : ...if A < B thenA = BB = Aend... Mais au bout d'un moment je me retrouve avec toutes les valeurs égales (A = B = C ...= une valeur entre 1 et 100) c'est une erreur classique, je l'ai eu aussi, tu t'est trompé qqu part mais je ne sait pas dire ou, post une fois ton code de tri complet que je regarde Ok, je posterai dès que possible (demain ou après demain)
JangoKing Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 Si tu veux tester tu télécharge AutoIt Et tu teste le petit code que j'ai fait rapidos et qui correspond à ton exemple: $Lettre = "A,B,C,D,E,F,G,H,I,J"$Chiffre = "13,12,14,10,9,20,17,23,2,8"$TabLettre = StringSplit($Lettre, ",")$TabChiffre = StringSplit($Chiffre, ",")$Longtableau = $TabLettre[0]; L'élément 0 contient le nombre d'élément du tableau$Avant = ""$Apres = ""For $i = 1 To $Longtableau - 1 ; Mon tableau commence à 1 $Avant = $Avant & $TabLettre[$i] & " = " & $TabChiffre[$i] & @CRLFNextMsgBox(0, "Avant", $Avant)While 1 $Permuation = 0 For $i = 1 To $Longtableau - 1 ; Mon tableau commence à 1 If Number($TabChiffre[$i]) > Number($TabChiffre[$i + 1]) Then ; On sauve les valeurs $TempChiffre = $TabChiffre[$i] $TempLettre = $TabLettre[$i] ; Element = Element + 1 $TabChiffre[$i] = $TabChiffre[$i + 1] $TabLettre[$i] = $TabLettre[$i + 1] ; On termine le swap $TabChiffre[$i + 1] = $TempChiffre $TabLettre[$i + 1] = $TempLettre $Permuation = 1 EndIf Next If $Permuation = 0 Then ExitLoopWendFor $i = 1 To $Longtableau - 1 ; Mon tableau commence à 1 $Apres = $Apres & $TabLettre[$i] & " = " & $TabChiffre[$i] & @CRLFNextMsgBox(0, "Apres", $Apres)
zouzzz Posté(e) le 14 septembre 2006 Auteur Posté(e) le 14 septembre 2006 Je ne suis pas sur d'avoir tout saisi, mais je teste ça ce soir. Merci.
JangoKing Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 Je ne suis pas sur d'avoir tout saisi, mais je teste ça ce soir. Merci. En réalité l'algo est simple mais cela peut paraitre compliqué au 1er abord une fois que tu l'a ecris toi meme tu verra que tout sera limpide
zouzzz Posté(e) le 14 septembre 2006 Auteur Posté(e) le 14 septembre 2006 Je viens de matter ton code... v'est pas du Lua ça.
JangoKing Posté(e) le 14 septembre 2006 Posté(e) le 14 septembre 2006 Je viens de matter ton code... v'est pas du Lua ça. Non il faut l'adapter en lua mais bien entendu le principe est le meme si tu capte cet exemple alors tu peux le refaire. Avec le programme que j'ai mis le lien tu peux tester ce code facilement
zouzzz Posté(e) le 15 septembre 2006 Auteur Posté(e) le 15 septembre 2006 Ok, je me disais aussi . Je n'ai pas pu tester hier soir, je verrai ça ce soir. Merci encore.
JangoKing Posté(e) le 15 septembre 2006 Posté(e) le 15 septembre 2006 (modifié) Ok, je me disais aussi . Je n'ai pas pu tester hier soir, je verrai ça ce soir. Merci encore. Voila un traduction en lua maintenant je ne garanti pas que ca marche car je l'ai fait rapidement et je ne suis pas sur que le break pour sortir de la 2eme loop ne va pas aussi sortir de la 1er Enfin cela te donne une idée: Lettre={"A","B","C","D","E","F","G","H","I","J"}Chiffre={13,12,14,10,9,20,17,23,2,8}Longtableau = 10; Nombre d'élément du tableauWhile true do Permuation = 0 i = 1 While true do If TabChiffre[i] > TabChiffre[i + 1] Then ; On sauve les valeurs TempChiffre = TabChiffre[i] TempLettre = TabLettre[i] ; Element = Element + 1 TabChiffre[i] = TabChiffre[i + 1] TabLettre[i] = TabLettre[i + 1] ; On termine le swap TabChiffre[i + 1] = TempChiffre TabLettre[i + 1] = TempLettre Permuation = 1 End i = i + 1 If i = Longtebleau Then Break End End If Permuation = 0 Then Break EndEnd Modifié le 15 septembre 2006 par JangoKing
zouzzz Posté(e) le 15 septembre 2006 Auteur Posté(e) le 15 septembre 2006 Ok, je vois quelques erreurs vite fait mais je pense que ça va bien m'aider. J'ai eu aussi l'aide de Carish surXtreamLua : je te previens, c'est pas la solution exacte, mais plutot une piste sur comment tu dois faire. je pense qu'il faut reflechir au probleme, mais la j'y arrive plus :oops: trop fatigué Table = {} Table2 = {} for i = 1, 10 Table = math.random(100) end for i = 1, 10 do for j = 1, 10 do if Table[j] > Table then a = Table else a = Table[j] end Table2=a end for i = 1,10 do screen:clear() screen:print(10,10*i, Table2, white) screen.waitVblankStart() screen.flip() end et celle de akiraenmpsi de PSPgen : green = Color.new(0, 255, 0)A = 13B = 12C = 14D = 10E = 9F = 20G = 17H = 23I = 2J = 8tableaud = {}tableaud[1]=Atableaud[2]=Btableaud[3]=Ctableaud[4]=Dtableaud[5]=Etableaud[6]=Ftableaud[7]=Gtableaud[8]=Htableaud[9]=Itableaud[10]=Jvariable = 0for j = 1,10 do for i = 1,9 do if tableaud[i]<tableaud[i+1] then variable=tableaud[i] tableaud[i]=tableaud[i+1] tableaud[i+1]=variable end endendfor g = 1,10 doscreen:print(30*g, 100, tableaud[g], green)endscreen.flip()while true doscreen.waitVblankStart()pad = Controls.read()if pad:start() thenbreakendendfor l = 1,10 doif A==tableaud[l] thentableaud[l]="A"endif B==tableaud[l] thentableaud[l]="B"endif C==tableaud[l] thentableaud[l]="C"endif D==tableaud[l] thentableaud[l]="D"endif E==tableaud[l] thentableaud[l]="E"endif F==tableaud[l] thentableaud[l]="F"endif G==tableaud[l] thentableaud[l]="G"endif H==tableaud[l] thentableaud[l]="H"endif I==tableaud[l] thentableaud[l]="I"endif J==tableaud[l] thentableaud[l]="J"endendtableauc = {}for l = 1,10 dotableauc[l]=tableaud[11-l]endfor g = 1,10 doscreen:print(30*g, 100, tableauc[g], green)screen:print(30*g, 200, tableaud[g], green)endscreen.flip()while true doscreen.waitVblankStart()pad = Controls.read()if pad:up() thenbreakendend Avec ça, je pense pouvoir m'en tirer. Je les ai tous remercié.
ouasse Posté(e) le 15 septembre 2006 Posté(e) le 15 septembre 2006 (modifié) juste une remarque au passage. Eviter le bubble sort, c'est une méthode très mauvaise. Elle consiste à comparer 2 valeurs successives dans un tableau, et à les échanger si leur ordre relatif est mauvais. C'est beaucoup trop lent, plein de comparaisons et d'échanges pour rien, etc. Sinon l'autre méthode que vous avez mentionnée ça s'appelle du tri par sélection et c'est constitué de 2 boucles for imbriquées. La première boucle recherche la valeur min dans le tableau, et la met au début. les méthodes que vous avez présentées sont loin d'être les meilleures, parce qu'à chaque fois que le programme trouve une valeur plus petite que la plus petite valeur connue il y a échange, alors qu'on ne devrait le faire qu'une fois avoir parcouru tout le tableau pour trouver la plus petite valeur de toutes. En plus à chaque tour de la première boucle il y a un élément en moins à vérifier dans la 2eme boucle, alors que vos codes reparcourent tout le tableau à chaque fois. Bon je ne vais pas vous donner le code, par contre ça aussi ça marche bien : tablo = {}-- générer les 10 valeursfor i=1,10 do tablo[i] = math.random(100)end-- trier le tableautable.sort( tablo ) et voila, à la fin les éléments tablo[1], ... tablo[10] contiennent tes valeurs triées dans l'ordre croissant Modifié le 15 septembre 2006 par ouasse
zouzzz Posté(e) le 15 septembre 2006 Auteur Posté(e) le 15 septembre 2006 (modifié) Bon je ne vais pas vous donner le code, par contre ça aussi ça marche bien : tablo = {}-- générer les 10 valeursfor i=1,10 do tablo[i] = math.random(100)end-- trier le tableautable.sort( tablo ) et voila, à la fin les éléments tablo[1], ... tablo[10] contiennent tes valeurs triées dans l'ordre croissant Ok merci à toi ouasse. table.sort( tablo ) permet le tri des données du tableau par ordre croissant, c'est ça? Modifié le 15 septembre 2006 par zouzzz
JangoKing Posté(e) le 15 septembre 2006 Posté(e) le 15 septembre 2006 (modifié) Oui il existe plusieurs alogrithme de tri et effectivement certains sont plus efficace que d'autres. La solution de akiraenmpsi de PSPgen est la meme que la mienne sauf qu'il utilise des for (ce que je n'ai pas fait car je n'avais pas bien compris le for en lua) Par contre il replace les lettres dans l'ordre des chiffres apres le tri ce qui est une perte de temps considérable. Surtout que tu peux le faire directement, a eviter donc. Qqu link utiles pour illustrer ce que dis ouasse: Tri casier Tri shell Modifié le 15 septembre 2006 par JangoKing
zouzzz Posté(e) le 15 septembre 2006 Auteur Posté(e) le 15 septembre 2006 (modifié) Par contre il replace les lettres dans l'ordre des chiffres apres le tri ce qui est une perte de temps considérable. Surtout que tu peux le faire directement, a eviter donc. Je viens de tester sur luawindows et son code fonctionne bien. Pour le temps, ce n'est pas la priorité, donc si ça fonctionne bien, ya des chances pour que je le garde. Je vais tout de même regarder de plus près le ***.sort() d'ouasse. Ce qui est sur, c'est que vous m'avez oté une sacrée épine dans le panard. Modifié le 15 septembre 2006 par zouzzz
ouasse Posté(e) le 15 septembre 2006 Posté(e) le 15 septembre 2006 (modifié) Ok merci à toi ouasse. table.sort( tablo ) permet le tri des données du tableau par ordre croissant, c'est ça? oui c'est ça, tu fais table.sort( xxx ) et ça te trie ton tableau xxx par ordre croissant. on peut aussi donner en option une fonction de comparaison, pour trier les éléments par ordre décroissant ou pour trier un tableau qui contient autre chose que des nombres. tout ça, c'est dans la doc de Lua : http://www.lua.org/manual/5.1/manual.html#pdf-table.sort JangoKing, le tri par casier c'est bien pour trier des tableaux très grands de nombres entiers, mais pas pour un tableau de 10 éléments Et le shell sort c'est le tri par sélection dont j'ai parlé, qui commence par rechercher le min, puis le min parmi les autres éléments, et ainsi de suite Sinon y'a le tri rapide ou quicksort, qui est implémenté en langage C dans la fonction qsort (définie dans stdlib.h), et ça doit très certainement être le cas pour le table.sort de Lua. Modifié le 15 septembre 2006 par ouasse
zouzzz Posté(e) le 15 septembre 2006 Auteur Posté(e) le 15 septembre 2006 Voilà tout est dit. Merci à tous mes sauveurs. Je vous fais de gros BISOUS.
JangoKing Posté(e) le 15 septembre 2006 Posté(e) le 15 septembre 2006 nan, tu piques ^_^ Moi je veux bien :lol: non je plaisante Effectivement si il existe une fonction toute faite, alors utilise la. Merci ouasse pour tt ces précisions
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant