Kirjautuminen

Tunnus
Salasana

Haku

Tehtävät

Opasarkisto: Aloittelijan QBasic-opas: Osa 1 - PRINT, CLS, INPUT

  1. Osa 1 - PRINT, CLS, INPUT
  2. Osa 2 - DEFX, IF...ELSE...END IF, FOR...NEXT ...
  3. Osa 3 - SUB, FUNCTION, GOTO/GOSUB ...

Kirjoittaja: thefox

Opetettavat käskyt: PRINT, CLS, INPUT

Tämä (tällä hetkellä) pieni opas on kirjoitettu avustukseksi aloitteleville ja ehkä hieman kokeeneemmillekin QBasic/ QuickBasic ohjelmoijille. QBasic:hän on Microsoftin varsinkin aloittelijoiden suosima, yllätys yllätys, ilmainen BASIC-tulkki. BASIC tulee sanoista Beginners' All Purpose Symbolic Instruction Code, joka kuvaakin kieltä ihmeen hyvin. Englannin sana 'basic' tarkoittaa muuten yksinkertaista.

Moni luulee, ettei BASIC:illä (alan tästä lähtien puhumaan QBasicistä) voi saada aikaan tehokasta koodia. Tämä on yleinen harhaluulo, ja olenpa melko usein huomannut, että aloittelevat QBasic-koodarit selittelevät huonoja pelejä/ohjelmiaan sillä, että QBasic on niin tehoton. Sanon nyt vain, että oikein käytettynä QBasic:illäkin voi saada aikaan todella hienoja sovelluksia, pelejä lähinnä. Hyötyohjelmapuolihan näinä päivinä painottuu vahvasti Windows-puolelle.

QBasic:in huonohko puoli on, että sillä ei voi tehdä levitykseen kelpaavia EXE-tiedostoja, vaan siihen tarvitaan kaupallinen Quick Basic (joka ei jostain syystä vieläkään ole ilmaislevityksessä... terveisiä Microsoftille!) No, Googlehan on keksitty ja sieltä Quick Basic:kin pitäisi löytyä suht. koht. vaivattomasti. Muistathan toki että et saa käyttää imuroimaasi Quick Basic:iä ellet omista aitoa ja alkuperäistä QB:tä ;-)

Itse asiaan, eli ensimmäinen QBasic-ohjelma

Uuteen (tai ensimmäiseen) kieleen tutustuttaessa ensimmäinen ohjelma on yleensä todella yksinkertainen. Jo klassikoksi muodostunut "Hello world!" saa kelvata meillekin. Tähän tarvitaan ainoastaan yksi koodirivi, joka sisältää yhden käskyn.

PRINT "Hello world!"

Ja siinä on kaikki mitä tarvitsemme! Kun olet kirjoittanut (tai kopioinut) yllä olevan koodin pätkän QB:hen, paina F5 testataksesi miltä juuri kirjoitettu ohjelma näyttää. Ja eikös totta, sehän tulostaa "Hello world!".

Ko. koodirivissä ei paljon analysoimista ole, tekstin tulostamiseen käytetään QB:n sisäänrakennettua funktiota, PRINT. PRINT ottaa parametrikseen tekstin, jonka ohjelmoija haluaa ruudulle tulostaa, tässä tapauksessa "Hello world!". Huomaa, että kaikki merkkijonot QB:ssä suljetaan kahden lainausmerkin sisään. Annetaan nyt vielä se PRINTin syntaksi:

PRINT [expressionlist][{,|;}]

Kuten näkyy, yksikään PRINT:in parametreista ei ole pakollinen (hakasulkeissa olevat ovat vapaaehtoisia). Kirjoittamalla pelkkä "PRINT", tulostaa ohjelma tyhjän rivin, eli vaihtaa riviä. Omassa ohjelmassamme "Hello world!" oli [expressionlist], ja jätimme viimeisen parametrin kirjoittamatta. Viimeinen parametri voi olla joko pilkku (",") tai puolipiste (";"). Puolipisteen tapauksessa rivinvaihto jätetään pois, ja jos laitat pilkun, pistää ohjelma rivinvaihdon sijasta tabulaattorin. Pilkku on todella hyödyllinen mm. tiedon taulukoimisessa sarakkeisiin, mutta siitä lisää myöhemmin.

No mitäs sitten? Tässä ensimmäisessä osassa en vielä kovin suuremmin syvenny itse kielen rakenteeseen, joten otetaanpa toinen QB:n peruskäsky, CLS.

