Demo 6

Palauta viimeistään ma klo 11:59.

# ajankaytto

Ajankäyttösi tällä viikolla (0.5 p.)

Tästä eteenpäin työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.

Demokerran päätteeksi kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit.

# d6tunnit

Osaamistavoitteet

Tämän demokerran päätteeksi

  • Osaat kirjoittaa funktion esittelyrivin funktiokutsun perusteella
  • Osaat käyttää silmukoita ja taulukoita
  • Osaat "kulkea" silmukan avulla taulukon läpi
  • Muistat, että double-lukuja ei voi vertailla luotettavasti == -operaattorilla

Harjoittelutehtävät

Testaaminen

ComTestin asennus

Kaikki tehtävät, joissa on Test-nappi, tulee testata. ComTest testeissä voit käyttää pohjana seuraavaa:

/// <example>
/// <pre name="test">
/// KIRJOITA TESTIT TÄHÄN VÄLIIN
/// </pre>
/// </example>

Muista käyttää double-tyyppisten arvojen testaamisessa kolmea matomerkkiä (~~~) yhtäsuuruusmerkkien sijaan. Tarvittaessa voit Comtestien yhteydessä muuttaa testin tarkkuutta seuraavasti:

 The default tolerance is by six digits and it can be changed by #TOLERANCE:

/// #TOLERANCE=0.01
/// double d = 0.101; 
/// d ~~~ 0.1;

Puuttuuko tuosta #TOLERANCE =0.01 takaa ; ?

Tuossa kohtaa puolipistettä ei itse asiassa tarvita. -AJL

VL: Eikä edes saa olla, koska kyseessä ei ole C#-kieltä tuossa kohtaa vaan ohje ComTestille.

Jännittävää, minulla testit ei toiminut, ennen kuin lisäsin tuon puolipisteen, ehkä tein samalla jotain muita muutoksia.. > Mutta en saa siis sitä virhettä enää poistamalla ; eli joku muu siinä kusi!

20 Feb 21 (edited 22 Feb 21)

PP

PP-tehtävät saa tehdä vain perjantain pp-ohjauksissa. Tämän viikon pp-ohjaus perjantaina 19.2. klo 14:15-16:00 Teamsissa PP-kanavalla.

Tehtävä 1*

Lue: Aliohjelmien kirjoittaminen

Tee seuraavia funktiokutsuja vastaavat funktioiden esittelyrivit ja lyhyimmät mahdolliset toteutukset, jotta ohjelma kääntyy. Näin ohjelmasta saadaan syntaktisesti toimiva, mutta sen ei tarvitse toimia loogisesti oikein. Muista kirjoittaa myös dokumentaatiot: niiden tekeminen onnistuu, vaikka ohjelma ei vielä toimikaan loogisesti oikein.

Pisteiden saamiseksi funktioiden esittelyrivit pitää olla kirjoitettu oikein, funktion pitää palauttaa oikean tyyppinen arvo ja funktio pitää olla dokumentoitu asianmukaisesti. Kustakin kohdasta a-e saa 0.2 pistettä.

Esimerkki (älä kopioi tätä):

Tällainen vastaava pätkä annetaan tehtävässä valmiina:

/// <summary>Funktiokutsu ja apumuuttuja</summary>
/// <param name="args">Ei käytössä</param>
public static void Main(string[] args)
{
  String lyhyempi = LyhyempiJono("Matti", "Pertti"); 
}

Alla olevaa vastaava koodi pitää itse kirjoittaa.

/// <summary>
/// Palauttaa kahdesta merkkijonosta lyhyemmän.
/// </summary>
/// <param name="s1">Ensimmäinen jono</param>
/// <param name="s2">Toinen jono</param>
/// <returns>Lyhyempi jonoista</returns>
public static String LyhyempiJono(String s1, String s2)
{
    return s1;
}

Vinkki: a-kohdassa toteutus on pelkkä return false (false on bool-tyyppinen arvo).

# esittely_a

Onko dokumentointi vastaukseni riittävä? En oikein tiedä mitä siihen kirjoittaa kun en tarkalleen teidä mitä aliohjelman olisi tarkoitus tehdä. Kirjoita siihen se tulkinta, jonka voit tehdä lukemalla koodia. Funktion nimen, sekä annettujen argumenttien perusteella voi tehdä johtopäätöksiä. -AJL

