Kirjoittaja Aihe: Kysymys matikan ja taulukkolaskennan taitoisille  (Luettu 2769 kertaa)

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Tämän ongelman saa ratkoa matematiikan tai taulukkolaskennan avulla, kumpi vain helpompaa on:

Etsin käyttökelpoista tapaa muuttaa tentin tulospisteet arvosanaksi. Tavoitteena on, ettei lopputulosta tarvitsisi ihmisen enää korjailla.

Tietyllä pistearvovälillä ongelma on triviaali. Yliopistossa hyväksytyn alaraja on yleensä 50 % pisteistä ja ylimmän arvosanan saa (vaihtelevasti) esim. 90 %:lla pisteistä, millä välillä arvosanaskaala saa olla lineaarinen, joten se noudattaa perusyhtälöä y = ax + b.

Ongelmana ovat tuon pistearvovälin ulkopuoliset tapaukset, jotka täytyisi pakottaa skaalaan. Alin arvosana saisi olla 0, ylin on 5, eli kaikki tapaukset 0:sta alaspäin pitäisi pakottaa 0:ksi ja tapaukset 5:sta ylöspäin pakottaa 5:ksi. Käytännössä olen tähän asti yleensä antanut arvosanojen olla laskentataulukossa mitä vain, ja vasta lopputulosliuskaan pakottanut ne välille [0, 5].

Koulumatikasta muistelen, että näissä tapauksissa tarvittiin yhtälöryhmä: y = 0, kun x < a; y = ax + b, kun a <= x <= b; y = 5, kun x > b. En kuitenkaan tiedä, miten tämä toteutetaan taulukkolaskennassa.

Kysymys siis: (a) Onko olemassa jotakin matemaattista keinoa yhdellä yhtälöllä saada tuollainen kulmikas S-käyrä, tai (b) Jollei ole tai keino on jotenkin vaikea, miten yhtälöryhmä toteutetaan taulukkolaskennassa?
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

Tommi S.

  • Käyttäjä
  • Viestejä: 240
    • Profiili
Vs: Kysymys matikan ja taulukkolaskennan taitoisille
« Vastaus #1 : 03.01.11 - klo:13.58 »
Tuota yhtälöryhmää on mielestäni vaikeaa ajatella yhtälöryhmänä, koska se oikeastaan sisältää epäyhtälöitä.

Mutta OpenOfficen taulukkolaskennassa on funktio nimeltä IF, joka ottaa kolme argumenttia, ja jolla ainakin voi tehdä tuollaisia ehdollisia lausekkeita.

IF funktion muoto on tällainen:
IF(ehto; tulos_jos_ehto_tosi; tulos_muussa_tapauksessa)
Pari esimerkkiä:
IF(1=1; 5; 7) antaa soluun arvoksi 5 (sillä 1=1 on tosi)
IF(1=2; 5; 7) antaa soluun arvoksi 7

Jos esim. oppilaan pistemäärä on solussa A1, niin soluun B1 tehdään tuo ax+b kaava
Sitten soluun C1 tehdään kaava =IF(B1<0; 0; B1), jolloin C1 soluun kaikki nollaa pienemmät tulokset ovat vain nollia, ja muut tulokset kopioidaan sellaisenaan.
Lisäksi soluun D1 tehdään kaava =IF(C1>5; 5; C1), jolloin D1 soluun kaikki viitosta suuremmat tulokset ovat vain viitosia, ja muut tulokset kopioidaan sellaisenaan.

Eli tehdään kaksi saraketta joista ensimmäisessä suodatetaan pois nollaa pienemmät arvot, ja toisessa suodatetaan pois viitosta suuremmat arvot. Sitten viimeisessä sarakkeessa voi tehdä vaikka tasalukuun pyöristyksen.

Tässä vielä koko juttu selvennyksenä:
   A   B             C               D
1  12  =A1*(1/3)-4   =IF(B1<0;0;B1)  =IF(C1>5;5;C1)
2  23  =A2*(1/3)-4   =IF(B2<0;0;B2)  =IF(C2>5;5;C2)
2  28  =A3*(1/3)-4   =IF(B3<0;0;B3)  =IF(C3>5;5;C3)


DonJuha

  • Käyttäjä
  • Viestejä: 205
    • Profiili
Vs: Kysymys matikan ja taulukkolaskennan taitoisille
« Vastaus #2 : 03.01.11 - klo:14.37 »
Eikös tuo onnistu, kun rajoittaa min- ja max-funktioilla suoran yhtälön antaman arvosanan? Eli jotain tyyliin: y = max( min(5, ax+b), 0) Syntaksi ei välttämättä ole suoraan openofficen ymmärtämä.

Sunar

  • Käyttäjä
  • Viestejä: 154
    • Profiili
