xhunterx 55 Odesláno: 31. Leden, 2017 Share Odesláno: 31. Leden, 2017 (upraveno) 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; 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 24. Únor, 2017 by xhunterx Link to comment Share on other sites More sharing options...
milous22 13 Odesláno: 1. Únor, 2017 Share Odesláno: 1. Únor, 2017 zdar, máte tam chybu (ak odhliadnem od chýb, že sa tam mieša slovenčina a čeština ) 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 More sharing options...
xhunterx 55 Odesláno: 2. Únor, 2017 Author Share Odesláno: 2. Únor, 2017 zdar, máte tam chybu (ak odhliadnem od chýb, že sa tam mieša slovenčina a čeština ) v časti d) Var_Set nie je v ukážkovom kóde zadaný parameter index (vo funkcií Var_Set) Diki Opravene A nie, jazyk rozhodne neriesim Vacsina toho co je cesky je okopirovane zo zadania prveho kola Ten zvysok bez diakritiky je moja hroza Ale chapeme sa a to je hlavne 1 Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 15. Březen, 2017 Hlavní moderátor Share Odesláno: 15. Březen, 2017 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 More sharing options...
Recommended Posts