Original in English
Author's home page
Prawdopodobnie używacie komputerów do gier i do pisania wypracowań szkolnych. Znacznie bardziej zabawne jest tworzyć własne gry dla komputera. Ten podręcznik pomoże wam zacząć, używając QBASIC. QBASIC jest językiem programowania. Przy pomocy takiego języka można powiedzieć komputerowi, co chcesz, aby on zrobił. To całkiem tak, jak dawać komuś wskazówki, jak trafić do domu. Komputer wykonuje krok po kroku i robi dokładnie to, co mu powiedziałeś. Programując komputer, możesz rozwiązać problemy matematyczne, tworzyć obrazy i muzykę, i nawet tworzyć nowe gry. Wszystko to przed tobą.
Najlepszym sposobem startu z tym podręcznikiem jest wpisać do komputera kilka małych programów, które znajdziesz w każdym z rozdziałów. Możesz zechcieć zacząć najpierw bezpośrednio od Rozdziału 1. Dorośli mogą ci pomóc przebrnąć przez to szybko. Potem zmieniaj w programach to, co chcesz, aby one robiły. Wkrótce będziesz pisać swoje własne programy.
Dzieci kochają komputery. Lubią także tworzyć oraz mieć kontrolę nad otaczającym ich światem. Komputer będzie robił, cokolwiek mu się powie. Może to zrazu nie wyglądać w ten sposób, ale to prawda.
Gdy byłem dzieckiem, wszyscy mieliśmy "stary BASIC". Miał on numerowane linie i nie uczył nawyku dobrego strukturalnego programowania. QBASIC jest narzędziem znacznie lepszym. Z informacją zdobytą z tego podrecznika można sięgnąć po bardziej zaawansowaną książkę o QBASIC (jeśli taką znajdziesz). Po nabraniu wprawy w QBASICu można sięgnąć po potężniejsze języki, jak Visual Basic, Java, C i ewentualnie C++. Sugerowałbym następujacy przebieg nauki:
Oczywiście, możesz określić, kiedy dziecko jest gotowe na przejście z jednego języka do drugiego. Moją regułą jest, że QBASIC powinien być wprowadzony w punkcie gdy dzieci mogą się same uczyć z tego podręcznika (wiek 10 lub 11 lat). Wówczas pozwól im i opanuj to sam. Daje to im poczucie ogromnego osiągniecia. Gdy zobaczysz, że osiągają granice możliwości języka, wprowadź ich w inne języki. Przeskok z QBASICa do Visual BASICa mógłby być zrobiony, gdy stanie się oczywiste, że programy twojego dziecka odniosą korzyść z graficznego interfejsu użytkownika (GUI). Od ciebie zależy określenie, czy są już na to gotowe.
Jeżeli jesteś nauczycielem szkoły podstawowej zainteresowanym nauczaniem programowania lub tworzenia oprogramowania dla dzieci, sugerowałbym rozpoczęcie od Logo na poziomie trzeciej lub czwartej klasy. Następnie przejście do QBasic'a dla czwartej, piątej, szóstej itd.... Nauczanie dużej liczby uczniów zawsze stanowi wyzwanie, ponieważ każdy ma inne zdolności. Programowanie komputera doskonale pasuje do programu nauczania matematyki, bo pomaga uczniom uświadamiać sobie liczby i to, jak one "działają". Z powodu uczenia się programowania w Basic'u zrozumiałem w siódmej klasie trygonometrię. Zrobiłem to, ponieważ rodzaj programów, które pisałem, wymagał zrozumienia trygonometrii i stosowania jej. Co może być lepszą motywacją do nauki? Powyżej szóstej klasy, przypuszczam, można wprowadzić Visual BASIC i kontynuować poprzez Java/C# aż do C/C++ na poziomie szkoły średniej.
W wieku lat 11 uczyłem się z książki bardzo podobnej w stylu do tego
podręcznika. Był to Podręcznik Użytkownika TRS-80 i pojawił się z moim
pierwszym komputerem osobistym - Radio Shack TRS-80. Od tamtej pory
nie przestaję programować. Mam nadzieję, że ten podręcznik będzie miał
taki sam skutek dla twoich dzieci (lub być może nawet dla ciebie).
Please email me with any
comments or suggestions to improve this book. My email address:

You can find more information on my Computer Science for Kids page:
http://tedfelix.com/cs4kids - Computer Science for Kids
And in case you are looking at a mirror site, the latest version of this book is always kept here:
http://tedfelix.com/qbasic - QBASIC Programming for Kids
Życzę tobie i twoim dzieciom mnóstwa uciechy.
Od tłumacza: Zawsze za wielką zaletę Basica uważałem jego podobieństwo do języka naturalnego, graniczące prawie z rozmową z maszyną. Teraz, zestawiając na użytek tego przekładu mini-słowniczek objaśniający źródosłów poleceń Basica, dostrzegłem po raz pierwszy, że jest tego DUŻO i dla nieotrzaskanych w angielskim może być to podobne do uczenia się jakiegokolwiek obcego języka, dla nich więc ginie podstawowy atut wszystkich Basic'ów. Pozostaje nadzieja, że przynajmniej wśrod dziatwy znajomość angielskiego staje się coraz bardziej powszechna...
Aby uruchomić QBASIC, trzeba dostać się do DOS-a.
Jeśli używasz Windows 3.1, trzeba znaleźć "Grupę
główną" i odszukać ikonę nazwaną "MS-DOS". Podwójne
kliknięcie na niej daje znak zachęty
"C:\WINDOWS>"
w czarnym oknie z jasnym tekstem.
W Windows 95 kliknij "Start", następnie "Programy",
następnie "Tryb MS-DOS". W Windows 98 i Windows ME postępowanie jest to samo,
co i w Windows 95. W Windows NT 4, jestem przekonany, że to się nazywało
"wiersz polecenia". Wypróbuj kroki opisane poniżej dla Windows
2000. W Windows 2000 nazywa się to "Wiersz polecenia" i można go
znaleźć klikając Start, następnie Programy, następnie
Akcesoria i wreszcie Wiersz polecenia. W Windows XP też nazywa się to "Wiersz polecenia" i też można
się tam dostać, klikając Start, następnie Programy, następnie
Akcesoria i Wiersz polecenia. Otrzymasz czarne okno z migającym
" Jesteś teraz gotowy do następnego kroku. QBASICa może nie być w twoim komputerze. Nie martw się,
Dodatek A pokaże ci, jak go dostać. Za kursorem
" Jeśli dostaniesz niebieski ekran z czymś na kształt "Survival
Guide", to uruchomiłeś QBASIC!
Jeżeli zamiast tego dostaniesz komunikat w rodzaju
"Złe polecenie lub nazwa pliku",
to trzeba sprawdzic w Dodatku A, jak
zainstalować QBASIC na twojej maszynie. Nie martw się, będziemy
tam na ciebie czekać.
"Podręcznik Przetrwania"? Nie będziemy go w tej chwili
używać (zresztą jest po angielsku - przyp. tłum.) więc
naciśnij klawisz <Esc> (escape), aby uzyskać duży pusty
niebieski ekran.
Jesteśmy teraz gotowi do programowania.
Jeśli potrzebujesz opuścić QBASIC, możesz kliknąć
na "File" w menu QBASICa i następnie na "Exit", aby
dostać się z powrotem do DOS-a.
Za kursorem
" Zakładam, że bedziesz zapoznawać się z QBasic'iem od jego
początku. Nie byłoby dobrze, gdyby było inaczej. A więc włącz
komputer i miej przed sobą niebieski ekran QBASICa. Idź dalej
i naciśnij klawisz <Esc>, aby zamknąć okno powitalne
("clear this dialog box").
Zanim zaczniemy, rzuć okiem na ekran QBASIC'a.
U góry znajduje się menu, które ma następujące zakładki:
File, Edit, View, Search, Run, Debug, Options i Help.
Klikniecie na którąkolwiek z nich rozwija listę
z dodatkowym wyborem.
Tuż pod menu jest słowo "Untitled". To znaczy, że nie nadaliśmy
nazwy bieżącemu programowi. To się zmieni, gdy nauczymy się
zapisywac programy na dysk. Duży niebieski obszar z migającym
kursorem To są najważniejsze obszary, które dziś trzeba poznać.
Nauczymy się więcej o reszcie z ekranu QBASIC'a, gdy dojdziemy
dalej.
Pięknie, ale co to ma robić? Trzeba to uruchomić, aby
się przekonać. Znajdź słowo "Run" w menu QBASICa u góry
ekranu. Kliknij na nim. Zobaczysz teraz menu z listą
do wyboru (Start, Restart i Continue). Kliknij na Start,
aby uruchomić twój program. Możesz się nieco rozejrzeć
po ekranie, ale powinieneś odnaleźć twój komunikat:
PRINT drukuje różne rzeczy na ekranie. Nie zapomnij
umieszczać to, co chcesz wypisać, w podwójnych cudzysłowach (").
U spodu ekranu zobaczysz komunikat
"Press any key to continue" ("Naciśnij jakiś klawisz, aby kontynuować").
Naciśnij <Enter> aby dostać się z powrotem do QBASICa. To
jest sposób QBASIC'a, aby dać ci dość czasu, żeby obejrzeć, co
twój program zrobił.
Jako wygodny skrót, użyj ? zamiast PRINT. Wypróbuj to. Naciśnij
<Enter>, aby zacząć pisać w nowej linii. Tym razem wpisz:
Czyż to nie przyjemne? ? stał się słowem PRINT. To powinno
zaoszczędzić nam mnóstwo pisania.
Możesz spróbować uruchomić program po raz drugi (pamiętasz?
Kliknij na Run, potem na Start w menu.) Powinieneś zobaczyć
coś takiego:
Prawdopodobnie trochę ciężko było znaleźć na ekranie
twoje komunikaty z ostatniego programu. Czy nie byłoby
przyjemnie móc wyczyścić wszystkie te rzeczy z ekranu?
Rozwiązaniem jest tu "CLS", które pochodzi od CLear Screen
("Wyczyść ekran").
Będziesz potrzebował wstawiać CLS na samej górze twojego
programu, aby wyczyścić ekran przed wydrukowaniem czegokolwiek.
Aby uczynić CLS pierwszą linią twojego programu, wykonaj
następujące kroki:
Teraz twój program powinien wyglądać jak to:
Uruchom to. Pamiętasz - klik na Run i potem na Start
z menu QBASICa. Możesz także uruchomić program przez
naciśnięcie klawisza <Shift> i przytrzymanie go
wciśniętym podczas naciskania <F5> (to oznacza
Shift+F5 w menu). Inny wygodny skrót.
Teraz jest znacznie lepiej. Na ekranie są tylko te
komunikaty, które powinny tam być.
Zacznijmy nowy program. Aby pozbyć się starego
programu, kliknij na "File" w menu QBASICa - zobaczysz
menu File z New, Open..., Save i innymi. Kliknij na "New".
QBASIC powie ci teraz, że twój bieżący program nie jest
jeszcze zapisany i zapyta czy chcesz "Save it now?" (Zapisać
go teraz?). Nie zapisuj go. Zawsze możesz wpisać go znowu.
Kliknij na < No >. Jak zapisywać programy na dysk,
nauczymy się w rozdziale 8.
Teraz powinieneś miec czysty niebieski ekran. Wpisz
ten program:
Sprawdź, czy wstawiłeś średnik (;) na końcu linii
z PRINT i spację między słowem "Ted" a ostatnim cudzysłowem.
Nie musisz używac mojego imienia, wstaw zamiast niego swoje
("Tu jest Jacek", lub cokolwiek). Teraz uruchom to.
DO i LOOP będą wykonywać wszystko, cokolwiek jest między
DO i LOOP jeszcze raz i jeszcze...
Ok, ładnie. ALE JAK TO ZATRZYMAĆ!? Naciśnij klawisz <Ctrl>
(Control) i trzymaj go wciśniety naciskając klawisz <Pause>.
Klawisz <Pause> jest zwykle u góry klawiatury i zawsze
z prawej strony. Nazywa się to "naciskaniem klawisza <Break>".
Nie martw się, to naprawdę nie połamie twojego programu, a tylko
zatrzyma go i zawróci cię do QBASICa. Być może ten klawisz powinien się
nazywać "brake". (Brake - "hamulec", wymawia się tak samo jak break
- "łamać" - [brejk]. Przyp. tłum.) Na klawiaturach laptopów klawisz Break może być trochę trudniejszy
do znalezienia. Czasami trzeba nacisnąć klawisz "Fn" i następnie
klawisz, który robi przerwę. Czasem jest on oznaczony kolorem, aby
pomóc go znaleźć. Dowiesz się, gdzie on jest (doświadczalnie),
gdy zatrzymasz program i powróci edytor. Zauważ, że PRINT ma przed sobą dwie spacje. Nazywa się to "wcięciem"
i czyni program łatwiejszym do czytania. Możesz bardziej wyraźnie
zobaczyć początek i koniec DO...LOOP. QBASIC nie troszczy się o wcięcia,
robią to tylko ludzie. Jest ważne, aby twój program wyglądał elegancko,
ponieważ mogą go czytać inne osoby.
Dotąd nasze programy tylko mówiły do nas. Napiszmy
taki, który będzie słuchał. Pozbądź się poprzedniego
programu, klikająć File i potem New w menu QBASIC'a.
Kliknij na < No >, gdy zapyta, czy chcesz teraz
zapisać program na dysk. Wypróbuj to:
Nie zapomnij o przecinku (,) pomiędzy "Wpisz swoje imie: "
i Nazwa$. Uruchom to. Gdy zapyta, wpisz swoje imię i następnie
neciśnij klawisz <Enter>
"Nazwa$" nazywamy "zmienną". Bycie zmienną oznacza,
że rzec może się zmieniać. Spróbuj uruchomić program
znowu, ale tym razem wpisz imię kolegi (nie zapomnij
o klawiszu <Enter>). Rzeczywiście, komunikat
się zmienia.
INPUT Nazwa$ pobiera to, co wpisujesz na klawiaturze
i wstawia do zmiennej Nazwa$. PRINT Name$ wypisuje to,
co jest w zmiennej Nazwa$.
Zmienne przechowują litery i liczby. Znak dolara ($)
oznacza, że taka zmienne może przechowywać litery.
Nazywa się ją "zmienną łańcuchową".
Zmienne bez znaku dolara mogą przechowywać tylko liczby.
Zobaczymy je później. Możesz nazywać swoje zmienne, jak tylko zechcesz.
Spróbuj wrócić do tego programu i zmienić każde "Nazwa$"
na "Janek$". Co się zdarzy, gdy go uruchomisz?
Inny sposób myślenia o zmiennej to wyobrazić sobie
małe wiadro z nazwą na nim. Namaluj na nim "Nazwa$".
To jest nazwa wiadra (zmiennej).
Teraz weź kawałek papieru, wypisz na nim swoje imię
i wrzuć go do wyobrażonego wiadra. Teraz zmienna
Nazwa$ ma w środku twoje imię. Zmienne komputerowe
mogą zmieścić tylko jeden kawałek papieru (jedną
wartość) na raz.
Gdy chcesz wydrukować (PRINT) to, co jest
w zmiennej, opuść podwójne cudzysłowy (""). Ten program
pokaże ci, jak to działa: Pierwsze polecenie PRINT drukuje na ekranie Nazwa$.
Drugie polecenie PRINT drukuje imię, które wpisałeś.
Zróbmy ten ostatni program nieco sprytniejszym.
Chciałbym rozpoznawać intruzów grających w moje
programy. Czy nie byłoby fajnie, gdyby komputer mógł
rozpoznawać czyjeś imię i drukować dla niego
specjalny komunikat? A może tak:
Możesz zmienić Imie$="Janek" na Imie$="Edek"
lub kogokolwiek, kogo chcesz wygonić (jak brat
lub siostra). Uruchom program i wpisz swoje imię
(mam nadzieję, że to nie jest Janek). Powinieneś
zobaczyć ten sam komunikat, co poprzednio.
Teraz uruchom go jeszcze raz i spróbuj wpisywać
"Janek" (lub "Edek", lub cokolwiek, na co wymieniłeś).
Jeśli program nie mówi właściwej osobie, aby sobie
poszła, sprawdź, czy wpisałeś imię prawidłowo.
W QBASIC-u "Janek" to nie to samo, co "janek", więc
jeżeli nie wpisałeś imienia dużą literą, program
nie będzie działał. Sprawdź, czy wprowadziłeś imię
dokładnie tak, jak je wpisałeś w programie.
Polecenie "IF..THEN..ELSE..END IF" w tym programie
sprawdza, czy Imie$ zawiera w sobie "Janek". Jeśli tak,
wtedy wykonuje polecenie PRINT po THEN. Gdy Imie$ nie jest
"Janek", wykonuje się polecenie PRINT po ELSE. "END IF"
(koniec IF) mówi QBASIC-owi, że to już koniec IF.
Część IF...THEN - Imie$="Janek" nazywamy "warunkiem".
Przy liczbach możesz także sprawdzać "większą niż"
i "mniejszą niż": Jeżeli chcesz sprawdzić "większe niż", użyj "Liczba > 100".
Równości działają, jak poprzednio, "Liczba = 100". Inną opcją
jest "nie równa się", która może być zrobiona tak: "Liczba <> 100". Komputery są bardzo dobre z matematyki.
Pozwólmy komputerowi trochę jej dla nas odrobić.
Oto prosty kalkulator mnożenia: Jeśli masz kłopot ze znalezieniem gwiazdki (*) na klawiaturze,
jest ona zwykle nad liczbą 8. Uruchom to i wprowadź dwie liczby.
Zrobi to dobrą robotę, mnożąc dla ciebie. A i B są zmiennymi, podobnie jak Nazwa$. W odróżnieniu
od Nazwa$, A i B nie mają znaku dolara na końcu swoich
nazw. Jest tak, ponieważ one przechowują tylko liczby,
a nie litery.
"A * B" znaczy "A razy B".
QBASIC nie używa "X" do mnożenia, ponieważ mógłbyś
chcieć mieć zmienną nazywającą się "X".
Spróbuj zmienić "A * B" na "A - B" dla odejmowania.
"A + B" wykona dodawanie, a "A / B" wykona dzielenie.
Dlaczego "/" przy dzieleniu? Bo nie ma znaku dzielenia
na klawiaturze. Przynajmniej ja nie znalazłem.
"A * B", "A + B", "A - B", i "A / B" zwane są wyrażeniami
matematycznymi, lub po prostu wyrażeniami.
Zanim przejdziemy do dłuższych programów, zobaczmy, jak
zapisać nasze arcydzieła.
Pierwszą rzeczą, o której trzeba pomyśleć, to gdzie zamierzamy
zapisywać nasze programy. Dwa główne miejsca, gdzie możemy je
przechować, to twardy dysk i dyskietka. Przypatrzmy się obydwu.
Użycie dyskietki jest dobrym pomysłem, gdy nie chcesz, aby
inni ludzie zaglądali do twoich programów. Dyskietka może
zostać wyjęta z komputera i trzymana w bezpiecznym miejscu.
Dyskietki są także dobre, gdy chcesz przenosić programy
z jednego komputera na drugi.
Wypróbujmy to. Znajdź wolną dyskietkę i włóż ją do stacji
dyskietek. Dyskietka może już coś zawierać, pod warunkiem,
że zostało na niej trochę wolnego miejsca. Potrzebujesz mieć
program widoczny na ekranie, aby to zadziałało prawidłowo.
Wróć do poprzedniego rozdziału i wpisz przykład, jeżeli chcesz
mieć coś na ekranie.
Kliknij na "File" w menu QBASIC-a, a następnie "Save".
Na ekranie pojawi się dialog "Save". Zauważ, że kursor jest
w okienku (polu) nazwanym "File Name:" ("Nazwa pliku:")
Wpisz to:
Uważaj na odwrócony ukośnik (backslash, "\"). To nie jest
to samo, co zwykły ukośnik "/", który jest na tym samym klawiszu
co znak zapytania "?". QBASIC jest na to bardzo czuły.
Naciśnij klawisz <Enter>. Co się zdarzyło? Czy coś
słyszysz? Gdzie się podział dialog "Save"? Hmmmm, miejmy nadzieję,
że to zadziałało. Jak to można sprawdzić? Spróbój załadować
program z powrotem do QBASIC-a. Zaczekaj, on już tu jest. OK,
więc usuń go i spróbuj wydostać z powrotem z dyskietki. Pamietasz,
jak pozbyć się programu? Wskazówka: "File" i "New" z menu.
Wykonaj to: Kliknij na "File", a nastepnie "Open..." w menu
QBASIC-a. Teraz powinieneś zobaczyć dialog "Open". Wpisz to: i naciśnij klawisz <Enter> Teraz powinieneś zobaczyć
"TESTSAVE.BAS" w okienku o nazwie "Files" ("Pliki").
Dwa kliknięcia powinny to załatwić. Kliknij dwukrotnie na
"TESTSAVE.BAS" i program powróci z dyskietki.
Twardy dysk jest najwygodniejszym miejscem do przechowywania
programów. Poniewaz jest on zawsze w komputerze, twoje programy
też są tam zawsze pod ręką do załadowania, kiedy tego potrzebujesz.
Twarde dyski zwykle zawierają znacznie więcej informacji niż dyskietka.
Z tego powodu trzeba troszczyć się o utrzymanie tego w porządku.
W przeciwnym razie nigdy nie będziesz mógł znaleźć tego, czego
potrzebujesz. Najlepszą droga do zorganizowania swojej kolekcji
programów jest umieszczanie ich w "podkatalogu" czy "folderze"
na twardym dysku.
Kliknij przycisk "Start", następnie "Programy", następnie
"Eksplorator Windows". Teraz kliknij na "Plik", potem "Nowy",
potem "Folder" w menu Eksploratora Windows.
Zauważ słowa "Nowy folder" z prawej strony Eksploratora
Windows.
Idź dalej i wpisz nazwę dla nowego folderu, ale niech ona
będzie krótka! QBASIC jest starym programem, który nie radzi sobie
z nazwami większymi niż 8 liter lub cyfr. Ja swój nazwałem
"TedPrgs", co ma znaczyć Programy Teda. Nazwij swój folder, jak
zechcesz, ale nie wiecej niż 8 znaków, inaczej będzie wyglądał
bardzo dziwnie w QBASIC-u.
Naciśnij kkawisz <Enter> aby utworzyć folder. OK, zrobione.
Nie będzie trzeba robić tego drugi raz, chyba że będziesz chciał
utworzyć inny katalog w późniejszym czasie. Idź dalej i zamknij
Eksploratora Windows, wróć do QBASIC-a.
Zapisywanie na twardy dysk tylko trochę różni się od zapisywania
na dyskietkę. Program do zapisania trzeba mieć widoczny na ekranie.
Wróć do poprzedniego rozdziału i wpisz przykład, jeżeli chcesz mieć
coś na ekranie.
Kliknij na "File" w menu QBASIC-a, a następnie "Save".
Na ekranie pojawi się dialog "Save". Kursor jest w okienku
(polu) nazwanym "File Name:" ("Nazwa pliku:")
Wpisz to: Jeszcze raz, uważaj na backslash "\". Zmień TedsPrgs na to jak
nazwałeś swój katalog.
Naciśnij klawisz <Enter>. Teraz powinieneś zobaczyć listę
programów w tym katalogu. Ponieważ jeszcze niczego nie zapisywałeś,
nie powinno tam być żadnych programów. Idź dalej i wpisz to:
i naciśnij klawisz <Enter>. Hmmm, tym razem nie słychać
żadnego dźwięku. Twarde dyski są znacznie cichsze niż dyskietki.
No to sprawdźmy, czy wszystko poszło prawidłowo. Najpierw pozbądź
się tego, co jest na ekranie, przez "File" i potem "New".
Jest ono także bardzo podobne do sposobu, jakim ładowaliśmy program
z dyskietki. Kliknij na "File", potem "Open..." w menu QBASIC-a.
To wywoła dialog "Open". Wpisz to:
Jak przedtem, uważaj na backslash "\" i zmień "TedsPrgs"
na to, jak nazwałes swój folder.
Teraz powinienes zobaczyć "TESTSAVE.BAS" w okienku "Files".
Kliknij podwójnie na "TESTSAVE.BAS", aby go załadować.
Nie było tak źle, prawda? Kiedy już raz rozpracujesz,
czy chcesz zapisywać na dyskietkę, czy na twardy dysk, potrzebujesz
pamiętać tylko jeden sposób dla zapisu i ładowania.
IF...THEN...ELSE jest dobre, jeśli masz tylko dwie rzeczy
do sprawdzenia. A co, jeśli masz 5 czy 6 kolegów, którzy mogą
używać twój komputer i chcesz, aby on każdemu powiedział
co innego? Spróbuj tego: No, to już było duże. Szczęśliwie nauczyliśmy się w rozdziale 8,
jak zapisywać na dysk. Zmieniaj spokojnie "Ted" i "Janek" na "Irka"
i "Karol" lub ktokolwiek.
SELECT CASE najpierw sprawdza Imie$ dla wartości "Ted". Jeżeli
ją znajdzie, wykonuje PRINT po CASE "Ted". Gdy PRINT się wykona,
reszta przypadków CASE zostaje opuszczona. W przeciwnym razie
trwa sprawdzanie każdego CASE aż do CASE ELSE. Jeżeli nie znajdzie
niczego, wykona to, co jest po CASE ELSE.
SELECT CASE może też być użyte z liczbami równie dobrze,
jak z łańcuchami liter. Oto szybki przykład:
Do tej pory tylko użytkownikowi pozwalaliśmy wypełniać
nasze zmienne. Możemy także wypełniać zmienne wewnątrz naszego
programu. Jak to: "A = 1" umieszcza wartość 1 w zmiennej A. "B = 2"
umieszcza wartość 2 w zmiennej B. A$ = "Witaj" umieszcza
łańcuch "Witaj" w zmiennej A$. Następnie program wypisuje
je na ekranie, aby pokazać ci, że one tam są. Zobacz, czy potrafisz wykombinować, co ten dosyć sprytny
program będzie robił. Potem wpisz go i uruchom, żeby zobaczyć,
czy miałeś rację. Czy miałeś rację? Może wypisywanie biegnie zbyt
szybko? Będzie trzeba nacisnąć Break, aby je zatrzymać.
Teraz obejrzyj to dokładniej i zobacz, jeśli potrafisz,
co się tu dzieje. Taki program jest tym, co nazywamy "licznikiem".
Odlicza on 1, 2, 3, 4... dopóki go nie zatrzymamy.
Liczby losowe to liczby, których nie możesz przewidywać.
Rzut monetą albo kostką daje ci liczbę losową. Liczby te
są bardzo ważne w grach i w niektórych działach matematyki.
Komputery mogą generować liczby losowe całkiem nieźle.
Funkcja QBASIC-a RND dostarcza liczb losowych, które możemy
używać. RND jest specjalną funkcją, która daje nam liczbę
losową spomiędzy 0 i 1. Możemy to użyć w grach, aby
rzeczy były ciekawsze. RND jest doskonała do rzutu
kostką lub monetą. Zobaczmy najpierw RND w działaniu: Ten program wypisuje dwa razy RND. Zauważ, że dostaniesz
dwie liczby, które wydają się nieprzewidywalne i przypadkowe.
Ale spróbuj uruchomić program jeszcze raz. Dostaniesz te same
"przypadkowe" liczby. To znaczy, że twoje gry byłyby takie
same za każdym razem, gdy je uruchomić. Na szczęście jest
sposób, aby to naprawić. Użycie RANDOMIZE TIMER da pewność, że liczby losowe,
które otrzymasz, będą różne przy kolejnych uruchomieniach.
Wypróbuj to: Liczby losowe spomiędzy 0 i 1 nie są w rzeczywistości
zbytnio przydatne. Co, jeżeli do gry potrzebujesz liczbę
losową między 1 i 6, jak przy rzucie kostką? Aby dostać
coś bardziej użytecznego, użyjemy matematyki. Na szczęście
komputery są w matematyce bardzo dobre. Są dwa problemy, które musimy rozwiązać, aby otrzymać
wyniki, jakich chcemy. Pierwszy to rozciągniecie zakresu
liczb losowych z 0 do 1 na 1 do 6. To zrobimy łatwo: Pomnożeniem przez 6 zwiększamy zakres na 0 do 5. Przez
dodanie 1 przesuwamy zakres na 1 do 6. Jednak jest jeszcze
problem. Cały ten "ogon" ułamkowy. Funkcja INT QBasic-a
może być użyta do przekształcenia liczby dziesiętnej
w całkowitą (liczbę bez części dziesiętnej). Oto program, który rzuca dwoma kostkami i wypisuje
wartość każdej z nich. Zmienne Kosc1 i Kosc2 są używane
do przechowania wartości każdej kostki przed ich
wypisaniem. W rzeczywistej grze Kosc1 i Kosc2 mogłyby
być użyte w jakiś sprytny sposób do zmiany wyniku gry. Zauważ, że w ostatnim programie była linia z samym
PRINT. Czy widzisz, co ona robi? Ona po prostu drukuje
na ekranie pustą linię. To może się przydać dla zrobienia
ładniej wyglądajacych wyników twojego programu. Oto fajny program, który używa wiekszość tego, czego
się dotąd nauczyliśmy.
Jak zawsze, pójdź dalej i przerób to po swojemu. Zmień
"Nie powiem!" na "To zależy...", a otrzymasz wyrocznię,
która nigdy nie mówi "Nie".
Idź dalej i spróbuj dodać nową przepowiednię. Trzeba będzie
zmienić na ponieważ teraz będzie ich 6. Następnie będzie trzeba dodać
" Wcześniej w rozdziale 4 widzieliśmy pętlę DO...LOOP biegnącą
bez końca. Jest szereg sposobów, aby pętla się zatrzymała. Jednym
z nich jest użycie WHILE. Ten następny program używa WHILE
do sprawdzania, aby program biegł tak długo, jak długo Odp$
zawiera literę "t". Warunek w linii LOOP WHILE jest taki sam, jak warunek,
który moglibyśmy użyć w IF...THEN. W tym przypadku sprawdzamy,
czy Odp$="t" i jeśli tak jest, kontynuujemy pętlę. Jeśli zaś
nie, wychodzimy z pętli i nasz program kończy się. Możesz dodać tą właściwość do dowolnego programu. Spróbuj
dodać ją do Wyroczni. Nasz ostatni program działa świetnie tak długo, dopóki
użytkownik zawsze wpisuje małe "t". Co się stanie, jeżeli
użytkownik wpisze "tak"? Ponieważ "tak" dla komputera nie jest
tym samym co "t", test na Odp$="t" zawiedzie i program
zakończy się. Przypuszczalnie to niezbyt dobry pomysł.
Ten sam problem mamy, gdy użytkownik wpisze duże "T".
Wypróbuj to, aby zobaczyć, co mam na myśli. Jest parę sposobów, aby uczynić ten program inteligentniejszym
i łatwiejszym w obsłudze dla naszych użytkowników.
Moglibyśmy sprawdzać kilka sposobów powiedzenia "tak"
przy użyciu OR ("albo"), jak ten: Ta wersja pozwoli użytkownikowi wpisać "t" lub "T"
i program ruszy znowu. Możemy go zrobić jeszcze
mądrzejszym przez użycie LEFT$, jak tu: Ta wersja pozwoli użytkownikowi wpisać "Tak", "tak" albo
cokolwiek, co zaczyna się na "t", bo LEFT$ patrzy tylko
na pierwszą literę w twojej odpowiedzi. Możesz nawet wpisać
"tu" i program rozpocznie się znowu. Może to wyglądać na robienie komputera mądrzejszym, ale
my wiemy, co się dzieje naprawdę. Aby udowodnić, że komputer
rzeczywiście nie jest bardzo inteligentny, spróbuj wpisać
"Pewnie!" lub "teczka". On myśli, że "Pewnie!" znaczy "nie",
a "teczka" - "tak". LEFT$ może być użyte, aby wziąć pewną ilość liter
od lewej strony ze zmiennej łańcuchowej. Jako przykład,
jeżeli mamy: wtedy LEFT$(A$,2) da nam "TE". LEFT$(A$,3) da nam
"TES". Pierwszym "parametrem", który przekazujemy
do LEFT$, jest łańcuch znaków, z którym chcemy pracować.
Drugim parametrem przekazywanym do LEFT$ jest ilość znaków
(liter), którą chcemy dostać. Wypróbuj program, który
używa LEFT$ w inny sposób: Ten program wypisze pierwszy znak tego czegokolwiek,
następnie dwa pierwsze znaki, a następnie trzy pierwsze
znaki: Gdybyś był ciekawy, to QBASIC ma także RIGHT$
(right = prawy) i działa on dokadnie tak, jak
LEFT$(). Wypróbuj to:
Oto przykład tego, co ten program będzie robił: Masz dosyć tego całego czarno-białego? Wówczas jest
dla ciebie polecenie COLOR.
Kolor wymaga dwóch liczb. Pierwsza liczba to numer
koloru pierwszego planu. Druga liczba jest kolorem tła.
Na przykład jeśli chcesz pisać czarno na białym, zastosuj
"COLOR 0,7". Wszystkie kolory mają swoje własne numery: Jest także dużo innych kolorów. Wypróbuj liczby od 8
do 15 aby zobaczyć, jakie kolory uzyskasz. Zasadniczo,
jeżeli dodasz 8 do każdego z powyższych kolorów, uzyskasz
jaśniejszą wersję tego samego koloru. Weź niebieski, który
ma numer 1 i dodaj 8 - dostaniesz 9, który jest jasnoniebieski.
Dodanie 16 do numeru koloru da ci wersję migajacą. To jednak
nie pracuje w oknie DOS-a. Naciśnij <ALT> i <ENTER>
aby się przełączyć w tryb pełnoekranowy, który pokaże
migotanie. Wypróbuj ten program: Kolor może być stosowany na wiele sposobów, aby
robić bardziej interesujace programy. FOR...NEXT jest pętlą jak DO...LOOP, ale FOR...NEXT
ma wbudowany własny licznik. Wypróbuj to: Znacznie lepiej, niż nasz ostatni licznik. Ten
zatrzymuje się sam po odliczeniu do 10. Oto program z paletą kolorów, używający pętlę FOR...NEXT. FOR...NEXT potrafi także "odliczać z krokiem".
Wypróbuj to: Będzie on odliczał dwójkami od 2 do 20. STEP
mówi QBASIC-owi, po ile odliczać. Wypróbuj zmianę
tego na odliczanie dziesiątkami od 10 do 100. FOR...NEXT może także odliczać do tyłu, jeżeli
użyjesz ujemną wartość STEP: "SLEEP 1" każe QBASIC-owi czekać przez jedną
sekundę i następnie kontynuować. Jeżeli właśnie potrzebujesz w swoim programie
brzęczyka, możesz użyć BEEP: SOUND pozwala odegrać "beep" i powiedzieć, jak wysoki
lub niski on będzie i jak długo będzie trwał. Ten program
wytwarza pisk 1000 Hz przez około 1 sekundę: SOUND jest dobre do robienia efektów dźwiękowych.
Oto zrzucanie bomby: Jeżeli chcesz zagrać melodię, to PLAY jest
dokładnie tym, czego trzeba. Wypróbuj to: PLAY jest jak mały język programowania wewnątrz QBASIC-a.
"e8" oznaczacza "graj ćwierćnutę E". Jeśli jesteś obeznany
z zapisem nut, rozumiesz, co to znaczy. Oto gama: Oto znajoma melodia, używajaca trik do robienia trypletów. Ponieważ PLAY nie robi trypletów, musisz modyfikować tempo
aby otrzymać właściwy rytm. PLAY rozpoczyna w domyślnym tempie
"T120", co oznacza 120 ćwiartek (ćwierćnut) na minutę.
W powyższej melodii przełączamy je na T180, które jest tempem
trypletu dla T120. Mnożąc nasze tempo przez 1.5 otrzymujemy
tempo trypletu. Kiedy tryplet jest gotowy, przełączamy się
z powrotem na normalne tempo. W powyższym przykładzie
możesz zobaczyć, że przełączamy się tam i z powrotem między
głównym tempem (T120) i tempem trypletu (T180) kilka razy,
gdy trzeba. Jak zwykle, jest więcej niż jeden sposób na robienie
trypletów. Trypletowe ósemki mogą być zastapione dwunastkami,
jak tutaj: Przy stosowaniu tej techniki szesnastki stają się 24. itd...
Po prostu mnożymy długość nuty przez 1.5, zamiast zmieniać
tempo. Każda z tych technik ma zalety i wady. Technika zmiany tempa
zajmuje więcej miejsca, ale nuty zachowują swoje wartości.
Technika z dwunastkami jest bardziej zwarta, ale nie tak łatwa
do zrozumienia. Którą z nich zastosujesz, zależy od ciebie.
Upewnij się tylko, że inna osoba czytająca twój kod będzie
wiedziała, co robisz. Komentarze są tu dobrym pomysłem. LOCATE pozwala drukować w określonym miejscu
na ekranie. Dwie liczby po LOCATE są współrzędnymi miejsca,
gdzie będzie się drukować. Zupełnie tak, jak w matematyce,
te liczby dają nam wiersz i kolumnę. Pierwsza liczba
w LOCATE jest wierszem, czyli jak daleko w dół ekranu
drukowanie ma się rozpocząć. Druga liczba jest kolumną,
czyli jak to ma być daleko w prawo. Zastosujmy kilka liczb losowych oraz COLOR i LOCATE
do zrobienia bardziej interesujacej wersji naszego
pierwszego programu z pętlą: Strasznie wymieszane, ale interesujące. A może zegar? TIME$ jest specjalną zmienną, która zawiera bieżący czas.
Aby to zatrzymać, naciśnij Break. Stosuj WIDTH 40 aby uzyskać duży tekst. Przestawia
on cały ekran w tryb szerokiego tekstu. Zastosuj WIDTH 80,
aby powrócić do normalnego rozmiaru tekstu. Niestety, nie zobaczysz wielkiego tekstu w okienku. Będziesz
musiał nacisnąć <Alt>-<Enter>, żeby przełączyć się
na tryb pełnoekranowy. Sprawdź naciśnięcie <Alt>-<Enter>
jeszcze raz, aby powrócić do trybu w oknie. Jest dużo specjalnych symboli i innych znaków, które
można wyświetlić, a nie ma ich na klawiaturze. Wypróbuj to:
Drukuje to parę uśmiechniętych buziek. Jest także
mnóstwo innych znaków. Ten program pokaże ci wiele
z nich, chociaż nie wszystkie: Jak dotąd, mieliśmy do czynienia tylko z tekstem (słowami
i liczbami). Jak można robić obrazki w QBASIC-u? Najpierw
trzeba zastosować SCREEN, aby przejśc z trybu tekstowego
do graficznego. SCREEN (ekran, scena) pozwala wybrać ekran "graficzny" zamiast "tekstowego",
który używaliśmy dotychczas. To pozwoli ci rysować obrazki.
W następnym programie będziemy używać DRAW (draw = rysuj)
do rysowania na ekranie kwadratu w trybie graficznym SCREEN 12. Jest wiele innych numerów SCREEN, które można użyć, ale
12 jest przypuszczalnie najłatwiejszy do pracy. Daje ci dużo
miejsca i numery kolorów są znajome.
Pomoc do QBASIC-a
objaśnia wszystkie możliwe wartości SCREEN. Możesz zawsze wypróbować je
i obejrzeć, co się będzie działo. DRAW to coś jak "żółw" w języku programowania Logo. Przy pomocy
DRAW możesz poruszać się po ekranie i rysować linie po drodze.
W przykładzie wyżej użyliśmy następujące komendy DRAW: DRAW potrafi znacznie wiecej, niż to. Jest jak PLAY;
jest małym językiem programowania wewnątrz QBASIC-a. Zajrzyj do
Pomocy QBASIC'a
po kompletny opis wszystkiego, co DRAW
potrafi. A oto wypełniony kwadrat: "C15" ustawia kolor na jaskrawobiały. "BF1" kieruje
do wnętrza kwadratu, nastepnie "P15,15" wypełnia go
jasnobiałym. I na koniec coś bardzo podobnego do Logo: "TA" oznacza obrót o określony kąt. STR$ przekształca
wartość zmiennej I na łańcuch. To pozwala poleceniu DRAW
obracać o kąt ze zmiennej I. Nie jest to tak łatwe, jak Logo,
ale nadal imponujące. QBASIC może także rysować przy użyciu systemu
współrzędnych. To jak rysowanie wykresów na kratkowanym
papierze. Wypróbuj to: LINE pozwala rysować linię między dwoma punktami.
Punkty są określone przez współrzędne (x, y). Mogłeś to
zobaczyć, ucząc się o wykresach na matematyce. W QBASIC-u
współrzędne są prawie takie same. Jedyną odmienną rzeczą
jest współrzędna Y. W QBASIC-u współrzedna Y jest do góry
nogami. "0" jest u góry i rosnące liczby biegną ku dołowi
ekranu. "LINE (0, 0)-(320, 240), 15" rysuje linię startującą od
współrzędnej (0, 0), która jest lewym górnym rogiem ekranu.
Ostatnia liczba jest numerem koloru (15 - jaskrawobiały). Przez dodanie "B" na końcu polecenia LINE możesz narysować
prostokąt. Wypróbuj to: Pierwsza para współrzędnych to lewy górny narożnik,
a druga para - prawy dolny. Spróbuj "BF" zamiast "B". Ciekawe? QBASIC może również rysować okręgi (circles)
przy użyciu polecenia CIRCLE: Współrzędne (320, 240) mówią komputerowi, gdzie umieścić
środek okregu. "100" to promień, określa jak duży będzie okrąg.
"15" jest numerem koloru (znowu jaskrawobiały). Zauważ, że ten okrąg nie był wypełniony. LINE miało opcję
"BF", która pozwalała wypełniać kolorem rysowane prostokąty.
CIRCLE nie ma takiej opcji, więc użyjemy PAINT: PAINT wypełnia obszar kolorem. Przestaje malować, kiedy
dotrze do określonego koloru na ekranie.
Współrzędne (320, 240) mówią poleceniu PAINT, gdzie rozpocząć
malowanie, a pierwsze "15" mówi, że jako kolor wypełnienia
ma być użyty jaskrawobiały. Drugie "15" mówi, że należy przestać
malować po dotarciu do czegokolwiek, co jest jaskrawobiałe. Koncentryczne okregi są bardzo łatwe do narysowania: Stosując CIRCLE, PAINT i kilka liczb losowych, możemy
zrobić parę interesujących obrazków: Do tej pory używaliśmy INPUT do pobierania z klawiatury.
Z INPUT jest ten kłopot, że program zatrzymuje się, dopóki
użytkownik nie naciśnie klawisza Enter. Czy nie byłoby fajnie
utrzymać program działający i mimo to móc pobierać coś
z klawiatury? Pozwala to zrobić INKEY$. Stosowanie INKEY$
jest bardzo ważne, jeśli chcesz robić gry "w czasie
rzeczywistym". Poprawmy program zegara, pozwalając użytkownikowi nacisnąć
jakikolwiek klawisz aby zatrzymać program. W ten sposób
nie potrzebuje on nic wiedzieć o klawiszu Break. Nieźle. Teraz nie potrzebujemy uczyć użytkownika
o klawiszu Break. Możemy zrobić to samo w każdym innym
naszym programie, który wymaga klawisza Break. Jeśli
użytkownik nie naciska klawisza, INKEY$ nie zwraca nic,
czyli łańcuch pusty "". Następny program będzie siedział w pętli, pobierając
klawisze z klawiatury przez INKEY$ i drukując je na ekranie: Ten mały programik może być zastoswany do znajdowania
różnych sekretnych kodów używanych przez INKEY$ i pozwoli
ci poznać, kiedy naciskane są klawisze strzałek. Jest to
bardzo przydatne w programowaniu gier, gdzie klawisze
strzałek mogłyby sterować przebiegiem gry. Jeśli naciśniesz
klawisz ze strzałką, zobaczysz, że drukowana jest spacja
i litera. Konka-te-co? To po prostu wymyślne słowo na składanie rzeczy razem,
jedną po drugiej. Jest to znacznie łatwiej zrobić, niż powiedzieć. Kiedy
używasz znak plus "+" z łańcuchami znaków, to nie wykonujesz dodawania.
Zamiast tego zestawiasz je razem. To wypisze na ekranie "Witaj tutaj!". LEFT$() and RIGHT$() pozwala pracować z częściami łańcuchów.
Wypróbuj ten przykład: LEFT$(A$, 3) oznacza "weź z A$ 3 znaki od lewej". Ponieważ
3 znaki od lewej to jest "Ted", ten program drukuje "Ted",
jak oczekiwaliśmy. Spróbuj zmieniać liczbę od 2 do 5 i zobacz,
co się będzie działo. Kiedy już rozumiesz LEFT$(), RIGHT$() jest łatwe.
Wypróbuj to: RIGHT$(A$, 5) oznacza "weź z A$ 5 znaków od prawej.
To daje nam "fajny". LEFT$() daje nam coś z lewej strony łańcucha. RIGHT$() daje coś
z prawej strony łańcucha. MID$() daje nam coś ze środka (middle).
Wypróbuj to: MID$(A$, 5, 3) oznacza "weź 3 znaki ze środka A$, zaczynając
od piątego znaku. To daje nam środkowe słowo: "dwa". Możesz także użyć MID$() do zmiany części tego, co jest w zmiennej
tekstowej. Wypróbuj to: Tutaj zastępujemy "aw" w spawaczu przez "in". To daje nam
zupełnie inne słowo. Mógłby to być piękny podstępny sposób na ukrywanie w programie
czegoś takiego jak hasło. Ktoś, kto nie wie, jak programować
w QBASIC-u, nie mógłby go wykombinować. Kiedy trzeba przekształcić łańcuch na napisany w całości dużymi
albo w całości małymi literami, zastosujemy UCASE$() i LCASE$(). Możesz używać UCASE$() i LCASE$() do uodpornienia testów
na poczet liter. Inaczej mówiąc, wielkość liter nie będzie
brana pod uwagę. Oto ulepszenie do poprzedniego programu: W tej nowej wersji użytkownik może wpisać "janek", "Janek"
lub nawet "JANEK", i imię będzie rozpoznane. Powiedzmy, że trzeba wypisać na ekranie 20 gwiazdek w jednej linii.
Mógłbyś to zrobić tak: Ale był lepszy sposób. Co powiesz na pętlę FOR? To działa dobrze, ale QBASIC ma jeszcze łatwiejszy sposób
zrobienia tego przy pomocy STRING$(). Pierwszym argumentem w STRING$() jest, ile razy chcesz powtórzyć
znak. Drugim argumentem jest znak, który ma być powtarzany. A więc
STRING$(20, "*") znaczy "wypisz mi 20 gwiazdek". Jeżeli chcesz wstawić dużo spacji, mógłbyś to zrobić
przy pomocy Albo możesz użyć SPACE$(). Pętle FOR zawsze robią ciekawe rzeczy: LEN() podaje nam długość ciągu znaków. Wypróbuj to: Jak oczekiwaliśmy, to powinno wydrukować liczbę 5, bo słowo
"Witaj" ma 5 znaków. LEN() jest przydatna w pętlach FOR, kiedy nie jesteś pewny,
jak długi jest łańcuch, a nie chce ci się tego liczyć: LEN() jest bardzo użyteczna, gdy chcesz, aby to
użytkownik wpisał łańcuch. Wypróbuj to: Komputery w rzeczywistości znają się tylko na liczbach. Aby
wytworzyć ciąg liter, komputery zamieniają litery na liczby, bo
na nich potrafią pracować. CHR$() i ASC() pozwalają nam robić
takie samo przekształcenie. CHR$() zamienia liczbę na znak. Widzieliśmy to już
w poprzednim rozdziale. Wypróbuj to: Ten program wyświetla wszystkie numery znaków od 14 do 255
i znaki, które one reprezentują. CHR$() jest bardzo przydatne
do otrzymywania znaków, których nie ma na klawiaturze. Jak ten: Jest parę ciekawych znaków między CHR$(1) i CHR$(31).
Na przykład CHR$(7) robi "beep". Wypróbuj: Są również inne interesujące rzeczy. Pobaw się trochę
z CHR$(), a znajdziesz kilka. ASC() jest przeciwieństwem CHR$(). ASC() pobiera znak
i podaje jego numer. Wypróbuj: Ten program drukuje 65, ponieważ kod znaku dużego "A" to 65.
Kod, którego QBASIC używa do przekształcania liter na liczby, jest
nazywany "ASCII" (wymawia się "aski"). INSTR() pozwala poszukiwać łańcucha znaków w innym łańcuchu.
Jeśli go znajdzie, powie nam, gdzie on jest. Wypróbuj: Ten program wypisuje "10", ponieważ "wszyscy" zostało
znalezione na dziesiątej pozycji w "Witajcie wszyscy". Jeżeli
łańcuch nie zostanie znaleziony, INSTR() zwraca zero. INSTR() może się okazać bardzo przydatny, gdy chcesz
podzielić łańcuch na części: Większość języków programowania pozwala dodawać
do programów uwagi, które są ignorowane przez komputer.
To pozwala objaśniać, co jest w programie, komuś kto
mógłby ten program czytać w przyszłości. W QBASIC-u
na początku komentarza używamy apostrofu (').
Oto przykład: Komputer będzie ignorował wszytkie te linie komentarzy,
ale my ludzie możemy je przeczytać i zapamiętać, jak
program działa. Dobrzy programiści stosują komentarze,
aby pomóc innym zrozumieć, co zostało zrobione. Komentarze
pomogą również nam pamiętać, co zrobiliśmy, gdy wrócimy
do programu za jakiś czas. Innym sposobem uczynienia programu łatwiejszym
do zrozumienia jest używanie stałych. Stałe wyglądają
i działają jak zmienne, ale nie mogą się zmieniać.
Oto przydatny program: Jeśli nie użyjemy stałej Pi, musimy liczbę 3.141593 w tym
programie skopiować dwa razy. Użycie stałej czyni program
łatwiejszym do czytania i zrozumienia. Chroni nas także
przed pomyłkami podczas kopiowania. Gdy program robi się długi, trzeba podzielić go
na mniejsze kawałki, z którymi łatwiej pracować.
QBASIC nazywa te kawałki "sub-procedurami" lub
procedurami SUB. Inne języki programowania używają
innych nazw, jak np. podprogram. Aby pracować z SUB-ami w QBASIC-u, trzeba zajrzeć
do okna dialogowego "SUBs", które pokaże nam listę
naszych SUB-ów. Wybierz "View | SUBs..." z menu aby
przenieść się do okna "SUBs". Można także nacisnąć
klawisz F2, aby uzyskać to samo szybciej. W oknie
można wybrać SUB, z którą chcemy pracować, albo
wybrać główny moduł (Main Module). Jeśli właśnie
zaczynasz (File | New), zobaczysz, że główny moduł
nazywa się "Untitled" i nie ma żadnych SUB-ów. W QBASIC-u można zdefiniować nową SUB po prostu
przez wpisanie jej. To przeniesie cię do widoku nowej
procedury. Spróbuj wpisać to: Zauważ, że gdy nacisnąłeś Enter po pierwszej linii,
zostałeś przeniesiony do nowego ekranu z twoją nową SUB
właśnie. Teraz jeżeli pójdziesz do okna dialogowego "SUBs"
(View | SUBs...), możesz zobaczyć, że masz SUB nazywającą się
"RysujOkrag" i główny moduł nazwany "Untitled". Teraz trzeba wrócić do głównego modułu,
aby rzeczywiście użyć tą nową SUB. Z menu wybierz
View | SUBs..., aby dostać się do okna dialogowego SUBs.
Teraz kliknij podwójnie na "Untitled", aby powrócić do
Main Module. Ekran zrobi się pusty, ale nie martw się,
twoja SUB ciągle tam jest. Teraz wpisz i uruchom to: Widzisz? RysujOkrag zrobił, co miał do zrobienia. Spróbuj dodać inną SUB. Zobacz, czy zdołałeś zapamiętać
potrzebne kroki. Wróć do poprzedniego przykładu, jeśli
potrzebujesz pomocy. Teraz trzeba zmienić główny moduł, aby użyć naszą
nową SUB. Więc wróć do Main Module i zmień go, żeby
wyglądał jak to: Teraz uruchom to i powinieneś zobaczyć okrąg i usłyszeć
melodyjkę. Dzielenie programów na mniejsze części, jak tutaj, pomoże ci
zrozumieć duże programy. Czasami chcesz przekazać do procedury SUB liczbę lub łańcuch
znaków. QBASIC pozwala i na to. Oto nowa wersja procedury
RysujOkrag: Ta wersja pozwala nam przekazać Promien. Gdy to robimy,
Promien nazywa się "parametrem" lub "argumentem" naszej
procedury SUB. Oto jak moglibyśmy przesłać argument z głównego
modułu: Moglibyśmy także w głównym module zrobić coś takiego: Gdy potrzeba przekazać coś głównemu modułowi, możesz zmienić
jeden z argumentów w SUB i główny moduł zobaczy tą zmianę. Gdy uruchomisz ten program, wypisze on na ekranie wartość 1.
Jest tak dlatego, bo wartość I jest zmieniana przez procedurę SUB
DodajJeden. Gdy trzeba tylko zwrócić wartość, czasem lepszym
wyborem jest procedura FUNCTION. Będzie ona opisana później. A co, jeżeli mieliśmy zmienne w głównym module i w SUB
i tak się zdarzyło, że miały te same nazwy? Czy będzie to
ta sama zmienna? Odkryjmy to. Wpisz taką SUB: I taki główny moduł: I uruchom to. Co się stało? Zakres powiedział "0", bo X dla Zakresu
było nową zmienną. Główny Moduł powiedział 15, bo Zakres nie zmienił
X-a z Głównego Modułu, on zmienił swój własny X. X z Zakresu i X
z Głównego modułu są różnymi zmiennymi. Zmienne, które tworzysz w SUB, nie mogą być widziane przez Moduł
Główny. Zmienne w Głównym Module nie mogą być widziane przez SUB.
Jeśli trzeba współdzielić zmienne, możesz przekazać je do SUB
jako argumenty. Jest możliwe zrobić tak, aby zmienne z modułu głównego
były dostępne dla SUB bez przekazywania ich jako argumenty.
Dodaj "SHARED X" do procedury Zakres, w ten sposób: Teraz, kiedy to uruchomisz, zobaczysz że SUB Zakres może już widzieć
X z głównego modułu. Zakres nie ma już własnego X. Nazywa się to
"dane globalne" (albo "zmienne globalne"), ponieważ są one wszędzie
widoczne, i jeśli możesz, powinieneś tego unikać. Większość programistów
uważa to za niebezpieczne, bo trudno jest rozeznać się, która procedura
SUB mogła zmienić wartość takiej zmiennej. Możesz także z Głównego Modułu uczynić zmienną globalną dla wszystkich
procedur SUB, przez dodanie w tym module "DIM SHARED" zanim ustawisz X
na 15: W ten sposób łatwiej jest zobaczyć, które zmienne są globalne, bo można
je znaleźć w Głównym Module. Problem może być z tym, że te zmienne są
globalne dla wszystkich procedur SUB w programie. Zazwyczaj tylko niektóre
SUB-y potrzebują widzieć zmienne globalne; w takim przypadku lepiej jest
stosować SHARED wewnątrz SUB. Kiedy zaczynasz się martwić o współdzielenie zmiennych między
SUB-y i Moduł Główny, to prawdopodobnie jesteś gotowy zacząć
uczyć się programowania zorientowanego obiektowo. Ten styl
programowania czyni łatwiejszym współdzielenie zmiennych
pomiędzy SUB-ami, a nadal wytwarza kod, który jest łatwy do
zrozumienia. Visual BASIC, Java, i C# są językami programowania,
które mają właściwości programowania obiektowego i są dosyć
łatwe do nauki. Zauważ, że za każdym razem gdy wywołujesz SUB, jego
zmienne są tracone po zakończeniu SUB-a. Oto przykład: Niezbyt dobry licznik, skoro zawsze wypisuje "1". Możemy
użyć STATIC, aby powiedzieć QBASIC-owi, że nie chcemy znikania
C po zakończeniu SUB-a. Wtedy uzyskamy zachowanie, jakiego
oczekujemy. Zmień procedurę Licznik, jak niżej: I teraz już znacznie lepiej. Języki programowania zorientowane obiektowo oferują dużo
sposobów, aby uniknąć używania zmiennych STATIC. Kiedy zauważysz
u siebie wytwarzanie mnóstwa zmiennych STATIC, to już prawdopodobnie
czas na nauczenie się języka zorientowanego obiektowo. Funkcje są całkiem jak SUB-y, ale zwracają wartość.
Oto przykład: A to Główny Moduł, z którym ona pracuje:
Kiedy wprowadzałeś przykładowe programy w tym rozdziale,
mogłeś zauważyć, że edytor QBASIC-a dodaje do programów
polecenia "DECLARE". Dlaczego to robi? Polecenie "DECLARE"
jest uprzedzeniem dla QBASIC-a, że w tym programie są
procedury SUB i FUNCTION. Bez tego ostrzeżenia QBASIC
nie wiedziałby, co mamy na myśli, kiedy je wywołujemy.
Myślałby, że znalazł błąd składni
i program zatrzymałby się. Na szczęście QBASIC załatwia to, wstawiając za nas
DECLARE. Niestety, w długich programach może on wstawiać
DECLARE gdziekolwiek, co wygląda paskudnie. Na szczęście
możesz przenieść DECLARE tam, gdzie zechcesz (tak długo, jak
długo jest umieszczone przed pierwszym użyciem SUB lub
FUNCTION), a QBASIC nadal dba o resztę. QBASIC oferuje pięć wbudowanych typów danych. Każdy z tych
typów może zostać określony przez pojedynczy znak dodany
po nazwie zmiennej. Możesz także określać typ, używając polecenia
DIM. Ważne jest, aby przy pisaniu programu wskazać prawidłowe
typy. Następujące opisy każdego z typów pomogą ci podejmować
właściwe decyzje. Przechowują liczby z częścią dziesiętną. W zmiennej pojedynczej
precyzji możesz otrzymać do siedmiu cyfr. Znacznikiem typu w takiej
zmiennej jest "!". Jeżeli nie określisz inaczej, każda zmienna
bez znacznika typu jest zmienną liczbową pojedynczej
precyzji. Oto parę przykładów tworzenia i używania tych zmiennych: Zauważ, że polecenie DIM może zostać użyte do wskazania
QBASIC-owi typu zmiennej. Wtedy dla takiej zmiennej nie potrzebujesz
używać znacznika (przyrostka) typu. Typ łańcuchowy obsługuje łańcuchy znaków. Na zmiennych
łańcuchowych nie możesz wykonywać obliczeń.
W poleceniu DIM stosuj "STRING" dla utworzenia zmiennej
łańcuchowej. Przyrostkiem typu dla takiej zmiennej jest "$"
Oto kilka przykładów tworzenia i używania zmiennych
łańcuchowych: Typ Integer obsługuje liczby bez miejsc dziesiętnych.
Liczby te mają zakres od -32768 do 32767. Obliczenia na nich
mogą być szybsze, niż na zmiennych pojedynczej precyzji.
Dla programów, które muszą działać bardzo szybko, stosowanie
zmiennych całkowitoliczbowych może być użuteczne. W poleceniu
DIM do ich utworzenia stosuj "INTEGER". Przyrostkiem typu jest
dla nich "%". Oto parę przykładów tworzenia i używania zmiennych
typu Integer: Ponieważ obliczenia typu Integer są bardzo szybkie,
powszechnie spotkasz następującą linię na początku
programów w QBASIC-u:
Mówi ona QBASIC-owi, aby przestał zakładać, że wszystkie zmienne
są pojedynczej precyzji i zamiast tego przyjął, że wszystkie są
całkowitoliczbowe. W ten sposób nie trzeba już używać DIM lub symbolu
"%", w całym programie wszystkie zmienne będą typu Integer. Ten typ także obsługuje liczby bez miejsc dziesiętnych.
Long-integers mają zakres od -2147483648 do 2147483647.
Obliczenia na nich są zwykle prawie tak szybkie, jak typu
Integer. Może to być użyteczne dla programów, które muszą
pracować bardzo szybko. W poleceniu DIM do ich utworzenia
stosuj "LONG". Przyrostkiem typu dla zmiennych
całkowitoliczbowych jest "&". Oto kilka przykładów tworzenia
i używania zmiennych całkowitoliczbowych: Ten typ obsługuje liczby z miejscami dziesiętnymi. W zmiennej
podwójnej precyzji możesz otrzymać do piętnastu cyfr. Są one
stosowane tam, gdzie potrzeba bardzo dokładnych obliczeń.
W poleceniu DIM do ich utworzenia stosuj "DOUBLE". Przyrostkiem
typu jest "#". Oto kilka przykładów tworzenia i używania zmiennych
podwójnej precyzji: Tablica pozwala przechowywać listę rzeczy. Tablice są bardzo
podobne do zmiennych, ale mogą zawierać więcej niż jedną rzecz.
Wypróbuj to: Liczba wewnątrz nawiasów "(1)" jest nazywana "indeksem". Tablice mogą także przechowywać liczby. Tablice mają ograniczenie na przechowywanie tylko 11
pozycji (0 do 10).
Jeśli spróbujesz iść powyżej 10, otrzymasz błąd
"Subscript out of range" ("Indeks spoza zakresu").
Aby stworzyć większe tablice, możesz użyć DIM do wskazania
QBASIC-owi, jak duża będzie talica: Tablice są doskonałe do programów, w których trzeba przechowywać
listę rzeczy. Mógłbyś stosować tablice do stworzenia programu
książki telefonicznej lub programu, który przechowuje adresy osób
z twojej klasy. Czasami będziesz chciał trzymać razem grupę zmiennych, ponieważ
one razem coś opisują. Polecenie TYPE pozwala tworzyć własną
kolekcję zmiennych. Oto przykład: TYPE tworzy nasz nowy typ czyli kolekcję zmiennych. DIM tworzy
nową zmienną o tym typie. Kiedy pracujemy z typami, stosujemy
nazwę zmiennej, zakończoną kropką("."), a po kropce nazwę zmiennej
z TYPE. Ponieważ TYPE pozwala używać pojedynczej zmiennej do reprezentowania
kolekcji zmiennych, możesz używać TYPE do przekazywania wielu
parametrów do SUB-a za jednym zamachem. Może to być dobry sposób
na uniknięcie używania zbyt wielu SHARED w SUB. W QBASIC-u TYPE może zawierać każdy z wbudowanych typów
zmiennych. Type może także zawierać inny TYPE. Jednakże
TYPE nie może zawierać tablicy. Visual BASIC pozwala na to,
ale nie QBASIC. Zastosowanie razem tablic i TYPE pozwala utworzyć coś, co jest
znane jako baza danych. Wypróbuj to: Do tej pory używaliśmy zmiennych łańcuchowych do przechowywania
łańcuchów, a zmiennych numerycznych do przechowywania liczb.
A co, jeśli rzeczywiście trzeba wykonać obliczenia na liczbach,
które znajdują się w zmiennej łańcuchowej? Lub być może trzeba
wydostać jakoś kilka cyfr ze zmiennej łańcuchowej? QBASIC
dostarcza nam funkcje STR$() and VAL(). STR$() pozwoli przekształcić liczbę na łańcuch.
Jak tutaj: VAL() pozwoli przekształcić z łańcucha na liczbę. Jak tutaj: Obejmuje CINT(), FIX(), INT(), CDBL(), CSNG(), CLNG()
(Autor pozostawił ten rozdział pusty.) Fragment "#####.##" nazywa się łańcuchem
formatującym. Znaki # określają w nim położenie cyfr liczby. Jeżeli
liczba ma część ułamkową dłuższą niż ilość miejsc przewidzianą na nią
w łańcuchu, to jest ona zaokrąglana. Dla liczb całkowitych część
ułamkowa zawiera zera (które normalnie QBasic opuszcza). PRINT USING używa również inne niż #
znaki formatujące. Listę ich wszystkich można znaleźć w
Pomocy do QBasica" Ładowanie tablicy z mnóstwem danych może okazać się bardzo nudne. Aby zaoszczędzić miejsca i wpisywania, QBASIC dostarcza
polecenia DATA i READ. Można umieścić listę wartości danych
w poleceniu DATA i wczytać ją do tablicy używając READ.
Następujący program robi dokładnie to, co poprzedni. QBASIC, czytając kod, opuszcza polecenia DATA.
Zwraca na nie uwagę tylko wtedy, gdy znajdzie polecenie
READ. Za każdym razem, gdy trafi się READ, QBASIC pobiera
wartość z polecenia DATA i umieszcza ją w zmiennej
w poleceniu READ. RESTORE mówi QBASIC-owi, z którego polecenia DATA rozpocząć
czytanie. W swoim programie możesz potrzebować załadować kilka
różnych tablic. RESTORE pozwala ci zorganizować polecenia
DATA w każdy sposób, w jaki zechcesz. RESTORE każe QBASIC-owi rozpocząć czytanie
od następnego polecenia DATA po etykiecie. Etykieta
jest nazwą, jak "Imiona:" lub "Wartosci:". Zauważ,
że gdy tworzymy nową etykietę, używamy dwukropka ":",
ale gdy używamy etykietę w poleceniu RESTORE,
opuszczamy dwukropek. Polecenia DATA są doskonałe do baz danych.
Oto nowa wersja przykładu bazy danych, tym razem
używająca DATA. Do tej pory nasze programy były zależne od programisty,
podającego im dane do pracy. To nie działałoby dobrze
w przypadku programu książki telefonicznej. Użytkownik
powinien wypełnić nazwiska i numery telefonów. QBASIC pozwala
dostać informację od użytkownika przez INPUT. Ale gdy program
się kończy, ta informacja przepada. Rozwiązaniem tego problemu jest pozwolić użytkownikowi wprowadzić
informację, a następnie program będzie przechowywał ją w pliku
na twardym dysku. QBASIC oferuje szereg sposobów, aby to wykonać.
Spróbuj tego: Gdy uruchomisz ten program i wpiszesz swoje imię, umieści on je
w pliku na twardym dysku nazwanym "testfile.txt". Możesz posłużyć
się Notatnikiem, aby go odnaleźć i sprawdzić, że twoje imię tam jest.
Możesz potrzebować rozgryźć, gdzie QBASIC umieszcza plik. Będzie to
trochę skomplikowane. Jeśli wyjdziesz z QBASIC-a i spod DOS-a
wpiszesz to: powinieneś zobaczyć swoje imie i wszystko, cokolwiek wpisałeś.
Komenda DOS-a "type" kopiuje zawartość pliku na ekran. Mógłbyś
spróbować także tego: To powinno wywołać Notatnik z twoim plikiem. Kiedy pracujesz z plikami,
dobrym pomysłem jest wiedzieć, jak wprowadzać je do Notatnika.
W ten sposób możesz je podglądać aby sprawdzić, czy zawierają one to,
czego oczekiwałeś. Są trzy polecenia: OPEN, WRITE i CLOSE, które są potrzebne do zapisywania
informacji do pliku. Polecenie OPEN (Otwórz) mówi QBASIC-owi trzy rzeczy:
Kiedy plik już jest otwarty, będziemy używać numer pliku, aby QBASIC
wiedział, do którego pliku chcemy zapisywać. Mógłbyś mieć dużo plików
otwartych w tym samym czasie, tak więc numer pliku pozwala QBASIC-owi
wiedzieć, z którym plikiem chcesz pracować. Polecenie WRITE (Pisz) mówi QBASIC-owi, do którego pliku chcemy
zapisywać (#1), i co chcemy zapisywać (Nazwa$). Jest to bardzo podobne
do polecenia PRINT, lecz zamiast wysyłania informacji na ekran WRITE
wysyła je do pliku. Na koniec trzeba zamknąć (CLOSE) plik, aby QBASIC wiedział,
że skończyliśmy. W przeciwnym razie QBASIC nie mógłby w ogóle niczego
zapisać do pliku. Polecenie CLOSE potrzebuje wiedzieć tylko, który
plik chcemy zamknąć, więc wymaga tylko numeru pliku. Następujący program pobierze imię i wypisze je na ekranie: Trzy są główne rzeczy odmienne w tym programie,
jeśli porównasz go z poprzednim. Rzeczą, która się nie zmieniła w ogóle, jest polecenie
CLOSE. Zamykamy plik #1 aby QBASIC wiedział, że z nim
skończyliśmy. Chociaż prawdopodobnie nie stracimy żadnych
danych, jeśli nie zamkniemy pliku w tym przypadku, jest to
nadal dobra rzecz do zrobienia. QBASIC może otworzyć tak
dużo plików, że jeśli zostawimy jeden otwarty, nie będziemy
mogli otworzyć żadnego więcej. Czasami może być bardzo przydatne zapisać do pliku,
kiedy program został uruchomiony, aby móc zobaczyć,
co zdarzyło się potem. Nazywa się to "prowadzeniem
logu". Możemy użyć opcję "APPEND" (Dołącz) w poleceniu OPEN
do otwarcia pliku i po prostu dopisywać do jego końca. W tym programie zalogowaliśmy dwie rzeczy, czas
startu programu i czas jego zakończenia. Uruchom
program kilka razy, po czym wyjdź z QBASIC-a i wpisz: To pokaże ci, co znajduje się w twoim logu. Pomysły: Wyrocznia używająca plik tekstowy na wejściu.
Mogłoby to być kombinacją tablic z odczytem z pliku. Powiedzmy że chcemy, aby nasz program pamiętał, kto
się do niego zarejestrował. Chcemy także zliczać, ile
razy był uruchamiany. Moglibyśmy spróbować czegoś takiego: Ale to nie zadziała. Dlaczego? Ponieważ QBASIC nie może
pamiętać wartości zmiennych Imie$ i Zliczaj od jednego
uruchomienia programu do następnego. Aby to poprawić, musimy posłużyć się plikiem. Możemy
odczytać plik zanim program wystartuje i zapisać plik
z powrotem, gdy program będzie się kończył. W tym pliku
zapiszemy imię użytkownika i ile razy program był
uruchomiony. Kod, który to robi, jest nieco bardziej złożony niż te,
które robiliśmy dotąd. Jest tak, ponieważ QBASIC obsługuje
błędy plikowe w dziwny sposób. Nasz program musi obsłużyć
jeden błąd pliku. Gdy będzie uruchamiany po raz pierwszy,
nie będzie jeszcze pliku rejestracyjnego, który ma on odczytać.
Tak więc OPEN nie powiedzie się. Musimy to obsłużyć, inaczej
nasz program nie będzie działał. "ON ERROR GOTO ErrorHandler" mówi QBASIC-owi, że kiedy jest
problem, program powinien bezpośrednio skoczyć do "ErrorHandler:"
- podprogramu obsługi błędów, który zobaczysz na końcu programu.
Tutaj możemy otrzymać kod błędu, który znajduje się w zmiennej
QBASIC-a zwanej "ERR" i skopiować go do naszej własnej zmiennej
"ErrorCode". Jeżeli tego nie zrobimy, stracimy kod błędu
przechowywany w ERR. RESUME NEXT każe QBASIC-owi
kontynuować program od miejsca, gdzie wystąpił błąd. Próbuję bardzo konsekwentnie unikać używania GOTO w moich
programach. Programy używające GOTO mogą być bardzo trudne
do zrozumienia.
Niestety, w tym przypadku QBASIC pozostawia nas bez alternatywy.
Musimy użyć GOTO.
Tak więc próbowałem użyć najprostszego rozwiązania, które
pozostawia kod łatwym do prześledzenia. Mając ten mały podprogram
obsługi błędu, możemy po prostu założyć, że ErrorCode będzie
zawierał numer błędu, jeżeli coś pójdzie źle. Nie można tylko
zapomnieć o wyzerowaniu go, w przeciwnym razie będziesz
oglądać stare błędy! Do tego miejsca stosowalismy coś, co nazywa się "Sekwencyjny
I/O". Sekwencyjny oznacza "jeden po drugim". I/O pochodzi od
Input/Output - Wejście/Wyjście. Kiedy zapisywaliśmy do pliku
imię użytkownika i licznik uruchomień, wpisywaliśmy je jedno
po drugim. To jest zapis sekwencyjny. Gdy odczytywaliśmy imię
i licznik, czytalismy je jedno po drugim. Najpierw imię,
potem licznik. To jest odczyt sekwencyjny. Wszystko razem daje
nam "sekwencyjne wejście i wyjście" czyli "sekwencyjny I/O".
Swobodny I/O pozwala czytać i zapisywać dane do dowolnej
części pliku, w kolejnosci, w jakiej chcemy. Jest to bardzo
przydatne, gdy masz bardzo duże pliki i nie masz dosyć czasu
lub pamięci, by czytać wszystko z pliku sekwencyjnie (jedno
po drugim). Swobodny I/O (Random I/O) pozwala skoczyć
wprost do potrzebnych danych w pliku i czytać lub zapisywać je.
Nawet w bardzo dużych i złożonych programach swobodny I/O
jest rzadko używany z powodu jego złożoności. Wyobraźmy sobie,
że program ma błąd i zapisuje złe miejsce w pliku! Plik w ten
sposób zostanie zniszczony. Nie będziemy tu omawiać swobodnego
I/O. Ale, jeśli go potrzebujesz, jest on w QBASIC-u. Nauczyłeś się dużo. Jeśli dotarłeś do tego miejsca
i nadal dobrze się bawisz, to czas zrobić trochę własnych
programów. Pomoc do QBASIC-a jest tym, co
powinieneś czytać, gdy tylko jesteś zaciekawiony, co jeszcze
QBASIC potrafi robić. On może znacznie wiecej, niż pokazałem
ci w tym podręczniku. Niektóre z następnych przykładów mogą robić rzeczy, o których
nie widziałeś wzmianki w książce. Zobacz, jeśli możesz dowiedzieć
się, jakie są te nowe rzeczy, zaglądając do Pomocy, która jest
dołączona do QBASIC-a.
(Pomoc do QBasic-a - QBASIC Help, dostępna w interpreterze QB
- jest oczywiście w języku angielskim. Ale jej przekład na polski
możesz znaleźć tutaj.
Przyp. tłum.) W tej grze komputer wytwarza liczbę między 1 i 10.
Próbuj odgadnąć tą liczbę. Mam nieco więcej przykładów na mojej stronie "SupaSoft".
Po prostu szukaj "QBASIC". Oto kilka, które możesz tam
znaleźć: Uwaga: Jeżeli wpisujesz ręcznie te adresy stron, sprawdź,
czy wstawiłeś duże litery dokładnie tak, jak pokazano. Np.
sprawdź, czy wpisałeś "SupaSoft", a nie "supasoft". Jeżeli
w przeglądarce dostajesz komunikat "Nie można wyświetlić strony",
prawdopodobnie to jest powodem.
http://www.tedfelix.com/SupaSoft/snowflak.html -
Snowflake: Generator płatków śniegu. Jak prawdziwe śnieżynki, nie ma dwóch takich samych. http://www.tedfelix.com/SupaSoft/strsplt2.html -
Star Split 2: Symulacja gwiaździstego nieba. http://www.tedfelix.com/SupaSoft/willtell.html -
William Tell: Udawaj Wilhelma Tella i próbuj zestrzelić strzałą jabłko z głowy zakładnika. http://www.tedfelix.com/SupaSoft/capture.html -
Capture: Próbuj złapać w pułapkę dwa roboty w labiryncie z bloków. http://www.tedfelix.com/SupaSoft -
Moja strona z programami freeware. Poszukuj "QBASIC" w opisach programów, aby znaleźć
próbki QBASIC-a. Jeżeli widzisz komunikat "Złe polecenie lub nazwa pliku", to potrzebujesz
dostać QBASIC dla twojej maszyny. Niestety, nie jest to najłatwiejsza rzecz na świecie.
Możesz poprosić kogoś, żeby przebrnął przez to razem z tobą.
Jest kilka miejsc w Internecie, gdzie możesz dostać
kopię QBasic-a. Zazwyczaj plik nazywa się "qbasic.zip".
Oto parę miejsc, które znalazłem:
Prawdopodobnie jest dużo innych miejsc do znalezienia.
Użycie wyszukiwarki, np.
www.google.com i
szukanie "qbasic.zip" zazwyczaj daje dobre wyniki.
Jeśli trafisz na QBasic w ten sposób, sprawdź, czy dostałeś
"interpreter version 1.1". Jest to wersja QBasic-a, którą
stosowałem, pisząc ten podrecznik. Jest najłatwiejsza
w użyciu i najmniej skomplikowana. Kiedy już używasz
wersję 1.1, możesz spróbować i znaleźć wer. 4.5, która
ma kilka sympatycznych właściwości. W polskim Internecie najłatwiej
jest dostać QBasic ze strony AGH
http://adam.imir.agh.edu.pl/dydakt/basic/index.htm. Jest tam
również skrócony opis języka i zestaw ćwiczeń dla studentów.
(Przyp. tłum.) Kiedy już masz qbasic.zip, trzeba go rozpakować i przenieść
qbasic.exe i qbasic.hlp do katalogu
c:\windows\command .
Każdy, kto jest obeznany z plikami "zip", pomoże ci to zrobić. QBASIC jest na CD-ROMie Windows 95. Włóż CD z Windows 95
do napędu CD-ROM. Powinno wyskoczyć okno, które zamkniesz
(klikając na "X" w prawym górnym rogu okna).
Są dwie drogi skopiowania plików QBASIC-a do komputera.
Użycie Trybu MS-DOS jest metodą najszybszą, lecz trzeba znać
literę dysku CD (np. "d:", "e:" lub "z:").
Metoda opisana w "Eksplorator Windows" jest nieco powolniejsza,
ale nie potrzebujesz znać litery dysku CD.
Powinieneś już być w trybie MS-DOS, próbując startu QBASIC-a.
To czyni sprawę łatwiejszą. Przyjmę, że twój CD-ROM ma literę "d:".
Jeżeli tak nie jest, wpisz prawidłową literę w komendzie "copy"
poniżej.
(<Enter> znaczy "Naciśnij klawisz <Enter>"):
Od tłumacza: QBASIC jest też na CD instalacyjnym
Windows 98, ale w innym folderze. Jeżeli używasz płyty Windows 98,
w komendzie "copy" wpisz:
To powinno skopiować qbasic.exe i qbasic.hlp do twojego
komputera. Przeskocz do części "Skończone!" aby sprawdzić,
czy wszystko poszło dobrze.
Jeśli nie chcesz próbować metody z trybem MS-DOS, także
Eksplorator Windows może być użyty do przekopiowania
QBASIC-a. Potrzebujemy Eksploratora Windows (nie Internet
Explorer'a!), aby skopiować pliki QBASIC-a z CD do katalogu
c:\windows\command. Kliknij przycisk "Start", potem
"Programy", potem "Eksplorator Windows". Z lewej strony
zobaczysz listę dysków twojego komputera. Spójrz na napęd
CD (ma on mały obrazek CD, a za nim powinien być opis
"Windows 95"). Kliknij na tą ikonkę. W prawej kolumnie
zobaczysz listę katalogów na CD.
Znajdowanie QBASIC-a.
Kliknij podwójnie na "Other", potem podwójnie na Oldmsdos.
Teraz zobaczysz listę plików. Przeglądaj tą listę, aż
znajdziesz dwa pliki nazwane Qbasic. Jeden to sam QBASIC,
a drugi jest plikiem pomocy.
Wybieranie plików QBASIC-a
Chcemy skopiować te dwa pliki do katalogu c:\windows\command.
Kliknij na pierwszy plik QBasic-a, aż zrobi się niebieski.
To oznacza, że jest on wybrany. Potrzebujemy także drugi plik
QBasica. Naciśnij i przytrzymaj klawisz <Ctrl>,
kiedy będziesz klikać na drugi plik. Teraz obydwa powinny być
niebieskie. To znaczy, że oba są wybrane (zaznaczone).
Kopiowanie do Schowka
Naciśnij klawisz <Ctrl> i trzymaj go wciśnięty, i teraz
naciśnij klawisz C. To skopiuje pliki do Schowka.
C:\Windows\Command
Teraz kliknij "Narzędzia" w menu Eksploratora Windows,
a następnie kliknij "Idź do...". Wpisz:
Wstawianie ze Schowka
Teraz naciśnij klawisz <Ctrl>
i trzymając go wciśnięty, naciśnij V. To wstawi pliki
QBasic-a ze Schowka do katalogu c:\windows\command.
(Od tłumacza) W Windows 98 SE i Windows XP zakładka "Narzędzia"
Eksploratora Windows nie ma opcji "Idź do...". Trzeba byłoby więc przenieść się do katalogu c:,
otworzyć folder WINDOWS, znaleźć i otworzyć folder COMMAND i dopiero tam wstawić pliki
przez naciśnięcie Ctrl-V. Jednak często folder WINDOWS jest chroniony przed dostępem
intruzów. Podobnie jak na dyskietce, można umieścić QBasic w jakimkolwiek folderze na twardym
dysku. Można wtedy zrobić do niego skrót na pulpicie. W tym celu kliknij PRAWYM
przyciskiem myszy na qbasic.exe, wybierz "Wyślij do" i "Pulpit (utwórz skrót)". Skrót
zostanie umieszczony na Pulpicie. Uff! To by było tyle.
Możesz zamknąć Eksploratora Windows (jeżeli go używałeś), wrócić do okienka
Trybu MS-DOS ( W oryginale autor przedstawia szereg książek o QBasicu, napisanych po angielsku.
Z rzeczy przełożonych na polski znam tylko jedną:
QBasic Kurs na zderzenie! Greg Perry, Intersoftland, W-wa 1993
Od tłumacza: W polskim Internecie jest także parę stron na temat
QBasica, często "przyklejonych" do tematu Visual BASIC; wypróbuj
wyszukiwarkę Google.
Prawie wszystkie dostępne po polsku kursy QBasica zgromadzone są na stronie
http://members.lycos.co.uk/kursyprogramowania/kursy.php?id=k_basic&____ord____=1169559776
Copyright 2007, Ted Felix, All Rights Reserved
C:\WINDOWS>" kursorem.
Start QBASIC'a
C:\WINDOWS>" spróbuj wpisać:
i naciśnij klawisz <Enter>.
qbasic
Survival Guide?
Wyjście z powrotem
C:\WINDOWS>"
wpisz:
i naciśnij klawisz <Enter>, aby pozbyć się okna DOS.
exit
Rozdział 2 - PRINT
Idziemy dalej
Ekran QBASIC'a
) to miejsce, gdzie
możemy wprowadzać nasze programy.
Edytor QBASICa
Jeśli używasz komputer w szkole lub do pisania wypracowań,
zauważysz, że większość klawiszy edycyjnych
(<Backspace>, <Delete>, <Insert>...)
działa tak, jak zawsze. Na wypadek, gdybyś nie używał ich
wcześniej, oto ich lista:
Twój pierwszy program
Z migającym kursorem( ) w lewym
górnym rogu ekranu, wpisz to:
Sprawdź, czy wpisałeś dokładnie tak. Cudzysłowy
(
PRINT "Witaj w QBASIC. Twoje zyczenie jest dla mnie rozkazem."
") są bardzo ważne. Jeśli zrobiłeś jakieś błędy,
użyj klawisz <Backspace> do poprawienia ich.
Uruchomienie twojego programu.
C:\WINDOWS> qbasic
Witaj w QBASIC. Twoje zyczenie jest dla mnie rozkazem.
PRINT
Press any key to continue?
i znowu naciśnij <Enter>.
? "Programowanie jest zabawne."
C:\WINDOWS> qbasic
Witaj w QBASIC. Twoje zyczenie jest dla mnie rozkazem.
Witaj w QBASIC. Twoje zyczenie jest dla mnie rozkazem.
Programowanie jest zabawne.
Opanowane:
Rozdział 3 - CLS
Wstawianie nowej linii u góry.
CLS
PRINT "Witaj w QBASIC. Twoje zyczenie jest dla mnie rozkazem."
PRINT "Programowanie jest zabawne."
Opanowane:
Rozdział 4 - DO...LOOP
DO
PRINT "Tu jest Ted ";
LOOP
DO...LOOP
Gdzie jest hamulec?!
Staranność się liczy
Opanowane:
Rozdział 5 - INPUT
CLS
INPUT "Wpisz swoje imie: ", Nazwa$
PRINT "Czesc, "; Nazwa$; ". Jak sie masz dzisiaj?"
Co jest w "Nazwa$"?
INPUT
Zmienne
PRINT i zmienne
CLS
INPUT "Wpisz swoje imie: ", Nazwa$
PRINT "Nazwa$"
PRINT Nazwa$
Opanowane:
Rozdział 6 - IF...THEN
CLS
INPUT "Wpisz swoje imie: ", Imie$
IF Imie$="Janek" THEN
PRINT "Idz sobie!"
ELSE
PRINT "Czesc, "; Name$; ". Jak sie masz?"
END IF
"Janek" to nie to samo, co "janek"
IF...THEN
Warunki
CLS
INPUT "Wpisz liczbe: ", Liczba
IF Liczba < 100 THEN
PRINT "Twoja liczba jest mniejsza 100"
ELSE
PRINT "Twoja liczba jest wieksza lub rowna 100"
END IF
Opanowane:
Rozdział 7 - Liczby
CLS
INPUT "Pierwsza liczba: ", A
INPUT "Druga liczba: ", B
PRINT "Wynikiem jest: "; A * B
Zmienne i matematyka
Gwiazdka
Co jeszcze?
Wyrażenia
Opanowane:
Rozdział 8 - Zapisywanie na dysk
Lokalizacja jest wszystkim
Zapisywanie na dyskietkę
a:\testsave
Ładowanie z dyskietki
a:
Zapisywanie na twardy dysk
Staranność się liczy, ponownie.
Tworzenie własnego podkatalogu
Zróbmy na twardym dysku folder dla naszych programów.
W Windows 95 (i wyższych) będzie trzeba użyć Eksploratora Windows.
W Windows 3.1 użyjemy Menadżera plików.
Tworzenie folderu w Windows 95
Zapisywanie do katalogu
c:\TedsPrgs
testsave
Ładowanie z twardego dysku
c:\TedsPrgs
Opanowane:
Rozdział 9 - SELECT CASE
CLS
INPUT "Wpisz swoje imie: ", Imie$
SELECT CASE Imie$
CASE "Ted"
PRINT "Witaj, Wielki Mistrzu"
CASE "Janek"
PRINT "Idz sobie!"
CASE ELSE
PRINT "Czesc, "; Imie$; ". Jak sie masz?"
END SELECT
SELECT CASE
Na wszelki wypadek
CLS
INPUT "Wpisz liczbe: ", Liczba
SELECT CASE Liczba
CASE 1234
PRINT "Dziekuje za wpisanie tajnej liczby 1234"
CASE 22
PRINT "Owszem, 22 to ciekawa liczba"
CASE ELSE
PRINT "Nie znasz tajnej liczby"
END SELECT
Opanowane:
Rozdział 10 - Równania
CLS
A = 1
B = 2
A$ = "Witaj"
PRINT A
PRINT B
PRINT A$
CLS
Licz = 1
DO
PRINT Licz
Licz = Licz + 1
LOOP
Rozdział 11 - Liczby losowe
RND
CLS
PRINT RND
PRINT RND
RANDOMIZE TIMER
CLS
RANDOMIZE TIMER
PRINT RND
PRINT RND
Przydatne liczby losowe
CLS
RANDOMIZE TIMER
PRINT RND * 6 + 1
PRINT RND * 6 + 1
CLS
RANDOMIZE TIMER
PRINT INT(RND * 6 + 1)
PRINT INT(RND * 6 + 1)
Rzucamy kostką
CLS
RANDOMIZE TIMER
INPUT "Nacisnij ENTER dla rzutu kostkami...", A$
PRINT
Kosc1 = INT(RND * 6 + 1)
Kosc2 = INT(RND * 6 + 1)
PRINT "Kostka 1: "; Kosc1
PRINT "Kostka 2: "; Kosc2
PRINT jako taki
Rozdział 12 - Wyrocznia
CLS
RANDOMIZE TIMER
PRINT "Jestem magiczna Wyrocznia."
INPUT "Pomyśl pytanie i nacisnij ENTER dla otrzymania odpowiedzi...", A$
PRINT
Odp = INT(RND * 5 + 1)
SELECT CASE Odp
CASE 1
PRINT "Tak, zdecydowanie."
CASE 2
PRINT "Zapytaj jeszcze raz, jutro."
CASE 3
PRINT "Nie powiem!"
CASE 4
PRINT "To pewne."
CASE 5
PRINT "Tak."
END SELECT
Dodawanie przypadków
Odp = INT(RND * 5 + 1)
Odp = INT(RND * 6 + 1)
CASE 6" i PRINT dla wypisania nowej przepowiedni.
Rozdział 13 - DO...WHILE
CLS
DO
INPUT "Pierwsza liczba: ", A
INPUT "Druga liczba: ", B
PRINT "Wynikiem jest: "; A * B
INPUT "Czy chcesz to zrobic jeszcze raz (t/n)? ", Odp$
LOOP WHILE Odp$="t"
Rozdział 14 - OR i LEFT$
CLS
DO
INPUT "Pierwsza liczba: ", A
INPUT "Druga liczba: ", B
PRINT "Wynikiem jest: "; A * B
INPUT "Czy chcesz to zrobic jeszcze raz (t/n)? ", Odp$
LOOP WHILE Odp$="t" OR Odp$="T"
CLS
DO
INPUT "Pierwsza liczba: ", A
INPUT "Druga liczba: ", B
PRINT "Wynikiem jest: "; A * B
INPUT "Czy chcesz to zrobic jeszcze raz (t/n)? ", Odp$
PierwszaLit$ = LEFT$(Odp$, 1)
LOOP WHILE PierwszaLit$="t" OR PierwszaLit$="T"
LEFT$
A$="TEST"
INPUT "Wpisz cokolwiek:", A$
PRINT A$
PRINT LEFT$(A$,1)
PRINT LEFT$(A$,2)
PRINT LEFT$(A$,3)
Wpisz cokolwiek: Jacek
Jacek
J
Ja
Jac
INPUT "Wpisz cokolwiek:", A$
PRINT A$
PRINT RIGHT$(A$,1)
PRINT RIGHT$(A$,2)
PRINT RIGHT$(A$,3)
Wpisz cokolwiek: Jacek
Jacek
k
ek
cek
Rozdział 15 - COLOR
CLS
COLOR 2, 0
PRINT "That's ";
COLOR 3, 0
PRINT "more ";
COLOR 5, 0
PRINT "like it!"
Migotanie
CLS
COLOR 28, 0
PRINT "*** UWAGA ***"
COLOR 15, 0
PRINT "Programowanie moze byc nazbyt zabawne!"
Rozdział 16 - FOR ... NEXT
Nowy licznik
CLS
FOR I = 1 TO 10
PRINT I
NEXT I
Karta kolorów
CLS
FOR I = 1 TO 15
COLOR I, 0
PRINT I; "*** KOLOR ***"
NEXT I
STEP
CLS
FOR I = 2 TO 20 STEP 2
PRINT I
NEXT I
CLS
FOR I = 10 TO 1 STEP -1
PRINT I
SLEEP 1
NEXT I
PRINT "ODPALAMY!"
Rozdział 17 - Dźwięk
CLS
INPUT "Nacisnij Enter aby uslyszec BEEP", A$
BEEP
SOUND 1000, 18
FOR I = 4000 TO 1000 STEP -5
SOUND I, .1
NEXT I
PLAY "e8 d8 c8 d8 e8 e8 e4"
Znak ">" ("większy, niż") oznacza "weź oktawę wyżej". W PLAY
jest wiele specjalnych poleceń. Zobacz w
Pomocy do QBasica
listę ich wszystkich.
PLAY "c8 d8 e8 f8 g8 a8 b8 > c4"
PLAY i tryplety
PLAY "T180 <d8d8d8 T120 g2>d2"
PLAY "T180 c8<b8a8 T120 >g2d4"
PLAY "T180 c8<b8a8 T120 >g2d4"
PLAY "T180 c8<b8>c8 T120 <a2>"
PLAY "<d12d12d12g2>d2"
PLAY "c12<b12a12>g2d4"
PLAY "c12<b12a12>g2d4"
PLAY "c12<b12>c12<a2>"
Rozdział 18 - LOCATE
CLS
LOCATE 5, 10
PRINT "Tutaj"
LOCATE 20, 70
PRINT "Tam"
CLS
DO
Wiersz = INT(RND * 23 + 1)
Kolumna = INT(RND * 79 + 1)
LOCATE Wiersz, Kolumna
Color1 = INT(RND * 15 + 1)
COLOR Color1, 0
PRINT "Tu jest Ted!";
LOOP
CLS
DO
LOCATE 1, 1
PRINT TIME$
SLEEP 1
LOOP
Rozdział 19 - WIDTH
SCREEN 0
WIDTH 40
CLS
PRINT "Och! To jest ogromne!"
INPUT "Nacisnij <Enter> aby powrocic", A$
WIDTH 80
PRINT "I to jest to!"
Rozdział 20 - CHR$
CLS
PRINT CHR$(1); CHR$(2)
CLS
FOR I = 32 to 255
PRINT I; CHR$(I); " ";
NEXT I
Rozdział 21 - Grafika
SCREEN
SCREEN 12
CLS
DRAW "D100 R100 U100 L100"
DRAW
SCREEN 12
CLS
DRAW "C15 D100 R100 U100 L100 BF1 P15,15"
SCREEN 12
CLS
FOR I = 0 TO 360 STEP 10
DRAW "D100 R100 U100 L100 TA" + STR$(I)
NEXT I
LINE
SCREEN 12
CLS
LINE (0, 0)-(320, 240), 15
Prostokąt
SCREEN 12
CLS
LINE (0, 0)-(320, 240), 15, B
CIRCLE
SCREEN 12
CLS
CIRCLE (320, 240), 100, 15
PAINT
SCREEN 12
CLS
CIRCLE (320, 240), 100, 15
PAINT (320, 240), 15, 15
Kompozycje z kółek
SCREEN 12
CLS
FOR I = 5 TO 200 STEP 5
CIRCLE (320, 240), I, 15
NEXT I
SCREEN 12
CLS
FOR I = 1 TO 50
X = INT(RND * 640)
Y = INT(RND * 480)
R = INT(RND * 100)
Color1 = INT(RND * 16)
CIRCLE (X, Y), R, Color1
PAINT (X, Y), Color1, Color1
NEXT I
Rozdział 22 - INKEY$
CLS
LOCATE 3, 1
PRINT "Nacisnij cokolwiek - STOP"
DO
LOCATE 1, 1
PRINT TIME$
SLEEP 1
LOOP WHILE INKEY$ = ""
CLS
DO
Key$ = INKEY$
IF Key$ <> "" THEN
PRINT Key$;
END IF
LOOP
Rozdział 22.5 - Funkcje łańcuchowe
Konkatenacja
A$ = "Witaj "
B$ = "tutaj!"
C$ = A$ + B$
PRINT C$
LEFT$() i RIGHT$()
A$ = "Ted Felix"
B$ = LEFT$(A$, 3)
PRINT B$
A$ = "QBASIC jest fajny"
B$ = RIGHT$(A$, 5)
PRINT B$
MID$()
A$ = "raz dwa trzy"
B$ = MID$(A$, 5, 3)
PRINT B$
A$ = "spawacz"
PRINT A$
MID$(A$, 3, 2) = "in"
PRINT A$
LCASE$() i UCASE$()
A$ = "Ala ma kota Mamrota"
PRINT A$
PRINT UCASE$(A$)
PRINT LCASE$(A$)
CLS
INPUT "Wpisz swoje imie: ", Imie$
IF LCASE$(Imie$) = "janek" THEN
PRINT "Idz sobie!"
ELSE
PRINT "Witaj, "; Imie$; ". Jak sie masz?"
END IF
STRING$() i SPACE$()
PRINT "********************"
FOR I = 1 to 20
PRINT "*";
NEXT I
PRINT
PRINT STRING$(20, "*")
PRINT "A"; STRING$(20, " "); "B"
PRINT "A"; SPACE$(20); "B"
FOR I = 0 to 20
PRINT SPACE$(I); "QBASIC!"
NEXT I
LEN()
A$ = "Witaj"
PRINT LEN(A$)
A$ = "Witaj w QBASIC!"
FOR I = 1 to LEN(A$)
PRINT LEFT$(A$, I)
NEXT I
INPUT "Wpisz lancuch: ", A$
PRINT "Wpisany lancuch ma"; LEN(A$); " znakow."
CHR$() i ASC()
FOR I = 14 to 255
PRINT I; CHR$(I); " ";
NEXT I
PRINT STRING$(40, CHR$(1))
PRINT CHR$(7)
PRINT ASC("A")
INSTR()
A$ = "Witajcie wszyscy"
PRINT INSTR(A$, "wszyscy")
A$ = "dwa kawalki"
SpacePos = INSTR(A$, " ")
PRINT LEFT$(A$, SpacePos)
PRINT RIGHT$(A$, LEN(A$) - SpacePos)
Rozdział 23 - Komentarze i stałe
' Program rysujacy prostokaty na ekranie
' To jest komentarz, QBASIC go zignoruje.
SCREEN 12
CLS
' Rysuj 50 razy
FOR I = 1 TO 50
' Wybierz polozenie prostokata
X1 = INT(RND * 640)
Y1 = INT(RND * 480)
X2 = INT(RND * 640)
Y2 = INT(RND * 480)
' Wybierz kolor prostokata
Color1 = INT(RND * 16)
' Rysuj wypelniony prostokat
LINE (X1, Y1) - (X2, Y2), Color1, BF
NEXT I
Stałe
CONST Pi = 3.141593
INPUT "Wpisz promien okregu: ", Promien
PRINT "Obwod wynosi:"; 2 * Pi * Promien
PRINT "Pole powierzchni wynosi:"; Pi * Promien * Promien
Rozdział 24 - Sub-Procedury (SUBs)
SUB RysujOkrag
CIRCLE (320, 240), 100, 15
END SUB
SCREEN 12
CLS
RysujOkrag
SUB PlayMary
PLAY "e8 d8 c8 d8 e8 e8 e4"
END SUB
SCREEN 12
CLS
RysujOkrag
PlayMary
Argumenty
SUB RysujOkrag2 (Promien)
CIRCLE (320, 240), Promien, 15
END SUB
SCREEN 12
CLS
RysujOkrag
RysujOkrag2 (20)
PlayMary
SCREEN 12
CLS
FOR I = 5 TO 200 STEP 5
RysujOkrag2 (I)
NEXT I
Zmienianie argumentów
SUB DodajJeden(X)
X = X + 1
END SUB
CLS
I = 0
DodajJeden(I)
PRINT I
Zakres
SUB Zakres
PRINT "Zakres mowi: "; X
X = 23
END SUB
X = 15
Zakres
PRINT "Main Module mowi: "; X
Dane globalne
SUB Zakres
SHARED X
PRINT "Zakres mowi: "; X
X = 23
END SUB
DIM SHARED X
X = 15
Zakres
PRINT "Main Module mowi: "; X
Programowanie zorientowane obiektowo
STATIC
SUB Licznik
C = C + 1
PRINT C
END SUB
CLS
Licznik
Licznik
Licznik
SUB Licznik
STATIC C
C = C + 1
PRINT C
END SUB
Funkcje
FUNCTION Dodaj (X, Y)
Dodaj = X + Y
END FUNCTION
PRINT Dodaj(3, 4)
DECLARE
Rozdział 25 - Struktury danych
Typy wbudowane
Zmienne pojedynczej precyzji (Single-Precision)
X = 1.5
DIM Y AS SINGLE
Y = 2.1
Z! = 2.5
PRINT X; Y; Z!
Zmienne łańcuchowe (String)
X$ = "Hello"
DIM Y AS STRING
Y = "Goodbye"
PRINT X$
PRINT Y
Zmienne całkowitoliczbowe (Integer)
X% = 32
DIM Y AS INTEGER
Y = 55
PRINT X%; Y
DEFINT A-Z
Długie liczby całkowite (Long-Integer)
X& = 65536
DIM Y AS LONG
Y = 121072
PRINT X&; Y
Zmienne podwójnej precyzji (Double-Precision)
X# = 3.14159265358979
DIM Y AS DOUBLE
Y = 1.23456789012345
PRINT X#; Y
Tablice
N$(0) = "Tadek"
N$(1) = "Jacek"
N$(2) = "Ania"
N$(3) = "Fred"
FOR I = 0 TO 3
PRINT N$(I)
NEXT I
FOR I = 0 TO 10
A(I) = I * 2
NEXT I
FOR I = 0 TO 10
PRINT A(I)
NEXT I
DIM A(20)
FOR I = 0 TO 20
A(I) = I * 2
NEXT I
FOR I = 0 TO 20
PRINT A(I)
NEXT I
TYPE
TYPE TypKolega
Nazwisko AS STRING * 20
NrTel AS STRING * 14
END TYPE
DIM Kolega AS TypKolega
Kolega.Nazwisko = "Jan Wiatr"
Kolega.NrTel = "1-310-555-1212"
PRINT Kolega.Nazwisko; ": "; Kolega.NrTel
Baza danych
TYPE TypKolega
Nazwisko AS STRING * 20
NrTel AS STRING * 14
END TYPE
' Baza danych
DIM Koledzy(2) AS TypKolega
' Wypelnia baze danych nazwiskami i numerami
Koledzy(0).Nazwisko = "Jan Wiatr"
Koledzy(0).NrTel = "1-310-555-1212"
Koledzy(1).Nazwisko = "Jacek Chmura"
Koledzy(1).NrTel = "1-340-555-6545"
Koledzy(2).Nazwisko = "Karol Deszcz"
Koledzy(2).NrTel = "1-350-555-2421"
' Druk calej bazy danych
FOR I = 0 TO 2
PRINT Koledzy(I).Nazwisko; ": "; Koledzy(I).NrTel
NEXT I
Rozdział 25.5 - Konwersja typu
STR$() i VAL()
A = 25 ' A moze przechowywac tylko liczby
PRINT A
B$ = STR$(A) ' Przeksztalca A na lancuch, przechowany w B$
PRINT B$
A$ = "25" ' Nie mozna robic zadnych obliczen na zmiennej lancuchowej
PRINT A$
B = VAL(A$) ' Przeksztalca A$ na liczbe przechowywana w B
PRINT B
Przekształcanie liczb
Rozdział 25.75 - PRINT USING
Jeżeli zwykłymi poleceniami PRINT będziemy wypisywać
liczby jedna pod drugą, QBasic wyrówna je do lewej strony, inaczej niż
robimy to np. przy dodawaniu na papierze. Aby QBasic wypisał nam liczby
w taki sposób, używa się polecenia PRINT USING:
PRINT USING"#####.##"; 1234.567
PRINT USING"#####.##"; 789
Rozdział 25.9 - DATA i READ
' Ladowanie tablicy
A(0) = 10
A(1) = 24
A(2) = 31
A(3) = 15
A(4) = 67
A(5) = 34
A(6) = 87
A(7) = 92
A(8) = 14
' ... To moze sie ciagnac jakis czas...
FOR I = 0 TO 8
PRINT A(I)
NEXT I
DATA 10, 24, 31, 15, 67, 34, 87, 92, 14
FOR I = 0 TO 8
READ A(I)
NEXT I
FOR I = 0 TO 8
PRINT A(I)
NEXT I
RESTORE
Imiona:
DATA Fred, Janek, Jacek, Zosia
Wartosci:
DATA 10, 24, 31, 15, 67, 34, 87, 92, 14
' Start od polecenia DATA po "Wartosci:"
RESTORE Wartosci
FOR I = 0 TO 8
READ A(I)
NEXT I
' Start od polecenia DATA po "Imiona:"
RESTORE Imiona
FOR I = 0 TO 8
READ N$(I)
NEXT I
Ładowanie bazy danych
DATA "Jan Wiatr", "1-310-555-1212"
DATA "Jacek Chmura", "1-340-555-6545"
DATA "Karol Deszcz", "1-350-555-2421"
TYPE TypKolega
Nazwisko AS STRING * 20
NrTel AS STRING * 14
END TYPE
' Baza danych
DIM Koledzy(2) AS TypKolega
' Wczytuje baze danych z polecen DATA
FOR I = 0 TO 2
READ Koledzy(I).Nazwisko, Koledzy(I).NrTel
NEXT I
' Wypisuje cala baze danych
FOR I = 0 TO 2
PRINT Koledzy(I).Nazwisko; ": "; Koledzy(I).NrTel
NEXT I
Rozdział 26 - Odczytywanie i zapisywanie plików
Zapisywanie do pliku
INPUT "Wpisz swoje imie: ", Imie$
OPEN "testfile.txt" FOR OUTPUT AS #1
WRITE #1, Imie$
CLOSE #1
type testfile.txt
notepad testfile.txt
OPEN, WRITE i CLOSE
Odczytywanie z pliku
OPEN "testfile.txt" FOR INPUT AS #1
INPUT #1, Imie$
CLOSE #1
PRINT Imie$
Prowadzenie logu
OPEN "logfile.txt" FOR APPEND AS #1
PRINT #1, "Program Start: "; TIME$
CLOSE #1
CLS
INPUT "Wpisz swoje imie"; Imie$
PRINT "Czesc, "; Imie$
OPEN "logfile.txt" FOR APPEND AS #1
PRINT #1, "Program Stop: "; TIME$
CLOSE #1
notepad logfile.txt
Odczytywanie z plików
Tropienie śladów
CLS
INPUT "Wpisz swoje imie aby zarejestrowac sie w programie: ", Imie$
PRINT "Dziekuje, "; Imie$
Zliczaj = Zliczaj + 1
PRINT "Program jest zarejestrowany dla: "; Imie$
PRINT "Ten program byl uruchamiany"; Zliczaj; "razy."
PRINT "Mamy nadzieje ze dobrze sie bawiles."
' Jesli sa jakies klopoty, QBASIC skoczy do ErrorHandler ponizej.
ON ERROR GOTO ErrorHandler
' To jest kod bledu ktory jest zapisywany
' przez obsluge bledu (error handler).
DIM ErrorCode AS INTEGER
CLS
' Zawsze zeruj to, zanim zrobisz cos, co chcesz sprawdzic.
ErrorCode = 0
' Probuj dostac imie i licznik z pliku.
OPEN "register.txt" FOR INPUT AS #1
' Jezeli nie ma pliku
IF ErrorCode = 53 THEN
' Pobierz imie od uzytkownika
INPUT "Wpisz swoje imie aby zarejestrowac sie w programie: ", Imie$
PRINT "Dziekuje, "; Imie$
' i ustaw licznik na 0
Zliczaj = 0
ELSE
' Pobierz imie i licznik z pliku.
INPUT #1, Imie$, Zliczaj
CLOSE #1
END IF
Zliczaj = Zliczaj + 1
PRINT "Program jest zarejestrowany dla: "; Imie$
PRINT "Ten program byl uruchamiany"; Zliczaj; "razy."
PRINT "Mamy nadzieje ze dobrze sie bawiles."
' Zapisz imie i licznik dla nastepnego uruchomienia.
OPEN "register.txt" FOR OUTPUT AS #1
WRITE #1, Imie$, Zliczaj
CLOSE #1
' Ten END chroni nas przed uruchomieniem obslugi bledu
' przy koncu programu. Powoduje zatrzymanie programu,
' tak jak nacisniecie klawisza Break.
END
' QBASIC skoczy tutaj, jezeli przytrafi sie blad.
ErrorHandler:
' Musimy przeniesc kod bledu do zmiennej, inaczej go nie
' zobaczymy, poniewaz ERR jest zerowany kiedy handler
' zakonczy sie.
ErrorCode = ERR
RESUME NEXT
Obsługa błędów plikowych
Swobodny I/O
Rozdział 27 - Przykładowe programy
Czytaj QBASIC Help
Zgadywacz Liczb
CLS
RANDOMIZE TIMER
PRINT "Witamy w Zgadywaczu Liczb."
PRINT "Mysle o liczbie miedzy 1 a 10."
Liczba = INT(RND * 10 + 1)
DO
INPUT "Co odgadles? ", Zgad
IF Zgad = Liczba THEN
PRINT "Dobrze!"
EXIT DO
ELSE
PRINT "Sprobuj jeszcze raz."
END IF
LOOP
Dodatkowe rzeczy
Budzik
Więcej przykładów
Dodatek A - Znajdowanie i instalowanie QBASIC-a
W Internecie
Windows 95
DOS czy Windows?
Tryb MS-DOS
c: <Enter>
cd \windows\command <Enter>
copy d:\other\oldmsdos\qbasic.* <Enter>
copy d:\tools\oldmsdos\qbasic.* <Enter>
Eksplorator Windows
i naciśnij klawisz <Enter>.
c:\windows\command
Odmienności Windows 98 SE i Windows XP
Co pozostaje? Stara, poczciwa dyskietka. Można ją zresztą użyć niezależnie
od posiadanego systemu. W menu "Plik" Eksploratora Windows kliknij opcję "Wyślij do"
i następnie kliknij "Dyskietka 3,5". Pliki QBasic-a zostaną skopiowane na dyskietkę.
Po tej operacji na dyskietce zostanie jeszcze 1 132 032 bajtów wolnych -
wystarczająco dużo dla twoich programów. QBASIC można będzie uruchomić, otwierając
"Mój komputer", klikając na "Dyskietka 3,5" i następnie na qbasic.exe.Skończone!
C:\WINDOWS> lub
C:\WINDOWS\COMMAND>), wpisać:
i nacisnąć klawisz <Enter>.
qbasic
Książki o QBASICu
Obszerna (275 str.) książka z licznymi przykładami uczy używania
większości poleceń QBasica. Nie uwzględnia stosowania procedur SUB
i FUNCTION, tak więc styl programowania jest bardziej zbliżony
do GW-Basica.
Other Websites
QBASIC Forum -
talk to other folks who use QBASIC.
Ethan Winer's site -
His book "BASIC Techniques and Utilities" is available for download
here.
May be copied or translated freely for non-commercial use.
http://deger.republika.pl