Tajemnice ATARI

PIERWSZE KROKI

    Zgodnie z zapowiedzią zajmiemy się dzisiaj między innymi programikiem rozpoznającym płeć użytkownika komputera. Zacznijmy może od opracowania problemu. Na początek założenie: na podstawie imienia rozpoznać płeć. W Polsce problem jest ogólnie trywialny. Wszystkie imiona żeńskie kończą się na samogłoskę "a". Spróbujcie Państwo znaleźć imię nadające się dla Pani, które kończyłoby się na inną literkę. Postarajmy się z kolei znaleźć jakieś imię męskie zakończone na "a". Po zasięgnięciu opinii znajomych udało nam się na prędce wyszukać dwa: Kuba i Bonawentura. Jest pewne, że znajdzie się jeszcze wiele takich imion, lecz przeżyjemy, jeżeli nasz programik będzie działał poprawnie tylko w 99%. Jak już zapewne wszyscy wiedzą, problem polega na rozpoznaniu końcówki wyrazu podanego jako imię i rozróżnieniu: kobieta czy mężczyzna? Pozostaje tylko wypisanie stosownego komunikatu, powiedzmy w formie powitania "Dzień dobry PANU", lub "Dzień dobry PANI". Jak zapewne wszyscy się domyślają, do napisania tego programiku potrzebne nam będą szersze wiadomości na temat zmiennych tekstowych. Definicję poznaliśmy już w pierwszym odcinku, teraz pora na kilka funkcji operujących na tekstach:

- 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=ALA
   Szczegó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



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001