Istumapaikkanumeroiden arpominen Google Sheetsillä

Kirjoitin pari päivää sitten artikkelin ”Istumapaikkanumeroiden arpominen Excelillä”. Päätin sitten luoda samankaltaisen sovelluksen myös Google Sheetsillä. Varsinkin kun Excel-versioni toimii vain uusilla 365 Exceleillä.

Alun perin aloitin sovelluksen teon Sheetsillä, mutta en saanut SORTN()-funktiota toimimaan haluamallani tavalla. Ongelma ratkesi helpommin Excelillä ja sen SORTBY() ja SEQUENCE() -funktioilla.  Excel-versiossa koko homma onnistui yhdellä pitkähköllä komennolla, Google Sheetsissä pitää (ainakin tässä minun ratkaisussani) luoda pari ylimääräistä saraketta, jotka voi lopuksi piilottaa.

Sovellus toimii seuraavasti.

Laitetaan oppilaiden nimet soluun C2 ja siitä alaspäin.  Sarakkeelle A luodaan satunnaislukuja saman verran kuin on oppilaiden nimiäkin solun A2 kaavalla
=RANDARRAY(COUNTA(C2:C201))

B-sarakkeelle luodaan lukujono 1, 2, …, nimien lukumäärä, solun B2 kaavalla
=SEQUENCE(COUNTA(C2:C201))

Kun soluun D2 kirjoitetaan kaava
=SORTN(A2:B200;COUNTA(C2:C200);A2:A200)
ilmestyy sarakkeelle D sarakkeen A satunnaisluvut suuruusjärjestyksessä ja niiden avulla luotu satunnainen järjestysluku sarakkeelle E.

Kun sarakkeet A, B ja D piilotetaan, on sovellus valmis.

Valmis sovellus löytyy Google Drivestäni oheisen linkin takaa https://docs.google.com/spreadsheets/d/1negVr7JcoWAXl7Dri3HHpVOLy6AFxbF_UM-MLbyXD3M/edit?usp=sharing

Advertisement

Istumapaikkanumeroiden arpominen Excelillä

[edit. 14.3.23 lisäsin loppuun kommentin toimimattomuudesta vanhoissa Exceleissä]

Näihin aikoihin varmaankin aika monessa koulussa luodaan istumajärjestyslistoja ylioppilaskirjoituksia varten. Toisaalta opettajat saattavat tarvita opetuksessaan menetelmän, jolla aakkostettuun oppilaslistaan liitetään kullekin oppilaalle satunnainen järjestysluku. Niinpä tein sellaisen Excelillä.

Kauan sitten, kun vielä toimin opehommissa käytin tämän tyyppisen ongelman ratkaisuun GeoGebraa ja sen listakomentoja. Tai sitten sekoitin oppilaita taulukkolaskennan satunnaisluvuilla ja järjestä-valikkokomentojen avulla. Tämä versio perustuu Excelin SORTBY ja SEQUENCE -funktioihin. Aloitin tämän sovelluksen tekemisen Google Sheetsillä, mutta en saanut sitä toimimaan halutulla tavalla. Excelistä löysin sopivat funktiot ongelman ratkaisuun. Palannen joskus ongelman ratkaisuun Google Sheetsillä.

Taulukkoni ainoa kaava on solussa B2. Kaava on =SORTBY(SEQUENCE(COUNTA(A2:A200));RANDARRAY(COUNTA(A2:A200)))
Suomeksi
=LAJITTELE.ARVOJEN.PERUSTEELLA(JONO(LASKE.A(A2:A200));SATUNN.MATRIISI(LASKE.A(A2:A200)))

Tutkitaan miten kaavassa käytetyt funktiot toimivat.

SEQUENCE(n) funktio tuottaa lukujonon 1, 2, …, n alaspäin. Kun soluun A1 kirjoittaa SEQUENCE(n), niin alueelle A1:A10 ilmestyy lukujono 1, 2, …, 10. 

SEQUENCE() on suomeksi JONO() Excelissä.

RANDARRAY(n) tuottaa n-kappaletta satunnaislukuja SEQUENCE-funktion tapaan. Kun soluun B1 kirjoitetaan =RANDARRAY(10), niin taulukkoon ilmestyy 10 satunnaislukua.

RANDARRAY on suomeksi SATUNN.MATRIISI.

SORTBY(alue1; alue2) järjestää solualueen alue1 solualueen alue2 mukaiseen järjestykseen. 

