Sinun UserID: 0

Palautus viimeistään: ma 9.10 klo 11:00
Katso luennot-sivulta luennot 09 ja 10.

Ilmoittaudu missä ryhmässä (live/zoom/video) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)

  • Please to interact with this component.

    Ma 14-16
  • Please to interact with this component.

    Ma 16-18 (iltaryhmä lopetettu)
  • Please to interact with this component.

    Ma 14-16 Zoomista
  • Please to interact with this component.

    Ma 16-18 Zoomista (iltaryhmä lopetettu)
  • Please to interact with this component.

    Katson demonpalautuksen videolta

Alla demotilanteesi.

  • Pisteet eivät päivity tähän automaattisesti, vaan aina pienellä viiveellä.
  • Värit: Punainen: Minimit ei täyty. Vihreä: vähintään 5p joista 2p tähtitehtävistä.

Ohjelmointi 1, s 2023 / Demo 5

Ohjeet ja palautusten video

Oppimistavoitteet

Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.

# Oppimistavoitteet

Ajankäyttösi tällä viikolla (0.25p) 

Edellisten demojen vastausten korjaaminen E1 (pakollinen)

Video 1 (1 p) 

TDD-pohja

Demot

Tehtäviä voi tehdä suoraan TIMissä, mutta niitä kannattaa jo ruveta tekemään Riderissa, jolloin niitä voi debugata samalla ja etsiä mahdollisia virheitä siitä, miksi silmukka tms ei toimi. Kun vastauksia kopioi Riderista TIMiin, kannattaa olla huolellinen, että kopioi nimenomaan sen osan, mikä TIMiin pitäisi kirjoittaa.

Muista: Jotta konsolisovelluksen tekeminen olisi helpompaa, ota "parempi" template ConsoleMain Jypelin alta.

Samaan solutioniin kannattaa tehdä useampi demotehtävä. Suositus, olisi että tekee 1. tehtävää varten projektin, jolle antaa kuvaavan nimen (esim JonojenLisaily ja sen solutionille nimen demo5). Sitten seuraavaa tehtävää varten klikkaa hiiren oikealla Solution Explorerissa Add/New project ja näin lisää projektin olemassa olevaan solutioniin. Muista taas antaa projekille kuvaava nimi!

Tehtävien nimeämisestä: Älä anna C#-tiedostoille nimiä, jotka eivät ole kuvaavia! Esimerkiksi tehtG1.cs on huono sen kannalta, että tarkoitus on opetella käyttämään nimiä, jotka toimisivat oikeassakin ohjelmassa. Pallopeli.cs on taas paljon parempi (ja muista se luokan nimen suhde tiedoston nimeen).

HUOM! Älä käytä C#:in valmiita luokkakirjastojen nimiä omien luokkien niminä! Esim. tehtävässä 1 älä käytä nimeä StringBuilder omalle luokallesi, projektillesi, solutionillesi tms., sillä se peittää (hides) silloin näkyvistä C#:in oman luokan, ja saat vain virheitä jokaisesta rivistä, jossa lukee StringBuilder. Varminta on siis nimetä omia "juttuja" aina tässä vaiheessa opettelua suomenkielisillä nimillä, jolloin vältät nimikonfliktit C#:in valmiiden nimien kanssa.

Kurssin ydinasian kannalta tärkeät tehtävät: Tauno 1, 1, 2, 3, 4 ja 6.

Vinkki: Askella luentomonisteessa silmukka- ja taulukkoesimerkkejä läpi ja seuraa mitä silmukoissa tapahtuu. Nuo esimerkit ovat toistaiseksi hieman huonosti näkyvillä ja ne hyppäävät esiin, kun vie hiiren niiden päälle. Niitä löytää, kun etsii jonoa "Animaatio:".

Monisteen lisäksi kannattaa lukea:

Kunkin kerran minimipistemäärä 2 on tehtävä käyttäen *-merkittyjä tehtäviä. Esim. pelkkä Ville ja Tauno ei riitä minimimäärään. Jos pakolliset tehtävät eivät lähde luonnistumaan, kannattaa käydä pääteohjauksissa tai Pahasti Pihalla -ryhmissä saamassa apua.

Tauno 1

