ATomas 291 Odesláno: 22. Říjen, 2012 Share Odesláno: 22. Říjen, 2012 Zdravím, Rozhodl jsem se udělat po dlouhé době Tutoriál. Nedávno jsem jednomu uživateli vysvětloval, jak seřadit čísla, vzestupně nebo sestupně na tom nesejde. Tím pádem jsem objevil mezeru v tutoriálech. Když máme třeba 4 různá čísla: 2 9 6 1 není pro nás těžké je seřadit. Nato abychom mohli vymyslet systém, jak to zapsat pro pawno je potřeba si těch čísel napsat víc. Příklad: 52,32,64,10,2,9,74,15,24,38,41,62 To už je dost čísel nato, abyste museli nad seřazením přemýšlet, a ne proste říct výsledek z hlavy. Tak jak postupujete, když chcete tato čísla seřadit? Prostě projedete prstem po všech číslech, a budete hledat to nejnižší, nějak takto: 52 ne nejnižší, další číslo 32 je nižší pamatuju 32 další číslo 64 není menší, jdu dál, další 10 je nejmenší pamatuju 10. A tímto způsobem najdu nejmenší číslo. To potom škrtnu a cele to budu opakovat dokuje všechny neseřadíme, tedy čísel je v našem případě 12 takže dvanáctkrát to zopakujeme. Díky tomuto, že jsme si to dokázali takto rozebrat už jsme schopni to zapsat do pawna, aby takovouto odpornou práci udělalo za nás J Takže: Máme čísla v nějaké proměnné například: new cislo[12]; cislo[0] = 52; cislo[1] = 32; cislo[2] = 64; . . . cislo[11] = 62; ¨new cislo[12];//tady mame zapsana cisla ktere cheme seradit new serazeno[12];//tuto promenou vyuzijeme pro ulozeni informaci o tom, v jakem poradi jsou cisla za sebou new bool:id[12];//promena id nam slouzi jako skrtnuti, abychom stejne cislo ktere jsme uz zaradili, nezaradili znovu for(new p;p<12;p++)//takze seradime 12 cisel, takze budeme serazovat dvanactkrat { new maxim = 2147000000,idx;//pomoci maxim si budeme ukladat nejmensi nalezenou hodnotu a idx si budeme ukladat ktera to je. Umyslne jsou az v cyklu, aby se pri hledani dalsiho cisla v rade tyto promene zapomenuly a vytvorili znovu for(new i;i<12;i++)//je dvanact cisel, takze musime porovnat vsechny { if(cislo[i] < maxim && id[i] == false)//zde je podminka ze pokud je zrovna porovnavane cislo z tech 12cti mensi nez dosavadni nalezene nejmensi, a za && je podminka pokud uz cislo nebylo zarazeno { idx = i;//pokud jsou podminky splneny tak si ulozime poradove cislo nejmensi promene maxim = cislo[i];//a ulozime nejmensi hodnotu kdybychom nahodou nasli jeste nejake mensi cislo } } //zde je konec cyklu, uz jsme nasli nejmensi cislo v prislusne rade id[idx] = true;//nastavime ze jsme si cislo skrtli serazeno[p] = idx;//zde si serazujeme poradove cisla promene "cislo" } //zde uz mame vpromene "serazeno" poradove cisla promene "cislo" serazene od nejmensi po nejvetsi //Abychom si overili, jak to vlastne vypada muzeme si to nechat otevrit do dialogu treba takto: new string[512]; for(new o;o<12;i++) format(string,sizeof(string),"%s\ncislo[%d] = %d;",serazeno[o],cislo[serazeno[o]]); ShowPlayerDialog(playerid,0,DDIALOG_STYLE_MSGBOX,"Seřazená čísla",string,"Zavřít",""); Pokud potřebujeme čísla rovnat od největšího po nejmenší, stačí obrátit znaménko nerovnosti a jako maximální hodnotu nastavit -. K čemu je to dobré? Pomocí takového skriptu si můžete třeba udělat TOPY, i když tam seto dá ještě optimalizovat, ale to možná až příště.) 3 Link to comment Share on other sites More sharing options...
Sweet 7 Odesláno: 22. Říjen, 2012 Share Odesláno: 22. Říjen, 2012 jenom jsem nasel malou chybicku for(new o;o<12;i++) misto i tam ma bejt o ale to si kazdej clovek snad dokaze opravit... Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 22. Říjen, 2012 Author Share Odesláno: 22. Říjen, 2012 jenom jsem nasel malou chybicku for(new o;o<12;i++) misto i tam ma bejt o ale to si kazdej clovek snad dokaze opravit... Taky jsem si toho vsiml, akorat mi zmizelo tlacitko upravit, abych to opravil. Link to comment Share on other sites More sharing options...
Mort 29 Odesláno: 22. Říjen, 2012 Share Odesláno: 22. Říjen, 2012 Pěkný, když jsem to kdysi zkoušel dělat já tak jsem to měl asi 20x delší ale taky mi to fungovalo Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now