=SORTBY(A1:A10;B1:B10)

SORTBY() on suomeksi LAJITTELE.ARVOJEN.PERUSTEELLA(), aika selkeä käännös :o)

COUNTA(alue) laskee solualueessa alue olevien ei tyhjien solujen lukumäärän. Kuvassa solussa D11 on kaava =COUNTA(D1:D10). Se tuottaa alueella olevien Excelin olioiden lukumäärän.

COUNTA() on suomeksi LASKE.A().

Näillä tiedoilla lopullisen kaavan tuottaminen onkin itsestäänselvää. Luodaan tyhjään taulukkoon 1 riville otsikot nimi ja paikka. Kirjoitetaan (tai sijoitetaan)  nimi-otsikon alle nimiä, tässä versiossa niitä voi kirjoittaa sinne noin 200 kpl. Kun soluun B2 kirjoitetaan kaava =SORTBY(SEQUENCE(COUNTA(A2:A200));RANDARRAY(COUNTA(A2:A200)))
niin sovellus on valmis.

Suomeksi kaava on
=LAJITTELE.ARVOJEN.PERUSTEELLA(JONO(LASKE.A(A2:A200));SATUNN.MATRIISI(LASKE.A(A2:A200)))

Pitänee huomata, että nimissä ei saa olla tyhjiä soluja keskellä. Tällaisessa tilanteessa kaikki oppilaat eivät saa omaa arvoa.

Tämä sovellus toimii vain uusimmissa Excel-versioissa. Käsittääkseni SEQUENCE()-funktio toimii vain Excel for Microsoft 365 ja Excel 2021 -versioissa.

Excel-tiedosto, lataa täältä.
https://mikonfysiikka.files.wordpress.com/2023/03/yo-istumapaikka.xlsx


Boolen logiikkaa GeoGebralla MAA11 kurssille

[9.4.22 korjasin totuustaulukon, lisäsin loppuun kommentin ekvivalenttisuudesta.]

Jokunen aika sitten selvittelin, millaisia komentoja GeoGebra tarjoaa MAA 11-kurssin avuksi (MAA11 kurssin GeoGebra-komentoja). Tutkitaan, miten Boolen logiikka toimii GeoGebrassa. Tapani mukaan teen esimerkit GeoGebra 5:llä. Tätä kirjoittaessa käytössäni on 697-versio. En voi vannoa, että kaikki esimerkit toimivat samoin GeoGebra 6:ssa.

Konnektiivit CASissa

Oheisessa taulukossa on Boolen logiikan konnektiivit ja niiden näppäinoikotiet.

Tutkitaan CASissa niiden toimintaa. Klikkaan lausekkeen kirjoittamisen jälkeen Tarkista lauseke-painikkeeseen, jotta nähdään, miten GeoGebra tulkitsee kirjoittamani lauseen.

Yleisesti lauseiden tutkiminen ei toimi CASissa (joskus toimii joskus ei). Jotta totuuden tutkiminen onnistuu, on muuttujilla oltava totuusarvo.

true =1 ja false=0

GeoGebra tulkitsee totuusarvon true luvuksi 1 ja false nollaksi CASissa ja syöttökentässä (Algebraikkunassa), mutta ei taulukkolaskennassa.

Soluissa 23 ja 24 lasketaan, kuinka monta alkulukua on 100 ensimmäisen luonnollisen luvun joukossa.

Totuustaulut

Usein loogisten lausekkeiden ekvivalenttisuutta tutkitaan totuustauluissa. Mikäli lauseissa on vain 2 tai 3 eri muuttujaa, niin totuustaulukon eri vaihtoehtojen tuottaminen onnistunee helposti käsin. Eri vaihtoehtojahan on 2ˆ(muuttujien lukumäärä).

Teen aluksi yksinkertaisen esimerkin, jossa tutkitaan pitääkö de Morganin sääntö

\neg\left(p\wedge q\right)\Leftrightarrow\left(\neg p\right)\vee\left(\neg q\right)

paikkansa. Kyllähän minä tiedän, että se pitää, mutta todistetaan se näin leikisti.