Huomaa, että nyt Tauno on muuttunut. Et voi enää ottaa mitä tahansa taulukon alkiota, vaan sinun pitää ensin luoda indeksimuuttuja (joka tässä tehtävässä sinulle on luotu valmiiksi). Sitten indeksimuuttuja pitää raahata sen taulukon alkion alle, johon sen halutaan "viittaavan" (tehty valmiiksi 1. kerralla). Vain sellaisen taulukon alkion voit raahata jonnekin, jonka alla sinulla on indeksimuuttuja.

Indeksimuuttujan paikkaa voit vaihtaa raahaamalla sen toisen taulukon alkion alapuolella tai kohdentamalla siihen +1 tai -1 operaatioita.

# Plugin1

Huom! Jos haluat Taunon sijaan tehdä suoraan silmukoita, niin tee sama silmukkakoodi a) ja b) kohtiin.

# lisaaTaulukkoonJuokseva

Kun olet saanut Taunossa koodin toimimaan, kirjoita alle vastaava koodi silmukalla. Aloittelijalla while-silmukka on aluksi helpompi. Ja se on helppo sitten muuttaa for-silmukaksi.

Katso tarvittaessa mallia aikaisempien demojen palautusvideoista Tauno-tehtävän käsittelyn kohdalta.

# lisaaTaulukkoonJuoksevaSilmukka

Yleisiä virheitä, katso onko sinulla

Ville 1

Tee Ville-tehtävät: 4.5, 4.6, 5.1-5.5, 9.1, 9.2, 9.3. Huom! Lue tarkasti kysymykset (montako kertaa, montako tulostetaan). Villen mallissa loppusulkuun } mennään kun silmukka loppuu. Muista Villen käyttöohje.

# villev1

TDD 1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (esim ComTest) Riderissä tai vastaavassa, saat merkitä yhden lisäpisteen. Testit eivät saa olla täsmälleen samoja kuin mitkä saa kopioimalla tehtävien TIM-versiosta. Vastauksena kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa samalla palautetta ja kehitysehdotuksia Comtestin käytöstä.

Taulukon testaaminen ComTestillä:

  /// int[] luvut = {1,3,6};
  /// String.Join(" ",luvut) === "1 3 6";

Jos haluat viedä testiin taulukon "luomatta" sitä apumuuttujaan, niin seuraava auttaa:

  /// SuurinJaPienin.Pienin(new int[]{1, 2 ,3}) === 1;

Valitettavasti 2-ulotteiselle taulukolle ei ole vastaavaa Join-funktiota, vaan sellaisen joutuu tekemään itse. StringBuilderin arvon testaaminen pitää suorittaa ToString()-metodin avulla.

  ///   StringBuilder j1 = new StringBuilder("123");
  ///   Jonoja.LisaaAlkuunJaLoppuun(j1,"XX");
  ///   j1.ToString() === "XX 123 XX";

Tulostavia tai Jypeliin perustuvia aliohjelmia on turhan vaikea vielä nykytietämyksellä testata ComTestillä. Joten niitä ei vaadita testattavaksi. Tyydytään testaamaan funktio-tyylisiä aliohjelmia. Toki myös sellaisia jotka ovat void, mutta muuttavat taulukko tai StringBuilderiä.

# tdd

userid: 0

Tehtävä 1. StringBuilder

M: 12.4 Muokattavat merkkijonot: StringBuilder.
AliohjelmienKutsuminen.cs - katso tämä malliksi siitä, miten StringBuilderin metodeja kutsutaan.

Tee seuraavaan pääohjelmaan tarvittava aliohjelma:

public static void Main()
{
    StringBuilder jono;
    jono = new StringBuilder("kissa istuu");
    LisaaAlkuunJaLoppuun(jono, "***"); // jono muuttuu aliohjelmassa
    Console.WriteLine("Jono on nyt " + jono); 
    // tulostaa: Jono on nyt *** kissa istuu ***
}

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

Oljenkorsi 0

Oljenkorsi 1

Oljenkorsi 2

Oljenkorsi 3

Oljenkorsi 4

# alkuunjaloppuun

Yleisiä virheitä, katso onko sinulla

# suurinpienin

Tehtävä 2*. 3-paikkaisen taulukon suurin ja pienin

M: 15. Taulukot.

