Zmienne - Co I Jak?
darkman
30.01.2009
----------------------------------------------------------------------------------------------------------------------------------
Tworzeniu zmiennych są przypisane trzy pojęcia, mianowicie:
Deklaracja:
Po prostu utworzenie zmiennej, bez nadawania jej wartości:
new zmienna;
Inicjacja:
Pierwsze przypisanie wartości do zmiennej po jej utworzeniu:
new zmienna; zmienna = 1;
Definicja:
Jednoczesne zadeklarowanie i zainicjowanie zmiennej:
new zmienna = 2;
----------------------------------------------------------------------------------------------------------------------------------
W Pawnie można spotkać następujące typy zmiennych:
Integer:
Zmienna przechowywująca dowolne liczby całkowite np. 1, 2, 124, 553562 i wszystkie inne.
Ich deklaracja jest bardzo prosta:
new zmienna;
Float:
Zmienna przechowywująca liczby zmiennoprzecinkowe np. 3.5, 7.0, 2.1.
Deklaracja:
new Float:zmienna
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];
Bool:
Tzw. zmienna logiczna, która przechowuje tylko wartość true(1), lub false(0). Zazwyczaj używane do tego, żeby określić czy coś jest włączone, lub nie.
Deklaracja:
new bool:zmienna;
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;
----------------------------------------------------------------------------------------------------------------------------------
Operacje na zmiennych:
Jest możliwych kilka sposobów. Pierwszy to umieszczenie znaku dodawania przed znakiem równości.
zmienna += wartość
Zostanie ona powiększona o podaną wartość.
Sposób drugi:
zmienna = zmienna + wartość
Zostaje pobierana aktualna wartość zmiennej i o ile ma zostać powiększona.
Zamiast plusa można użyć innych znaków np. odejmowania(-), mnożenia(*), dzielenia(/), dzielenia z resztą(%)
Inkrementacja i Dekrementacja
----------------------------------------------------------------------------------------------------------------------------------
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:
#define NAZWA_MAKRODEFINICJI KOD_KTORY_MA_ONA_ZASTEPOWAC
Przykład:
#define func1 server_exec()
----------------------------------------------------------------------------------------------------------------------------------
Widoczność zmiennych:
Występują dwa typy zmiennych jeżeli chodzi o ich widoczność - zmienne lokalne i globalne.
Zmienne globalne są tworzone poza wszystkimi funkcjami, najczęściej na początku kodu pod dyrektywami(dla zachowania estetyki) i można je używać w każdym miejscu. Zmienne lokalne są przeciwieństwem - deklarowane wewnątrz jakieś funkcji i używanie tylko w niej.
W najbliższym czasie opisze jeszcze tablice i ich używanie.
Użytkownik benio101 edytował ten post 20.01.2013 23:43
lit.
Miczu
30.01.2009
new zmienna[];sprawdzales czy tak mozna? Z tego co sie orietuje zapis [] mozna tylko stosowac w celu samo dopasowania sie tablicy do ilosci elementow (new zmienna[] = "dadadada" // new zmienna[] = {1,2,3,4,54,5,1,3,5,1})
R3X
30.01.2009
Kompiluje się bez problemu
hehe

mgr inż. Pavulon
30.01.2009
brak tablicy jako takiej. w końcu przecież np string jest tylko tablica przechowująca zmienne typu char ?
ale równie dobrze może być tablica zmiennych typu int, tablice wielowymiarowe itd.
Seba
30.01.2009
Ta, ale jak już tak chcesz robić, to lepiej używać dynamicznych tablic.sprawdzales czy tak mozna? Z tego co sie orietuje zapis [] mozna tylko stosowac w celu samo dopasowania sie tablicy do ilosci elementow (new zmienna[] = "dadadada" // new zmienna[] = {1,2,3,4,54,5,1,3,5,1})
Sure, zapomniał też dopisać że na końcu stringu null musi być.brak tablicy jako takiej. w końcu przecież np string jest tylko tablica przechowująca zmienne typu char ?
destrojer
24.02.2010
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
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.Najprościej ujmując zmienna jest to obszar ulokowany w pamięci komputera przechowywujący dane różnego typu
Po 4
rozumiem, ze inicjacja seksualna tak? Zmienne się inicjALIZuje. Poza tym to jest przypisanie do zmiennej wartości a nie zainicjalizowanie jej.Inicjacja:
Pierwsze przypisanie wartości do zmiennej po jej utworzeniu:
new zmienna;
zmienna = 1;
Po 5
zero jest logicznym fałszem więc jest wartością mój drogi.Przy ich tworzeniu automatycznie ustawiane są na 0( nie przechowywują żadnych danych, są po prostu puste)
Po 6
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ś takiegoString:
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];
new a[[[[[[[[2]]]][[]]][[]]]]];, zrobiłem tak bo napisałeś to bardzo skrótowo i tym samym nie zrozumiale dla noobków.
Po 7
w PAWN nie ma TYPÓW zmiennych, są tylko tagi.W Pawnie można spotkać następujące typy zmiennych:
Po 8
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?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;
Już mi się nie chce wyliczać, znudziło mi sie
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ładStał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:
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.
Użytkownik destrojer edytował ten post 24.02.2010 23:21
Miczu
24.02.2010
To też można różnie odczytać, bo jaka jest wartość "2+2". Ja bym powiedział ze kompilator pawn'a zastępuje wszystkie definicje, zdefiniowanym kodem (pewnie da sie do tego przyciepic :F). Hmm... najlepsza analogia do tego, to chyba jest jak zastąp wszystkie w notatniku lub innym edytorze - zastepuje podane słowo (definicje) podanym kodem, bez jego przetwarzania (liczenia, etc), tylko tak jak jest podany, dlatego "WYNIK * 2" zostaje zastąpiony na "2 + 2 * 2" co daje inny winik niż "(a * 2)" gdzie wartość "a" jest wczesniej obliczana.Bo kompilator zastępuje każda definicję jej wartością.
Nie bardzo wiem co masz na myśli, chodzi ci o to, że Float: i zwykła zmienna całkowita mają tyle samo bajtów i tylko tag je od siebie rozróżnia? Bo w każdym języku programowania zapis jest na maszynie binarny, wiec to jakoś nie szczególne wytłumaczenie, a typ całkowity i zmiennoprzecinkowy jakoś lepiej mi pasują.w PAWN nie ma TYPÓW zmiennych, są tylko tagi.
PS. jak masz ochotę możesz napisać wlasnego tutka, mamy tendencje zostawiać tylko te lepsze.
destrojer
25.02.2010
new a, bool:b; b = 3.14; printf("%f", b); a = b; printf("%f", a);Mam nadzieję, że to wyjaśni większość pytań.
mam bardzo dobry poradnik o zmiennych napisany, ale niestety sam prowadzę forum o PAWN i sam chyba najlepiej rozumiesz.PS. jak masz ochotę możesz napisać wlasnego tutka, mamy tendencje zostawiać tylko te lepsze.
ParadisO
10.10.2011
Czy jest taka zmienna w amxx ?? lub czy da się w ten sposób użyć zmiennej float ??
(%0.0f%s)", perc,"%%"
ten kawałek kodu jest z diablo moda lecz nie pamiętam czy to pokazuje w takiej dokładności jakbym chciał
Użytkownik ParadisO edytował ten post 10.10.2011 21:27
DarkGL
10.10.2011
(%0.xf%%)", perctak gdzie x oznacza ile liczb po przecinku ma pokazać jak wpiszesz 2 to pokaże dwie liczby po przecinku itp.
poczytaj
http://amxx.pl/dokum...ja/f1366/format
emanuel.wloch
19.01.2013

#define NAZWA_MAKRODEFINCJI KOD_KTORY_MA_ONA_ZASTEPOWAC
#define NAZWA_MAKRODEFINICJI KOD_KTORY_MA_ONA_ZASTEPOWAC
Użytkownik emanuel.wloch edytował ten post 19.01.2013 23:05