|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor: Steven Vickers |
©2026 mgr Jerzy Wałaszek
|
Rozkaz: PAUSE
Funkcja: INKEY$
| SPIS TREŚCI |
|
ROZDZIAŁ 1 Przygotowanie
ROZDZIAŁ 2 Wydawanie poleceń ROZDZIAŁ 3 Lekcja historii ROZDZIAŁ 4 Kalkulator ROZDZIAŁ 5 Funkcje ROZDZIAŁ 6 Zmienne ROZDZIAŁ 7 Teksty ROZDZIAŁ 8 Programowanie I ROZDZIAŁ 9 Programowanie II ROZDZIAŁ 10 Jeśli ... ROZDZIAŁ 11 Znaki ROZDZIAŁ 12 Pętle ROZDZIAŁ 13 Wolno i Szybko ROZDZIAŁ 14 Podprogramy ROZDZIAŁ 15 Programy ROZDZIAŁ 16 Pamięć taśmowa ROZDZIAŁ 17 Wyświetlanie ROZDZIAŁ 18 Grafika ROZDZIAŁ 19 Czas i ruch ROZDZIAŁ 20 Drukarka ROZDZIAŁ 21 Podłańcuchy ROZDZIAŁ 22 Tablice ROZDZIAŁ 23 Pamięć ROZDZIAŁ 24 Liczenie ROZDZIAŁ 25 Praca komputera ROZDZIAŁ 26 Kod maszynowy ROZDZIAŁ 27 Organizacja pamięci ROZDZIAŁ 28 Zmienne systemowe A Zestaw znaków B Numery komunikatów C ZX81 dla znających BASIC |
Często będziesz chciał, aby twój program wykonywał się przez określony czas, a do tego celu przyda ci się polecenie PAUSE (szczególnie w trybie FAST):
zatrzymuje obliczenia i wyświetla obraz przez n ramek telewizyjnych (przy 50 ramkach na sekundę lub 60 w Ameryce). Parametr n może przyjmować wartości do 32767, co daje ci nieco poniżej 11 minut; jeśli n jest większe, to oznacza wstrzymanie programu w nieskończoność.
Pauzę zawsze można przerwać naciskając jakiś klawisz (a spacja spowoduje dodatkowo przerwanie programu). Klawisz musisz wcisnąć po wystartowaniu polecenia PAUSE.
Na końcu pauzy ekran błyśnie.
Jeśli polecenie PAUSE jest zastosowane w programie, który będzie uruchomiony w trybie FAST na starym komputerze ZX80 z nową pamięcią 8K ROM, to po nim należy bezpośrednio zastosować polecenie POKE 16437,255. PAUSE wydaje się działać bez tego, lecz w wyniku cały twój program zostanie wymazany z pamięci.
Ten program wyświetla małą wskazówkę sekundową (właściwie będzie to kropka na krawędzi tarczy) zegara:
|
5 REM NAJPIERW TWORZYMY TARCZE ZEGARA 10 FOR N=1 TO 12 20 PRINT AT 10-10*COS (N/6*PI),10+10*SIN (N/6*PI);N 30 NEXT N 35 REM TERAZ URUCHAMIAMY ZEGAR 40 FOR T=0 TO 10000 45 REM T JEST CZASEM W SEKUNDACH 50 LET A=T/30*PI 60 LET SX=21+18*SIN A 70 LET SY=22+18*COS A 200 PLOT SX,SY 300 PAUSE 42 310 POKE 16437,255 320 UNPLOT SX,SY 400 NEXT T |
(opuść polecenie REM, chyba że posiadasz rozszerzenie pamięci).
Ten zegar będzie pracował przez około 23/4 godziny z powodu wiersza 40, lecz z łatwością możesz ten czas wydłużyć. Zwróć uwagę na sposób kontroli czasu w wierszu 300. Mógłbyś tam oczekiwać PAUSE 50, aby zegar tykał co sekundę, lecz obliczenia również zabierają nieco czasu i należy je uwzględnić. Najlepiej ustalić odpowiednią wartość metodą prób i błędów, porównując czas komputera z prawdziwym zegarkiem i modyfikując wiersz 300 aż uzyska się zgodność (nie możesz zrobić tego zbyt dokładnie; regulacja o jedną ramkę w jednej sekundzie daje 2% dokładność lub pół godziny na dobę).
Funkcja INKEY$ (nie posiadająca argumentu) czyta klawiaturę. Jeśli wciskasz dokładnie jeden klawisz (lub SHIFT i inny klawisz), to wynikiem jest znak otrzymywany z tego klawisza w trybie L ; w przeciwnym razie otrzymasz pusty łańcuch tekstowy. Znaki sterujące nie mają swoich zwykłych funkcji, lecz dają wynik jak CHR$ 118 dla NEWLINE - na wydruku otrzymasz znak "?".
Wypróbuj ten program, który pracuje jak maszyna do pisania:
|
10 IF INKEY$<>"" THEN GOTO 10 20 IF INKEY$="" THEN GOTO 20 30 PRINT INKEY$; 40 GOTO 10 |
Tutaj wiersz 10 czeka, aż podniesiesz swój palec ponad klawiaturę, a wiersz 20 czeka, aż naciśniesz nowy klawisz.
Pamiętaj, iż w przeciwieństwie do INPUT, INKEY$ nie czeka na ciebie. Zatem nie musisz wciskać NEWLINE, lecz z drugiej strony, jeśli nic nie wpiszesz, to przegapisz swoją szansę.
Polecenie: PAUSE
Funkcja: INKEY$
Co się stanie, jeśli przegapisz wiersz 10 w programie maszyny do pisania?
Dlaczego w programie maszyny do pisania nie możesz wprowadzić spacji lub znaku £?
Oto zmodyfikowany program, który udostępnia ci spację, jeśli naciśniesz prawy kursor (8 z SHIFT):
|
10 IF INKEY$<>"" THEN GOTO 10 20 IF INKEY$="" THEN GOTO 20 30 LET A$=INKEY$ 40 IF A$=CHR$ THEN GOTO 110 90 PRINT A$; 100 GOTO 10 110 PRINT " "; 120 GOTO 10 |
Zauważ jak wczytujemy INKEY$ do A$ w wierszu 30. Można by to pominąć i zastąpić A$ przez INKEY$ w wierszach 40 i 90, ale wtedy zawsze istniałaby mała szansa, iż INKEY$ zmieni się pomiędzy tymi wierszami.
Rozbuduj program, aby po naciśnięciu NEWLINE (CHR$ 118), tworzony był nowy wiersz.
Innym sposobem wykorzystania INKEY$ jest połączenie z PAUSE, tak jak w alternatywnym programie maszyny do pisania:
|
10 PAUSE 40000 20 POKE 16437,255 30 PRINT INKEY$ 40 GOTO 10 |
Dlaczego do poprawnej pracy tego programu konieczne jest, aby pauza nie przerywała się, gdy w momencie jej rozpoczęcia będzie wciśnięty klawisz?
Wadą tej metody jest mruganie ekranu, ale w trybie FAST tylko tak to można zrobić. Uruchom ten program w trybie FAST i zwróć uwagę na to, iż komputer korzysta z pauzy do wyświetlania obrazu telewizyjnego.
Ten program sprawi, że oszalejesz. Komputer wyświetla liczbę, którą ty (lub inna niewinna ofiara) powinna wpisać z powrotem. Na początku masz na to sekundę, lecz jeśli się pomylisz, to przy następnej twój czas wzrośnie, natomiast przy poprawnej odpowiedzi dostaniesz mniej czasu następnym razem. Chodzi o to, aby wpisywać liczby najszybciej, jak to jest możliwe, a na koniec naciśnij Q dla zobaczenia swoich wyników - im wyższe tym lepsze.
|
10 LET T=50 15 REM T=LICZBA RAMEK NA RUCH - POCZATKOWO 50 DLA 1 SEKUNDY 20 SCROLL 30 LET A$=CHR$ INT (RND*10+CODE "0") 35 REM A$ JEST PRZYPADKOWA LICZBA 40 PRINT A$ 45 PAUSE T 50 POKE 16437,255 60 LET B$=INKEY$ 70 IF B$="Q" THEN GOTO 200 80 IF A$=B$ THEN GOTO 150 90 PRINT "DO KITU" 100 LET T=T*1.1 110 GOTO 20 150 PRINT "OK" 160 LET T=T*0.9 170 GOTO 20 200 SCROLL 210 PRINT "TWOJ WYNIK TO ";INT (500/T) |
(Tylko dla posiadaczy dodatkowej pamięci RAM). Wykorzystując podprogram rysowania linii prostej z rozdziału 15, zmień program rysujący wskazówkę sekundową, tak aby również pokazywane były wskazówki minutowa i godzinowa, rysując je co jedną minutę (niech wskazówka godzinowa będzie krótsza). Jeśli uważasz się za osobę ambitną, to co kwadrans niech coś się dzieje.
|
10 IF INKEY$ = "" THEN GOTO 10 20 PRINT AT 11.14; "ACH" 30 IF INKEY$<>"" THEN GOTO 30 40 PRINT AT 11,14; " 50 GOTO 10 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.