Vs: Kysymys matikan ja taulukkolaskennan taitoisille
« Vastaus #3 : 03.01.11 - klo:14.41 »
Tein pikaisesti taulukon, jossa annetaan tiettyihin soluihin ykkösen ja viitosen rajat. Tämän perusteella lasketaan arvosanarajat. Ykkösen ja viitosen rajat kopioidaan suoraan, kakkosen raja on ykkösen raja + 0,25 * ykkösen ja viitosen rajojen erotus pyöristettynä alaspäin jne. jolloin saadaan tasaiset välit.

Tämän jälkeen tarkastellaan jokaisen opiskelijan pisteitä muutaman sisäkkäisen IF-lauseen avulla. Mikäli solu on tyhjä tai arvosana alittaa ykkösen rajan, annetaan arvosanaksi nolla. Mikäli tämä ehto ei täyty (eli arvosana on vähintään ykkönen), tarkastellaan alittaako pistemäärä kakkosen rajan ja jos alittaa, annetaan arvosanaksi ykkönen. Tätä jatketaan ja mikäli nelosenkaan arvosanaraja ei alitu, annetaan arvosanaksi 5.

Esimerkkitaulukko on liitteenä ja sitä saa käyttää miten huvittaa.

[ylläpito on poistanut liitteen]

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Kysymys matikan ja taulukkolaskennan taitoisille
« Vastaus #4 : 03.01.11 - klo:15.21 »
Nyt on ehtinyt tulla jo muitakin vastauksia, mutta kiitetään ensin tätä:

Tässä vielä koko juttu selvennyksenä:
  A   B             C               D
1  12  =A1*(1/3)-4   =IF(B1<0;0;B1)  =IF(C1>5;5;C1)
2  23  =A2*(1/3)-4   =IF(B2<0;0;B2)  =IF(C2>5;5;C2)
2  28  =A3*(1/3)-4   =IF(B3<0;0;B3)  =IF(C3>5;5;C3)


Jep, tämä ainakin toimii. Pelkäsinkin, että tarvitaan paria apusaraketta.

Sitten...

Eikös tuo onnistu, kun rajoittaa min- ja max-funktioilla suoran yhtälön antaman arvosanan? Eli jotain tyyliin: y = max( min(5, ax+b), 0) Syntaksi ei välttämättä ole suoraan openofficen ymmärtämä.

No ääh, totta kai :P Täytyy vain keksiä, mitä tuo on openofficeksi.

Muoks: ”Proof of concept” tuosta DonJuhan ratkaisusta Pythonilla. Pisteytys: alle 13 p. = hylätty (0); 13...15 p. = 1; 16...18 p. = 2; 19...21 p. = 3; 22...24 p. = 4; 25 tai enemmän p. = 5. (Oli vaikea tentti, täytyi antaa helpolla arvosanoja ::))

Koodia: [Valitse]
>>> def arvosana(p):
return int(max([0, min([5, (p - 13) / 3.0 + 1])]))

>>> for p in range(0, 31):
print('{0} -> {1}'.format(p, arvosana(p)))


0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
10 -> 0
11 -> 0
12 -> 0
13 -> 1
14 -> 1
15 -> 1
16 -> 2
17 -> 2
18 -> 2
19 -> 3
20 -> 3
21 -> 3
22 -> 4
23 -> 4
24 -> 4
25 -> 5
26 -> 5
27 -> 5
28 -> 5
29 -> 5
30 -> 5
« Viimeksi muokattu: 03.01.11 - klo:15.35 kirjoittanut SuperOscar »
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

Tommi S.

  • Käyttäjä
  • Viestejä: 240
    • Profiili
Vs: Kysymys matikan ja taulukkolaskennan taitoisille
« Vastaus #5 : 03.01.11 - klo:16.28 »
Jep, tämä ainakin toimii. Pelkäsinkin, että tarvitaan paria apusaraketta.

Ei niitä apusarakkeita ihan välttämättä tarvita, ne IF-lauseet voisi periaatteessa laittaa sisäkkäin, mutta itse ainakin pilkon kaiken mahdollisen erillisiin soluihin ja sarakkeisiin, sillä siten kaavat on usein helpompi ymmärtää ja muokata, ja apusoluissa näkee miten laskutoimituksen välivaiheet suoritetaan, jolloin mahdolliset bugit kaavojen eri osissa on mahdollista havaita.

Tuo max-min systeemi on OpenOfficessa seuraava:
Solussa A1 on pisteet, solussa B1 on ab+x kaavan tulos, ja solussa C1 on
Koodia: [Valitse]
=MAX( MIN(5; B1) ; 0)Tuonkin voisi tehdä siten että tekee MIN-funktion omassa sarakkeessaan, ja MAX-funktion omassaan. Tuon B1-solun kaavan voi myös suoraan laittaa tuonne MIN-funktion argumentiksi, jos haluaa päästä mahdollisimman vähillä sarakkeilla, mutta se mitä aiemmin sanoin pätee...
« Viimeksi muokattu: 03.01.11 - klo:16.30 kirjoittanut Tommi S. »