CLS tulee sanoista Clear Screen, 'tyhjennä ruutu'. Sitä saa mitä tilaa, CLS todellakin tyhjentää ruudun ja siirtää tekstiosoittimen ruudun vasempaan yläkulmaan. Tässä laajenettu "Hello world"-esimerkki:

CLS
PRINT "Hello world!"

Ensimmäinen rivi tyhjentää ruudun, toinen tulostaa tekstin. Kätevää, eikö? Mutta eikö olisi mukava että ohjelma voisi olla edes pienenpienessä vuorovaikutuksessa itse käyttäjän kanssa? No totta kai se olisi mukavaa, mistä pääsemmekin seuraavaan peruskäskyyn, eli INPUT:iin. CLS:n syntaksia en tässä ala käymään läpi (ottaa yhden parametrin).

INPUT-käsky odottaa käyttäjältä syötettä näppäimistön kautta. Syötteellä voi olla monta tyyppiä: kokonaisluku, merkkijono, liukuluku jne. Tässä tapauksessa käytämme merkkijonoa. Esimerkkiä pukkaa taasen:

CLS
INPUT "Kirjoita nimesi: ", A$
PRINT "Hello " + A$ + "!"

Ensimmäinen rivi on jo tuttua huttua, mutta toinen rivi onkin jo noin pyöreästi sanottuna kymmenen pilkku neljäsataakolmekymmentäviisi kertaa mielenkiintoisempi ;-) INPUT käskyn syntaksi on seuraava:

INPUT[;]["promptstring"{;|,}]variablelist

Aloitetaan alusta, eli parametrista [;]. Kuten näet, parametri ei ole pakollinen (INPUT ottaa yhden pakollisen parametrin, variablelist). Jos pistät puolipisteen heti alkuun, ei ohjelma tulosta tyhjää riviä INPUT-käskyn jälkeen. Pieni esimerkki lienee olisi asiaa.

INPUT ; "Kirjoita nimesi: ", A$
PRINT "Terve!"

TULOSTE (KURSIVOITU ON KÄYTTÄJÄN SYÖTE):

Kirjoita nimesi: fawkzTerve!

Kuten huomaat, puolipiste esti INPUT:ia vaihtamasta riviä, ja niin "Terve!" viesti tuli samalle riville INPUT:in kanssa. Itse en puolipistettä ole INPUT:in alussa käyttänyt juuri koskaan. Tietyissä tapauksissa se voi tosin olla hyödyksi.

Mutta sitten eteenpäin, eli seuraavaan parametriin, joka on ["promptstring"{;|,}]. "promptstring" voi olla mikä tahansa merkkijono, meidän esimerkissämme se on "Kirjoita nimesi: ". Tämän parametriin jälkeen voi laittaa (ei ole pakko) puolipisteen tai pilkun, taas kerran. Tällä kertaa niillä on eri tarkoitus kuin PRINT-käskyssä. Puolipisteen ollessa INPUT tulostaa "promptstring":in perään kysymysmerkin, pilkun ollessa se ei tulosta mitään. Oletusarvo on puolipisteen kanssa, eli ilman pilkkua ohjelma tulostaa kysymyksesi perään typerän näköisen kysymysmerkin. Tästä johtuen "Hello world"-esimerkissämme käytämme pilkkua.

Vielä on yksi parametri jäljellä, nimittäin variablelist. Tämä määrittelee, minne käyttäjän antama syöte tallennetaan. variablelist:issä voi olla useita muuttujia (A$ on muuttuja) peräkkäin. Vaikkapa seuraavanlainen INPUT käsky on täysin mahdollinen:

INPUT "Kirjoita nimesi ja ikäsi: ", Nimi$, Ika

Nimi tallennetaan 'Nimi$'-muttujaan, ja ikä 'Ika'-muuttujaan. Arvot pitää antaa INPUT:ille pilkulla erotettuna, esim. "fawkz,16". Jos arvoilla on väärä tyyppi (yrität kirjoittaa iäksesi merkkijonoa), tai arvoja on väärä määrä, tulostaa QB viestin "Redo from start", eli "Aloita alusta".

Lopullinen "Hello world" -esimerkkimme voisi näyttää vaikka tältä:

CLS
PRINT "Käytä pilkkua nimien eroittamiseen!"
INPUT "Kirjoita etu- ja sukunimesi: ", Etunimi$, Sukunimi$
PRINT "Terve " + Etunimi$ + "! (Sukua " + Sukunimi$ + ")"

Loppusanat

Hei! Ei kai tämä nyt vielä voi loppua? Kyllä vain, mutta muistutan että tämä oli vasta ensimmäinen osa. Myönnän, ja pahoittelen, etten vielä tässä ensimmäisessä (koht. lyhyeksi jääneessä) osassa selostanut QB-ohjelmien rakennetta lähes yhtään, mutta lupaan parantaa tapani seuraavaan osaan mennessä, jossa aiheinamme ovat ainakin (suluissa muutama opetettava käsky):

