wiki:s2012/demot/demo7t1
Last modified 5 years ago Last modified on 2012-10-28 11:07:09

Pages linking to s2012/demot/demo7t1:
s2012/demot/demo7

1. Lisävinkki Demo 7 tehtävä 1

Monella ongelma näyttää olevan seuraava: On opeteltu etsimään maitopurkkihyllystä (int[]) suurin purkki. Samoin on katsottu mallia miten löydettäisiin suurimman purkin paikka piimäpurkkihyllystä (double[]). Kun pitäisi löytää suurimman purkin paikka mehupurkkihyllystä (Vector[]), niin meneekin sormi suuhun eikä keksitä yhtään mitä pitäisi tehdä.

Nyt ei kannata ajatella liian monimutkaisesti. Jos pitäisi tulostaa taulukossa luvut reaaliluvut, niin se olisi aivan analoginen tehtävän 1 ongelman kanssa. Tehtävässä pitää "tulostaa" taulukossa pisteet olevat pisteet (eli piirtää pallo jokaisen pisteen kohdalle).

Miten tulostettaisiin taulukossa double[] luvut olevat luvut? Esimerkiksi

for (int i=0; i<luvut.Length; i++)
{
    double luku = luvut[i];
    Console.WriteLine(luvut[i]);
}

Jos tuo olisi ollut tehtävänä, vinkkinä olisi voinut olla, että paikassa 2 olevan luvun voit tulostaa:

    Console.WriteLine(luvut[2]);

tai toisaalta myös seuraava toimisi:

    double luku = luvut[2];
    Console.WriteLine(luku);

Nyt tehtävän vinkkinä on, että paikassa 2 olevan pallon voi "tulostaa" keltaisena (eli piirtää) kutsumalla omaa valmista aliohjelmaa LuoPallo (ks. alempana Kuvaaja.cs-tiedostossa:

  LuoPallo(game,pisteet[2],r,Color.Yellow);

tai edellisen WriteLine esimerkin kanssa analogisesti myös:

  Vector piste = pisteet[2]; 
  LuoPallo(game,piste,r,Color.Yellow);

Voit toki aloittaa tehtävän tekemisen niin, että se piirtää ensin vain ne 4 taulukossa olevaa palloa (mallissa keltaisella, oikeasti haluttiin mustia palloja):

  LuoPallo(game,pisteet[0],r,Color.Yellow);
  LuoPallo(game,pisteet[1],r,Color.Yellow);
  LuoPallo(game,pisteet[2],r,Color.Yellow);
  LuoPallo(game,pisteet[3],r,Color.Yellow);

Sitten kun tämä toimii, muutat sen vastaavaksi silmukaksi.

Analogiat ovat siis:

  reaaliluku-       Vector-
  taulukko          taulukko      selitys
=====================================================================
  double      <=>   Vector      - yhden alkion tyyppi
  double[]    <=>   Vector[]    - taulukon tyyppi
  luvut       <=>   pisteet     - taulukon nimi 
  luku        <=>   piste       - taulukon yksi alkio
  int i       <=>   int i       - indeksi on aina kokonaisluku 
  luvut[i]    <=>   pisteet[i]  - taulukon i:s alkio.
  WriteLine   <=>   LuoPallo    - "tulostaminen"
=====================================================================

6. Vanhan demovastauksen funktioiden käyttäminen hyväksi

Tehtävässä 6 on ehdotettu matriisin tulostamista rivillä:

   Console.WriteLine(Demo6.Matriisit.Jonoksi(luvut, " ", "{0,5:0.00}"));

Tässä tarvitaan siis Demo6:n Matriisit luokkaa. Tämä voi ottaa käyttöön kolmella eri tavalla

6.1 Tiedosto samaan projektiin

  • lisää olemassa olevaan projektiisi (Projektin nimen päällä hiiren oikealla ja Add/New? Item...) uusi Luokka (Visual C#/Class) eli Matriisit.cs niminen tiedosto.
  • hae Demo6:n mallivastauksista cs-tarkenninta klikkaamalla tiedosto Matriisit.cs ja kopioi leikepöydälle ja liitä edellä syntyneen koodin tilalle.
  • Nyt voit viitata omassa ohjelmassasi: Demo6.Matriisit.Jonoksi

6.2 Toinen projekti ja siihen viittaaminen

  • Luo uusi Console Projekti ja sinne Matriisit.cs-tiedosto, jonka sisällöksi järjestät demo6:n Matriisit.cs
  • omassa projektissasi valitse hiiren oikealla projektisi References päällä Add Refrences/Projects? ja valitse luomasi toinen projekti
  • Nyt voit viitata omassa ohjelmassasi: Demo6.Matriisit.Jonoksi

6.3 Toisessa paikassa olevaan tiedostoon viittaaminen

  • Laita Matriisit.cs mihin tahansa (järkevä kuitenkin olla omana projektinaan).
  • Lisää omaan projektiisi uusi tiedosto viitteenä:
    • Projektin nimen päälle ja hiiren oikealla: Add/Existing? Item...
    • Etsi haluamasi .cs-tiedosto
    • ennen kuin suljet lisäysdialogin, valitse oikeasta alakulmasta Add vieressä olevasta nuolesta Add as Link