Polskie końcówki wyrazów w zależności od w...
Gość_21977_* 30.06.2012
Wstęp
Na pewno nieraz widzieliście napisy typu:
lub po prostu problem Was przerastał.
Mam dla Was wspaniałą nowinę:
Od dziś będziecie spać spokojnie!
Albowiem przedstawiam rozwiązanie.
Stock wybiera odpowiednią końcówkę na podstawie podanej wartości.
Mamy do czynienia z dwoma stockami:
Opis
Zmienna czlon służy zaoszczędzeniu czasu w używaniu funkcji, pozostawienie jej pustej i podanie pełnych odmian słów pozostałych zmiennych
w zupełności spełni swoje zadanie, choć zazwyczaj zwyczajnie przysporzy nam niepotrzebnego pisania kilkakrotnie początku tego samego wyrazu.
Przykłady
Stocki do skopiowania
Stocki do pobrania
koncowka.inc 1,02 KB
160 Ilość pobrań
Implementacja (koncowka.inc)
Na pewno nieraz widzieliście napisy typu:
- Koszt przesyłki wynosi 24 złotych
- Na Twoim koncie jest 1 punktów
- Sesja wygaśnie za 4 minut
lub po prostu problem Was przerastał.
Mam dla Was wspaniałą nowinę:
Od dziś będziecie spać spokojnie!
Albowiem przedstawiam rozwiązanie.
Stock wybiera odpowiednią końcówkę na podstawie podanej wartości.
Mamy do czynienia z dwoma stockami:
- dkoncowka() dla liczb całkowitych (integer, decimal)
- fkoncowka() dla dla liczb zmiennoprzecinkowych (float)
dkoncowka(ile, czlon[], zero[], jeden[], dwa[]);
fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]);
Opis
- ile [liczba całkowita dla dkoncowka(), zmiennoprzecinkowa dla fkoncowka()] → wartość, na podstawie której wybierana będzie końcówka
- czlon [ciąg znaków] → wbrew nazwie humanistycznej, początek wyrazu wyświetlanego, identyczny dla wszystkich kolejnych argumentów
- zero [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0, która dołączona do członu da pełny, odmieniony wyraz
- pol [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 0.5, która dołączona do członu da pełny, odmieniony wyraz
- jeden [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 1, która dołączona do członu da pełny, odmieniony wyraz
- dwa [ciąg znaków] → końcówka, którą przyjmuje wyraz dla wartości ile równej 2, która dołączona do członu da pełny, odmieniony wyraz
Zmienna czlon służy zaoszczędzeniu czasu w używaniu funkcji, pozostawienie jej pustej i podanie pełnych odmian słów pozostałych zmiennych
w zupełności spełni swoje zadanie, choć zazwyczaj zwyczajnie przysporzy nam niepotrzebnego pisania kilkakrotnie początku tego samego wyrazu.
Przykłady
if(is_user_alive(id)){
new hp=get_user_health(id);
client_print(id,print_chat,"Masz %d %s zycia", hp, dkoncowka(hp, "punkt", "ow", "", "y"));
}
if(is_user_connected(id)){
new frags=get_user_frags(id);
if(frags)
client_print(id,print_chat,"Zdobyles %d %s", frags, dkoncowka(frags, "frag", "ow", "a", "i"));
else
client_print(id,print_chat,"Nie zdobyles jeszcze zadnego fraga");
}
Stocki do skopiowania
stock dkoncowka(ile, czlon[], zero[], jeden[], dwa[]){
new str[1024];
ile=abs(ile);
if(ile==1){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if((ile%10==2 || ile%10==3 || ile%10==4) && (!(ile%100==12 || ile%100==13 || ile%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}
stock fkoncowka(Float:ile, czlon[], zero[], pol[], jeden[], dwa[]){
new str[1024];
ile=floatabs(ile);
if(ile==1.0){
format(str,1023,"%s%s",czlon,jeden);
return str;
}
if(ile!=floatround(ile)){
format(str,1023,"%s%s",czlon,pol);
return str;
}
new num=floatround(ile);
if((num%10==2 || num%10==3 || num%10==4) && (!(num%100==12 || num%100==13 || num%100==14))){
format(str,1023,"%s%s",czlon,dwa);
return str;
}
format(str,1023,"%s%s",czlon,zero);
return str;
}
Stocki do pobrania
koncowka.inc 1,02 KB
160 Ilość pobrańImplementacja (koncowka.inc)
- Kopiujemy stock do folderu scripting/include i dodajemy na początku kodu
#include <koncowka>
- Lub kopiujemy potrzebne stocki do naszego kodu
radim
01.07.2012
Hehe, dobry pomysł, wręcz zaje*isty ; ) Dużo razy borykałem się z tym problemem i używałem zawsze if'ów

+
+
grzesiu131
30.07.2012
Jest możliwość dodania trzeciego stock'u, który sprawdzałby czy pierwszy argument jest typu int czy float i na podstawie wyników sam wybierał który stock użyć d-f ?
GwynBleidD
23.03.2013
#define konc(%1,%2,%3,%4) (%1==1?%2:(%1%%10<5&&%1%%10!=05||%1/10!=1)?%2:%3)
Zawsze robiłem to w ten sposób... Kto ten kod zrozumie?