16 Feb 21 (edited 16 Feb 21)
# esittely_b
# esittely_c

Huomaa, että d-kohdassa ei todella tarvitse laittaa lukuja palautettavan double-taulukon sisällöksi. Tyhjä double-taulukko riittää paluuarvoksi.

# esittely_d
# esittely_e

Miksi ohjeissa lukee, että tyhjä double taulukko riittää paluuarvoksi. Tarkoitus on kuitenkin palauttaa aliohjelmasta arvo double muuttujaan. Doubleen ei voi sijoittaa double[] taulukkoa? vai olenko ymmärtänyt jotain väärin?

Tuo ohje viittaa ylempään kohtaan. Siirrän sen parempaan paikkaan. Kiitos huomautuksesta. -AJL

16 Feb 21 (edited 16 Feb 21)

Tehtävä 2*

M: 13. Ehtolauseet, M: 9. Aliohjelman paluuarvo

Kirjoita funktio Itseisarvo, jota voi kutsua seuraavasti.

double lukuEiNegatiivisena = Itseisarvo(luku);

Funktion tulee palauttaa annetun luvun itseisarvon, eli parametrina annettu luku positiivisena (tai nollana).

Math.Abs-funktiota, tai mitään muutakaan valmista funktiota ei saa käyttää.

Aloita kirjoittamalla funktioon testit (ks. tämän sivun yläreuna kohta Testaaminen).

Arviointi: Tehtävässä saa kääntyvästä ohjelmasta 0.1 p. + testien tekemisestä ja niiden läpäisemisestä + 0.5 p. + oikeasta tulostuksesta 0.4 p. Tehtävässä on automaattinen arviointi.

# itseisarvo

En oikein ymmärrä tätä testaamisen syntaksia. Nuo testaamiseen liittyvät lauseethan ovat /// merkkien jälkeen, eli siis kommentoitu pois koodista. Miten testaaminen eroaa esimerkiksi siitä, että ajan ohjelman eri arvoilla ja katson mitä tuloksia se antaa?

VL: Niiden kommenttien kohdalla olevasta tuotetaan erillistä koodia NUnit, joka sitten ajetaan ja joka kokeilee että koodi jota testataan toimii. Jos teet tuota “manuaalisesti”, et jaksa jokaisen muutoksen jälkeen kokeilla kaikkia mahdollisia arvoja ja et varmasti dokumentoi ulkopuolisille millä arvoilla kokeilit jotta ne sen kokeilut voidaan toistaa. Kyseessä on nimenomaan dokumentointi ja toistettavuus. Toki ideoita siihen saa tuolla mainitsemillasi “minä kokeilin näillä ja toimi”. Mutta se pitää saada kaikkien toistettavaksi. Virallinen tapa tehdä tätä on kirjoittaa sitä NUnit-koodia, mutta se kirjoitetaan eri tiedostoon ja vaikeammalla syntaksilla eikä kokeilujen mukaan sovi tämän tason kurssille. Noiden kommenttien ansiosta vastaava koodia saahan siihen yhteyteen missä se tarvitaan. Pyydä luennolla opettajaa näyttämään millainen koodi noista kommenteista syntyy.

Juuri näin kuin Vesa sanoi. Asiaa käsiteltiin esimerkiksi luennolla 7, ks. https://youtu.be/pwG_ZmYB_oE?t=2269. -AJL

17 Feb 21 (edited 17 Feb 21)

Tehtävä 3

Kirjoita funktio Etaisyys, jota voidaan kutsua seuraavasti.

double a, b;
a = 3.2; // Nämä ovat esimerkkilukuja.
b = 8.5; // Luonnollisesti nämä voisivat olla muitakin lukuja. 
double etaisyys = Etaisyys(a, b);

...ja joka palauttaa kahden luvun välisen etäisyyden. Esimerkiksi Etaisyys(3.2, 8.5) on likimain 5.3, kuten luonnollisesti myös Etaisyys(8.5, 3.2). Edelleen, Etaisyys(-1, 1) on 2. Voit hyödyntää edellisessä tehtävässä luomaasi Itseisarvo-funktiota.

Muista, että ComTestissä double-lukujen yhtäsuuruutta vertaillaan kolmella matomerkillä (~~~).

