Jump to content

Search the Community

Showing results for tags 'operátor'.

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv
    • 3D Tisk

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

Found 3 results

  1. Obtížnost: Osnova: 1. Úvod 2. Relační operátory 3. Logické operátory 4. Přiřazovací operátory 5. Bitové operátory 6. Priorita operátorů 7. Závěr 1. Úvod Vítám Vás u pátého návodu pro začínající pawnery. Téma se týká dalších druhů operátorů a navazuje na předchozí návod o operátorech. Abyste tento návod pochopili, přečtěte si nejprve ten předchozí. 2. Relační operátory Úkolem relačních operátorů je porovnávat operandy (vrací pravdu, nebo nepravdu). S nimi se zpravidla setkáme v podmínkách. Jedná se o operátory rovnosti, nerovnosti, větší/menší a větší/menší nebo rovno. . new cislo = 5, cislo2 = 10; cislo == cislo2 //dvě rovnítka porovnají, zda jsou čísla stejná (výsledek je false, 5 a 10 nejsou stejná) cislo != cislo2 //vykřičník a rovnítko zjistí, zda se čísla různí (výsledek je true, 5 a 10 jsou různá) cislo > cislo2 //znak pro "větší" zjistí, zda je číslo vlevo větší než to vpravo (výsledek je false, 5 není větší než 10) cislo < cislo2 //znak pro "menší" zjistí, zda je číslo vlevo menší než to vpravo (výsledek je true, 5 je menší než 10) cislo >= cislo2 //znak pro "větší nebo rovno" zjistí, zda je číslo vlevo větší nebo rovno tomu vpravo (výsledek je false, 5 není větší ani rovno 10) cislo <= cislo2 //znak pro "menší nebo rovno" zjistí, zda je číslo vlevo menší nebo rovno tomu vpravo (výsledek je true, 5 není rovno 10, ale je menší) . Všechno to jsou binární operátory. Doufám, že není třeba si je blíže vysvětlovat, princip je stejný jako v matematice, stačí nám znalosti základní školy. Zajímavost: 3. Logické operátory Pomocí logických operátorů tvoříme složitější podmínky. Stejně jako relační, tak i tyto operátory vrací buď pravdu, nebo nepravdu. Logickými operacemi jsou logický součin, logický součet a logická negace. a) Logický součin Logický součin je binární operace a značí se dvěma ampersandy (&&). Výsledek této operace je pravdivý, právě když jsou oba výrazy pravdivé. . new cislo = 5, cislo2 = 10, cislo3 = 15; cislo < cislo2 && cislo2 > cislo3 //výsledek je false . Prvním výrazem je "cislo ". Ten je pravdivý, 5 je menší než 10. Druhým výrazem je "cislo2 > cislo3". To pravda není, 10 není větší než 15. Jeden z výrazů je nepravdivý, proto je celá podmínka nepravdivá. b ) Logický součet Logický součet je binární operace a značí se dvěma svislicemi (||). Výsledek této operace je pravdivý, když alespoň jeden výraz je pravdivý. . cislo < cislo2 || cislo2 > cislo3 //výsledek je true . Vraťme se k předchozímu příkladu. Už víme, že první výraz je pravdivý a druhý nepravdivý. Poněvadž se teď jedná o logický součet, tak celá podmínka bude pravdivá – stačí jen jeden pravdivý výraz. Při složitějších podmínkách si nemusíme být jisti tím, jak ji jazyk vyhodnotí. Proto nám Pawn umožňuje i v tomto případě použít kulaté závorky k určení priority vyhodnocení. . (cislo < cislo2 && cislo2 > cislo3) || (cislo3 > cislo && cislo3 >= cislo2) . Teď jsme si jistí, že se napřed vykoná logický součin a až poté logický součet. c) Logická negace Logická negace je unární operace a značí se vykřičníkem (!). Účelem této operace je převrátit pravdu v nepravdu a naopak. . new bool:logicka = true; !logicka //hodnota bude false . Počáteční hodnota proměnné logicka je true. Po znegování bude hodnota převrácená – false. 4. Přiřazovací operátory Operátor přiřazení již známe – rovnítko. Probrali jsme jej v předchozích návodech, takže teď si ho jen rychle zopakujeme. Na levé straně je proměnná/pole, do které(ho) přiřazujeme, a na pravé straně hodnota nebo výraz, který přiřazujeme. . new cislo = 5; //přiřazení celého čísla new desetinne = 3.14; //přiřazení desetinného čísla new znak = 'o'; //přiřazení znaku new retezec[] = "ahoj"; //přiřazení řetězce new pole[] = {1, 3, 6}; //přiřazení hodnot poli . Pro zajímavost (rozklikněte spoiler): . 5. Bitové operátory Bitové operátory manipulují s bity. Tato problematika zdaleka přesahuje znalosti potřebné pro nováčky, proto ji zde uvádět nebudu. Nicméně, pokud se přeci jen chcete o manipulaci s bity něco dozvědět, přečtěte si tento návod, kde se tomu Mort podrobně věnuje. 6. Priorita operátorů Už jsme si zmínili, že prioritu operátorů můžeme ovlivnit kulatými závorkami jako v matematice, ale jaká je vlastně výchozí priorita operátorů? Na to se lze podívat do spoileru. Je to jen pro zajímavost, nic, bez čeho bychom se neobešli. . 7. Závěr A tímto končí druhý návod věnující se operátorům. Nyní už víte to potřebné o operátorech. Samozřejmě jich existuje mnoho, neuvedl jsem všechny (čárka, dvojtečka i všechny druhy závorek jsou také operátory), ale to už jsou drobnosti, které v praxi sami pochytíte. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  2. Obtížnost: Osnova: 1. Úvod, co je operátor a operand 2. Dělení operátorů 3. Aritmetické operátory 4. Závěr 1. Úvod Vítám Vás u čtvrtého návodu pro začínající pawnery. Tématem tohoto návodu budou základní informace o operátorech, jejich dělení a aritmetické operátory. O dalších druzích operátorů napíši, vzhledem k množství informací, návod zvlášť. Ačkoliv to teď nevíte, operátory jsme využívali už v předchozích návodech, ale také v matematice (třeba +). Úkolem operátorů je vykonávat nějakou operaci (třeba sčítání). Aby tuto operaci mohli vykonávat, musí pracovat s tzv. operandy. Operand je nějaká hodnota, která stojí před, nebo za operátorem (čísla, která sčítáme). . 1 + 3 //plus je operátor, 1 a 3 jsou operandy . Operandy mohou být konstantní (neměnné), to jsou třeba čísla nebo jmenné konstanty jako MAX_PLAYERS, ale také variabilní (proměnné), to jsou proměnné, pole, návratové hodnoty funkcí apod. Kombinací operátorů a operandů vzniká výraz. 2. Dělení operátorů a) Počet operandů Dělit operátory můžeme podle různých kritérií. Prvním je počet operandů. Operátory s jedním operandem nazýváme unární, se dvěma operandy binární a se třemi operandy ternární. . !promenna //vykřičník je unární operátor 1 + 3 //plus je binární operátor výraz ? true : false //otazník s dvojtečkou jsou jediným ternárním operátorem v Pawn . b ) Účel Dále můžeme operátory dělit podle jejich účelu. Pak mluvíme o operátorech artimetických, relačních, logických, přiřazovacích a binárních. Tohoto dělení se budeme držet a ty hlavní skupiny si blíže rozepíšeme. 3. Aritmetické operátory Se základními aritmetickými operacemi jsme se setkali právě v matematice. Jsou to sčítání, odčítání, násobení a dělení. . new cislo = 5, cislo2 = 10; cislo + cislo2 //plus sečte dva výrazy (výsledek je 15) cislo - cislo2 //mínus odečte dva výrazy (výsledek je -5) cislo * cislo2 //hvězdička vynásobí dva výrazy (výsledek je 50) cislo / cislo2 //jedno lomítko vydělí dva výrazy (výsledek je 0.5) . Pak je tu ještě jeden speciální operátor pro dělení, který ovšem vrací zbytek po dělení. Nazývá se modulo. . cislo % cislo2 //procento vydělí dva výrazy a vrátí nám zbytek (zbytek je 5) . Všechny výše uvedené operátory jsou binární. Nezapomeňme, že pro ně platí stejná matematická pravidla jako v reálném životě (nulou nelze dělit, násobení má přednost před sčítáním, sčítání a násobení jsou komutativní operace atd.). Pokud chceme, aby nějaká operace měla přednost před jinou (sčítání před násobením), můžeme, stejně jako v matematice, použít kulaté závorky. . 4 * (1 + 1) //díky závorkám dojde nejprve k sečtení jedniček a až poté k vynásobení čtyřkou . Dalšími aritmetickými operacemi jsou inkrementace a dekrementace. S těmi se setkáme později u cyklů. Oba operátory pro tyto operace jsou unární a uvádí se buď před, nebo za proměnnou. Ano, v tomto případě musí být operandem proměnná / buňka pole. . new cislo = 5; cislo++ //inkrementace, hodnota proměnné cislo se zvětší o 1, tedy na 6 cislo-- //dekrementace, hodnota proměnné cislo se zmenší o 1, tedy na 4 . Jak už je uvedeno v poznámce, inkrementace zvýší hodnotu o 1, dekrementace sníží hodnotu o 1. Pro zajímavost (rozklikněte spoiler): . Poslední aritmetický operátor, který si zmíníme, je unární mínus. Uvádí se před operandem a jeho úkolem je převést kladné číslo v záporné a naopak. Na nulu nebude mít vliv. . -cislo . 4. Závěr První část návodu o operátorech je za námi. Vysvětlili jsme si pojmy jako operátor, operace, operand a výraz. Také jsme si uvedli, jak se operátory rozlišují a co to jsou aritmetické operátory. V příštím návodu si objasníme zbývající kategorie – relační, logické, přiřazovací a bitové operátory. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  3. Původně jsem to v plánu neměl, ale rozhodl jsem se, že tu trochu objasním, jak funguje ternární operátor ? : Obtížnost: Jak to funguje Nejprve trochu nezbytné teorie, tento operátor se nazývá ternární, protože, jako jediný v pawn, pracuje se třemi operandy. první operand ? druhý operand : třetí operand _ Operandem nazýváme výraz, se kterým operátor pracuje. Tohle by myslím stačilo, teď se podívejme na to, jak funguje. logický výraz ? pravda : nepravda _ Operátor nejprve vyhodnotí logický výraz, pokud je tento výraz pravdivý (true), vrátí to, co je za otazníkem. Pokud je výraz nepravdivý (false), tak vrátí to, co je za dvojtečkou. Uvedu příklad: #define CERVENA 0xFF0000FF #define MODRA 0x0000FF00 new color; color = GetPlayerTeam(playerid) == 1 ? CERVENA : MODRA; Nejprve dojde k vyhodnocení logického výrazu, kterým je GetPlayerTeam(playerid) == 1. Pokud hráčův tým je skutečně tým s ID 1, tak se do proměnné color uloží hodnota za otazníkem, tedy CERVENA. Pokud ovšem má hráčův tým jiné ID, uloží se do proměnné hodnota za dvojtečkou, tedy MODRA. Využití v praxi Ne všechno se dá pochopit z teorie, proto je lepší to ukázat na několika příkladech z praxe. Hráčův tým Vezměme si ještě jednou příklad seshora a trochu jej upravme. Budeme chtít, aby se proměnné color nastavila CERVENA, pokud bude hráčův tým mít ID v rozmezí od 1 do 10. Pokud ne, nastaví se proměnné hodnota MODRA. Jak to lze řešit přes podmínky: if(GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10) color = CERVENA; else color = MODRA; _ Jak my to vyřešíme šikovně přes ternární operátor: color = GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10 ? CERVENA : MODRA; GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) - logický výraz CERVENA - hodnota, která se uloží, když je logický výraz pravdivý/true MODRA - hodnota, která se uloží, když je logický výraz nepravdivý/false Pokud se v tom pomalu ztrácíte a přijde vám to nepřehledné, můžete si to ozávorkovat: color = (GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10) ? (CERVENA) : (MODRA); _ Else if? Někteří z vás si možná řeknou "A co když potřebuji další podmínku, tedy else if?!" I tohle je samozřejmě pomocí ternárního operátoru možné, ale předem vás varuji, že se v tom možná začnete ztrácet. Zadání je následující: pokud má hráčův tým ID 1, nastaví se CERVENA, pokud má ID 2, nastaví se MODRA, pokud má jiné ID, nastaví se ZELENA. color = (GetPlayerTeam(playerid) == 1) ? (CERVENA) : ((GetPlayerTeam(playerid) == 2) ? (MODRA) : (ZELENA)); Za dvojtečku jsme přidali další ternární operátor. Pokud se ID rovná jedné, není problém, nastaví se CERVENA. Pokud se jedné nerovná, přeskočí za dvojtečku, zde narazí na další ternární operátor. Vyhodnotí další logický výraz. Pokud se ID rovná dvěma, nastaví se hodnota MODRA. Pokud to nebude ani jedna a ani dva, tak je to logicky jiné ID => nastaví se ZELENA. Šlo by to takhle větvit i dál, vždy by se za dvojtečku přidal další ternární operátor, ale při větším počtu bude lepší využít klasických podmínek, popř. switche. Příklad na závěr A dáme si ještě příklad na závěr. Skloňování v češtině programátorům leckdy dost komplikuje práci, výsledek výpisu hlášek se nám mnohdy nelíbí, například tady: new pocetHracu = 3,str[145]; format(str,sizeof str,"%i hráčů na serveru.",pocetHracu); SendClientMessageToAll(-1,str); _ Server nám vypíše tohle: 3 hráčů na serveru. _ Ale my chceme, aby vypisoval: 1 hráč na serveru. 2/3/4 hráči na serveru. 5/6/atd. hráčů na serveru. _ Zkrátka aby to vypsalo správný tvar slova hráč podle počtu. Lze to řešit přes podmínky nebo switch: switch(pocetHracu) { case 1: format(str,sizeof str,"%i hráč na serveru.",pocetHracu); case 2,3,4: format(str,sizeof str,"%i hráči na serveru.",pocetHracu); default: format(str,sizeof str,"%i hráčů na serveru.",pocetHracu); } _ Ale my si to zkrátíme na jeden řádek pomocí ternárního operátoru. format(str, sizeof str,"%i %s na serveru.",pocetHracu,(pocetHracu == 1) ? ("hráč") : ((pocetHracu < 5) ? ("hráči") : ("hráčů"))); Za specifikátor %s se dosadí jeden z tvarů slova hráč. Je to také krásná ukázka toho, že ternární operátor lze použít i v parametru funkce. Ještě jedno upozornění na závěr, když má tento operátor vracet řetězec, tak jej uzavřete do závorek vždy! Nevím, zda problém stále trvá, ale dříve byly problémy s tím, že když to nebylo v závorkách, pawno mohlo spadnout. Edit: Potvrzeno, problém stále trvá, pokud řetězec do závorek neuzavřete, kompilátor přestane pracovat. Tímto ukončuji návod, doufám, že si z něj někteří něco odnesou a že vám tento operátor třeba v něčem ulehčí nebo pomůže. Pokud jste narazili na nějakou chybu nebo se chcete na něco zeptat nebo se jen vyjádřit, pište. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
×
×
  • Create New...