Seppo Mustonen: Sukrojen ohjelmointi Survossa

14. Näytesovelluksia

Antaaksemme todemman kuvan sukroista esittelemme muutamia valmiita ratkaisuja. Näihin esimerkkeihin kuuluvat sukrot ovat joko tähän oppaaseen liittyvällä levykkeellä tai kuuluvat Survon vakiovarustukseen. Emme yleensä esitä täydellisiä listauksia, vaan lukijaa kehoitetaan kaivamaan ne katseltavakseen oman Survonsa avulla. Esimerkeistä on toivottavasti hyötyä uusia ratkaisuja viriteltäessä.

Suomenkielinen opetussarja

Tämä lienee toistaiseksi laajin sukrojen muodossa tehty sovellus. Siihen kuuluu yli 200 sukroa, joista osa on pakattu samoihin .TUT-tiedostoihin. Pelkät sukrotiedostot käsittävät yli puoli miljoonaa tavua. Lisäksi opetussarjassa on useita toimituskenttiä, joissa on valmiina mm. suurin osa valikoista.
     Opetussarjasta kerrotaan Survo-oppaassa, jossa on myös liitteenä opetusohjelmien otsikot valikkorakenteen mukaisessa järjestyksessä.

Opetussarja käynnistyy Survon TUT-hakemistossa olevalla sukrolla OPETUS, jota voi käyttää myös aloitussukrona eli ottamalla Survo käyttöön komennolla SURVO OPETUS päästään välittömästi opetukseen.
     Monet käyttäjät ovat toivoneet, että opetusohjelmia voisi katsella myös tekeillä olevan työn lomassa niin, että katselun päätyttyä palattaisiin automaattisesti takaisin omaan työhön. Tämä ominaisuus on nyt (versiosta 3.22 lähtien) lisätty opetussarjaan seuraavalla tavalla.
     Sukro OPETUS tallettaa nykyisen datapolun, kohdistimen sijainnin ja toimituskentän sisällön ennen opetuksen aloittamista. Sukron OPETUS listaus on seuraava:
  21  1 SURVO 84C EDITOR Sun May 26 09:00:44 1991         D:\SUOPAS\ 120  85 0
   1 *
   2 *TUTLOAD .\TUT\OPETUS_
   3 / OPETUS aloittaa Survon suomenkielisen opetussarjan.   / S.Mustonen 1991
   4 / Jotta opetuksen päätyttyä voitaisiin tulla takaisin tekeillä olevaan
   5 / työhön, talletetaan datapolku ja kohdistimen sijainti sukromuistin
   6 / sisältönä tiedostoon SURVOPE.STK ja toimituskenttä SURVOPE.EDT .
   7 / Sukro PALUU käyttää näitä tiedostoja palauttaakseen lähtötilanteen.
   8 /
   9 *{tempo -1}{init}
  10 /
  11 / Jos käytössä aloitussukrona, W1=(start) .
  12 / Tällöin talletetaan vain sukromuistin sisältö.
  13 - if W1 '<>' (start) then goto A
  14 *{save stack SURVOPE.STK}{goto B}
  15 /
  16 / Jos aloitetaan keskeltä Survoa, pannaan muistiin datapolku
  17 / ja kohdistimen sijainti. Talletetaan myös toimituskenttä.
  18 + A: {save datapath W1}{save cursor W2,W3}{save corner W4,W5}
  19 *{save stack SURVOPE.STK}{save field SURVOPE}
  20 /
  21 + B: {line start}{erase}{erase}
  22 /
  23 / Valitaan opetushakemisto:
  24 *DISK {save systemdisk W1}{print W1}.\OPETUS{act}
  25 /
  26 / Jatketaan sukrolla SEURAAVA (W1=oletusvastaus):
  27 *{del stack}{W1=1}{tempo +1}{load SEURAAVA}{end}
  28 *

