Jump to content

info 2. kolo soutěže [POKYNY A ZADÁNÍ]


xhunterx

Recommended Posts

Cíl scriptu

Cílem je implementovat funkce dle prototypů a popisu v zadání. Jedná se o funkce pro práci s daty. Princip je podobny funkciam PVar. Pojde o premenne, ktore budu mat svoj nazov a svoje id.

Bude mozne s nimi pracovat podla id aj podla nazvu. Kazda premenna bude pole velkosti MAX_VAR_INDEX, podobne ako PVar je premenna velkosti MAX_PLAYERS. S kazdym indexom sa bude pracovat zvlast.

 

Co ovlivní hodnocení

Hodnocení bude záležet na níže uvedených faktorech (od nejdůležitějšího).

 

1. Přeložitelnost a chybovost (chyby, pády a varování kompilátoru, chyby při běhu [klikněte pro příklad]);

2. Správná implementace (dodržení zadání) a funkčnost;

3. Ošetření neočekávaných vstupů a hodnot;

4. Optimalizácia kódu

5. Přehlednost kódu.

 

Povolené "warning 203: symbol is never used" a "error 013: no entry point (no public functions)"

Tieto chyby su povolene, pretoze ide skorej o include nez o script.

Váš kód by nemal obsahovať nič, čo nieje súčasť vášho riešenia.

Funkcie a globálne premenné, ktoré niesú súčasťou zadania by mali byť statické.

Optimalizujte na vyuzitie CPU, az potom na RAM a na realne pouzivanie (funkcie Var_Create a Var_Destroy mozu byt pomalsie, kedze sa budu pouzivat malo, ale ostatne by mali byt co najrychlejsie).

 

Co je zakázáno

Níže uvedené funkce a způsoby programování jsou zakázány a za jejich použití bude značná ztráta bodů.

 

1. Jakékoliv knihovny (includy), které nejsou součástí a_samp.inc;

2. Jakékoliv pluginy.

3. Definovanie funkcie main alebo OnFilterScriptInit

4. Pouzivat funkcie PVar, SVar, setproperty a getproperty

 

Datum a způsob odevzdání

Hotové scripty zasílejte vEnd-ovi pomocí soukromé zprávy. Název scriptu bude ve tvaru vas_nick_na_foru.inc. Scripty mi můžete zasílat do 28. 2. 2017.

 

Zadání

1. Vlozte do suboru:

#define INVALID_VAR_ID -1

 

2. Vytvorte define ak neexistuju:

#define MAX_VAR_INDEX 100 // Index moze byt od 0 do MAX_VAR_INDEX-1

#define MAX_VAR_NUM 1000 // Maximalny pocet premennych Var

Ak uz je MAX_VAR_INDEX alebo MAX_VAR_NUM definovany, pouzije sa ten.

 

3. Vytvorte tag:

Error:

 

Tento tag obsahuje vystup funkcii. Premenna s tymto tagom sa musi rovnat true ak sa nevyskytla chyba a false ak sa chyba vyskytla.

Taktiez podmienka if(error) musi byt splnena vtedy a len vtedy, ak funkcia neprebehla uspesne (vyskytla sa chyba alebo ak hodnota nieje definovana. Napriklad: Error:-376437).

Funkcie musia vracat rozne hodnoty pre rozne druhy chyb. Odporucame pouzit enum na jednotlive hodnoty napriklad:

 

enum Error {

Var_Err_Invalid = 0,

Var_Err_OK = 1, // uspesne hodnoty su kladne

Var_Err_AllReturned = 2,

Var_Err_SomeReturned = 3,

Var_Err_NotFound = -1, // chyby su zaporne

Var_Err_BadIndex = -2,

// ...

}

 

4. Implementujte následující funkce

a) Var_Create

 



forward Var:Var_Create(const name[]);


Účel a implemenační detaily:

Vytvorit premennu s nazvom name. Premenna musi na vsetkych indexoch obsahovat hodnotu 0. Ci toto docielite v Create alebo Destroy je na vas.

 

Návratová hodnota:

id vytvorenej premennej   – uspesne vytvorenie;

id premennej s danym nazvom   – premenna so zadanym nazvom uz existuje;

INVALID_VAR_ID  – nastala chyba;

 

B) Var_Destroy

 

 



forward Error:Var_Destroy(Var:id);


Účel:

Odstrani premennu id.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
Var_Destroy(var);



.



c) Var_DestroyNamed

 