Arviointi: Tehtävässä saa sen ajamisesta 0.1 p. + testien tekemisestä ja niiden läpäisemisestä + 0.5 p. + oikeasta tulostuksesta 0.3 p. + dokumentaatiosta 0.1 p. Tehtävässä on automaattinen arviointi.

# etaisyys

Mitenkäs noissa testeissä tuon desimaalin tarkkuuden sai määriteltyä oikein, kun mulla tuo ajo antaa ihan oikean tuloksen mutta testit epäonnistuvat desimaalitarkkuuden vuoksi. Olen koettanut liittää tuon demojen alkupäässä mainitun /// #TOLERANCE=0.01 /// double Etaisyys = 0.101; /// Etaisyys ~~~ 0.1; pätkän testeihin mukaan, mutta testaus herjaa “Method name expected”

Taisitkin huomata tämän, että #TOLERANCE kirjoitetaan ComTest-alueelle. Tarkensin ohjetta tuolta osin. -AJL

18 Feb 21 (edited 18 Feb 21)
# miidi

Tehtävä 4-5

Tämä on poikkeuksellisesti kahden pisteen arvoinen tehtävä.

M: 16. Toistorakenteet, 15. Taulukot

Tilastotieteessä käytetään useita erilaisia keskilukuja, kuten keskiarvo, mediaani ja moodi. Yksi lisää voisi olla keskiarvoa lähinnä oleva joukon alkio, josta tässä käytetään nimitystä miidi - tällaista keskilukua ei siis oikeasti ole olemassa. Esimerkiksi taulukon {1, 2, 3, 2, 5} keskiarvo on 2.6, joten tämän taulukon alkioista luku 3 on kaikkein lähimpänä tätä keskiarvoa. Toisin sanoen luvun 3 "etäisyys" keskiarvosta 2.6 on kaikkein pienin.

Tee Miidi-niminen funktio, joka palauttaa reaalilukutaulukon lukujen miidin, eli sen alkion joka on lähimpänä taulukon keskiarvoa. Mikäli taulukossa on useita alkioita jotka ovat yhtä lähellä keskiarvoa, funktion tulee palauttaa ensimmäinen näistä.

Et valitettavasti voi käyttää hyväksesi (eli kutsua) luentojen Summa-funktiota (koska se oli int-taulukolle), vaan joudut kopioimaan sen ja muuttamaan taulukon tyypin. Aloita kuitenkin tekemällä tuo reaalilukutaulukon keskiarvon laskeva funktio. Voit testata vaikka aineistolla:

double[] luvut = {1, 2, 3, 2, 5}; // keskiarvo == 2.6
double m1 = Miidi(luvut);              // 3
double m2 = Miidi(new double[] {1});   // 1
double m3 = Miidi(new double[] {3, 3});// 3
double m4 = Miidi(new double[] {});    // 0
// tulosta m1-m4

Vinkki 1: Lähimmän etsimiseksi unohda aluksi koko C# ja tee kynällä ja paperilla vastaava tehtävä ja mieti vaiheittain mitä joudut tekemään ja mitä "apumuuttujia" käyttämään. Ajattele niin, että joku näyttää sinulle yksi kerrallaan yhtä lukua, et tiedä tulevia etkä muistele menneitä, joten sinun täytyy "pitää muistissa" tietoa siitä, mikä on tähän mennessä lähinnä etsittävää lukua.

Vinkki 2: Tehtävän ratkaisuun on muutamia eri tapoja. Voit lähteä seuraavasta: Tee (ellet jo tehnyt) funktiot Itseisarvo, Etaisyys, Summa, Keskiarvo, ja vasta viimeisenä funktio Miidi, joka hyödyntää edellä mainittuja funktioita.

Arviointi: Tehtävässä saa kääntyvästä ohjelmasta 0.2 p. + kattavasta testaamisesta + 1.1 p. + oikeasta tulostuksesta 0.7 p. Ellei TIM anna täysiä pisteitä, voit tarvittaessa antaa itsellesi Custom Pointsit oikein tehdyistä apufunktioista seuraavasti: Itseisarvo 0.2 p., Etäisyys 0.2 p., Summa 0.2 p., Keskiarvo 0.2 p.

# miidijaetsilahin

Miten voin testata taulukon keskiarvoa comtestilla?