Kopioi Demon 4 mallivastauksista tehtävän 5 vastauksesta (SuurinJaPienin.cs) Suurin ja Pienin funktioiden toteutukset. Alla pääohjelma on muutettu käyttämään taulukoita (ks näytä koko koodi).

Sitten pitää muuttaa funktiot niin, että ne käsittelevät 3-paikkaista taulukkoa. Tässä TIMiin palautettavassa tehtävässä tehdään vain tuo aliohjelmien (funktioiden) muutos. Muista aluksi vaihtaa esittelyrivin parametrilista oikeaksi, vertaa luentojen Summa-funktio. Tässä ensimmäisessä taulukkotehtävässäsi saat poikkeuksellisesti olettaa, että taulukossa on TASAN 3 alkiota, jatkossa näin ei saa tehdä.

Ideana tässä on siis suurinpiirtein korvata funktioiden runkokoodissa (ei esittelyrivillä)

 a => luvut[0]
 b => luvut[1]

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

Oljenkorsi 1

# kolmensuurin

Yleisiä virheitä, katso onko sinulla

Tehtävä 3*. Kertotaulu

TODO tulevaisuuteen (syksy 2023): Vaihda järjestys while, for, do-while
Huom jo aloittaneille: tänä vuonna tehdään while ekana,

Pohjamateriaalia tehtävälle:

  • M: 16. Toistorakenteet.
  • Taulukoita.cs - täällä on iso joukko silmukoita ja taulukoita käyttäviä aliohjelmia malliksi (esim TulostaTaulukko ja erityisesti TulostaLuvut).
  • katso luento 11 kooste silmukoista

Tehtävänä on tehdä kolme eri tapaa tuosta kertotaulu. Eli tehdään 3 eri aliohjelmaa, joissa kussakin on erilainen silmukka ks pääohjelma.

Onko tähän vahingossa kirjoitettu luento 11? Sehän tulee vasta ensi viikolla.

VL: Voi tuota luentosivua katsoa etukäteen, siellä on aika hyviä animaatioita. Toinen hyvä on mennä debuggerilla läpi niitä luennon 10 ohjelmia joissa on silmukoita.

03 Oct 23 (edited 03 Oct 23)
  1. Tee aliohjelma, joka tulostaa luvun n kertotaulun while-silmukalla. Esimerkiksi TulostaKertotauluWhile(3) tulostaisi 3:n kertotaulun 10:een asti:

     1 * 3 =   3
     2 * 3 =   6
     3 * 3 =   9
     4 * 3 =  12
     5 * 3 =  15
     6 * 3 =  18
     7 * 3 =  21
     8 * 3 =  24
     9 * 3 =  27
    10 * 3 =  30
  1. Tee vielä toinen aliohjelma, joka tulostaa kokonaisluvun n kertotaulusta m kpl rivejä. Toteutus for-silmukalla. Esimerkiksi TulostaKertotauluFor(3, 5) tulostaisi:

     1 * 3 =   3
     2 * 3 =   6
     3 * 3 =   9
     4 * 3 =  12
     5 * 3 =  15

"Toteutus WHILE-silmukalla. Esimerkiksi TulostaKertotauluFOR(3, 5)" Meneekö tässä logiikkaa jotenkin vinossa? RK: Tehtävänanto on nyt muutettu johdonmukaiseksi niin, että while tehdään ensin ja sitten vasta for.

04 Oct 23 (edited 04 Oct 23)
  1. Tee sama vielä do-while -silmukalla. Mitä TulostaKertotauluDoWhile(6, 0); tulostaa, jos ei tehdä mitään erikoislisäyksiä? Pohdi mitä pitäisi lisätä? Laita tarvittava lisäys kommentteihin, koska pistetarkistus katsoo, että käytössä on "puhdas" do-while.

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

Oljenkorsi 1

Oljenkorsi 2

# kertotaulu

Yleisiä virheitä, katso onko sinulla

Tehtävä 4. Rajan ylittävät

M: 15. Taulukot, 16. Toistorakenteet.

Muista katsoa Tauno-tehtävien palautusvideoita siitä kohti, missä vastauksia muutetaan silmukoiksi (eli kunkin demon sarake Video MP4 tai iltaryhmä).

