Tilastollisen tietojenkäsittelyn seminaari 18.2.2015

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Tilastollisen tietojenkäsittelyn seminaari 18.2.2015

Seppo Mustonen
Administrator
Tilastollisen tietojenkäsittelyn seminaari

Seminaarin seuraava tilaisuus on keskiviikkona 18.2.2015
klo 16-18 Psykologian laitoksella huoneessa 229 (Siltavuorenpenger 1 A).

Tarkastellaan sukrojen käyttöä ja laadintaa.
Esittelen myös uusia mahdollisuuksia sukrojen toiminnan seurantaan.

Seminaariin ovat kaikki aiheesta kiinnostuneet tervetulleita.

Seppo Mustonen

Tässä viime seminaarissa käsitelty esimerkki kommenteilla varustettuna:

Sukro /LAJ lajittelee komentorivin alapuolella olevan Survon ikkunassa
näkyvän lukujen listan nousevaan järjestykseen.
Järjestäminen tapahtuu alkeellisella tavalla niin, että kussakin
vaiheessa etsitään pienin luku, poistetaan se alkuperäisestä listasta
ja kirjoitetaan se tämän listan alapuolella olevan (aluksi tyhjän)
listan loppuun. Tätä toistataan, kunnes alkuperäinen lista tyhjentyy.

Menettely olisi hyvin hidas suurten aineistojen järjestämisessä, mutta
kelvollinen tässä yhteydessä.

Siirrä alla oleva koodi leikepöydän kautta Survon toimituskenttään ja
aktivoi DELETE-komento niin, että kohdistin on kontrollisarakkeessa.
Tällöin rivien ensimmäiset merkit siirtyvät kontrollisarakkeeseen ja
voit tallentaa sukron LAJ komennolla TUTSAVE LAJ.
Muuta {tempo 2} muotoon {tempo 0}, jos haluat saada sukron toimimaan
täydellä nopeudella.

DELETE
*TUTSAVE LAJ
/
/ /LAJ
/ a1 a2 a3 ...
/
/ järjestää seuraavan rivin luvut a1,a2,a3... suuruusjärjestykseen.
/
/ Muistipaikkojen määrittely:
/ def Wmin=W1 Wr=W2 Wc=W3 Wnext=W4 Wc2=W5
/
/ Aloitustilanteen normalisointi ja siirtyminen lukulistan alkuun:
*{init}{tempo 2}{R}
/
/ Lajiteltavan rivin alla oleva rivin tyhjennys tulostusta varten
/ ja paluu lukujen alkuun:
*{d}{erase}{erase}{u}
/
/ Lisätään tyhjä merkki lukujonon eteen ja palataan rivin alkuun:
*{ins} {ins}{home}
/
/ Etsitään ensimmäinen luku ja se on toistaiseksi pienin (Wmin).
+ S: {next word}{save word Wmin}
/
/ Talletetaan kohdistimen rivi Wr ja sarake Wc, pannaan paikka muistiin:
*{save cursor Wr,Wc}{ref set 1}
/
/ Etsitään seuraava luku, talletetaan se (Wnext) ja sen sarake (Wc2)
+ A:
*{next word}{save word Wnext}{save cursor Wr,Wc2}
/
/ Jos uutta lukua ei löydy, on Wc2=Wc ja mennään kohtaan B:
- if Wc2 = Wc then goto B
/
/ Löytyi uusi luku ja talletetaan sen sarake (Wc)
*{Wc=Wc2}
/
/ Jos seuraava luku (Wnext) on suurempi tai sama kuin pienin aiemmista,
/ palataan etsintäkierroksen alkuun A:
- if Wnext >= Wmin then goto A
/
/ Todetaan uusin luku pienimmäksi (Wmin), pannaan paikka muistiin
/ ja palataan etsintäkierroksen alkuun A:
*{Wmin=Wnext}{ref set 1}{goto A}
/
/ Tähän tullaan, kun kaikki luvut on käyty läpi
/ ja hypätään (siirretään kohdistin) pienimmän luvun alkuun:
+ B: {ref jump 1}
/
/ Poistetaan pienin luku alkuperäisestä listasta merkki merkiltä:
+ C: {save char Wr}{del}
- if Wr '<>' {sp} then goto C
/
/ Siirrytään tulostusrivin alkuun ja lisätään sen loppuun viimeksi
/ löydetty pienin luku:
*{R}
*{line end}{r}{print Wmin}
/
/ Palataan lajiteltavan jonon alkuun ja talletetaan se (Wr):
*{line start}{u}{save line Wr}
/
/ Jos lukuja on vielä jäljellä (Wr ei ole tyhjentynyt) palataan alkuun S:
- if Wr '<>' {} then goto  S
/
/ Rivi on tyhjentynyt, poistetaan se ja poistetaan ylimääräinen tyhjä
/ merkki järjestetyn lukulistan alusta:
*{del line}{del}
*{end}