forward Error:Var_DestroyNamed(const name[]);


Účel a implementační detaily:

Odstrani premennu s nazvom name.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 

 



Var_Create("Zabitia");
 
Var_DestroyNamed("Zabitia");



.



d) Var_Set

 

 



forward Error:Var_Set(Var:id, index, value);


Účel:

Nadstavit hodnotu premennej id na indexe index na hodnotu value.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
Var_Set(var, 0, 22);
 
Var_Destroy(var);



.



e) Var_SetNamed

 

 



forward Error:Var_SetNamed(const name[], index, value);


Účel:

Nadstavit hodnotu premennej s nazvom name na indexe index na hodnotu value.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
Var_SetNamed("Zabitia", 0, 22);
 
Var_Destroy(var);



.



f) Var_Get

 

 



forward Error:Var_Get(Var:id, index, &value);


 

Účel a implementační detaily:

Vlozi hodnotu premennej id na indexe index do parametru value.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 



new Var:var = Var_Create("Zabitia");
 
Var_Set(var, 0, 22);
 
new value;
Var_Get(var, 0, value); 
printf("Zabitia: %i", value); // vypise sa 22
 
Var_Destroy(var);



.



g) Var_GetNamed

 



forward Error:Var_GetNamed(const name[], index, &value);


Účel:

Vlozi hodnotu premennej s nazvom name na indexe index do parametru value.

 

Návratová hodnota:

Chyba alebo uspech.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
Var_Set(var, 0, 22);
 
new value;
Var_GetNamed("Zabitia", 0, value); 
printf("Zabitia: %i", value); // vypise sa 22
 
Var_Destroy(var);



.



h) Var_GetID

 

 



forward Var:Var_GetID(const name[]);


Účel:

Ziska id premennej s nazovm name.

 

Návratová hodnota:

ID premennej.

INVALID_VAR_ID v případě, že premenna s nazvom name neexistuje!

 

Příklad použití:

 

 



Var_Create("Zabitia");
 
new Var:var = Var_GetID("Zabitia");
Var_Destroy(var);



.



i) Var_GetOrdered

 

 



forward Error:Var_Ordered(Var:id, array[], size = sizeof(array));


Účel a implementační detaily:

Ziska prvych size indexov zoradenych zostupne (od najvacsieho po najmensi).

 

Návratová hodnota:

Chyba alebo typ uspechu. Musi vratit rozne hodnoty ak sa do pola zmestili vsetky indexy a ak nie.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
Var_Set(var, 0, 22);
Var_Set(var, 1, 33);
Var_Set(var, 2, 27);
 
new arr[3];
Var_Ordered(var, arr, 3); // Ziska top 3 zabijakov
// arr[0] = 1
// arr[1] = 2
// arr[2] = 0



.



j) Var_GetError

 

 



forward bool:Var_GetError(Error:error, str[], maxsize = sizeof(str));


Účel a implementační detaily:

Ziska cloveku citatelny popis chyby error a vlozi ho do str.

Ak je popis chyby dlhsi ako maxsize, tak ho oreze.

Vrati "Uspech" alebo niec podobne ak nejde o chybu ale uspech.

 

Návratová hodnota:

true pre uspech, false ak ide o neplatnu chybu.

 

Příklad použití:

 

 



new Var:var = Var_Create("Zabitia");
 
new Error:err = Var_SetNamed("Zabitia", 0, 22);
 
new str[128];
Var_GetError(err, str);
print(str); // vypise chybu

Edited by xhunterx
Link to comment
Share on other sites

zdar, máte tam chybu (ak odhliadnem od chýb, že sa tam mieša slovenčina a čeština :d) v časti d) Var_Set nie je v ukážkovom kóde zadaný parameter index (vo funkcií Var_Set)

Link to comment
Share on other sites

zdar, máte tam chybu (ak odhliadnem od chýb, že sa tam mieša slovenčina a čeština :d) v časti d) Var_Set nie je v ukážkovom kóde zadaný parameter index (vo funkcií Var_Set)

Diki :d Opravene :d A nie, jazyk rozhodne neriesim :d Vacsina toho co je cesky je okopirovane zo zadania prveho kola :d Ten zvysok bez diakritiky je moja hroza :d Ale chapeme sa a to je hlavne :d

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

  • 1 month later...
  • Hlavní moderátor

Konec 2. kola

2. kolo soutěže skončilo! Brzy dojde k vyhlášení celkových výsledků soutěže.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...