Olkoon meillä taulukko, joka sisältää int-tyyppisiä kokonaislukuja. Tee aliohjelma TulostaYli(taulukko, raja), joka tulostaa yhdelle riville taulukosta kaikki ne luvut (alkiot), jotka ylittävät annetun rajan eli tietyn luvun (yhtäsuuret eivät ylitä). Tee vastaava funktio SummaYli(taulukko, raja), joka palauttaa rajan ylittävien taulukon lukujen summan. Esimerkiksi pääohjelma

  public static void Main()
  {
      int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
      TulostaYli(luvut, 4);
      int summa = SummaYli(luvut, 4);
      Console.WriteLine("Yli 4 olevien lukujen summa on: " + summa);
  }

tulostaisi

12 5 9 7 9
Yli 4 olevien lukujen summa on: 42

Oljenkorsi 1

# tulostayli

Yleisiä virheitä, katso onko sinulla

Oljenkorsi 2

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

# summayli

Testitiedostoa ei löytynyt, vai koodissa virhe? Muokkasin sitä miten tekstiä printattiin, sama ongelma, mutta max pisteet. Tehtävä 4a) siis.

VL: 4a oli virhe, tulostavia aliohjelmia on vaikea testata kurssin tiedoilla, joten poistin testin.

03 Oct 23 (edited 03 Oct 23)
# tsopulit

Tehtävä 5. Sopulit

Moniulotteiset taulukot. Et tarvitse Rideria/C#:ia tässä tehtävässä. Olkoon meillä 4 x 4 matriisi (siis 2-ulotteinen taulukko):

[ 1 0 1 1 ]
[ 0 1 1 0 ]
[ 1 0 0 0 ]
[ 1 0 0 1 ]

Ykköset kuvaavat tässä "sopuleita", ja nollat ovat tyhjiä paikkoja.

Lisäksi olkoon seuraavanlainen algoritmi:

Jos ruudussa on sopuli (eli alkion arvo on 1)
  * Jos sillä on naapureita (ykkösiä) yksi tai 
    nolla kappaletta, se kuolee yksinäisyyteen 
    (muuttuu nollaksi).
  * Jos sillä on neljä tai enemmän naapureita, 
    se kuolee ylikansoitukseen (muuttuu nollaksi).
  * Sellainen, jolla on täsmälleen kaksi tai kolme 
    naapuria, selviää hengissä.
Jos ruutu on tyhjä (eli arvo on 0)
  * Jos on täsmälleen kolme naapuria, ruutu "herää 
    eloon" (muuttuu ykköseksi).

Jos ruuutu on tyhjä (0), ja sillä on tasan 3 naapuria, herää se eloon. Tarkoitetaanko tässä naapurilla muita tyhjiä (0), vai sopuleita (1)?

VL: 0 ei ole naapuri

08 Oct 23 (edited 08 Oct 23)

Tee yllä olevalle matriisille kolme seuraavaa "generaatiota", eli käy jokainen alkio läpi yllä annettua algoritmia käyttäen. Naapureita ovat sekä pysty-, vaaka- että "vinot" naapurit.

Tee tehtävä kahdella eri tavalla:

  1. Uusi generaatio aina uuteen taulukkoon: Teet uuden tyhjän taulukon ja siihen vastinpaikkaan kuuluvan alkion arvon katsot edellisestä taulukosta em. säännöillä.
  2. Kaikki generaatiot yhdessä taulukossa: Teet muutokset "lähtötaulukossa" vasemmalta oikealle, ylhäältä alas. Kun olet mennyt taulukon läpi, otat siitä "kuvan" (eli kopioit vaiheen tilanteen) ja jatkat sitten samalla taulukolla uudestaan vasemmasta yläkulmasta.

Tuleeko eri tavoilla tehtynä eri tulos? Miksi?

Kopioi alle olevaan laatikkoon alkuperäisen taulukon (sukupolvi) alle kumpaankin eri tapaan kolme uutta samankokoista taulukkoa (sukupolvea). Kirjoita taulukot allekkain. Yhteensä siis 7 taulukkoa.

# sopulit

Tarkista vastauksesi, onko sinulla:

  • ensimmäisen tavan kolmannessa generaatiossa on vain kaksi ykköstä vinosti toisiinsa nähden
  • toisen tavan kolmannessa generaatiossa on 4 ykköstä neliön muotoisessa alueessa

Tehtävä 6. Lukujen kysyminen silmukassa