Lähtökohtana olleen työn tiedot tallentuvat Survon väliaikaistiedostoille tarkoitettuun tempdisk-hakemistoon tiedostoiksi SURVOPE.STK (sukromuistina, jossa on datapolku ja kohdistimen sijainti) ja SURVOPE.EDT (toimituskenttä).
     Jotta toimituskenttää ei pilattaisi millään ylimääräisillä teksteillä, sitä talleteta tavanomaisella Survon SAVE-komennolla vaan näkymättömällä sukrokielen käskyllä {save field SURVOPE} .
     Itse opetussarjankin saattaa aloittaa, kirjoittamatta komentoa /OPETUS, yksinkertaisesti näppäinsukrolla O, eli näppäinyhdistelmällä PREFIX M O .

Kaikkiin opetussarjan valikkoihin on lisätty vaihtoehto

    P. Paluu aikaisempaan työhön
jolla kutsutaan sukro PALUU:
  23  1 SURVO 84C EDITOR Sun May 26 09:11:58 1991         D:\SUOPAS\ 120  85 0
  28 *
  29 *TUTLOAD .\OPETUS\PALUU_
  30 / PALUU vie opetuksen jälkeen takaisin aikaisempaan työhön,
  31 / jonka parametrit ovat sukromuistissa SURVOPE.STK
  32 /
  33 *{tempo -1}{init}{del stack}{load stack SURVOPE.STK}
  34 /
  35 / Jos OPETUS ollut käytössä aloitussukrona, palataan Survon alkuun:
  36 - if W1 '=' (start) then load RETURN
  37 /
  38 / Valitaan aikaisempi datapolku:
  39 *{line start}{erase}{erase}DISK {print W1}{act}
  40 /
  41 / Palautetaan aikaisempi toimituskenttä SURVOPE:
  42 *{line start}{erase}{save tempdisk W6}LOAD {print W6}SURVOPE{act}
  43 /
  44 / Siirretään kohdistin alkuperäiselle paikalle:
  45 *{jump W4,W2,W5,W3}{tempo +1}{end}
  46 *

Huomaa, että sukro PALUU tunnistaa sen tapauksen, jossa koko Survo on aloitettu OPETUS-sukrolla, jolloin ei löydy mitään "tekeillä olevaa työtä", johon palata. Tunnistus tapahtuu sen kautta, että aloitussukroissa muisti alustetaan arvolla W1=(start) arvon W1=(empty) asemasta. Kuten riviltä 36 nähdään, tässä aloitustilanteessa palataan koko Survon alkukenttään RETURN-sukrolla.
     Automaattinen paluu omaan työhön onnistuu jopa silloinkin, kun on keskeyttänyt opetussarjan napilla piste ja tehnyt joitain omia kokeitaan. Edellyttäen, että on pysytty opetushakemistossa, paluu tapahtuu yksinkertaisesti komennolla /PALUU .
     Edellä mainitut sukrot OPETUS ja PALUU antavat mallia muille vastaaville ratkaisuille, joiden halutaan toimivan ikäänkuin tekeillä olevan työn aliohjelmina (itse asiassa jopa jonkin toisen sukron alaisuudessa). Riittää, kun muuttaa tiedosto- ja polkunimet uuden tilanteen mukaan.