VL: vähän noin kuten olet tehnytkin, mutta parametrina pitää viedä taulukko, ei yksittäisiä lukuja. Ks: ComTest examples

20 Feb 21 (edited 20 Feb 21)

Tein tätä tehtävää todella monta tuntia, pähkäilimme myös yhdessä kurssitovereiden kanssa ja saimme perjantaina ohjausta. En silti ymmärrä mikä testeissä mättää ja timi ei täysiä pisteitä anna…

VL: Tuolla tavalla

Summa({2,2,3,4,1,4}) === 16;

ei valitettavasti voi testat taulukoita. Ks ComTestin esimerkeistä kuinka taulukkoja testataan.

21 Feb 21 (edited 21 Feb 21)
# euklidinenetaisyys

Tehtävä 6

M: 9. Aliohjelman paluuarvo.

Pythagoraan lauseen avulla voidaan laskea 2-ulotteisella tasolla olevan kahden pisteen välisen etäisyys. Esimerkiksi tavallinen paperiarkki on 2-ulotteinen taso.

Tee funktio Etaisyys, jonka esittelyrivi on seuraava:

public static double Etaisyys(double x1, double y1, double x2, double y2)

Tämä funktio palauttaa kahden pisteen p1 ja p2 välisen etäisyyden, jossa piste p1 muodostuu koordinaateista (x1, y1) ja p2 koordinaateista (x2, y2).

Arviointi: Tehtävässä saa sen ajamisesta 0.1 p. + testien läpäisemisestä + 0.5 p. + oikeasta tulostuksesta 0.3 p. + dokumentaatiosta 0.1 p.

Kannattaa rajoittaa Comtest-testeissä liukulukujen vertailutarkkuutta käyttämällä TOLERANCE-ominaisuutta, ks. kohta Testaaminen.

# euklidinenetaisyys

Compile error Microsoft (R) Visual C# Compiler version 3.6.0-4.20224.5 (ec77c100) Copyright (C) Microsoft Corporation. All rights reserved.

error CS2001: Source file ‘/home/agent/MittauksiaTest.cs’ could not be found.001 using System;

Onkohan mika ongelmana, testauksen aikana tulee?

Tässä tehtävässä testit tulee kirjoittaa itse -Jussi

27 Feb 21 (edited 27 Feb 21)

Tehtävä 7

(Jos jäät jumiin tähän tehtävään, niin kannattaa tehdä ensin noita aikaisempia tehtäviä, sillä niiden tekeminen saattaa helpottaa myös tämän tehtävän tekemistä.)

M: 13. Ehtolauseet.

Taustaa: Reaalilukuja ei harvoja erikoistilanteita lukuun ottamatta saa verrata == -operaattorilla. Tehdään seuraavaksi kaksi funktiota, joilla verrataan, ovatko reaaliluvut enintään jonkin annetun välimatkan päässä toisistaan. Näin voidaan todeta ovatko kaksi lukua samat jollain tietyllä tarkkuudella (toleranssilla) mitattuna. Esimerkiksi luvut 7.15 ja 7.20 ovat samat, jos toleranssiksi annetaan 0.1, koska lukujen 7.20 ja 7.15 etäisyys on 0.05, ja luku 0.05 on pienempi kuin 0.1.

Tehtävä: Kirjoita reaalilukujen yhtäsuuruusvertailun avuksi kaksi versiota funktiosta Samat. Samat–funktion ideana on siis se, että jos kaksi lukua ovat "riittävän" lähellä toisiaan, palautetaan true, muuten false. Näitä funktioita voisi kutsua esimerkiksi seuraavasti.

double a = 7.1001;
double b = 7.1002;
double c = 7.2002;
bool lahella = Samat(a, b, 0.01);
if (lahella)            Console.WriteLine("Ovat melkein samoja");
if (!Samat(a, b))       Console.WriteLine("Ovat eri suuria");
if (!Samat(a, c, 0.01)) Console.WriteLine("Ovat eri suuria");
if (Samat(a, c, 0.2))   Console.WriteLine("Ovat sinnepäin");

Funktio palauttaa true tai false sen mukaan, ovatko annetut luvut (kaksi ensimmäistä parametria) enintään annetun toleranssin (kolmas parameri) päässä toisistaan. Jos kolmatta parametria ei anneta, silloin käytetään tarkkuutena vakiota 0.00001.

