Přejít na obsah

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

pawn soutěž první kolo zadání pokyny

  • Tohle téma je uzamčeno Toto téma je uzamčeno
6 odpovědí

#1
vEnd

vEnd

    Marc Wayne "B-Dup"

  • Globální moderátor
  • Příspěvků: 496
  • Je tu celkem: 45d 18h 58m 54s

Cíl scriptu
Cí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á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. 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ězci
a) 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

.

B) 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 úkony
a) 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

.

B) 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í).

Přiložené soubory


  • 0


96b259ac47244701b5097887d9439120.png

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
Roses are gay, violets are gayer, fuck the poem and listen to Slayer.
Unix is user friendly. It just happens to be very selective about who it decides to make friends with.


#2
DeNisKo

DeNisKo

    Jethro

  • Uživatel
  • Příspěvků: 143
  • Je tu celkem: 10d 1h 16m 41s

Tak na toto som zvedavý. 


  • 0

#3
vEnd

vEnd

    Marc Wayne "B-Dup"

  • Globální moderátor
  • Příspěvků: 496
  • Je tu celkem: 45d 18h 58m 54s

Tak na toto som zvedavý. 

Klidně se můžeš taky zapojit. :)


  • 4

96b259ac47244701b5097887d9439120.png

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
Roses are gay, violets are gayer, fuck the poem and listen to Slayer.
Unix is user friendly. It just happens to be very selective about who it decides to make friends with.


#4
DeNisKo

DeNisKo

    Jethro

  • Uživatel
  • Příspěvků: 143
  • Je tu celkem: 10d 1h 16m 41s

Na to nervy nemám.


  • 0

#5
HighPrint

HighPrint

    Proud =NTP= Member

  • Ověřený uživatel
  • Příspěvků: 1 082
  •   
  • Je tu celkem: 25d 9h 55m 17s

Na to nervy nemám.

 

Přiznejme si to... ani znalosti


  • 4
Posted Image

#6
DeNisKo

DeNisKo

    Jethro

  • Uživatel
  • Příspěvků: 143
  • Je tu celkem: 10d 1h 16m 41s

Presne 


  • 0

#7
vEnd

vEnd

    Marc Wayne "B-Dup"

  • Globální moderátor
  • Příspěvků: 496
  • Je tu celkem: 45d 18h 58m 54s

První kolo ukončeno

1. kolo tímto skončilo. Nyní dojde k vyhodnocení prací těch, kteří se zúčastnili. Čekjte na vyhodnocení!


  • 0

96b259ac47244701b5097887d9439120.png

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
Roses are gay, violets are gayer, fuck the poem and listen to Slayer.
Unix is user friendly. It just happens to be very selective about who it decides to make friends with.






Také označeno jedním nebo více klíčovými slovy: Info, pawn, soutěž, první kolo, zadání, pokyny

0 uživatelů si prohlíží toto fórum

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

© 2015 IPS, Inc.

Zajímat Vás mohou ještě aktuální zprávy. sleviště, slevy dnes Herbalife je skvělou cestou pro dobré zdraví. Je libo dětský web?