Kirjoitetaan aluksi otsikot ja totuusarvot taulukkolaskentaan. Kokemuksesta tiedän, että totuusarvoina ei voi käyttää ykkösiä ja nollia. Kun kirjoitan 1. rivin otsikot, niin laitan ne lainausmerkkien sisään, näin varmistan, että GeoGebra varmasti tulkitsee lausekkeen tekstinä. Kirjoitettaessa lauseita, kannattaa avata taulukkolaskennan syöttökenttä vasemman reunan fx-painikkeesta. Erikoismerkit, mukaan lukien loogiset konnektiivit, löytyvät oikean reunan alfa-painikkeen takaa. Taulukkolaskennassa ei kannata käyttää näppäinoikoteitä, ainakin minulla GeoGebra 5:n Mac-versiossa ne eivät toimi loogisesti.

Kirjoitetaan soluihin C2 ja D2 kaavat ja monistetaan alue C2:D2 alaspäin.

Alla lopullinen taulukko, josta nähdään, että kyseinen de Morganin sääntö pätee.

Otavan Juurisarjan Maa11 kirjassa on hankalahko esimerkki 

Ratkaisussa pitää tutkia, millä T:n, E:n ja O:n arvoilla lauseet ¬E→¬T ja (T∨E)→O ja (E∧O) ⇔ ¬T saavat samat totuusarvot. Koska kolmannessa on ekvivalenssinuoli, se pitää kääntää kahdeksi implikaatioksi ((E∧O)→¬T)∧((¬T)->(E∧O)).

Tässä vaiheessa tarvitaan 2^3 = 8 riviä eri totuusvaihtoehtoja. Toki ne pystyy vielä kirjoittamaan käsin, mutta esitän tässä, miten tuon voisi tuottaa semiohjelmallisesti, käyttäisin tätä menetelmää, jos muuttujia olisi neljä tai enemmän. Tuskin sellaista tulee vastaan koulumatematiikassa.

Luodaan lista totuusarvoista

totuus = {}

Kaikki kahdeksan eri totuusarvokolmikkolistaa tuotetaan komennolla (tämän tekemiseen kului muutama minuutti). 

l1 = Jono(Jono(Jono({{Alkio(totuus, c), Alkio(totuus, b), Alkio(totuus, a)}}, a, 1, 2), b, 1, 2), c, 1, 2)

Kolme sisäkkäistä jonokomentoa tuottaa periaattessa 2x2x2 taulukon/matriisin.

l1 = {{{{{true, true, true}}, {{true, true, false}}}, {{{true, false, true}}, {{true, false, false}}}}, {{{{false, true, true}}, {{false, true, false}}}, {{{false, false, true}}, {{false, false, false}}}}} 

Muodostetaan l1:stä lista l2, jossa ei ole ollenkaan listoja jäseninä vaan pelkkiä totuusarvoja Tiivistä-komennolla.

l2 = Tiivistä(l1) 
l2 = {true, true, true, true, true, false, true, false, true, true, false, false, false, true, true, false, true, false, false, false, true, false, false, false} 

Listasta l2 on helppo poimia totuusarvoja taulukkolaskentaan. Luodaan taulukkolaskentaan otsikkorivi ja A-sarakkeelle totuustaulukon järjestysnumero.

Soluun B2 kaava 

=Alkio(l2, (A2 - 1) * 3 + 1)

soluun C2 kaava

=Alkio(l2, (A2 - 1) * 3 + 2)

ja soluun D2 kaava

=Alkio(l2, (A2 - 1) * 3 + 3)

Kun Alue B2:D2 monistetaan alaspäin kahdeksannelle riville saadaan eri totuusarvot muuttujille T E ja O.

Vastaavasti soluihin E2, F2 ja G2 kirjoitetaat kaavat (näiden kirjoittamisessa pitää olla huolellinen).

=(¬C2) → (¬B2) 
=B2 ∨ C2 → D2 
=(C2 ∧ D2 → (¬B2)) ∧ ((¬B2) → C2 ∧ D2)

Monistamalla alaspäin saadaan totuusarvotaulukko valmiiksi.

Lisäsin vielä tarkistuksen vuoksi H-riville kaavan, jossa solussa H2:n kaava on 

=E2 ∧ F2 ∧ G2

Taulukosta nähdään, että alkuperäisen ehdon tuottaa tilanne, jossa T = false, E = true ja O = true.

Lisäys/korjaus edelliseen ratkaisuun.

Vasta julkaisun jälkeen tajusin, että tuo == eksvivalenttisuus tarkoittaa ekvivalenttisuutta. Niinpä G2 soluun olisi voinut kirjoittaa

=(C2 ∧ D2) ≟ (¬B2)

Logiikka on vaikeaa :o)


Tämän kirjoittaminen tapahtui koronatautini aikaan, opinpa tautini aikanakin jotain uutta.