Kurs Programowania : CZĘŚCI: 1 2 3 4 5 6

A oto już szósty odcinek, który prezentuję po przejściach związanych z maturą i egzaminami wstępnymi! Co miałem zdać to zdałem, a tam gdzie się miałem dostać się dostałem. Teraz mogę powrócić. Z góry wszystkim sorrki za to , że niniejszy kurs ciągnie się jak olej ze smarem, ale uzasadnienie napisałem powyżej. Dobra, koniec marudzenia. Omówimy dzisiaj takie słowa kluczowe Basic'a jak: DIM, POKE, REM, STOP, CLR.

DIM

O tablicach powiedziałem już trochę we wcześniejszych odcinkach, ale dzisiaj uzupełnimy niektóre informacje. Jeśli nasza tablica będzie miała więcej niż 11 elementów musimy użyć instrukcji DIM, aby poinformować komcia o ilości zmiennych zawartych w tablicy o określonej nazwie. Należy przy tym pamiętać, że raz utworzona tablica przebywa w pamięci, więc ją zajmuje. Dlatego nie należy tworzyć tablic niewykorzystywanych i/lub większych niż to jest potrzebne. Aby obliczyć rozmiar danej tablicy nazleży pomnożyć wszystkie wymiary tablicy powiększone o 1 (każdy indeks elementu zaczyna się od liczby 0). W jednej linijce możemy utworzyć więcej niż jedną tablicę, ale nazwy nie mogą się powtarzać. A teraz parę przykładów:

  • 10 DIM A(9)

  • 20 FOR I=0 TO 9

  • 30 A(I)=I:PRINT A(I)

  • 40 NEXT

Powyższy program tworzy tablicę o nazwie A z dziesięcioma elementami (pamiętać, że pierwszy element ma indeks równy 0). Następnie tablica jest wypełniana liczbami od 0 do 9, które są potem wyświetlane na ekranie. Możemy również deklarować tablice wielowymiarowe, a ich przykłady podaję poniżej:

  • DIM B7(15,2); DIM CC%(4,4,4)

Zmiennymi tablicowymi posługujemy się w identyczny sposób jak z normalnymi zmiennyni, z tym, że po jej nazwie musimy jeszcze podać numer indeksu, który oznacza na jakim elemencie tablicy chcemy operować. Na temat tablic to już wszystko. Możecie sobie poczytać jeden ze wcześniejszych numerów, w którym na ten temat było trochę informacji.

POKE

Ta instrukcja jest, że to tak nazwę, nieobowiązkowa (przynajmniej na stan dzisiejszy). Służy ona bowiem na operowaniu pamięcią komputera i umożliwia jej modyfikowanie. Oczywiście, że modyfikować możemy tylko pamięc RAM (jakby ktoś nie wiedział). Po nazwie instrukcji pojawiają się dwa numery: pierwszy z nich jest numerem (tzw. adresem) komórki pamięci, do której chcemy wpisać określoną wartość, a drugim jest ta właśnie wartość. Wartości te muszą mieścić się w przedziale 0-255 i zastępują one liczbę dotychczas zawartą w komórce.

Przykład(y):

POKE 53280,0:POKE 53281,0:POKE 646,1

Powyższe komendy zmieniają kolor obrzeża i tła na czarny(komórki 53280 i 53281), a kolor liter zmieniony jest na biały (komórka 646). Możemy poeksperymentować z innymi liczbami i spróbować zrobić jakieś fajne efekty (jak na Basa). Pamiętam mój pierwszy taki efekt, który nazwałem flash, gdyż kilka kolorów migało jednocześnie na wszystkich płaszczyznach. I oto on:

    10 R=INT(RND(1)*255)-1

  • 20 FOR I=1 TO R

  • 30 POKE 53280,R:POKE 53281,R-12:

  • 40 NEXT

Poniżej przedstawiam tablicę kolorów komcia, które można wpokowywać w komórki pamięci:

  • 0 - czarny

  • 1 - biały

  • 2 - czerwony

  • 3 - turkusowy

  • 4 - fioletowy

  • 5 - zielony

  • 6 - niebieski

  • 7 - żółty

  • 8 - pomarańczowy

  • 9 - brązowy

  • 10 - jasnoczerwony

  • 11 - szary 1

  • 12 - szary 2

  • 13 - jasnozielony

  • 14 - jasnoniebieski

  • 15 - szary 3

Za pomocą instrukcji POKE możemy również wydobywać dźwięki, przełączać tryb tekstowy na tryb graficzny. Ale jak już mówiłem takie programy napisane w Basie są wolne i trzeba mieć olbrzymią cierpliwość (a z cierpliwością jak z cnotą - łatwo ją stracić). Jeśli chodzi o niektóre instrukcje zostaną one później wyjaśnione (teraz mogę powiedzieć, że RND to generator liczb pseudolosowych; INT to funkcja zwracająca część całkowitą danej liczby dziesiętnej).

