Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
Kilka bardziej skomplikowanych zastosowań tych rozkazów z użyciem separatorów: , ; ' TAB, AT, LINE i CLS
SPIS TREŚCI |
|
CLS
Elementy
polecenia
PRINT: puste polecenie
Wyrażenia
(typu liczbowego lub łańcuchowego): TAB
wyrażenie liczbowe, AT wyrażenie liczbowe, wyrażenie liczbowe
Separatory polecenia
PRINT: , ; '
Elementy polecenia
INPUT: zmienne (typu
liczbowego lub łańcuchowego)
LINE zmienna łańcuchowa
Dowolny
element polecenia
PRINT nie rozpoczynający się literą.
(Tokeny nie uważa się za rozpoczynające się od litery, ponieważ są całością o
jednym kodzie.)
Przewijanie ekranu.
SCREEN$
Polecenie PRINT widziałeś już dosyć często, zatem posiadasz pewne pojęcie, jak się je używa. Wyrażenia, których wartości się drukuje, nazywają się elementami PRINT i rozdziela się je przecinkami lub średnikami, które nazywamy separatorami PRINT. Elementu PRINT może wcale nie być, co pozwala wyjaśnić zachowanie się tego polecenia, gdy użyjesz w wierszu dwa przecinki.
Istnieją dwa dodatkowe rodzaje elementów PRINT, których używa się, aby
powiedzieć komputerowi nie co, lecz gdzie ma drukować. Na przykład,
przesuwa pozycję PRINT (miejsce, gdzie zostanie wydrukowany kolejny element) do podanego wiersza i kolumny. Wiersze są numerowane od 0 (u góry ekranu) do 21, a kolumny od 0 (po lewej) do 31.
SCREEN$ jest funkcją odwrotną do PRINT AT i powie ci (w określonych granicach), jaki znak znajduje się na danej pozycji na ekranie. Używa ona numerów wierszy i kolumn w ten sam sposób co PRINT AT, lecz ujętych w nawiasy: na przykład:
PRINT SCREEN$(11,16) |
odczyta gwiazdkę wydrukowaną przez poprzednie polecenie.
Znaki wzięte z tokenów zostaną rozpoznane jako pojedyncze litery, a puste
miejsca jako spacje. Niestety, linie rysowane przez PLOT,
DRAW lub CIRCLE, grafika definiowana przez użytkownika i
znaki graficzne dają w wyniku pusty łańcuch. Tak samo będzie, gdy zostanie
zastosowana funkcja OVER do otrzymania znaku złożonego. Powodem takiego
zachowania się SCREEN$ jest to, iż porównuje ona zawartość pola znaku na
ekranie z matrycami kształtów znaków w ROM. Jeśli wystąpi niezgodność na
poziomie choćby jednego piksela, znak nie zostanie rozpoznany
— aż takie mądre to nie jest, to tylko prosta
namiastka optycznego rozpoznawania znaków.
drukuje wystarczającą liczbę spacji, aby przesunąć pozycję druku do określonej kolumny. Pozostaje w tym samym wierszu lub , jeśli wymagałoby to cofania się, przechodzi do następnego wiersza. Zwróć uwagę, że komputer redukuje numer kolumny 'modulo 32' (dzieli przez 32 i bierze resztę z dzielenia); zatem TAB 33 oznacza to samo co TAB 1.
Poniższy przykład:
PRINT TAB 30;1;TAB 12;"Zawartosc";AT 3,1;"ROZDZIAL";TAB 24;"strona" |
pokazuje, w jaki sposób mógłbyś wydrukować nagłówek strony ze spisem treści jakiejś książki.
Spróbuj uruchomić to:
10 FOR n=0 TO 20 20 PRINT TAB 8*n;n; 30 NEXT n |
Pokazuje to, co oznacza, że liczby TAB są redukowane modulo 32.
Aby otrzymać bardziej elegancki przykład, zmień 8 w wierszu 20 na 6.
Kilka małych uwag:
(i) Te nowe elementy najlepiej kończyć średnikami, jak robiliśmy to powyżej. Możesz używać przecinków (a na końcu polecenia nawet niczego), lecz będzie to oznaczało, że po troskliwym ustawieniu pozycji PRINT natychmiast przenosisz ją gdzieś indziej — zwykle niezbyt użyteczne.
(ii) Nie możesz drukować w dwóch dolnych wierszach (22 i 23) ekranu, ponieważ są one zarezerwowane na rozkazy, dane dla INPUT, raporty itd. 'Dolny wiersz' zwykle oznacza wiersz 21.
(iii) Możesz stosować AT, aby umieścić pozycję PRINT nawet tam, gdzie już coś zostało wydrukowane; poprzednia treść zostanie usunięta w niebyt, gdy zaczniesz więcej drukować.
Kolejnym poleceniem związanym z PRINT jest CLS. Czyści ono cały ekran, czyli wykonuje coś, co również robią polecenia CLEAR i RUN.
Gdy wydruk osiąga spód ekranu, ekran zaczyna się przewijać w górę jak w maszynie do pisania. Zobaczysz to, jeśli wykonasz:
CLS: FOR n=1 TO 22: PRINT n: NEXT n |
a następnie kilka razy:
PRINT 99 |
Jeśli komputer wypisuje na ekran mnóstwo tekstu, to troszczy się, aby nic nie zostało przewinięte poza górny margines ekranu, zanim zdążysz się temu przyjrzeć. Zobaczysz ten efekt, jeśli wpiszesz:
CLS: FOR n=1 TO 100: PRINT n: NEXT n |
Gdy zostanie zapisany ekran tekstu, program zatrzyma wydruk i wypisze scroll? (przewinąć?) na spodzie ekranu. Teraz możesz wygodnie przeglądnąć pierwsze 22 liczby. Gdy z nimi skończysz, naciśnij y (dla 'yes' — tak), a komputer da ci kolejny ekran pełen liczb. Właściwie kontynuację powoduje każdy klawisz z wyjątkiem n (dla 'no' — nie), STOP (SYMBOL SHIFT i A) lub SPACE (klawisz BREAK). Powodują one zatrzymanie wykonywania programu z komunikatem D BREAK - CONT repeats (D PRZERWANIE - CONT powtarza).
Polecenie INPUT może robić o wiele więcej, niż powiedzieliśmy ci dotychczas. Widziałeś już polecenia INPUT w stylu:
INPUT "Ile masz lat?",wiek |
w których komputer wypisuje napis Ile masz lat? na spodzie ekranu, a następnie musisz wpisać swój wiek.
W rzeczywistości polecenie INPUT zbudowane jest z elementów i separatorów dokładnie w taki sam sposób jak polecenie PRINT, zatem zarówno Ile masz lat? jak i wiek są elementami INPUT. Elementy te są zwykle takie same jak elementy PRINT, lecz istnieje kilka bardzo ważnych różnic.
Po pierwsze, oczywistym dodatkowym elementem INPUT jest zmienna, której wartość masz wpisać — w powyższym przykładzie wiek. Regułą jest, że jeśli element INPUT rozpoczyna się od litery, to musi być zmienną, której wartość ma być wprowadzona.
Po drugie, to oznaczałoby, że nie możesz wydrukować wartości zmiennych jako części napisu; jednakże możesz to obejść przez umieszczenie zmiennej w nawiasach. Każde wyrażenie rozpoczynające się od litery musi być umieszczone w nawiasach, jeśli ma zostać wydrukowane jako część napisu.
Dowolnego rodzaju element PRINT, na którego nie wpływają te reguły, jest również elementem INPUT. Oto przykład ilustrujący nasze wywody:
LET moj wiek=INT(RND*100): INPUT ("Mam ";moj wiek;" lat. ");"A ile ty masz lat?",twoj wiek |
Zmienna moj wiek jest umieszczone w nawiasach, zatem jej zawartość zostanie wydrukowana. Zmienna twoj wiek nie jest umieszczona w nawiasach, zatem będziesz musiał wpisać jej wartość.
Wszystko wypisywane przez polecenie INPUT trafia do dolnej części ekranu, która działa jakby niezależnie od górnej części. W szczególności wiersze są numerowane względem górnego wiersza dolnej części, nawet gdy została ona powiększona w górę ekranu telewizyjnego (co się zdarza, jeśli wpisujesz mnóstwo danych dla polecenia INPUT).
Aby zobaczyć, jak AT działa w poleceniach INPUT, spróbuj uruchomić to:
10 INPUT "To jest wiersz 1."a$; AT 0,0;"To jest wiersz 0."a$; AT 2,0;"To jest wiersz 2.",a$; AT 1,0;"To dalej jest wiersz 1.",a$ |
(za każdym razem, gdy się zatrzyma, po prostu naciskaj ENTER.) Gdy jest drukowane To jest wiersz 2., dolna część ekranu rozbudowuje się w górę, aby zrobić na nie miejsce; lecz numeracja też idzie w górę, aby wiersze zachowały te same numery.
Teraz spróbuj tego:
10 For n=0 TO 19: PRINT AT n,0;n;: NEXT n 20 INPUT AT 0,0;a$; AT 1,0;a$; AT 2,0;a$; AT 3,0;a$; AT 4,0;a$;AT 5,0;a$ |
Gdy dolna część rośnie w górę ekranu, górnej to nie przeszkadza aż do momentu, gdy część dolna grozi nadpisaniem tego samego wiersza, w którym znajduje się pozycja PRINT. Wtedy górna część ekranu również zaczyna się przewijać w górę, aby temu zapobiec.
Kolejna subtelność polecenia INPUT, której jeszcze nie widzieliśmy, nazywa się LINE i pozwala wprowadzać w inny sposób dane dla zmiennych łańcuchowych. Jeśli przed nazwą zmiennej łańcuchowej umieścisz LINE, jak w:
INPUT LINE a$ |
to komputer nie wyświetli znaków cudzysłowu, które zwykle pojawiają się przy zmiennej łańcuchowej, chociaż będzie on udawał, że tam są. Zatem, gdy wpiszesz:
kot |
jako dane dla INPUT, zmienna a$ otrzyma wartość kot. Ponieważ cudzysłowy łańcucha nie pojawiają się przy wprowadzaniu danych, nie możesz ich wykasować i wpisać innego rodzaju wyrażenia łańcuchowego jako danych dla INPUT. Pamiętaj, że element LINE nie może być stosowany przy zmiennych liczbowych.
Znaki sterujące CHR$ 22 i CHR$ 23 dają efekt podobny do AT i TAB. Jako znaki kontrolne są one raczej dziwne, ponieważ zawsze, gdy jeden jest wysyłany do wydruku na ekranie, muszą za nim wystąpić dwa dodatkowe znaki, które nie posiadają swojego zwykłego znaczenia: są one traktowane jako liczby (ich kody) określające wiersz i kolumnę (dla AT) lub pozycję tabulacji (dla TAB). Prawie zawsze łatwiejsze jest użycie w normalny sposób AT i TAB niż tych znaków sterujących, lecz w pewnych okolicznościach mogą się przydać. Znakiem sterującym dla AT jest CHR$ 22. Pierwszy znak za nim określa numer wiersza, a drugi numer kolumny, zatem:
PRINT CHR$ 22+CHR$1+CHR$ c; |
ma dokładnie takie samo działanie jak:
PRINT AT 1,c; |
Dzieje się tak, nawet gdy CHR$ 1 lub CHR$ c normalnie miałyby inne znaczenia (przykładowo dla c=13); umieszczenie przed nimi CHR$ 22 zmienia to.
Znakiem sterującym TAB jest CHR$ 23, a dwa znaki z nim są używane do otrzymania liczby pomiędzy 0 a 65535, która określa wartość dla elementu TAB:
PRINT CHR$ 23+CHR$ a+CHR$ b; |
ma takie samo działanie jak:
PRINT TAB a+256*b; |
Aby zakazać komputerowi pytania się o przewijanie ekranu napisem scroll?, możesz używać za każdym razem polecenia POKE
POKE 23692,255 |
Po jego wykonaniu ekran będzie przewijany przez 255 wierszy, zanim ponownie zatrzyma się z napisem scroll?. Jako przykład, wypróbuj:
10 FOR n=0 TO 10000 20 PRINT n: POKE 23692,255 30 NEXT n |
i patrz, jak wszystko śwista z ekranu!
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.