M: 15. Taulukot, 16. Toistorakenteet.

Kopioi tehtävään 2 kirjoittamasi aliohjelmat pääohjelman alapuolelle. Sitten muuta pääohjelma sellaiseksi, että luvut kysytään silmukassa. Pyri siis aluksi löytämään pääohjelman koodista samanlaisena toistuvat kolme koodin osaa ja korvaa ne silmukalla. Samalla tavalla kuin luennoilla tehtiin Summa-funktiossa.

Tarkista toisen virkkeen numerot, kielioppi.

VL: Muotoilu uudelleen. Jätetty numerot tarpeettomana pois.

07 Oct 23 (edited 08 Oct 23)
# kysyminensilmukassa

Yleisiä virheitä, katso onko sinulla

# liuku

L1. Liukuhihna

Dokumentissa Liukuhihna on hauska robotti. Vastaa siellä oleviin kysymyksiin. Maksimissaan voit tuolta kerätä 2.5 p. Kirjoita alla olevaan tehtävään miltä liukuhihnatehtävä tuntui ja laita itse tehtävän pisteisiin liukuhihnan tuloksesi. Saat tehdä tähän demoon sen tehtävästä osan jota et jo tehnyt aikaisemmissa, kunhan kumpaankin merkkaamasi (demo2 + demo3 + demo4 + demo5) summa on sama kuin Liukuhihnatehtävän pistemäärä.

Huom!. Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!

# tehtavaL1

B1. Lässytystä

M: 12. Merkkijonot.

Tuliko Demo 4 tehtävässä 3 isot kirjaimet huomioitua? Muuta tehtävän 3 vastausta niin, että teet funktioaliohjelman (palauttaa siis merkkijonon), jota kutsutaan seuraavasti:

string tulos = MuutaKirjaimet(jono, 'r', 'l');

Funktio muuttaa sekä isot että pienet kirjaimet (vinkki: Eli kun funktiolle tuodaan esimerkiksi 'r' ja 'l', niin se vaihtaa 'r' -> 'l' ja 'R' -> 'L'.) Funktiota käyttäen voitaisiin vanhan demon ohjelma muuttaa toimaan seuraavasti:

Toittan mitä tanot, mutta en otaa tanoa kirjainta t!
Anna teksti >Seppo tykkää jätskistä.
Tanoit tiit: Teppo tykkää jättkittä.

Ohjelma saadaan siis kahden merkin vaihtamisella toimimaan edellisen kerran tehtävän 3 vastauksena. Tehtävän TIM versiosta tietojen kysely on yksinkertaistamisen vuoksi jätetty pois, koska tarkoituksena on vaan tehdä ja testata tuota funktiota.

# lassytysta

Mikä funktioissani on vikana? Eikö jokainen parametrina viety korvattava kirjain ole korvattu vastaavalla toisella kirjaimella koostaan riippumatta?

VL: Katsoppa mitä se testi sanoo ja mieti miksi.

Miten tuo voi vaihtaa s->t kun pääohjelmassa on "string tulos = MuutaKirjaimet(lause, 'r', 'l');"?

VL: Katso koko koodista niin näet millä sitä siinä testataan. Aja ajaa pääohjelman ja Test testit.

04 Oct 23 (edited 07 Oct 23)

Millä perusteella jos testit läpäisee ja saa 0.5p, niin ajamisesta saa vain 0.15p?

VL: Koska tuloste ei ole haluttu. Funktiot eivät saa tulostaa ellei niin ole erikseen kommentoitu. Myöskään kaikki testit eivät mene enää läpi kun lisäsin niitä.

06 Oct 23 (edited 07 Oct 23)

B2. Pistelaskuri

Alustus

Ota ohjeilla:

kurssin demojen mallivastaukset omaan koneeseesi.

Kopioi sieltä demo4 hakemisto alihakemistoineen johonkin oman koneesi toiseen hakemistoon ja avaa demo4.sln JetBrains Riderilla tai Visual Studiolla.

Kokeile että Pallot-projekti toimii.

Tehtävä

Katso Jypelin ohjeista, miten lisätään pistelaskuri ja sille tapahtuma, kun pisteitä tulee tarpeeksi. Lisää pallopeliin laskuri, joka lisääntyy aina, kun saat "metsästettyä" pallon puolen välin yläpuolella. Kun 10 palloa on saatu poksautettua, lisää tähän joku onnittelu.