OPETUS-sukro päättää oman toimintansa asettamalla sukromuistin sisällöksi W1=1 ja pyytää sukroa SEURAAVA jatkamaan:
  26  1 SURVO 84C EDITOR Sun May 26 11:42:33 1991         D:\SUOPAS\ 120  85 0
  46 *
  47 *TUTLOAD .\OPETUS\SEURAAVA_
  48 *{tempo -1}{init}{line start}{erase}{erase}LOAD VALIKKO,1,22{act}
  49 *{form} Valitse jokin vaihtoehdoista 1,2,...:{form7} {tempo +1}
  50 *{del stack W2}
  51 - prompt
  52 -   default W1
  53 -   length 2
  54 -   wait 600
  55 - switch W2
  56 -   case 1: load YLEINEN
  57 -   case 2: load SUKROT1
  58 -   case 3: load KIERROS
  59 -   case 4: goto A
  60 -   case 5: load KYSELYT
  61 -   case 6: goto B
  62 -   case 7: goto C
  63 -   case 8: goto D
  64 -   case 9: goto E
  65 -   case A: goto F
  66 -   case a: goto F
  67 -   case S: load SANASTO
  68 -   case s: load SANASTO
  69 -   case P: load PALUU
  70 -   case p: load PALUU
  71 -   default: load RETURN
  72 + A: {R}
  73 *{tempo -1}{del stack}{W1=1}{tempo +1}{load TEKSTIS}
  74 + B: {R}
  75 *{tempo -1}{del stack}{W1=1}{tempo +1}{load TAULUS}
  76 + C: {R}
  77 *{tempo -1}{del stack}{W1=1}{tempo +1}{load MATEMS}
  78 + D: {R}
  79 *{tempo -1}{del stack}{W1=1}{tempo +1}{load KUVATS}
  80 + E: {R}
  81 *{tempo -1}{del stack}{W1=1}{tempo +1}{load DATAS}
  82 + F: {R}
  83 *{tempo -1}{del stack}{W1=1}{tempo +1}{load TILAS}{end}
  84 *
  85 *

SEURAAVA aloittaa kutsumalla käyttöönsä toimituskentän VALIKKO, jonka ensimmäisillä riveillä on opetussarjan päävalikko. Tämän valikon alle (riville 22) sukro kirjoittaa valintaa koskevan kysymyksen, jolloin kuvaruudussa näkyy:
  40  1 SURVO 84C EDITOR Sun May 26 11:55:05 1991        C:.\OPETUS\ 100 100 0
   1 *
   2 *      Survo-opetusta 
   3 * +-------------------------------------------------------------------+
   4 * |   1. Yleisiä tietoja (1)                                          |
   5 * |   2. Opetusohjelmien käyttö (3)                                   |
   6 * |   3. Lyhyt "turistikierros" (puuttuu)                             |
   7 * |   4. Tekstinkäsittelyn alkeita (57)                               |
   8 * |   5. Neuvonta käytön aikana (7)                                   |
   9 * |   6. Taulukkojen hallinta (26)                                    |
  10 * |   7. Matemaattiset toiminnat (101)                                |
  11 * |   8. Kuvien piirto (172)                                          |
  12 * |   9. Tietokantojen hallinta (99)                                  |
  13 * |   A. Tilastolliset menetelmät (215)                               |
  14 * |                                                                   |
  15 * |   S. Survon sanastoa                                              |
  16 * |                                                                   |
  17 * |                                                                   |
  18 * |                                                                   |
  19 * |   X. Paluu Survon alkuun                                          |
  20 * |   P. Paluu aikaisempaan työhön                                    |
  21 * +-------------------------------------------------------------------+
  22 * Valitse jokin vaihtoehdoista 1,2,...: 1 *
  23 *

Ottamalla valikot suoraan toimituskentistä edetään nopeammin kuin panemalla sukro kirjoittamaan kaikki tekstit.
     Muistipaikkaa W1 käytetään opetussarjassa jatkuvasti eräänlaisena viestikapulana. Valikosta toiseen siirryttäessä se kertoo seuraavaksi tarkoitetun oletusvastauksen. Tässä alussa sukro OPETUS on asettanut oletusvalinnaksi arvon 1, jonka SEURAAVA näyttää valintakysymyksen perässä. Kun käyttäjä valitsee tämän tai jonkin muun vaihtoehdon, pidetään huolta siitä, että oletusvastaus muuttuu asianmukaisesti (yleensä seuraavaksi arvoksi) palattaessa takaisin tähän päävalikkoon. Jos tyydytään oletusvastauksiin, koko opetussarja tulee näin käydyksi läpi valikkojen mukaisessa järjestyksessä.
     Jos käyttäjä valitsee esim. vaihtoehdon 7 (Matemaattiset toiminnat), tämä johtaa sukron MATEMS aloittamiseen (ei aliohjelmana vaan sukron SEURAAVA jatkona). MATEMS puolestaan aloittaa näyttämällä uutta valikkoa, josta päästään eri tavoilla eteenpäin. Vaihtoehtona kussakin jatkovalikossa on kuitenkin aina

    X. Paluu edelliseen valikkoon
