Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

destrojer - zdjęcie

destrojer

Rejestracja: 24.02.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 28.05.2010 20:49
-----

#118012 Troche o enum

Napisane przez destrojer w 11.03.2010 20:08

Moje czepialstwo wynika z nadmiernego perfekcjonizmu, nie bierzcie tych uwag jako chęć udowodnienia, że wszyscy się mylą a tylko ja mam racje. Ja też często popełniam błędy, ale inni zaraz mnie poprawiają pozwala mi to na samodoskonalenie się. Chcę i wam dać tę szanse. ZAWSZE można nauczyć się czegoś nowego. Jeszcze w roli ścisłości dodam, że stałe w enum'ach (nie ważne jaki tag im nadamy) możemy inicjalizować tylko i wyłącznie liczbą naturalną. Zapis
enum 
{
    Float:pi = 3.14
}
jest zatem zapisem błędnym.

PS. Nazwa tematu jest zależna od Ciebie. Niestety nie można wszystkiego wyjaśnić w prosty sposób (wówczas zawsze powstaną niedopowiedzenia).
  • +
  • -
  • 3


#118006 Troche o enum

Napisane przez destrojer w 11.03.2010 19:48

enum to jest sprytny sposob by zamiast korzystac z niewygodnych cyft, zmienic je w wiecej nam mowiace nazwy.

Enum to odpowiednik typu wyliczeniowego z np. takiego C++. To o czym napisałeś można odnieść do stałych ewentualnie makrodefinicji.

PAWN ma wiele wlasnych enum'ow ktore pozwalaja nam np. zamiast stosowac niewygodnych id broni 22, stosowac CSW_M4A1.