Yllä olevassa esimerkissä "riittävän lähellä" on 0.01 ja 0.2. Huomaa, että toinen kutsu on vähemmillä parametreillä kuin muut (kuormitettu funktio, function overloading). Tee aina ensin funktio sellaiseksi, että se ovat syntaktisesti oikein, mutta ei vielä tee mitään järkevää. Esimerkiksi, tee yllä oleva funktio ensin alla olevaan muotoon.

public static bool Samat(double a, double b, double eps)
{
  return false;
}

Sitten aja ohjelma ja totea se syntaktisesti oikeaksi. Tämän jälkeen pienillä muutoksilla tee siitä kunnolla toimiva. Jos käytät Visual Studion Auto Method Stub-toimintoa, niin huomaa, että parametrien nimet eivät oletuksena ole välttämättä lainkaan kuvaavia.

Arviointi: Tehtävässä saa testien tekemisestä ja niiden läpäisemisestä + 0.55 p. + oikeasta tulostuksesta 0.35 p. + dokumentaatiosta 0.1 p.

# samat

(Valinnaista lisätietoa: Funktion kuormittamisen voit vaihtoehtoisesti C#:ssa hoitaa myös ns. oletusparametreillä, eng. default parameters. Jos haluat käyttää oletusparametreja tässä tehtävässä, kirjoita eps-parametri muotoon double eps=0.00001.)

V1

Tee Ville-tehtävät: 5.6-5.8, 9.4-9.6. Muista: Villen käyttöohje

# villev1

TDD1

Jos tarkistat vähintään kahden funktion toiminnan ComTestillä, saat merkitä yhden lisäpisteen. Kirjoita alle olevaan vastauslaatikkoon minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa samalla vastauksen kautta palautetta ja kehitysehdotuksia Comtestin käytöstä.

# tdd1

B1

M: 9. Aliohjelman paluuarvo. Tee funktio

Skaalaa(double luku, double min, double max)

joka skaalaa välillä [0, 1] olevan luvun välille [min, max]. Esimerkkejä:

Skaalaa(0.2, -3, 3) ~~~ -1.8;
Skaalaa(0.2, 1, 6)  ~~~ 2.0;
Skaalaa(0.0, 1, 6)  ~~~ 1.0;
Skaalaa(1.0, 1, 6)  ~~~ 6.0;

Eli esimerkiksi ensimmäinen testitapaus tarkoittaa että välin \([0, 1]\) luku \(0.2\) on omaan väliinsä nähden samassa suhteessa kuin luku \(-1.8\) on väliin \([-3, 3]\).
Piirrä vaikka molemmat välit ja ko. luvut oman välinsä sisälle.

Vinkki: jos sinulla on luku väliltä \([0, 1]\) ja haluat saada siitä luvun välille \([a, b]\), niin mieti mitä pitää tehdä jotta \(0\):sta tulisi \(a\) ja \(1\):stä b. (eli \(f(x) = a + (b-a)*x\)).

Perustelu: Edellä vinkissä on väli \([0, 1]\) esimerkkinä, koska ohjelmointikielten tyypillinen satunnaislukugeneraattori tuottaa lukuja puoliavoimelle välille ja jatkossa meillä on tälle Skaalaa-funktiolle käyttöä nimenomaan tuottamaan satunnaisia lukuja muillekin väleille. Tosin onneksi esim. Jypelissä tämä on valmiina. Pyöristysten kanssa on nimittäin oltava tarkkana :-)

Arviointi: Tehtävässä saa sen ajamisesta 0.1 p. + testien tekemisestä ja niiden läpäisemisestä + 0.5 p. + oikeasta tulostuksesta 0.3 p. + dokumentaatiosta 0.1 p.

# skaalaa

B2

M: 15.5 Moniulotteiset taulukot:

Tee funktio, joka etsii 2-ulotteisen reaalilukutaulukon suurimman alkion. Käyttöesimerkki:

public static void Main(String[] args) 
{
  double[,] mat1 = {{1, 2, 3}, {2, 2, 2}, {4, 2, 3}};
  double[,] mat2 = {{9, 2, 8}, {1, 2, 5}, {3, 19, -3}};
  double suurin1 = Suurin(mat1);
  double suurin2 = Suurin(mat2);        
}

Arviointi: Tehtävässä saa sen ajamisesta 0.1 p. + testien tekemisestä ja niiden läpäisemisestä + 0.5 p. + oikeasta tulostuksesta 0.3 p. + dokumentaatiosta 0.1 p.

# matriisinsuurin

B3

M: 13. Ehtolauseet

Aikaisemmassa tehtävässä vertailtiin lukujen absoluuttista suuruutta. Kuitenkin esimerkiksi 1000 ja 1100 ovat samoja 10% tarkkuudella, mutta eivät 0.1:n tarkkuudella.

Usein voikin jolla järkevä puhua suhteellisesta yhtäsuuruudesta 'absoluuttisen' yhtäsuuruuden sijaan.

Kirjoita funktio SuhtSamat.

  • Parametrit:
    • Ensimmäinen verrattava luku (luku a)
    • Toinen verrattava luku (luku b)
    • Suhteellinen osuus väliltä 0-1 suuremmasta luvusta. Esimerkiksi suhteellinen osuus 0.5 tarkoittaa siis 50% siitä luvusta joka on suurempi luvuista a ja b
  • Paluuarvo:
    • Funktio palauttaa true mikäli pienempi luku on enintään suhteellisen osuuden määräämän etäisyyden päässä suuremmasta luvusta. Funktio palauttaa false mikäli pienempi luku on enemmän kuin suhteellisen osuuden määräämän etäisyyden päässä suuremmasta luvusta.

Esimerkiksi:

SuhtSamat(0.10, 0.12, 0.1) === false
SuhtSamat(0.10, 0.11, 0.1) === true
SuhtSamat(1.0, 1.2, 0.1)   === false
SuhtSamat(1.0, 1.1, 0.1)   === true
SuhtSamat(10, 12, 0.1)     === false
SuhtSamat(10, 11, 0.1)     === true
SuhtSamat(1000, 1200, 0.1) === false
SuhtSamat(1000, 1100, 0.1) === true

Arviointi: Tehtävässä saa sen ajamisesta 0.1 p. + testien tekemisestä ja niiden läpäisemisestä 0.5 p. + oikeasta tulostuksesta 0.3 p. + dokumentaatiosta 0.1 p.

# suhtsamat

Ohjelma kääntyy, mutta testi kyykkää. What´s the problem?

VL: Sen testin on oltava kiinni siinä testattavassa funktiossa. Eli siirrä se EPS esittely ennen testikommentteja.

22 Feb 21 (edited 22 Feb 21)

B4

  1. Ota edellisen demokerran Sopulit-tehtävä

  2. ja tee siitä graafinen versio, jossa on paljon ruutuja (suuruusluokkaa 60 y-suunnassa) ja sukupolvia lasketaan 0.1 sekunnin välein.

  3. Luo uusi FysiikkaPeli (PerusPelikin käy aivan hyvin, siinä ei ole fysiikka eikä sitä tässä tarvita) ja kopioi luokkaan seuraava koodi.

  4. Liitä projektiin tuo Sopulit.cs ja käytä sitä sukupolvi-taulukoiden päivittämiseen.

  5. Täydennä aliohjelmat (ja metodit) niin, että ohjelma toimii kohdan 1. mukaisesti.

Projektiin liittäminen (kohta 3):

  • kopioi tiedosto samaan paikkaan kuin projektin muut .cs tiedostot
  • Solution Explorerissa paina hiiren oikeata projektin nimen päällä
  • Add -> Existing Item
  • valitse lisättävä tiedosto Add
  • lisää omaan .cs-tiedostoon alkuun (tässä esimerkissä)
using Demo5;

tällöin kääntäjä tietää että esim kutsut:

Sopulit.Arvo(sukupolvi, 0, 1);
Demo5.Sopulit.Arvo(sukupolvi, 0, 1);

ovat samoja.

Koodipohjaa uudelle pelille:

# d6sopulit

G1

Täydennä GameOfLife (ks. B4) siten, että voit Delete napista tyhjentää kentän ja sitten hiirellä klikkailla päälle ja pois ruutuja. Hiiren klikkaus pysäyttää aina animaation ja sitten voi rauhassa rakentaa haluamansa kuvion (ks: Bitstorm ja Wikipedia) ja sitten laittaa Enter-nappulalla animoinnin uudelleen käyntiin. Välilyönti arpoo kokonaan uuden alkutilanteen.

# gameoflifebetter

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