Last active
April 24, 2020 11:02
-
-
Save juvuorin/216cd18f15a9047ff4e9601c2ed583fd to your computer and use it in GitHub Desktop.
koiramainenOhjelmointikisa2020
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//----------Pisteenlaskujärjestelmän koodi alkaa tästä -> | |
//Luodaan taulukko johon tarvittavat kategoriat tallennetaan | |
var categories = []; | |
//funktio jolla selkeytetään kategorian lisäämistä taulukkoon | |
function addCategory(name){ | |
categories.push([name.toString()]); | |
} | |
//funktio jolla lisätään arvosana kategoriataulukkoon kategorian rinnalle | |
function addGrade(categoryName, gradeName){ //funktioon syötetään halutun kategorian nimi sekä arvosanan nimi | |
for (i = 0; i < categories.length; i++){ //käydään kaikki kategoriat läpi järjestyksessä | |
if(categories[i][0] == categoryName.toString()){ //tarkistetaan onko läpikäytävä kategoria oikea | |
categories[i].push([gradeName.toString()]); //mikäli kategoria on oikea, lisätään sen alle arvosana -muuttuja | |
} | |
} | |
} | |
//funktio jolla asetetaan arvosanalle numeerinen arvo | |
function setGrade(gradeName, gradeValue){ //funktioon syötetään arvosanan nimi ja sille asetettava numeerinen arvo | |
for (i = 0; i < categories.length; i++){ //käydään jälleen kategoriat läpi | |
for(a = 0; a < categories[i].length; a++){ //käydään kategorian sisältämät arvosanat läpi | |
if(categories[i][a][0] == gradeName.toString()){ //tarkistetaan löytyikö tarvittava arvosana | |
categories[i][a][1] = gradeValue; //kun haluttu arvosana löytyy, asetetaan sille numeerinen arvo | |
} | |
} | |
} | |
} | |
//funktio jolla haetaan halutun kategorian yhteispistemäärä | |
function getCategoryGrade(categoryName) { //funktioon syötetään vain halutun kategorian nimi | |
var finalScore = 0; //luodaan muuttuja johon yhteispisteet tallennetaan | |
for (i = 0; i < categories.length; i++){ //jälleen käydään kategoriat läpi | |
if(categories[i][0] == categoryName.toString()){ //tarkistetaan löytyikö haluttu kategoria | |
for(a = 1; a < categories[i].length; a++){ //mikäli oikea kategoria löytyi, käydään sen kaikkien arvosanojen arvot läpi. läpikäyminen aloitetaan taulukon kohdasta 1, koska 0 on varattu arvosanan nimelle | |
finalScore = finalScore + categories[i][a][1]; //lasketaan finalScore -muuttujan arvon ja arvosanan arvon summa ja asetetaan se uudeksi finalScore arvoksi | |
} | |
} | |
} | |
return finalScore; //kun arvosanat on laskettu yhteen, palautetaan finalScore arvo | |
} | |
//**EXTRA** vaikka tehtävänannossa ei pyydetty kuin kategoriakohtainen arvosana, muokkasin getCategoryGrade -funktiosta getGrade funktion, jolla voidaan hakea yksittäinen arvosana tarvittaessa | |
function getGrade(gradeName) { //funktioon syötetään vain halutun arvosanan nimi | |
var gradeScore = 0; //palautettavan arvon muuttuja | |
for (i = 0; i < categories.length; i++){ //käydään kategoriat läpi taas | |
for(a = 1; a < categories[i].length; a++){ //käydään kategorian sisältämät arvosanat läpi | |
if(categories[i][a][0] == gradeName.toString()){ //tarkistetaan löytyikö haettava arvosana | |
gradeScore = categories[i][a][1]; //mikäli löytyi, asetetaan se gradeScoren arvoksi | |
} | |
} | |
} | |
return gradeScore; //palautetaan halutun arvosanan numeerinen arvo | |
} | |
//-----------Pisteenlaskujärjestelmän koodi päättyy tähän | |
//-----------Esimerkki järjestelmän käytöstä, järjestelmä on hyvin skaalautuva, joten käyttöliittymän luominen ja arvioitavien kohteiden säätäminen tarvittaessa on helppoa | |
//Luodaan kategoriat ja niiden sisältämät arvioitavat kohteet (arvosanat) | |
addCategory("metsastys"); //Luodaan kategoria nimellä "metsastys" | |
addGrade("metsastys", "pupun jaljestys"); //Lisätään metsastys kategoriaan arvoitava kohde "pupun jaljestys" | |
addGrade("metsastys", "hirven jaljestys"); | |
addGrade("metsastys", "linnun noutaminen"); | |
addCategory("pihatyot"); | |
addGrade("pihatyot", "lumen pollyytys"); | |
addGrade("pihatyot", "kukkapenkkien kaivaminen"); | |
addCategory("muut"); | |
addGrade("muut", "parvekkeen vahtiminen"); | |
addGrade("muut", "piilotetun luun loytaminen"); | |
addGrade("muut", "oman hannan jahtaaminen"); | |
addGrade("muut", "kuun ulvonta"); | |
//asetetaan arvosanoille numeeriset arvot. Tätä varten voi myös luoda käyttöliittymän esim. lomakkeen muodossa. | |
setGrade("pupun jaljestys", 5); | |
setGrade("hirven jaljestys", 8); | |
setGrade("linnun noutaminen", 7); | |
setGrade("lumen pollyytys", 5); | |
setGrade("kukkapenkkien kaivaminen", 9); | |
setGrade("parvekkeen vahtiminen", 4); | |
setGrade("piilotetun luun loytaminen", 7); | |
setGrade("oman hannan jahtaaminen", 6); | |
setGrade("kuun ulvonta", 8); | |
//kirjoitetaan lopputulokset selkeästi nähtäväksi | |
document.write("Metsästys: " + getCategoryGrade("metsastys") +"<br>"); | |
document.write("Pihatyöt: " + getCategoryGrade("pihatyot") +"<br>"); | |
document.write("Muut: " + getCategoryGrade("muut") +"<br>"); | |
//Pisteenlaskujärjestelä on toteutettu funktioilla, jotta se skaalautuisi hyvin käyttötarpeen mukaan. Tiedot tallennetaan taulukkoon, jotta niiden käsittely helpottuisi. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tässä on näppärä rajapinta-ajatteluun perustuva ratkaisu. Ajatuksena on tarjota käyttäjälle rajapinta, jonka avulla ongelma ratkeaa. addGrade ja setGrade ja getCategoryGrade funktiot muodostavat rajapinnan ja lisäksi tarjotaan funktio getGrade, joka selvittää tietyn oppiaineen arvosanan.
Kehitysajatus
For-loopit toimivat hyvin, mutta koodi on paikka paikoin virhealtista, esimerkiksi if(categories[i][a][0] kohdassa on helppo tehdä virhe esim. laittamalla a ja i väärin päin. Toisaalta moniulotteisten taulukoiden läpikäynti ja käsittelytaito on tärkeä taito, mistä tekijälle täydet pisteet.
Tsemppiä ohjelmointihommiin!