Ja optuje za tym, ze są to stałe, ew. makrodefinicji (mogę się mylić ponieważ nigdy na oczy nie widziałem zawartości bibliotek CS'a).

Mogłeś dodać, że enum'a można połączyć z tablicą co pozwoli na przyjemne jej indeksowanie.

enum  nazwa
{
    //nazwy_stalych
}
new tablica[nazwa];

Jest to możliwe ponieważ enum zwraca taki rozmiar co jego ostatnia wartość powiększona domyślnie o jeden (można to zmienić stosownym poleceniem). Można to sprawdzić za pomocą sizeof'a.
enum  nazwa
{
    //nazwy_stalych
}
new tablica[nazwa];
printf("%d", sizeof(tablica));

Co więcej możliwe jest użycie w enumie różnych tagów (umożliwia to przechowywanie wielu typów danych w jednej tablicy bez zbędnych ostrzeżeń ze strony kompilatora). To jest chyba jedyny przykład zastosowania "obiektowości" w PAWN.

Jest to oczywiste, ze dziesiec ma wartosc 10, dwadziescia ma wartosc 20 i czterdziesci ma wartosc 40. Ale na co trzeba zwrocic uwage, to trzydziesci ma wartosc 21!. enum nie dziala jak exel, ze sam wie o ile sie zmieniaja kolejne wartosci.

Ale można "pokazac" o ile ma zmieniać sie domniemana wartość stałych (domyślnie jest to += 1).
enum (+=10)
{
	z,
	x,
	c,
	v
};
printf("%d", c);

enum zamienia liczby na słowa ...
Nie możesz dać tam liczb.

enum nadaje wartość stałym (nie słowom, samo słowo to tylko odwołanie do komórki pamięci) poprzez domniemanie.

Można używać liczb w nazwach jednakże nie mogą one jednak być pierwszym znakiem w nazwie. To jest 123a jest niedozwolone, ale a123 już tak.
  • +
  • -
  • 7


#114401 Zmienne - Co I Jak?

Napisane przez destrojer w 24.02.2010 23:19

Tak wiem, że temat ma ponad rok i z góry przepraszam za odkop, ale nie mogę tak tego zostawić.

Po 1 nie wiem jak się uczyłeś, ale nie rozpowszechniaj takich bzdur dobrze?
Po 2 zmienne w tym sensie co Ty przedstawiłeś definiujemy a nie deklarujemy. Jest różnica między tymi pojęciami.
Po 3

Najprościej ujmując zmienna jest to obszar ulokowany w pamięci komputera przechowywujący dane różnego typu

jak już chcesz tak pisać to uważaj na słownictwo. Nie ma czegoś takiego jak OBSZAR PAMIĘCI, jak już to komórka pamięci i nie jest to język prosty jeśli chodzi o tłumaczenie czegoś zielonym.
Po 4

Inicjacja:
Pierwsze przypisanie wartości do zmiennej po jej utworzeniu:

new zmienna;
zmienna = 1;

rozumiem, ze inicjacja seksualna tak? Zmienne się inicjALIZuje. Poza tym to jest przypisanie do zmiennej wartości a nie zainicjalizowanie jej.

Po 5

Przy ich tworzeniu automatycznie ustawiane są na 0( nie przechowywują żadnych danych, są po prostu puste)

zero jest logicznym fałszem więc jest wartością mój drogi.

Po 6

String:
Zmienna przechowywująca string - ciąg znaków. Po nazwie wystarczy dodać dwa nawiasy(lub więcej w zależności jaką tablice chcemy stworzyć)
Deklaracja:

new zmienna[ilosc_znakow_tablicy];

zmienna może Ci co najwyżej przechować jeden znak. Teraz czas na małą zabawę. Jestem zielony i czytam to co napisałeś w nawiasie. Tworzę coś takiego
new a[[[[[[[[2]]]][[]]][[]]]]];
, zrobiłem tak bo napisałeś to bardzo skrótowo i tym samym nie zrozumiale dla noobków.

Po 7

W Pawnie można spotkać następujące typy zmiennych:

w PAWN nie ma TYPÓW zmiennych, są tylko tagi.

Po 8

Stock:
Wiele osób używa je, ale tak naprawdę nie wie jak one działają. Zmienne te są tworzone tylko wtedy, jeżeli są używane, w innym wypadku kompilator je ignoruje. Zazwyczaj używane w plikach nagłówkowych .inc .
Deklaracja:

stock zmienna;

kiedy świnie zaczną latać. Takie coś (bo nie mam pomysłu jak to nazwać) wywoła tylko błędy i nic więcej. Jeśli nie wiesz czym jest stock to nie pisz o tym dobrze?

Już mi się nie chce wyliczać, znudziło mi sie

Stałe:
Działają tak samo jak zmienne, lecz zmienną ich nie można nazwać gdyż byłaby to kompletna sprzeczność. Różnią się tym, że poprzez cały czas mają jedną wartość, która zostanie im przypisana, nie można na nich wykonywać żadnych operacji oprócz pobierania ich wartości. Przy tworzeniu przed nazwą trzeba dodać przedrostek 'const'

Makrodefinicje:
Bardzo podobne do zmiennych, działają na zasadzie "niech X będzie Y". Tak więc jeżeli do makrodefinicji X przypiszemy Y każdorazowe wpisanie w kodzie X skutkuje wywołaniem Y. Programiści używają ich najczęściej aby zaoszczędzić sobie wpisywania długich nazw funkcji, lub ścieżek do plików. Nie ma ograniczeń co do typu przechowywanych w nich danych. Tworzenie:

Wyjaśniłeś to bardzo pobieżnie. Nie wspomniałeś jaka różnica miedzy stałą a makrodefinicją, nie wspomniałeś dlaczego w pewnych sytuacjach stosowanie makrodefinicji jest mniej praktyczne niż stałych. Mały przykład
new const a = 2 + 2;
#define WYNIK       2+2

printf(" Wynik 1:  %i\n Wynik2: %i", (a * 2), WYNIK * 2 );

W 1 przypadku wynikiem bedzie 8, w drugim 6. Dlaczego? Bo kompilator zastępuje każda definicję jej wartością.


Trochę już zmęczony jestem.

Nigdy więcej nie patrz na mnie takim wzrokiem

Nigdy więcej nie miej takich zimnych oczu

Pozdrawiam.

Dziękuję, dobranoc
D.
  • +
  • -
  • 7