Jump to content

návod Inicializace aneb nastavení hodnot v polí [****]


HighPrint

Recommended Posts

  • Globální moderátor

Inicializace aneb nastavení hodnot

:4:

Zdravím, jsem tu s prvním TuTem a to je Inicializace aneb nastavování hodnot do polí. Jak už víte, pole můžeme využít k uložení vícero informací do jedné jediné větvící se proměnné. Více se dozvíte o polích v ffredykově výuce (link: viewtopic.php?f=79&t=14522). Tady v mým tutu se bude teda popisovat nastavováhní hodnot polí.

Nastavování hodnot teda lze podle jejich využití a typů. 

Příklad:

new p; // p je nulová tudíž jeho hodnota je 0
new p = 1; // přiřadili jsme proměně p hodnotu 1
new p = 'd' ; // přiřadili jsme proměně p písmenko 'd' využití se najde spousta
new p[3] = {1,2,3}; // přiřadili jsme jednotlivým polím hodnotu
new p[3] = {1,2}; // třetí pole bude 0
new bool:p = true; // přiřadili jsme booleanu p počáteční hodnotu true

Poznámka: Vlastně přiřazování písmenka funguje stejně jako format, akorát ten za nás dělá tu těžkou práci. Funguje to tak, že za každou poli se přiřadí určité písmenko.

new p[5];
p[0] ='a';
p[1] ='h';
p[2] = 'o';
p[3] = 'j';
printf(„%c%c%c%c“,p[0], p[1], p[2], p[3]); // %c = formát charakteru, tudíž to vypíše písmenko
format(p,sizeof(p),"ahoj");

Vysvětlení: Vytvořili jsme proměnnou p s 5 polí (1 pole navíc aby se rozpoznalo, že se jedná o string, tím, že v posledním poli uloží ukončovací/nulový znak '\0'. V případě delšího řetězce než máme definované pole, ukončovací znak sebere poslední znak z řetězce a přepíše ho na ukončovací znak. Proto se vypíše jen "aho" místo "ahoj"). 

Progresivní nastavování hodnot v poli
Teď si povíme o progresivním nastavování hodnot (Jinými slovy posloupnost). Značí se teda třemi tečkami („…“) a závisí vždycky na 2 posledních polích.

Příklady:

new p[10] = {1,…}
/* Když máme jen jednu hodnotu, ostatní hodnoty se budou řídit tím jediným… tudíž to by bylo stejné jako kdybychom nastavovali {1,1,1,1,1,1,1,1,1,1} */
new p[10] = {1,2…}
/* {1,2,3,4,5,6,7,8,9,10}*/
new p[10] = {1,2,30,40…}
/* řídí se podle 2 posledních hodnot,
tudíž {1,2,30,40,50,60,70,80,90,100} */

POZOR: Nefunguje s abecedou!

Vzhledem k tomu, že ffredyk uvedl ve svém tutu ještě enum, tak vám ukážu jejich přiřazování hodnot. Předvedu jen se 3 známými typy proměn.

Příklad:

enum ENUM_TURBO
{
text[5], //string
bool:boolean1,//bool
p // promena
}
new Supr[ENUM_TURBO] = {"ahoj",true,5}; // přiřadili jsme teda stringu text „ahoj“, booleanu true, a hodnotu 5 proměně p

A jak vlastně vypadá přiřazování hodnot když máme více větví? Dovolím si vypůjčit teda obrázek ffredyka:

strom.PNG

Příklad:
new p[2][5] = { {1,2,3,5,6} , {7,8,9,10,11} };

Vysvětlení:
Takto asi celkově vypadá když si pole rozdělíme… máme jednu počáteční závorku (kmen; zvýrazněné zelenou), potom 2 větve (zvýrazněné červeně) a v nich další 5 větviček což jsou ty hodnoty které náleží dané větvi.

Další příklad, tentokrát se stringama

new p[2][5] = { "cus" , "ahoj" } ;

