Hlavní moderátor vEnd 279 Odesláno: 1. Leden, 2017 Hlavní moderátor Share Odesláno: 1. Leden, 2017 Cíl scriptuCílem je implementovat funkce dle prototypů a popisu v zadání. Jedná se o funkce pro práci s řetězcem a o funkce pro nenáročné výpočty a úkony.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. Přehlednost kódu.Co hodnocení neovlivníV prvním kole nebude rozhodovat optimalizace kódu.Co je zakázánoNíže uvedené funkce a způsoby programování jsou zakázány a za jejich použití bude značná ztráta bodů. 1. Všechny funkce z knihovny string.inc (strlen, strcmp, strval apod.);2. Klíčové slovo stock u definic funkcí;3. Jakékoliv jiné knihovny (includy), které nejsou součástí a_samp.inc;4. Jakékoliv pluginy. Datum a způsob odevzdáníHotové scripty zasílejte mně pomocí soukromé zprávy. Název scriptu bude ve tvaru vas_nick_na_foru.pwn. Scripty mi můžete zasílat do 22. 1. 2017.Zadání1. Implementujte následující funkce pro práci s řetězcia) StringCompare forward StringCompare(const str1[], const str2[], bool:ignorecase=false, length=-1); Účel a implemenační detaily:Porovnat řetězce str1 a str2.Parametr ignorecase s hodnotou true nebude rozlišovat velká a malá písmena.Parametrem length lze určit, kolik znaků od začátku se bude porovnávat. Má-li zápornou hodnotu (výchozí je -1), budou se porovnávat celé řetězce.Návratová hodnota:0 – řetězce jsou totožné;1 – řetězec str1 je delší;-1 – řetězec str2 je delší;69 – řetězce jsou stejně dlouhé, ale nejsou totožné. Příklad použití: new res; res = StringCompare("Ahoj", "Ahoj"); //res bude mít hodnotu 0 res = StringCompare("Ahoj", "ahoj svete!", true, 4); //res bude mít hodnotu 0 res = StringCompare("Ahoj", "ahoj"); //res bude mít hodnotu 69 res = StringCompare("Ahoj svete!", "Ahoj"); //res bude mít hodnotu 1 res = StringCompare("Ahoj", "Ahoj svete!"); //res bude mít hodnotu -1 . StringToValue forward StringToValue(const str[]); Účel:Převést řetězec str na celé číslo (kladná i záporná čísla).Návratová hodnota:Převedené číslo.0 v případě, že byl řetězec prázdný nebo obsahoval i jiné znaky než číslice a mínus na začátku – ošetřte! Příklad použití: new res; res = StringToValue("0123"); //res bude mít hodnotu 123 res = StringToValue("-1445"); //res bude mít hodnotu -1445 res = StringToValue("4a8 58"); //res bude mít hodnotu 0 . c) StringConcat forward StringConcat(dest[], const src[], length = sizeof src, maxlen = sizeof dest); Účel a implementační detaily:Spojit řetězce dest a src a nový řetězec uložit do řetězce dest.Parametrem length lze určit, kolik znaků z řetězce src se má spojit s řetězcem dest.Velikost řetězce dest je uložena v parametru maxlen.Návratová hodnota:1 – funkce se provedla úspěšně;0 – nastala chyba (záporný parametr length apod. – ošetřte!). Příklad použití: new res[20+1] = "Ahoj, "; StringConcat(res, "svete!"); //res bude mít hodnotu "Ahoj, svete!" res = "Ahoj, "; StringConcat(res, "svete!", 2); //res bude mít hodnotu "Ahoj, sv" . d) StringTransliterate forward StringTransliterate(dest[]); Účel:Nahradit všechna diakritická znaménka (česká i slovenská) v řetězci dest vhodnými písmeny.Návratová hodnota:Žádná. Příklad použití: new res[] = "Příliš žluťoučký kůň úpěl ďábelské ódy."; StringTransliterate(res); //res bude mít hodnotu "Prilis zlutoucky kun upel dabelske ody." . e) StringAnalyze forward StringAnalyze(const dest[], const sequence[], &numcount, &letcount, &specount, &seqcount); Účel:Zjistit, kolikrát se v řetězci dest vyskytuje posloupnost znaků sequence, a tento počet uložit do parametru seqcount (rozlišují se velká a malá písmena).Zjistit, kolik obsahuje řetězec dest číslic, a tento počet uložit do parametru numcount.Zjistit, kolik obsahuje řetězec dest písmen, a tento počet uložit do parametru letcount (nerozlišují se velká a malá písmena).Zjistit, kolik obsahuje řetězec dest nealfanumerických znaků (znaky, které nejsou písmena ani číslice včetně mezer), a tento počet uložit do parametru specount.Návratová hodnota:Žádná. Příklad použití: new res[] = "ahahaha, 85,! mehehe, muhaha, AHAHAHA"; new num, let, spec, seq; StringAnalyze(res, "ha", num, let, spec, seq); //num bude mít hodnotu 2, let hodnotu 26, spec hodnotu 9 a seq hodnotu 5 . f) DecodeMorse (BONUS – nepovinné) forward DecodeMorse(const morsecode[]); Účel a implementační detaily:Do parametru morsecode se udává řetězec v morseovce, který je potřeba rozkódovat a vypsat do terminálu (funkce printf).Jednotlivá písmena se oddělují mezerou, slova lomítkem.Počítejte s tím, že zadaná morseovka bude vždy korektní, to znamená, že není třeba nic ošetřovat. Návratová hodnota:Délka dekódovaného řetězce. Příklad použití: DecodeMorse(".... . .-.. .-.. ---/.-- --- .-. .-.. -.."); //do terminálu se vypíše "Hello world" a návratová hodnota bude 11 . 2. Implementujte následující funkce pro nenáročné výpočty a úkonya) HexToDec forward HexToDec(strhex[]); Účel:Převést číslo šestnáctkové soustavy ve formě řetězce strhex na číslo desítkové soustavy.Návratová hodnota:Převedené číslo.-1 v případě, že je řetězec strhex prázdný nebo obsahuje jiné znaky než 0-9, A-F či a-f – ošetřte! Příklad použití: new str[] = "FF", hex; hex = HexToDec(str); //hex bude mít hodnotu 255 . BinToDec forward BinToDec(strbin[]); Účel:Převést číslo dvojkové soustavy ve formě řetězce strbin na číslo desítkové soustavy.Návratová hodnota:Převedené číslo.-1 v případě, že je řetězec strbin prázdný nebo obsahuje jiné znaky než 0 a 1 – ošetřte! Příklad použití: new str[] = "11111111", bin; bin = BinToDec(str); //bin bude mít hodnotu 255 . c) RandomEx forward RandomEx(min, max, excepts[], size = sizeof excepts); Účel a implementační detaily:Vygenerovat náhodné kladné číslo v rozsahu od min do max.Vygenerované číslo se nesmí shodovat s žádným číslem z pole excepts (velikost pole je uložena v parametru size).Návratová hodnota:Vygenerované náhodné kladné číslo.-1 v případě neúspěchu (min je větší než max, číslo není kladné apod. – ošetřte!). Příklad použití: new arr[] = {1, 2, 3}, randNum; randNum = RandomEx(1, 4, arr); //randNum bude mít hodnotu 4, protože čísla 1, 2, 3 jsou v poli arr randNum = RandomEx(1, 10, arr); //randNum bude mít hodnotu z rozsahu od 4 do 10 (1, 2, 3 opět nevyhovují) . d) FileRead forward FileRead(fpath[], arr[6]); Účel a implementační detaily:Přečíst 3 údaje ze souboru s cestou fpath, převést je na číslo pomocí funkce StringToValue a uložit je do pole arr na indexy 0, 1 a 2.Uložit 3 náhodně vygenerovaná čísla (funkce RandomEx) s rozsahem od 1 do 10 na indexy 3, 4 a 5. Tato čísla se nesmí shodovat s čísly na indexech 0, 1 a 2!Návratová hodnota:1 – funkce se provedla úspěšně;0 – nastala chyba (soubor se neotevřel správně, cesta k souboru neexistuje apod. – ošetřte!). Příklad použití: new arr[6]; FileRead("neco.txt", arr); . e) GetMinMax forward GetMinMax(arr[], &min, &max, size = sizeof arr); Účel:Zjistit minimální a maximální hodnotu z pole arr a indexy pole s minimální a maximální hodnotou uložit do parametrů min a max.Velikost pole arr je uložena v parametru size.Návratová hodnota:Žádná. Příklad použití: new arr[6] = {4, 5, 2, 6, 8, 7}, minVal, maxVal; GetMinMax(arr, minVal, maxVal); //minVal bude mít hodnotu 2 a maxVal hodnotu 4 . Soubor k funkci FileRead je k dispozici v přílohách (jak pro Windows, tak pro Linux – rozdílné odřádkování). file_windows.txt file_linux.txt Link to comment Share on other sites More sharing options...
DeNisKo 8 Odesláno: 9. Leden, 2017 Share Odesláno: 9. Leden, 2017 Tak na toto som zvedavý. Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 12. Leden, 2017 Author Hlavní moderátor Share Odesláno: 12. Leden, 2017 Tak na toto som zvedavý. Klidně se můžeš taky zapojit. 4 Link to comment Share on other sites More sharing options...
DeNisKo 8 Odesláno: 13. Leden, 2017 Share Odesláno: 13. Leden, 2017 Na to nervy nemám. Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 14. Leden, 2017 Globální moderátor Share Odesláno: 14. Leden, 2017 Na to nervy nemám. Přiznejme si to... ani znalosti 4 Link to comment Share on other sites More sharing options...
DeNisKo 8 Odesláno: 14. Leden, 2017 Share Odesláno: 14. Leden, 2017 Presne Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 22. Leden, 2017 Author Hlavní moderátor Share Odesláno: 22. Leden, 2017 První kolo ukončeno 1. kolo tímto skončilo. Nyní dojde k vyhodnocení prací těch, kteří se zúčastnili. Čekjte na vyhodnocení! Link to comment Share on other sites More sharing options...
Recommended Posts