Helsingin yliopisto/Tietojenkäsittelytieteen laitos/Ohjelmointikielten periaatteet/Copyright © 2015 Arto Wikla.

Ohjelmointikielten periaatteet, kurssikoe 4.5.2015/AW

Kirjoita jokaiseen paperiisi kurssin nimi ja kokeen päivämäärä sekä nimesi, opiskelijanumerosi ja allekirjoituksesi.
  1. Oletko jo vastannut kurssikyselyyn tai lupaatko varmasti vastata kurssikyselyyn pikimmiten? Vastauslomake löytyy laitoksen opiskelusivun laatikosta "Linkkejä" kohdasta "Kurssipalaute". Tämäkin kohta arvostellaan ihan oikeasti! Oikeita vastauksia ovat vain myönteiset: "Olen jo vastannut", "Lupaan varmasti viimeistään huomenna vastata", jne. Rehellisyyttä toivotaan! Rehellisyysprosentti julkistetaan kurssin tulossivulla loppuviikosta. (2 pistettä)

  2. Selitä lyhyesti ja täsmällisesti sekä tarpeen vaatiessa konkreettisia pieniä ohjelmaesimerkkejä antaen: (10 pistettä)

    1. Mitä on sidonta ohjelmointikielten viitekehyksessä?
    2. Mikä on sulkeuma? Entä vapaa ja sidottu muuttuja?
    3. Määrittele tyyppiekvivalenssi ja sijoitusyhteensopivuus.
    4. Mitä ovat nimiekvivalenssi, heikko nimiekvivalenssi ja rakenne-ekvivalenssi?
    5. Vertaile keskenään käsitepareja alityyppi-ylityyppi ja aliluokka-yliluokka.

  3. Mitä seuraava ohjelma tulostaa? Piirrä aktivaatiotietuepino dynaamisine ja staattisine linkkeineen, muuttujineen ja parametreineen, kun ohjelman suoritus on tähdellä (*) merkityssä kohdassa. Käytössä on arvoparametrivälitys. (10 pistettä)
      int a=1, b=2, c=3;
      def f1(int b) {
         int c=4;
         def f11(int d) {
            int b=5;
            // * //
            print(a,b,c,d);
         }
         a=6; 
         f11(7)
      }
      def f2(int d) {
         int a=8; 
         f1(a+1); 
         print(a,b,c,d);
      }
      f2(10);
      print(a,b,c);
    

  4. Piirrä aktivaatiotietuepino dynaamisine ja staattisine linkkeineen, muuttujineen ja parametreineen, kun pino on korkeimmillaan. Käytössä on arvoparametrivälitys. Häntärekursiota ei optimoida. (5 pistettä)
      int n=3, r=1;  
      int fact(int n, int r) {
         if (n <= 1)
           return r;
         else
           return fact(n-1, n * r)
      } 
      fact(n, r);
    

  5. Mitä seuraava ohjelma tulostaa, kun parametrit välitetään a) arvoparametreina b) arvo-tulos- eli value-result-parametreina, c) viiteparametreina ja d) nimiparametreina? (8 pistettä)
       var i: int;
       taulu: array of int;
       def fun(y: int) {
         i := 2;
         print(y);
         y := 666;
       }
       taulu[1] := 3;
       taulu[2] := 2;
       i := 1;
       fun(taulu[i]);
       print(taulu[1], taulu[2]);