Instrukcję POKE można z powodzeniem stosować do operowania na tzw. pamięci  ekranowej. Cóż to takiego jest? Otóż jest to pamięć, w której są przechowywane informacje na temat co jest aktualnie wyświetlane na ekranie. Dzięki instrukcji POKE możemy wyświetlać różne znaki, tworzyć proste animacje itp. Jak to robimy? Już pokazuję na prostym przykładzie. Chcemy umieścić literę "A" na środku ekranu. W przypadku komcia jest to 20 kolumna i 12 wiersz. Natomiast pamięć ekranu to komórki w zakresie od 1024 (lewy, górny róg) do 2023 (prawy dolny). Jak widać trzeba by było obliczać jaki jest numer komórki pamięci w 20 kolumnie i 12 wierszu. Na szczęście mądrzy ludzie trochę pomyśleli i pokazali nam wzór dzięki któremu bez problemu taką rzecz policzymy. A oto on:

  • ADRES_KOMÓRKI = 1024 + X + 40*Y

Gdzie: X - numer kolumny (współrzędna pozioma; 0 - 39), Y - numer wiersza (współrzędna pionowa; 0 - 24).

Skoro to już wiemy możemy przejść do konkretów. Ze powyższego wzoru wychodzi nam, że 20 kolumna i 12 wiersz to komórka o adresie 1524 (1024 + 20 + 40*12 = 1524). Teraz nam zostaje wpokowanie do niej odpowiedniej cyfry oznaczającej dużą literę "A": POKE 1524,1. Naciskamy RETURN i na środku ekranu powinna nam się pojawić litera A. Proste ? No myślę. A teraz co możemy wpisywać do pamięci ekranu ? Ogólnie rzecz biorąc wszystko co siedzi w tzw. generatorze znaków. Jest to inaczej taki obszar pamięci ROM (stałej komputera), w którym siedzą wszystkie litery, znaki, cyfry, które możemy wprowadzać na ekran za pomocą klawiatury. Z tego co wiem, w instrukcji do komcia znajdowała się cała tabela prezentująca wszystkie znaki wraz z ich kodami liczbowymi. Póki co wiem, że nie wszyscy ją mogą mieć więc wkrótce postaram się ją jakoś zamieścić na naszych łamach. Na koniec tych nieco bardziej skomplikowanych przemyśleń proponuję programik wykreślający funkcję sinus dla kątów od 0 do 351 (na podstawie C&A):

  • 10 PRINT CHR$(147)

  • 20 POKE 53280,14:POKE 53281,11

  • 30 FOR KAT=0 TO 351 STEP 9

  • 40 X=KAT/9

  • 50 Y=INT(SIN(KAT*PI)/180)*10)

  • 60 POKE 1504+X-Y*40,81

  • 70 NEXT KAT

  • 80 GET A$:IF A$=" "THEN 80

  • 90 PRINT CHR$(147):END

REM

Ten rozkaz użyty w programie służy do wstawiania komentarzy co ułatwia czytelność tegoż programu dla innych jego użytkowników. Problem w tym poleceniu polega na tym, żeby nie przesadzać z ilością komentarzy (zarówno jeśli chodzi o ich liczbę jak i długość). Komentarze powinny krótko opisywać poszczególne części programu, szczególnie jeśli nasz program podzielony na procedury, które wypełniają poszczególne działania. Komentarze są instrukcjami niezwykle potrzebnymi, ale ich zbyt duża liczba tylko przeszkadza.

Przykład:

  • 10 REM tu możesz pisać różne bzdury i uwagi lub bzdurne uwagi

STOP

Ta instrukcja zatrzymuje wykonywanie się programu przy czym zostaje wyświetlony komunikat BREAK IN nnn, gdzie nnn jest numerem linii, w której został zatrzymany program (czyli tam gdzie umieściliśmy STOP). Działanie programu możemy wznowić za pomocą polecenia CONT. Instrukcję STOP najczęściej umieszcza się w podejrzanych miejscach programu, aby zbadać czy nie zachodzą tam jakieś błędy.

CLR

Ta instrukcja kasuje wszystkie zmienne zawarte w pamięci, natomiast sam program pozostawia nietknięty. Instrukcja ta jest wykonywana automatycznie po poleceniu RUN.

I to już koniec. Do przeczytania w następnym odcinku!

Maciej 'Mike' Michalski

 © 1999-2020 Wszystkie prawa zastrzeżone
 Webmaster: Mariusz "Flooder" Młynek