Paranna Morpion-pelin kansainvälisiä ennätyksiä!
Ohjeet | Nettipeli | Tuloslista
Suunnittele tiedosto, josta tulee suuri ZIP-paketti!
Vastauksia: 37
Paras: 1158
Ostakaa mieluummin vaikka käyttis joka tukee Unicodea terminaalissa... (Muut kielet) lisää...
Oppaat: Aloittelijan QBasic-opas
Kirjoittaja: thefox
Tulostettava versio: tämä opas | koko opassarja
Osa 3 - SUB, FUNCTION, GOTO/GOSUB ...
Esisanat – Aliohjelmat – Kommentointi – Loppusanat
| Opetettavat käskyt: CALL, GOSUB, RETURN, GOTO, SUB/FUNCTION, END SUB/FUNCTION, REM
Esisanat Tervetuloa jo kolmanteen osaan tästä aloitteleville QB-ohjelmoijille suunnatusta oppaasta. Uusia osia pitäisi tulla melko säännöllisesti, ja jokaisen saat heti ilmestyttyä Ohjelmointiputkasta osoitteesta http://www.ohjelmointiputka.net/ ('Oppaat'-osio). Suosittelen hakemaan ensimmäisen ja toisen osan ennen tämän lukua. Tämänkertaisia aiheita ovat:
Aliohjelmat Aliohjelmat ("funktio", "proseduuri") ovat itseasiassa lyhyitä ohjelmia, joita voidaan kutsua ja jotka voivat palauttaa tietynlaisen tuloksen. Jokaisella funktiolla on nimi, ja kun ohjelmaan kirjoitetaan "CALL funktionnimi" haarautuu ohjelma ko. funktioon, ja funktion suorittamisen jälkeen jatkaa suorittamista funktion kutsumista seuraavalla käskyllä. Esimerkki:
Nyt ulostan...
Näin siis määrittelimme funktioon nimeltään 'TulostaTeksti', joka on tyyppiä 'SUB', eli se ei palauta arvoa. Kutsuimme funktiota ohjelmasta käskyllä CALL. Huomaa että QB:ssä funktiot eivät näy kuten yllä olevassa esimerkkiohjelmassa, vaan saat ne esiin painamalla F2-näppäintä. Sitten vain valitset haluamasi funktion ja QB näyttää sen sinulle. Perinteinen BASIC-tyyli funktioiden kutsumiseen on mielestäni nykyisellään aivan turha, joten en sen suuremmin käy sitä lävitse, tässä kuitenkin ylläoleva esimerkki, "in traditional way":
Mitä eroa sitten on GOSUB:illa ja GOTO:lla? GOSUB tietää, mistä sitä kutsuttiin, GOTO ei. GOTO hyppää nimiöön, mutta ei tiedä minne palata joten RETURN-käskyä ei GOTO:n kanssa käytetä. GOTO tuntuisi mielettömän hyvältä käskyltä, voihan sillä hypätä minne kohtaan koodia tahansa. Siltikään, GOTO:a ei pidä, eikä tarvitse, käyttää. Ongelmat ovat aina ratkaistavissa paremmilla ja selkeimmillä tavoilla. GOTO ei ole oikotie onneen :-) Mutta sitten jälleen taas asiaan, eli funktioihin. Otetaan esimerkki 'FUNCTION'-tyyppisestä aliohjelmasta, eli funktiosta, joka palauttaa arvon.
Matemaattiset operaattorit QB:ssä voi tehdä monimutkaisiakin laskutoimituksia helposti. Työnnänpä heti alkuun hienon taulukon:
Ensimmäiset neljä ovat varmasti tuttuja jokaiselle. MOD:illa saamme selville jakojäännöksen, eli arvon, joka jakolaskusta jää yli (kun emme pelaa desimaalien kanssa..). 10 MOD 3 on 1, koska 10 - ((10 / 3) * 3) = 1. Toinen esimerkki: 13 MOD 5 on 3, koska 13 - ((13 / 5) * 5) = 3. Neliöjuuren pitäisi olla vanhaa huttua jokaiselle, jos ei ole niin mene kouluun. Potenssimerkkiä (^) ei pidä sekoittaa C:hen, jossa ko. merkillä suoritetaan XOR-operaatio. Mitäs sitä muuta matemaattisista operaattoreista sanomaankaan.. jos tulee jotain kysyttävään niin e-mailkusti polkee. Pistetään nyt sentään pienoinen, jo klassikoksi muodostunut, laskinesimerkki:
Kommentointi Ohjelman oikeaoppinen kommentointi on vaikea laji ja varsinkin monelta aloittelijalta kommentit unohtuvat yleensä kokonaan. Kommentteja kannattaa kuitenkin käyttää. Niin, siis mikä on kommentti? Kommentti kertoo, mitä jokin ohjelman osa tekee. Kommentteja voi QB:ssa kirjoittaa muutamalla tavalla:
Heittomerkillä (tai REM:illä) laitettu komentti kestää rivin loppuun saakka, eikä kommentia ole mahdollista katkaista. Tietenkään lause ei muutu kommentiksi jos lainausmerkki on vaikkapa merkkijonon sisällä:
Kommentointia, vaikka se useimmiten onkin vain hyväksi, tulisi silti käyttää varoen. Ei ole mitään järkeä kommentoida itsestäänselvyyksiä, kuten ylläolevissä esimerkeissä. Kommentin ei pidä kertoa mitä joku yksittäinen käsky tekee ('tulostaa tekstiä' tms) vaan mitä joku ohjelman osa tekee. Esimerkki:
Loppusanat Ja jälleen kerran olemme päässet onnellisesti (?) loppuun. Nyt voisitkin käyttää kaikkien kolmen osan oppeja hyödyksesi ja koodata vaikkapa parannetun, kommentoidun, laskimen, joka käyttää funktioita, sekä jossa on myös potenssi- ja neliöjuurilaskumahdollisuudet. Siitä vaan töihin. Minulla ei oikeastaan tällä hetkellä ole pienintäkään ideaa mitä seuraavaan osaan pitäisi pistää. Jos sinulla ideoita sattuu olemaan niin käväise pistämässä vinkkisi Ohjelmointiputkan viestifoorumiin. Ja se on sitten siinä. Kesäloma muuten alkoi juuri tänään, katsotaan miten se vaikuttaa ilmestymisnopeuteen ;-) Nähdään seuraavassa osassa, joka ilmestyy kun sen jaksan kirjoittaa. Laiskuudestani johtuen se voi tosin viedä jopa viikkoja... (tai vuosia, toim. huom. ;-)) Jos haluat seuraavan osan kirjoittamiseen vauhtia, niin tipauta sähköpostia osoitteeseen _____@luukku.com. |
| KimmoKM [16.02.2003 12:40:00] | Lainaa | Muokkaa |
| Oikein hyvä opassarja :) | ||
| KimmoKM [16.02.2003 12:41:11] | Lainaa | Muokkaa |
| Niin, toivottavasti tulee jatkoa. | ||
| thefox [28.02.2003 16:21:26] | Lainaa | Muokkaa |
| Piu pau, voisi kai kirjoittaa sen piiiitkään viimeisen, eli viidennen, osan valmiiksi kyllä. (Neljäs on valmis, pitänee kaivaa se jostain... ;-) | ||
| anomizer [02.03.2003 10:53:54] | Lainaa | Muokkaa |
| tee grafiikka juttuja. | ||
| M.K [04.03.2003 17:25:56] | Lainaa | Muokkaa |
| hYvä OpAs :p | ||
| (nimetön) [11.06.2003 21:15:56] | Lainaa | Muokkaa |
| TOSI hyvä opas!;) ~Jakezu~ | ||
| (nimetön) [11.06.2003 21:16:14] | Lainaa | Muokkaa |
| TOSI hyvä opas!;) ~Jakezu~ | ||
| Dustbin [29.09.2003 15:00:11] | Lainaa | Muokkaa |
| Miksei se neljäs osa ole jo netissä, kun kerran valmis on??? | ||
| Mudface [16.11.2003 00:48:59] | Lainaa | Muokkaa |
| Toivottavasti tulee se neljäs opas nopeasti nettiin.. | ||
| Dustbin [01.12.2003 20:06:33] | Lainaa | Muokkaa |
| Ei näytä tulevan, on tainnut hukkua pahemman kerran :( | ||
| simänen [30.12.2003 15:26:14] | Lainaa | Muokkaa |
| tunkekaa se neljäs jo nettiin | ||
| Heikki [02.01.2004 17:08:49] | Lainaa | Muokkaa |
| Eipä taida jatkoa tulla, vaikkakin fawkz väittää että neljäs olisi valmiina.. :D | ||
| Tp [07.01.2004 15:34:56] | Lainaa | Muokkaa |
| Kohtako se saadaan nettiin? | ||
| Thief [16.01.2004 01:52:25] | Lainaa | Muokkaa |
| Hyvä esimerkki tehokkaasta koodista.. Heh vaikka puhutaankin vain qbasicista. | ||
| Jan [02.02.2004 14:20:52] | Lainaa | Muokkaa |
| CLS
Print "hassu juttu" For i = 1 to 5 hassua = int(rnd * 2) If hassua = "1" then Print "Hahahaha" If hassua = "2" then Print "Ei ollut hauskaa" next i sleep end | ||
| Jan [03.02.2004 09:02:03] | Lainaa | Muokkaa |
| huomasin että koodissani on virhe | ||
| herkko [25.05.2004 21:56:44] | Lainaa | Muokkaa |
| Voisko sen nelososan tehdä uudestaan. Sille nimittäin tulisi käyttöä.. Grafiikkaa voisi ainakin käsitellä sekä muuta hienoa... :) | ||
| herkko [27.05.2004 21:34:50] | Lainaa | Muokkaa |
| Käsittelyyn voisi jossain vaiheessa laittaa myöskin tiedostojen tallentamisen ja lataamisen.. | ||
| rolexxi [12.06.2004 18:38:41] | Lainaa | Muokkaa |
| sitä nelosta vois alkaa tulemaan tänne. tulis tarpeeseen.. kokeile kaivaa se jostain, tai tee uudestaa. | ||
| k00d3r [02.07.2004 21:44:53] | Lainaa | Muokkaa |
| alkaisko se nelonen jo koht tulee? | ||
| k00d3r [02.07.2004 21:44:54] | Lainaa | Muokkaa |
| alkaisko se nelonen jo koht tulee? | ||
| ttuoppi [02.07.2004 21:54:18] | Lainaa | Muokkaa |
| Fawks...vähän vauhtia, sullo se neljäs osa tänne ja äkkiä... | ||
| k.kala [13.07.2004 17:33:34] | Lainaa | Muokkaa |
| jos ei löydy nii tee uus | ||
| p-p [17.11.2004 19:56:47] | Lainaa | Muokkaa |
| Se nelos osa vois sisältää tiedoston avaamisen,sinne kirjoittamisen,tallentamisen ja sulkemisen.Niinkuin yllä ollaan jo mainittu | ||
| GorkkiusSuuri [18.12.2004 20:32:45] | Lainaa | Muokkaa |
| Nääki keskustelut kohta 2 vuotta kestäny.
Ei taiha nelosta tulla. | ||
| thefox [19.12.2004 02:06:38] | Lainaa | Muokkaa |
| Taitaa tosiaan olla, että neljäs osa jää tulematta. Odottelen vain, että joku innostuu kirjoittelemaan paremman QB-oppaan niin että tämä voitaisiin heittää hevon kuuseen :) | ||
| Megant92 [19.02.2005 22:41:24] | Lainaa | Muokkaa |
| Toivottavasti tänne tulee uusi qbasic opas, joka jatkaa siitä mihin tämä jäi.(Toivottavasti ennen vuotta 2010.) | ||
| eraggo [28.04.2005 23:50:32] | Lainaa | Muokkaa |
| hmph... toi ehdotus paremmasta laskimesta on toteutunut (hieman(!) myöhään), sillä ite oon tehny sellasen... :P
se laskee geometrisia laskui... oli siinä pikkasen hommaa mutte se on vasta "demo".... :) | ||
| Khaoralius [27.05.2005 13:36:01] | Lainaa | Muokkaa |
| hmm... Vai, että kaipaisitte KUNNOLLISTA (tämä oli mielestäni hyvä fawkz!) GBasic opasta... Voisin heittää linkin tähän keskustelun pötköön seuraavalla viikolla ;) josta löytyy kaikki perusasiat (tosin englanniksi). Sen voisin toki suomentaa, sillä voisihan sen alkuperäisen linkittää sitten siitä suomennetusta ja pistää alkuperäisen tekijän nimet ym? Olisiko se hyvä? Mitäs sanotte? (huh miten paljon kysymysmerkkejä :/ ) | ||
| Khaoralius [30.05.2005 13:47:31] | Lainaa | Muokkaa |
| Hmm... mikäköhän lienee GBasic opas?! :D | ||
| php mies [23.07.2005 02:10:23] | Lainaa | Muokkaa |
| niinb mikä on GBasic | ||
| siansaksamies [30.07.2005 15:06:45] | Lainaa | Muokkaa |
| Mikä on GBasic? Mitä eroa sillä on QBASIC:iin | ||
| Juhko [23.08.2006 15:18:43] | Lainaa | Muokkaa |
| Tosi hyvä opas! :-)
siansaksamies kirjoitti: Mitä on GBasic? Mitä eroa sillä on QBASIC:iin Ehkä se kirjoitti väärin. | ||
| Codeprofile [18.12.2006 00:13:18] | Lainaa | Muokkaa |
| Kun selailen tuota laskin-sorsaa, niin tiedän sen toiminnan. Muttakun yritän itse tehdä sellaista ilman apuja, niin pää tyhjenee :D | ||
| Juhko [02.01.2007 12:31:22] | Lainaa | Muokkaa |
| SSSSSSEEEEEEEEUUUUUUUURRRRRRRRAAAAAAAAVVVVVVVAAAAAAAAA OOOOOOSSSSSSSSAAAAAAAAA!!!!!!!!!!!!!
vaikka ite kyl osaan qbtä mut silti heti nettiin se SSSSSSEEEEEEEEUUUUUUUURRRRRRRRAAAAAAAAVVVVVVVAAAAAAAAA OOOOOOSSSSSSSSAAAAAAAAA!!!!!!!!!!!!! | ||
| moptim [27.01.2007 07:12:20] | Lainaa | Muokkaa |
| Juhko > Tuo VAAAAAAAAAAAAAAAAAAIIIIIIIIIIIIIIIKEEEEEEEEEEEEEEUUUUUUUUUUUUUUUUTTAAAAAAAAAAAAAAAAAA lukemista. Itse minä en todellakaan helposti saa tuonlaista tekstiä luettua. Ilmoita vaikka näin: "Seuraava osa, kiitos" tai tee tuosta jotain muuta. | ||
| thefox [27.01.2007 19:14:27] | Lainaa | Muokkaa |
| Seuraavaa osaa ei ole tulossa. Ja toivottavasti joku saa pian tehtyä paremman korvaavan QBasic-opassarjan, että nämä voidaan poistaa täältä :) | ||
| Nizpu [25.08.2007 15:39:11] | Lainaa | Muokkaa |
| Päätin ottaa QBasicin ensimmäiseksi ohjelmointikieleksi ja tämän opassarjan pääsin todella hyvin alkuun, kiitos!
(Tulee vähän myöhässä, eh? :P) | ||
| qwerty [15.10.2007 09:04:26] | Lainaa | Muokkaa |
| Nää oppaat onki aika hyvii, grafiikast ja peleist vois olla lisää. | ||
| Buru [07.10.2008 19:35:45] | Lainaa | Muokkaa |
| Hyvä opas :). Toivottavasti neljäs tulee pian. Voiko QBasicissa kopioida mitenkään? | ||
| Buru [07.10.2008 19:39:07] | Lainaa | Muokkaa |
| Ohhoh, enpäs lukenut aikasempia viestejä :P... | ||
| jsbasic [30.12.2008 18:56:18] | Lainaa | Muokkaa |
| Koska tulee SSSSSSEEEEEEEEUUUUUUUURRRRRRRRAAAAAAAAVVVVVVVAAAAAAAAA OOOOOOSSSSSSSSAAAAAAAAA!!!!!!!!!!!!! | ||
| New Samppi [04.01.2009 16:31:50] | Lainaa | Muokkaa |
| Ei tätä opasta saa lopettaa, tää on hyvä! | ||
| Juhko [13.01.2009 15:39:32] | Lainaa | Muokkaa |
| Buru kirjoitti: Hyvä opas :). Toivottavasti neljäs tulee pian. Voiko QBasicissa kopioida mitenkään? Voi, painamalla Ctrl+Insert. | ||
| sammakkomies [30.11.2009 22:47:41] | Lainaa | Muokkaa |
| minulla on idea. Kerro seuraavaksi miten tehdään peli silleen, kuten juhko teki. Lainaan pelistä:
Juho pelit 2007 kirjoitti: Paina enterii... ja kun enter napista painaa, peli (yllätys yllätys) alkaa. Miten tämän saa koodattua? Ja nyt sanon ku piti ekassa oppaassa sanoa mut unohtu. Tuo slc on vissiin koodi joka yleisesti tyhjentää näytön. Ainakin DOS.EXE ohjelmassa. | ||
| black cat [01.12.2009 12:38:15] | Lainaa | Muokkaa |
| tulis nyt se uus opas. ku oon vasta aloittelija (tällä hetkellä) | ||
ylläpito Antti Laaksonen, ulkoasu Otto Seiskari