Vysvětlení:
A teď zase znova, „větvičky a větvě“… Kmen je zvýrazněn zelenou barvou, a větve jsou datové objekty, na nichž 5 polí. A taky bacha když s tímto pracujete ještě hlouběji, všimněte si, že slovo cus má jinou délku než ahoj, takže když zjišťujete písmenka např. takto: printf(“%c - %c“, p[0][4], p[1][4]); tak bude asi jasné, že to písmenko nevypíše, neboť slovo „cus“ má jen 3 písmenka a nevypíše se teda čtvrtý. Naopak druhé písmenko vypíše teda „j“…. Doufám, že tuto část jsem vysvětlil jasně :) jestli ne tak sem napište dotaz a rád vám pomůžu.

A poslední fáze, jak zjistit jednotlivé větve nebo kmen jak dlouhé to je, mám teď na mysli funkci „sizeof“. Řekl bych, že tady u téhle části to sám vysvětlit ani neumím, ale snad vám to pomůže když vám to tady ukážu na příkladě:

Příklad:

new p[2][3] = { {1,2,3}, {4,5,6}};
sizeof(p) = vypíše 2, = samotné p = výsledek je velikost „kmene“ 
sizeof(p[]) = vypíše 3 = p[] = výsledek jsou „větve“

Závěr: Tak to je snad všechno, jestli najdete chybu stačí informovat a upravím to :) Doufám, že jste se něco nového dozvěděli, někteří jedinci ano, někteří ne. Jestli jste něčemu nerozuměli stačí napsat :)

 

Ověřený návod

Tento návod prošel validací, a lze ho proto považovat za ověřený.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Hezký TuT, zase jsem se něco přiučil páč moc pole a enumy nevyužívám.

 

Mohl jsi ještě zmínit, že pokud děláme string, tak když si uděláme ...

 

new string[4];

 

A do formátu vypíšeme např.:

 

format(string,sizeof(string),"ahoj");

 

Tak nám to bude házet error že pole je moc malé tudíž musíme vždy přidat +1 hodnotu do pole takže ..

 

new string[5];

Link to comment
Share on other sites

  • Globální moderátor

Díky Blyster :)

 

Mort: Mám to tam vysvětlené

 

+1 pole navíc aby pawn rozpoznal, že se jedná o string, protože v posledním poli uloží ukončovací znak, jestliže nebudeme mít tento ukončovací znak vypíše to jen "aho" místo "ahoj"

 

Měl jsem to tam odzačátku a errory by to normálně házet nemělo

Link to comment
Share on other sites

  • Globální moderátor

QWER, obvykle urážíš, kritizuješ, ale najednou pochvala :d Skoro bych řekl, že si to ani nečetl no... :d ale na přání přidáno co znamená formát %c, ale jinak díky :d

 

KarTooN, to platí pro tebe taky :d četl jsi to vůbec? :d, ale jinak díky

Link to comment
Share on other sites

  • Globální moderátor

QWER, obvykle urážíš, kritizuješ, ale najednou pochvala :d Skoro bych řekl, že si to ani nečetl no... :d ale na přání přidáno co znamená formát %c, ale jinak díky :d

 

KarTooN, to platí pro tebe taky :d četl jsi to vůbec? :d, ale jinak díky

Link to comment
Share on other sites

QWER, obvykle urážíš, kritizuješ, ale najednou pochvala :d Skoro bych řekl, že si to ani nečetl no... :d ale na přání přidáno co znamená formát %c, ale jinak díky :d

 

KarTooN, to platí pro tebe taky :d četl jsi to vůbec? :d, ale jinak díky

četl, hodně zajímavé :boss: jen tak dál :v:

Link to comment
Share on other sites

QWER, obvykle urážíš, kritizuješ, ale najednou pochvala :d Skoro bych řekl, že si to ani nečetl no... :d ale na přání přidáno co znamená formát %c, ale jinak díky :d

 

KarTooN, to platí pro tebe taky :d četl jsi to vůbec? :d, ale jinak díky

četl, hodně zajímavé :boss: jen tak dál :v:

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...