Skip to content

Instantly share code, notes, and snippets.

@juvuorin
Last active April 24, 2020 11:02
Show Gist options
  • Save juvuorin/216cd18f15a9047ff4e9601c2ed583fd to your computer and use it in GitHub Desktop.
Save juvuorin/216cd18f15a9047ff4e9601c2ed583fd to your computer and use it in GitHub Desktop.
koiramainenOhjelmointikisa2020
//----------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.
@juvuorin
Copy link
Author

juvuorin commented Apr 24, 2020

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment