PIERWSZE KROKI- ASC (znak) - zwraca kod ATASCII znaku; - CHR$ (kod znaku) - zwraca napis złożony z jednego znaku; - STR$ (wyrażenie arytmetyczne) - zwraca napis złożony z cyfr wyniku wyrażenia; - VAL (napis) - zwraca liczbę, której zapis figuruje w napisie; - LEN (napis) - zwraca długość napisu; - ADR (napis) - zwraca adres, pod którym rozpoczyna się napis w pamięci - Jako napis w powyższym kontekście rozumiemy stałą lub zmienną tekstową. Parę przykładów: ? CHR$(125) ? ASC(CHR$(125)) ? STR$(2+2) ? VAL("128 LUB 256") ? LEN("JASIO")Przejdźmy może do konstrukcji programu. Na początek wypadałoby zadeklarować zmienną, w której pamiętać będziemy imię użytkownika. 10 DIM IMIE$(20)Zakładamy, że nie ma imion o długości większej niż 20 liter. Dalej należałoby spytać o imię i następnie je poznać. 20 ? "Podaj swe imie"; 30 INPUT IMIE$Następnie wypadałoby rozpoznać ostatnią literkę i rozstrzygnąć na tej podstawie czy jest to Pan czy Pani. Można by więc napisać: 40 IF IMIE$(LEN(IMIE$))="A" THEN ? "Dzień dobry Pani":END 50 ? "Dzień dobry Panu"Tak napisany program powinien się poprawnie wykonać. Zastanówmy się, jednak, czy nie można by go z lekka skrócić (przynajmniej wizualnie). Gdyby tak wiersz 40 i 50 zamienić na: 40 ? "Dzień dobry Pan";CHR$(ASC("u") -(ASC("u")-ASC("i"))*(IMIE$(LEN(IMIE $))="A"))to uzyskalibyśmy efekt wręcz przeciwny do oczekiwanego. Nie dość, że program stracił na przejrzystości, to w dodatku wykonuje się dwukrotnie wolniej. Mimo to polecam wnikliwej uwadze powyższy przykład. Nadmienię tylko, że znak "=" oznacza operator porównania, więc ostatni człon tego przydługiego wiersza jest traktowany jako wyrażenie logiczne. Jak wspomniałem ostatnio, wyrażenie logiczne może być traktowane jako arytmetyczne (wartość 0 lub 1) i ten właśnie fakt został powyżej wykorzystany. Jak dotychczas, nie wspomniałem o najważniejszej niemal komendzie basicu, a mianowicie o instrukcji przypisania. W większości dialektów tego języka, tak jak i w ATARI BASIC używa się do tego celu słowa LET, po czym wymienia się zmienną, która ma przybrać wartość podaną dalej po znaku =. Składnia komendy wygląda mniej więcej tak: LET zmienna = wyrażenie arytmetyczne. Specjalnie użyłem stówka mniej więcej, gdyż nasz wbudowany interpreter BASICu pozwala na opuszczenie słowa kluczowego LET. Przykłady: LET A=l LET X=X+1 LET LILA=OLA=ALA LILA=OLA=ALASzczególnie bacznej uwadze polecam wszystkim ostatnie trzy przykłady. Omówię je pokrótce w kolejności. LET X=X+l jest klasyczną konstrukcją licznika w pętli (o nich za miesiąc). Wykonanie komendy LET zmienna=zmienna+wyrażenie powoduje zwiększenie wartości zmiennej o wynik wyrażenia. LET LILA=OLA=ALA jest z pozoru dziwną konstrukcją. Spróbujmy przeanalizować jej znaczenie tak jak (naszym zdaniem) powinien to zrobić interpreter basicu. Po napotkaniu słowa kluczowego LET wiemy już, że całość jest instrukcją przypisania. Idąc dalej, LILA powinna być zmienną, a OLA=ALA wyrażeniem. Jest tak istotnie, gdyż OLA=ALA jest to wyrażenie logiczne, i w zależności od wartości zmiennych OLA i ALA przyjmuje wartość 1 (jest prawdziwe) lub 0 (fałszywe). Przykład trzeci z kolei jest tylko skróconą wersją omówionego powyżej. Jeszcze garstka wiadomości o interpreterze i zmiennych. Każde pierwsze użycie danej zmiennej (pojawienie się jej nazwy w programie) powoduje automatycznie zarezerwowanie dla niej miejsca w pamięci. Tak więc za wyjątkiem tablicowych (tekstowych) zmiennych nie trzeba deklarować. Jeżeli pierwszy raz zmienna została użyta w instrukcji innej niż przypisania, to automatycznie przyjmuje wartość 0. Z pewnych względów jest to wygodne, lecz inicjowanie zmiennych czyli nadawanie im świadomie konkretnych wartości, jest praktyką bardzo cenną i pozwalającą uniknąć niejednokrotnie tragicznych błędów. Mirosław Liminowicz
|