# pistelaskuri

G1-3. GameOfLife

Tee konsoli-ohjelma, joka tulostaa vaiheittain tehtävän 5 generaatioita. Täydellisen 3-pisteen merkinnän saat, mikäli tehtävässä on myös automaattiset testit (ComTest tai NUnit) kummankin tapauksen 3:lle generaatiolle. Testaamisen helpottamiseksi tee aliohjelma (funktio), joka palauttaa 2-ulotteisen taulukon merkkijonona.

HUOM! Muutin palautusta niin, että kaikki kopioidaan tähän, myös using yms... Jos olet jo palauttanut, lisää using ja class-jutut.

# gameoflife

PP

PP tehtävät (Pahasti Pihalla) on tarkoitettu niille, joilla on vaikeuksia aivan perusasioissa.

Tarkoitus on että nämä ovat helpompia ja kertaavia tehtäviä, joiden avulla pakollisen viikottaisen 2 pisteen saaminen on mahdollista. PP tehtävät eivät ole tarkoitettu niille, jotka ovat tehneet säännöllisesti 4 tai enemmän tehtäviä/kerta. Tekemällä kaikki PP-tehtävät voit saada enintään 1 pistettä.

PP1

Seuraava pääohjelma laskee ihmisen painoindeksin. Tee tarvittavat aliohjelmat, jotta pääohjelma toimii.

public static void Main()
{
    Console.WriteLine("Ohjelma laskee painoindeksisi.");
    string nimi = KysyNimi();
    Console.WriteLine("Hei " + nimi);
    Console.Write("Syötä pituutesi (m) muodossa x,xx > ");
    double pituus = double.Parse(Console.ReadLine());
    Console.Write("Syötä painosi (kg) > ");
    double paino = double.Parse(Console.ReadLine());
    double indeksi = LaskePainoIndeksi(pituus, paino);
    Console.WriteLine("Painoindeksisi on {0:00.00}", indeksi);
}

Vinkkejä painoindeksin laskemiseen voit katsoa luentomonisteesta

# pp1

PP 2

Kopioi alla oleva ohjelma painamalla ENSIN Näytä koko koodi-nappulaa ja tämän jälkeen Copy-Nappulaa. Korvaa sitten konsoliprojektisi .cs-tiedoston sisältö juuri kopioimallasi sisällöllä. Kun olet tehnyt tehtävän Riderissa, kopioi .cs-tiedoston sisältö alla olevaan tehtävälaatikkoon.

Tehtävänäsi on kutsua annettuja aliohjelmia oikeassa järjestyksessä sopivilla parametreillä, jotta ohjelma tulostaa "Autot lastattu onnistuneesti!". Kiinnitä huomiota erityisesti aliohjelmien paluuarvoihin sekä siihen, missä kohti kutsut mitäkin aliohjelmaa.

# pp2

Omaa tuotantoa

Näihin tehtäviin voit palauttaa jonkin oman kurssin tämän hetken oppimistavoitteita vastaavia tehtäviä. Ei kuitenkaan enää jos vastaavat tehtävät on tehty edellä olevissa tehtävissä.

Nämä on tarkoitettu lähinnä niille, joilla ei ole mahdollisuutta tehdä varsinaisia tehtäviä ajallaan esimerkiksi kertausharjoitusten tai sairauden takia. Yleensä jos tulee ajoissa ennakoitavia esteitä, pitäisi tehdä perustehtäviä tehdä etukäteen.

Nämä arvostellaan manuaalisesti ja opiskelijan pitää ottaa yhteyttä kurssin opettajiin kun toivoo näitä arvosteltavan. Jos tehtävä on liian lähellä mallivastauksia, ei sitä arvostella tai voidaan pyytää muuttamaan vastaustaan erilaiseksi. Samoin jos tehtävä ei liity viikon oppimistavoitteisiin (vertaa esim tähtitehtävät). Luonnollisesti nuo kaksi ohjelmaa eivät saa olla samanlaisia. Laita ohjelman kommentteihin mitä perustehtäviä nämä korvaisivat ja mikä olisi oma peruste millekin pistemäärälle (se voi olla enemmänkin kuin 1p/tehtävä).

# oma1
# oma2

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.