←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Kilka pytań odnośnie switchy, tablic...

Zablokowany

  • +
  • -
sebul - zdjęcie sebul 20.02.2011

Witam. Mam parę pytań, na które nie jestem pewien odpowiedzi, a i wujek gogle nic nie powiedział, a przynajmniej nie tak dokładnie. To może po kolei
1. Na jakiej zasadzie działa switch? Może podam to na przykładzie
Czy
switch(cos) {
case 1: cos1
case 2: cos2
case 3: cos3
}

oznacza to samo co
if(cos == 1) cos1
else if(cos == 2) cos2
else if(cos == 3) cos3

czy
if(cos == 1) cos1
if(cos == 2) cos2
if(cos == 3) cos3

?? Różnica jest zasadnicza, więc dlatego pytam.

2. Jeśli do tablicy, np. "tab[3]" przypiszemy 1, czyli
tab[3] = 1

to będzie to oznaczać to samo co
tab[0] = 1
tab[1] = 1
tab[2] = 1

?? Czy tylko do pierwszej przypisze 1, a do reszty 0?

3. No i jeszcze jedno. Często w jakichś pluginach różnie zapisuje się jakieś funkcje, raz jest z "public", raz z "stock", a raz w ogóle nic nie ma, czyli od razu jest nazwa funkcji. Stock wiem na jakiej zasadzie działa (gdy nie jest użyty, to tak jakby w ogóle go nie było), ale skąd mogę wiedzieć jak najlepiej zapisać daną funkcję? Ogólnie kiedy używać "stock", kiedy "public", a kiedy nic? Chodzi mi, np. o takie coś
public funkcja() {
// kod
}

stock funkcja() {
// kod
}

funkcja() {
// kod
}

No i skąd wywnioskować jak najlepiej zapisać daną funkcję?
Odpowiedz

FreZZy - zdjęcie FreZZy 20.02.2011

1. switch jest jak else if, w PAWNie przynajmniej bo w Cpp sie to komplikuje - jest jeszcze instrukcja break;

2. Jak przypisujesz wartość tablicy, to oznacza to adres jej - czyli zerowy element

to to samo co
tab[0] = 1

reszta jest pusta

3. nie znam sie tak na PAWN'ie ,nie pomoge ci w tym :C
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 20.02.2011

Przypisanie wszystkim elementom wartości jest dostępne tylko przy inicjalizacji:
new Tablica[10] = {1, ...};
a potem to już tylko pętle :)


publiczne funkcje są dostępne z zewnątrz pluginu, a zwykłe (od razu nazwa) lub stocki są tylko jego; dostęp zewnętrzny jest potrzebny AMXXowi przy wywoływaniu forwardów, więc wszystkie funkcje typu register_* potrzebują funkcji publicznych, tzn "callbacki"; taski także są zrealizowane na forwardach, więc przypisujesz im funkcje publiczne;

Ogólnie:
jeśli sam wywołujesz funkcję: stock lub zwykła
jeśli pozwalasz AMXXowi na jej wywołanie: public
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 20.02.2011

Ogólnie:
jeśli sam wywołujesz funkcję: stock lub zwykła
jeśli pozwalasz AMXXowi na jej wywołanie: public

A jest jakaś różnica w przeciążeniu serwera? Takie mało ważne pytanie, ale warto wiedzieć na przyszłość ;]
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 20.02.2011

nic, czym miałbyś się martwić :)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 21.02.2011

No to wszystko wyjaśnione. Dzięki, a temat do zamknięcia.
Odpowiedz

FreZZy - zdjęcie FreZZy 21.02.2011

a jeszcze jedno

jak jest taki zapis:

tablica1[5] = {0}

to wtedy wszystkie elementy mają wartość 0 ?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 21.02.2011

Z tego co wyczytałem wczoraj na necie, to tak.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.02.2011

to co zaraz napiszę też będzie na necie:

tablica1[5] = {0}

to wtedy wszystkie elementy mają wartość 0 ?

nie, tylko pierwszy
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 21.02.2011

Sory, ale jak widać C/Tablice - Wikibooks, biblioteka wolnych podręczników tutaj jest właśnie napisane, że takie coś zeruje całą tablicę, zresztą chyba nie tylko tam, bo gdzieś jeszcze widziałem, ale teraz tego nie znajdę tak szybko. No ale skoro to wał, co wypisują na necie, to dobrze wiedzieć.
Użytkownik sebul edytował ten post 21.02.2011 13:17
Odpowiedz

GoldeN - zdjęcie GoldeN 21.02.2011

Z tego co mi wiadomo, to zapis:

tablica1[5] = {1}

Zrobi coś takiego:

tablica[0] = 1
tablica[1] = 0
tablica[2] = 0
tablica[3] = 0
tablica[4] = 0

Czyli zapis:

tablica1[5] = {0}

Nada pierwszej tablicy ([0]) wartość 0 i reszte także ustawi na 0. Czyli ile wartości w { } tym tylko początkowym nada wartość, resztę nada zera.



A teraz cytat z Symfonii C++ Grębosza, by moje słowa nie były "puste"

int t[4] = { 17,5 };

Jak widać, liczb jest tu za mało.

Inicjalizacja taka spowoduje, że żądane wartości początkowe zostaną nadane tylko tym dwóm pierwszym elementom. Elementom t[0] i t[1]. Pozostałe dwa elementy będą inicjalizowane zerami.


Użytkownik GoldeN edytował ten post 21.02.2011 16:31
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.02.2011

w C takie coś wyzeruje tablice
tablica1[5] = {0,}
w Pawnie takie:
tablica1[5] = {0,...}

no dobra, to to i tak zerowanie,a kolego pytał o przypisanie wartości
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 21.02.2011

no dobra, to to i tak zerowanie,a kolego pytał o przypisanie wartości

Ja pytałem o przypisywanie, a o co pytał FreZZy to za niego nie odpowiem, ale chodziło mu chyba o zerowanie. Teraz chyba już całkowicie temat wyczerpany.
Odpowiedz

FreZZy - zdjęcie FreZZy 21.02.2011

dla mnie też dzięki za info

plusy
Odpowiedz
Zablokowany