Nähdään seuraavassa osassa, joka ilmestyy kun sen jaksan kirjoittaa. Laiskuudestani johtuen se voi tosin viedä jopa viikkoja... Jos haluat seuraavan osan kirjoittamiseen vauhtia, niin tipauta sähköpostia osoitteeseen _____@luukku.com.


Kommentit

(nimetön) [15.06.2003 19:22:55]

Lainaa #

oli vähä vaikeeta tajuta :P

Metabolix [28.06.2004 00:46:01]

Lainaa #

Opas kirjoitti:

Muistathan toki että et saa käyttää imuroimaasi Quick Basic:iä ellet omista aitoa ja alkuperäistä QB:tä ;-)

Mutta eikö sinunkin Windows 98:n CD-ROM-levylläsi ole QBasic 1.1-kääntäjää? Omallani ainakin oli... Ja ei kai se voi olla kuin se aito, oikea, ostettu QBasic? (Emmekös me kaikki käytäkin aitoa Windowsia?)

ttuoppi [01.07.2004 20:27:56]

Lainaa #

Eikö sitten netistä saa ilman QBasic kääntäjää? Voi p*****e!!!

thefox [05.07.2004 02:03:00]

Lainaa #

Metabolix: puhuinkin Quick Basicistä, en QBasicistä. QBasic on pelkkä tulkki.

DragonFire [23.08.2004 01:31:55]

Lainaa #

lainaus:

BASIC tulee sanoista Beginners' All Purpose Symbolic Instruction Code

Itseasisassa Basic ei tule mistään. Kielen alkuperäinen nimi oli alunperin suunniteltu olevan Basic, eli yksinkertainen. Joku vain myöhemmin keksi, että sen täytyy olla lyhenne jostain suuremmasta.

thefox [23.08.2004 21:36:04]

Lainaa #

Nitro's [31.12.2005 11:47:36]

Lainaa #

Mikä on uusin versio tosta Q Basicista`?

Nitro's [31.12.2005 11:54:47]

Lainaa #

Mikä on sen kaupallisen basicin versio millä saa niitä exe.
tiedostoja?

Nitro's [31.12.2005 13:24:18]

Lainaa #

Miksi muuten se ei halua kirjoittaa siihen QBasic:iin esim.$ tommoista merkkiä?
Pitääkö olla erilliset näppäin komennot vai?

NikkeTee [12.03.2006 17:12:54]

Lainaa #

CLS
COLOR 12
PRINT
PRINT "Moi!"

Tolla COLOR käskyllä on kätevä muuttaa tekstin väriä.
Värivalikoima tosin on kovin rajoittunut.

Juhko [29.10.2006 10:30:29]

Lainaa #

Oikein hyvä! :)

Codeprofile [10.11.2006 18:34:43]

Lainaa #

Ihan OK. Pääsin ainakin alkuun.

Skullboy [28.12.2006 20:33:34]

Lainaa #

Voisko tohon toisen osan kirjottamiseen panna vähän vauhtia???????????????????????????????????????????

crakkeri [31.05.2007 18:34:52]

Lainaa #

MITEN SAAN " MERKIT SIIHEN PRKL!!!!!

crakkeri [31.05.2007 18:34:52]

Lainaa #

MITEN SAAN " MERKIT SIIHEN PRKL!!!!!

Are0100 [26.06.2007 23:04:31]

Lainaa #

painat sift ja 2 "

dishop [02.12.2007 20:55:36]

Lainaa #

tuo "COLOR" neuvo oli hyvä.

sammakkomies [30.11.2009 22:25:31]

Lainaa #

jee. Tässä vaiheessa voin tehdä pelin jonka tehtävänä on kirjoittaa oma etu- ja sukunimi + ikä. Kyllä kaverit hämmästyy. :-)

Clacier [12.02.2010 18:38:07]

Lainaa #

kun yritän kirjottaa tonne $, se ei kirjota sitä.

mitä avuksi? aloitin QBasic ohjelmoinnin 40sek sitten.

Nettimato [06.03.2010 12:02:22]

Lainaa #

anton1234 [17.05.2010 17:27:21]

Lainaa #

Clacier kirjoitti:

kun yritän kirjottaa tonne $, se ei kirjota sitä.

mitä avuksi?

Ööh...
Paina Alt Gr + 4 niin pitäis tulla $.

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea keskustelun ohjeet.
Tietoa sivustosta