jota käyttämällä saatetaan kelata valikkojonoa taaksepäin. Lopulta voidaan tulla takaisin (sukron MATEMS kautta) päävalikkoon, jolloin MATEMS ennen sukron SEURAAVA kutsumista asettaa W1=8 ja näin päävalikossa ehdotetaan seuraavaa vaihtoehtoa (Kuvien piirtäminen).
     Tässä kuvatulla tavalla on synnytetty hierarkinen valikkorakenne, jossa pysytään koko ajan sukrojen suhteen tasolla 1. Eräissä aiheissa on kuitenkin myös kerrostuvilla tasoilla sovellettuja rakenteita. Lisäksi opetusohjelmat käyttävät erilaisia työkaluja ja asiantuntijasukroja aliohjelminaan.

Kun haluaa tutkia tarkemmin esim. näitä opetusohjelmia, on välttämätöntä tietää niiden nimet, jotta voisi ottaa listauksen esille. Tämä onnistuu käyttämällä ko. sukroa (siis valitsemalla opetussarjassa kiinnostuksen kohteena olevan aiheen), siirtymällä askeltavaan etenemiseen HELP-napilla (F1) ja painamalla nappia HOME . Tällöin Survon ikkunan alle ilmestyy juuri toimivan sukron täydellinen polkunimi.

FILE-sukrot havaintotiedostojen käsittelyssä

Survon havaintotiedostoja käsitellään normaalisti esim. FILE SHOW-operaatiolla, jolla mm. katsellaan aineistoja ja talletetaan niitä. FILE SHOW on erillinen Survon moduli, jonka Survon toimitin kutsuu tarvittaessa käyttöön ns. lapsiprosessina.
     Myös lapsiprosessit toimivat tarvittaessa sukrojen alaisina. Normaalisti niillä ei ole kuitenkaan suoraa yhteyttä käyttäjään; ne toteuttavat tehtävänsä toimittimesta annetun komennon, siihen liittyvien parametrien ja täsmennysten opastamana. Tällöin on myös samantekevää, ohjaako toimintaa inhimillinen käyttäjä vai sukro.
     FILE SHOW kuten myös muut vuorovaikutteiset Survon operaatiot (esim. SHOW, FILE EDIT ja Survon neuvontajärjestelmä) on sikäli poikkeuksellinen, että se odottaa käyttäjältä omaa aktiivisuutta. Tällöin toimiessaan sukron alaisuudessa FILE SHOW edellyttää sukron sisältävän kaikki toimintansa ohjaamiseen tarvittavat näppäinpainallukset, mikäli työskentely tapahtuu oletusarvoisessa {interaction off}-tilassa. Kuten kohdassa Käyttäjän vuorovaikutus kuvattiin, FILE SHOW ja muut lapsiprosesseina toimivat vuorovaikutteiset Survo-modulit kuitenkin kytkeytyvät väliaikaisesti irti sukron holhouksesta, kun ennen kyseistä toimintaa annetaan {interaction on}-käsky. Tätä tekniikkaa kannattaa suosia tehtäessä sukroja tiedostojen vapaamuotoiseen selailuun ja päivitykseen.
     Jos sen sijaan halutaan sukron tallettavan jonkin etukäteen määrätyn tiedon havaintotiedostoon, sukron tulee sisältää kaikki talletustoimenpiteeseen tarvittavat painallukset.
     Sukrokieli toimii kuitenkin vain rajoitetusti vuorovaikutteisissa Survon operaatioissa. Yleensä vain ne toimenpiteet, jotka voidaan toteuttaa (mallityöskentelyllä) opetustilassa, ovat käytettävissä. Ei ole siis mahdollista esim. viitata sukromuistiin vaan kaikki toimenpiteet (näppäinpainallukset) on ilmaistava kirjaimellisesti.

