hlmod.hu https://hlmod.hu/ |
|
[TUT] Logikai változók ( bool típus ) https://hlmod.hu/viewtopic.php?f=14&t=22009 |
Oldal: 1 / 1 |
Szerző: | Akosch:. [ 2015.08.21. 14:44 ] |
Hozzászólás témája: | [TUT] Logikai változók ( bool típus ) |
Sziasztok, mivel többen érdeklődtek, hogy mik ezek a bool típusú változók, illetve mire is jók, ezért úgy döntöttem megírom ezt a kis apróságot, törekedtem arra, hogy a lehető legérthetőbb legyen, és ahogyan szépen haladunk a mély vízbe egy példakódon bemutassam, hogy hogyan is lehet szebbé, kedvezőbb memória használatúvá tenni ezt azt. Először is szeretném kiemelni, hogy a pawn programnyelv sajnálatos módon eléggé típus szegény, és a bool típust sem tartalmazta alapból, ezért egy tag -ként van csak megoldva. Hogy ez miért is fontos számunkra? 1. Létrehozásukkor ugyanúgy 0 a kezdőértéke, mint egy sima változónak, csak ezt logikai változóknál false értéknek fogjuk hívni. 2. Ugyanannyi memóriát, azaz 4 byte -t ( 32 bit -t) foglal le, mint a sima változók. Hogyan néz ki ez a tag? ( Csak érdekességképpen ) SMA Forráskód: [ Mindet kijelol ]
Most már láttuk, tudjuk az alapokat, szóval kezdjük is: A logikai változóknak ( bool típusú változók / bináris változók / Boole-féle változók ) 2 értéke lehet, ez nem más mint a 'true' és a 'false', vagy felhasználási területtől függően szokták 'high' és 'low' -ként is alkalmazni, de ezek a kifejezések is csak számokat helyettesítenek: true / high -> 1 false / low -> 0 Deklarálás SMA Forráskód: [ Mindet kijelol ]
Érték adás Az előző részben láthattuk, hogy hogyan is lehet értéket adni egy bináris változónak, amikor true értékkel deklaráltuk, de itt egy példakód, hátha rásegít a megértésre: SMA Forráskód: [ Mindet kijelol ]
Így, ha beírod a chatbe, hogy "/bekapcsol", akkor kiírja hogy "Bekapcsoltad!" és átállítja a változónk értékét true -ra, ha pedig beírod, hogy "/kikapcsol", akkor kiírja hogy "Kikapcsoltad!" és a változónk értéke false lesz. Logikai változó értékének felcserélése Ha bool típusú változókkal dolgozunk gyakran szükségünk lehet arra, hogy felcseréljük a változó értékét. Erre létezik számos megoldás: 1. Ez a leggyakrabban alkalmazott megoldás amxmodx -es közegben még nem is nagyon láttam mást: SMA Forráskód: [ Mindet kijelol ]
2. Ez ugyanaz a megoldás, csak a feltételes / hármas operátor segítségével: SMA Forráskód: [ Mindet kijelol ]
3. Ez a megoldás már kicsit rövidebb, matematikán alapul: SMA Forráskód: [ Mindet kijelol ]
4. Ez már egy elég pofás, rövid megoldás: SMA Forráskód: [ Mindet kijelol ]
5. Ez a legrövidebb, és valószínűleg a leggyorsabban lefutó megoldás, alapja a bitenkénti "kizáró vagy" ( XOR, ^ ) logikai művelet: SMA Forráskód: [ Mindet kijelol ]
Esetleg, ha arra lenne szükségünk, hogy az érték megváltoztatása után tovább fusson a program, és mondjuk kiírja, hogy ki / be kapcsoltad, akkor arra is van lehetőségünk: SMA Forráskód: [ Mindet kijelol ]
Ez is egy működő kód, de miért ne szakadnánk el az általános megoldásoktól, és használnánk az újonnan megismert érték felcserélési lehetőségeket: SMA Forráskód: [ Mindet kijelol ]
Ezek alapján kiegészíthetjük az elején elkezdett kis példakódunkat egy újabb funkcióval: SMA Forráskód: [ Mindet kijelol ]
Így, ha beírod chatbe, hogy átkapcsol, akkor átállítja a változónk értékét és kiírja, hogy ki vagy be kapcsoltad. A memória használatról Még az elején említettem, hogy a bináris változók is ugyanúgy 4 byte -t foglalnak le maguknak, mint a sima változók. Hogy ez miért is baj nekünk? - Mert konkrétan ennek a változó típusnak elég lenne 1 bit is, hogy működjön ( 31 bit fölösleges ). A pawn programnyelven van lehetőségünk úgy nevezett char tömbös változókat készíteni, ezzel csak 1 byte * tömb mérete memóriát foglalunk le. Deklarálás: SMA Forráskód: [ Mindet kijelol ]
Hivatkozás cellákra: SMA Forráskód: [ Mindet kijelol ]
Most, hogy már tudjuk, hogy kompromisszumok nélkül spórolhatunk memóriát tömbös logikai változóknál miért is ne vennénk elő a példakódunkat és alakítanánk át? SMA Forráskód: [ Mindet kijelol ]
Ahogyan itt láthattuk, fontos, hogy egy char tömbös változónál szögletes ( [] ) helyett kapcsos ( {} ) zárójeleket kell használni! Fontos: char tömbös változókat csak akkor érdemes használni memória spórolásra, ha a változóban csak 0 és 255 között tárolsz számokat, különben váratlan hibák léphetnek fel! -> bináris változókhoz tökéletes, hiszen itt csak 0 -t vagy 1 -t tárolunk. Ezen kívül van egy másik megoldás is, ha több logikai változóra lenne szükségünk, amivel egy sima változóban képesek vagyunk akár 32 igaz / hamis értéket is tárolni, ha nem probléma ezt itt nem fejtegetném, itt van egy szép leírás: [Leírás] Tippek és Trükkök ('char' tömbök, Bit-Flag és Egyéb) - kurta999 és itt az utolsó (Bitműveletek Bit-Flag) rész lesz az ami kell + itt is le van írva ez a char tömbös lehetőség. Egész számok logikai változóvá konvertálása Igen, erre is van lehetőségünk, ráadásul elég egyszerű: SMA Forráskód: [ Mindet kijelol ]
Fontos: Csak és kizárólag akkor kapunk false értéket, ha az átalakítani kívánt szám egyenlő 0 -val, még negatív szám esetén is true értéket ad vissza + float számokkal nem működik. Részemről ennyi lenne amit tudok, várom az észrevételeket, tanácsokat, illetve ha valamit rosszul írtam le / fejeztem ki, akkor szóljatok. |
Szerző: | DecToR [ 2015.08.22. 00:02 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Nos köszönöm szépen ezt a TUTORIÁLT A bool-ról, hisz számomra nagyon hasznos volt és nagyon jól elmagyaráztad, használata tényleg egyszerű csak át kell rendesen gondolni, nekem megért egy "KEZET" hisz szerintem nem 10percbe telt mire megcsinálod, de nagyon nagy gratuláció !! NAGYON JÓ!!! csak így tovább. |
Szerző: | Akosch:. [ 2015.08.24. 02:35 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Egész újraírva / gondolva + kiegészítve a char tömbös lehetőséggel. Szerintem most már teljes, de ha valaki szerint kimaradt valami szóljon. |
Szerző: | Metal [ 2015.10.07. 10:56 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Szia! Ezeket letesztelted? |
Szerző: | Akosch:. [ 2015.10.07. 18:51 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Szia Metál Char tömbökön kívül igen, bitműveletes dologgal van komolyabb tervem is ide, ha elkészül lesz egy példa |
Szerző: | Metal [ 2015.10.08. 15:22 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Igazából a kérdésem a {}-re vonaqtkozott, úgy emlékeztem Amxben ez a funkciót nem vezették be. Tévedtem |
Szerző: | Maxi [ 2015.10.10. 23:02 ] |
Hozzászólás témája: | Re: [TUT] Logikai változók ( bool típus ) |
Jesus crist |
Oldal: 1 / 1 | Minden időpont UTC+02:00 időzóna szerinti |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |