Ohjelmointi 1, syksy 2024, luento06

Olin tällä sivulla luennon aikana Agorassa

Please to interact with this component.

.
Olin tällä sivulla luennon aikana Zoomissa

Please to interact with this component.

.
Olin tällä sivulla videon katsomisen aikana

Please to interact with this component.

.
Katson sivua etukäteen

Please to interact with this component.

.

# runner
# L06

6. luento: ti 17.9.2024 klo 14:15-16:00: Aliohjelman paluuarvo, funktio ja parametrin välitys (luentokysymyksiä)

Kysymyksiä

1. Lukekaa postia!

    1. VAU-ryhmiä ei taida tulla :-(

2. Demot

3. 1-bit Wegematic 1000

4. Negatiiviset binääriluvut

Tyyppinä voi olla joku jonkun tekemä luokka (PhysicsObject, Vector, string, StringBuilder jne...) tai joku valmiista tietotyypeistä:

4.1 Suora tulkinta

 0011 = +3
 1011 = -3
  • monta nollaa
  • laskut vaikeita

4.2 1-komplementti

  0011 = +3
  1100 = -3
  • monta nollaa
  • laskut mahdollisia

4.3 2-komplementti

0011 = +3
1101 = -3  (1-komplementti +1)
  • nykyisin eniten käytetty
  • yksi nolla
  • laskut toimivat automaattisesti
  • kaikissa malleissa etumerkin vaihto on suorittaa operaatio uudelleen
  • kaikissa itseisarvo saadaan katsomalla, että jos 1. bitti on 1, niin vaihdetaan etumerkki
# muistiinpanoja

5. Syntaksista

5.1 Esimerkki syntaksista

# shell

Tee oma junanrata

  • https://rr.red-dove.com/ui

  • Edit Grammar

  • pastea seuraava kielioppi:

    Lause ::= subjekti predikaatti (paikka)? "."
    subjekti ::= "kissa" | "koira" | "kana"
    predikaatti ::= "istuu" | "haukkuu" | "kotkottaa" | "nukkuu"
    paikka ::= "puussa" | "pihalla" | "kanalassa" | "orrella"
  • View Grammar

Seuraavissa kokeile kirjoittaa erilaisia lauseita. Mitkä ovat oikein syntaktisesti (kieliopiltaan)? Mitkä semanttisesti (merkitykseltään)?

# Plugin1
# cslause

5.2 Ohjelmointikielen syntaksi

# junanradat

6. Aliohjelmat ja funktiot

  • oikeasti lappuihin olisi pitänyt kirjoittaa pelkkiä bittejä tyyliin:

    0000 0100
    0000 1010

    ja aliohjelma olisi tiennyt miten nuo tulkitaan vain siksi että sille on kerrottu että mitä tyyppiä monesko parametri on.

  1. Jaa ongelma osiin.
  2. Mieti millaisella aliohjelmakutsulla pistät tietyn osaongelman ratkaisun käyntiin.
  3. Kirjoita aliohjelman kutsurivi ja mieti sen tarvitsemat parametrit.
  4. Kirjoita (aluksi manuaalisesti, myöhemmin generoi automaattisesti) aliohjelman esittelyrivi (otsikkorivi, eng. header).
    • mieti tarve public, static - sanoille
    • aliohjelman paluutyyppi void vai jotakin muuta?
    • aliohjelman nimi
    • parametrin lukumäärä sama kuin kutsussa
    • parametrien tyyppi sijoitusyhteensopivaksi kutsun kanssa.
  5. Tee aliohjelmasta syntaktisesti oikea tynkä joka kääntyy, esimerkiksi funktioaliohjelmassa pitää olla return-lause joka palauttaa lausekkeen (vaikka yksi luku) joka on samaa tyyppiä (tai muuntuu automaattisesti samaksi) kuin funktion tyyppi.
  6. Dokumentoi aliohjelma (nyt unohda mistä sitä kutsuttiin, sitä et enää saa ajatella).
  7. Kirjoita testit (TDD).
  8. Aja testit (pitää "feilata" = NÄE PUNAISTA).
  9. Muuta aliohjelma toimivaksi
  10. Aja testit (toista kohdat 8-10 kunnes toimii, = NÄE VIHREÄÄ)
  11. Siirry seuraavaan aliohjelmaan.
    /// <summary>
    /// 
    /// </summary>
    /// <param name="luku1"></param>
    /// <param name="luku2"></param>
    /// <returns></returns>
    /// <example>
    /// <pre name="test">
    ///  
    /// </pre>
    /// </example>
    /// <summary>
    /// 
    /// </summary>
    /// <param name="k"></param>
    /// <param name="maara"></param>
    /// <param name="isona"></param>
    /// <returns></returns>
    /// <example>
    /// <pre name="test">
    ///  
    /// </pre>
    /// </example>
    XXX YYY ZZZ Monista(???)
    {
        StringBuilder tulos = new StringBuilder("");
        char kirjain = Char.ToLower(k);
        if (isona) kirjain = Char.ToUpper(k);
        for (int i = 0; i < maara; i++)
            tulos.Append(kirjain);
        return tulos.ToString();
    }
# helloeka

7. Voimia peliin

# lumiukko1

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