Jos siis halutaan tallettaa esim. KUNNAT-tiedostoon Helsingin Äyri-muuttujan arvoksi 15, se voisi tapahtua sukrolla TALL1 seuraavasti:
  14  1 SURVO 84C EDITOR Thu Jun 20 07:52:59 1991         C:\SUOPAS\ 100 100 0
  24 *
  25 *TUTSAVE TALL1_
  26 *{tempo -1}{init}{R}
  27 *{line start}{erase}{erase}
  28 /
  29 / Aktivoidaan FILE SHOW-komento:
  30 *FILE SHOW KUNNAT{act}
  31 /
  32 / Toimitaan FILE SHOW-tilassa. Etsitään Kunta-niminen kenttä:
  33 *{pre}{search}Kunta{R}
  34 /
  35 / Etsitään tapaus Helsinki Kunta-kentästä:
  36 *{search}Helsinki{R}
  37 /
  38 / Etsitään Äyri-niminen kenttä:
  39 *{pre}{search}Äyri{R}
  40 /
  41 / Annetaan kirjoituslupa, pyyhitään nykyinen arvo ja kirjoitetaan uusi:
  42 *{touch}{erase}15
  43 /
  44 / Poistutaan FILE SHOW-tilasta:
  45 *{exit}
  46 /
  47 / Ollaan takaisin toimitustilassa.
  48 *{tempo +1}{end}
  49 *

Listauksessa riveillä 33-45 esiintyvä sukrokoodi ohjaa FILE SHOW-operaation sisäistä toimintaa. Tässä koodissa saattaa esiintyä vain suoraa tekstinkirjoitusta ja erikoisnäppäinten painalluksia siinä laajuudessa kuin ao. operaatio niitä edellyttää. Parametritietoja ei voi antaa sukromuistin välityksellä. Yllä olevaa TALL1-sukroa ei siis ole mahdollista yleistää koskemaan mielivaltaista tilannetta.
     Yleinen ratkaisu saavutetaan kuitenkin panemalla talletussukro ensin kirjoittamaan parametriensa mukaan apusukron, joka tekee tarvittavan toimenpiteen aliohjelmana.
     Näin on menetelty FILE-sukroissa FILE-SAVE ja FILE-LOAD. Esim. FILE-SAVE -sukron listaus on näyttää tällaiselta:
  41  1 SURVO 84C EDITOR Sat Jun 22 09:14:11 1991         C:\SUOPAS\ 100 100 0
  49 *
  50 *TUTLOAD .\S\FILE-SAVE
  51 / /FILE-SAVE <data>,<case_var>,<case>,<variable>,<value>  / 1.5.1991/SM
  52 / def Wdata=W1 Wobsname=W2 Wobs=W3 Wvar=W4 Wvalue=W5
  53 *{tempo -1}{init}{R}
  54 *{erase}{erase}SCRATCH {act}{line start}
  55 - if Wvar '' {} then goto S
  56 /
  57 */FILE-SAVE <data>,<case_var>,<case>,<variable>,<value>{R}
  58 *saves <value> of <variable> for <case> of <case_var>{R}
  59 *to the Survo data file <data>.{R}
  60 *{goto E}
  61 /
  62 / Writing sucro program FILESAVE:
  63 + S: {ref}TUTSAVE FILESAVE{R}
  64 *FILE SHOW {print Wdata}{(}act{)}{R}
  65 *{(}pre{)}{(}search{)}{print Wobsname}{(}R{)}{R}
  66 *{(}search{)}{print Wobs}{(}R{)}{R}
  67 *{(}pre{)}{(}search{)}{print Wvar}{(}R{)}{R}
  68 *{(}touch{)}{(}erase{)}{print Wvalue}{(}exit{)}{(}end{)}
  69 /
  70 / Saving sucro FILESAVE:
  71 *{ref}{act}
  72 /
  73 / Calling sucro FILESAVE:
  74 *SCRATCH {act}{line start}{call FILESAVE}{line start}{erase}{u}
  75 + E: {tempo +1}{end}
  76 *
  77 */FILE-SAVE KUNNAT,Kunta,Helsinki,Äyri,15_
  78 *

Rivillä 77 näytetään, miten FILE-SAVE -sukro tekee täsmälleen saman työn kuin TALL1. Tämä tapahtuu siten, että FILE-SAVE kirjoittaa itse toimituskenttään komennon TUTSAVE FILESAVE (rivi 63) ja sen alle tarvittavat sukrokieliset käskyt. Huomaa, että aaltosulut { } on kirjoitettava koodisanoina {(} ja {)}, jotta sukrotulkki ymmärtäisi ne kirjaimellisesti. Kun siis FILE-SAVE aloitetaan riviltä 77, se kirjoittaa toimituskenttään listauksen
  28  1 SURVO 84C EDITOR Sat Jun 22 09:26:13 1991         C:\SUOPAS\ 100 100 0
  76 *
  77 */FILE-SAVE KUNNAT,Kunta,Helsinki,Äyri,15
  78 *TUTSAVE FILESAVE
  79 *FILE SHOW KUNNAT{act}
  80 *{pre}{search}Kunta{R}
  81 *{search}Helsinki{R}
  82 *{pre}{search}Äyri{R}
  83 *{touch}{erase}15{exit}{end}_
  84 *

ja aktivoi sitten TUTSAVE-komennon rivillä 78. Näin se tallettaa sukron FILESAVE, joka toiminnaltaan on sama kuin TALL1. Sukro FILE-SAVE kutsuu lopuksi (listauksen rivillä 74) itse laatimaansa sukroa FILESAVE hoitamaan varsinaisen talletuksen.

Sitä, että ohjelma kirjoittaa itse lisää ohjelmakoodia ja käyttää sitä oman toimintansa apuna, on tietenkin aika erikoinen ratkaisu. Tällainen tekniikka luontuu sukrokielessä helpommin kuin monissa muissa kielissä, koska ohjelmointi- ja sovellusympäristöt ovat samat.

Sukrot FILE-SAVE ja FILE-LOAD ovat työkaluja, jotka on liitettävissä aliohjelmina mihin tahansa tiedonhallintasukroon. Ne toimivat myös malleina muille vastaaville ratkaisuille.

Faktorianalyysi

Monet tilastolliset analyysit ovat laskentasuorituksina vaiheittaisia. Käyttäjä saattaa kussakin vaiheessa valita haluamansa useista laskentamenetelmistä ja kokeilla erilaisia ratkaisutapoja. Jotta hänelle jäisi täysi vapaus edetä omaan tyyliinsä, monivaiheisia tilastollisia menetelmiä ei Survossa ole ohjelmoitu yhdeksi operaatioksi vaan niitä sovelletaan yhdistelemällä useita operaatioita peräkkäin.
     Koska menetelmien suoritus jakautuu näin osiin, käyttäjältä edellytetään ainakin sen verran ammattitaitoa, että hän tuntee ko. menetelmän pääpiirteet.
     Kokemattomia käyttäjiä on mahdollista auttaa tekemällä sukroja, jotka hänen puolestaan toteuttavat menetelmän vaatimat laskentavaiheet jonkin kaavamaisen periaatteen mukaisesti.
     Sopiva esimerkki tällaisesta tilastollisesta sukrosta on FACTOR, joka käy läpi faktorianalyysin päävaiheet. Kun aktivoidaan komento /FACTOR <havaintoaineiston_nimi> sukro FACTOR laskee aineiston aktiivisista muuttujista ja havainnoista korrelaatiomatiisin (CORR-operaatiolla), tutkii tämän matriisin ominaisarvoja ja valitsee sopivan faktoriluvun, tekee faktoroinnin suurimman uskottavuuden menetelmällä (FACTA) ja lopuksi (komennolla ROTATE) Varimax-rotaation, jonka antama faktorimatriisi tulostetaan toimituskenttään. Kenttään ilmaantuvat myös vaiheittain kaikki käytetyt Survon komennot, jolloin jälkikäteen voi itsenäisesti toistaa laskelmat jollakin toisella faktoriluvulla.
     FACTOR-sukron ehkä mielenkiintoisin osavaihe on faktoriluvun valinta korrelaatiomatriisin ominaisarvojen perusteella. Se tapahtuu poimimalla laskevassa suuruusjärjestyksessä peräkkäisiä ominaisarvoja sukromuistiin ja vertailemalla niiden suuruuksia. Katkaisu tehdään sillä kohtaa, jossa arvot painuvat alle yhden ja katkaisun jälkeinen ominaisarvo on edelliseen nähden suhteellisesti pienin. Tarkka kuvaus löytyy FACTOR-sukron listauksesta komennolla TUTLOAD C:\E\S\FACTOR .

Pienten otosten vertailu

Suomenkieliseen opetusohjelmasarjaan sisältyy tilastollisten menetelmien osastossa jakso "Tilastolliset testit". Se käsittelee Survoon kuuluvan COMPARE-operaation käyttöä. Ko. operaatio sisältää kosolti vaihtoehtoisia tapoja tarkastella ja vertailla kahta tai useampaa riippumatonta tai rinnakkaista otosta. Koska testien soveltamiselle on erilaisia olettamuksia mitä tulee perusjoukkojen jakaumiin ja mittauksen tasoon, käyttäjää tukee VERTAA-niminen sukro. VERTAA selvittää muutaman käyttäjälle osoitetun kysymyksen perusteella, millaisesta tilanteesta on kysymys, aktivoi sitten COMPARE-operaation sopivin parametrein, suomentaa tuloskaaviot ja kirjoittaa lyhyet selväkieliset päätelmät. Tavoitteena on ollut antaa tilastollisiin testeihin perehtymättömille jonkinlainen mahdollisuus tutustua aiheeseen ja ratkaista käytännössä eteen tulevia tehtäviä.
     VERTAA koostuu kolmesta sukrosta (VERTAA, VERTAA1 ja VERTAA2), joista itse VERTAA pohjustaa työn esittämällä käyttäjälle kysymykset ja kutsuu sen jälkeen joko sukron VERTAA1 (riippumattomien otosten vertailu) tai sukron VERTAA2 (parittaiset otokset) jatkamaan. Nämä sukrot löytyvät opetusohjelmien alihakemistosta OPETUS .

Sukrojen ohjelmointi Survossa - Seppo Mustonen 1991
  1. Johdanto
  2. Esimerkki
  3. Sukrokielen koodisanoja
  4. Sukromuisti
  5. Hapuilukoodit, tulostus ja kohdistimen liikuttelu
  6. Sukrojen aloittaminen ja kytkeminen toisiinsa
  7. Ehdolliset toiminnat
  8. Käyttäjän vuorovaikutus
  9. Aritmetiikka ja muistin välitön hallinta
  10. Sukrotiedostot
  11. Sukrojen lajit
  12. Sukrojen laatiminen käytännössä
  13. Virhetilanteet
  14. Näytesovelluksia
Liite: Sukrokielen koodisanat