C-ohjelmointi syksy 2008


Harjoitus 4

25-29.9.2008

  1. Ohjelma voi saada muistinsa ajoaikaisesta pinosta tai keosta. Kerro tarkemmin esimerkkejä käyttäen milloin varattu muisti tulee pinosta ja milloin keosta.

  2. Korjaa seuraavan neljän funktion dokumentaatio niin, että se vastaa oppikirjassa ja luentokalvoissa esitettyä tapaa.
    double* myAlloc(int n);
    /*Allocate a block of memory large enough to store n double values.
     * Return a pointer to the newly allocated block; and a null pointer
     * if the block cannot be allocated or if n <=0.
     */
    int get(double * block, int size);
    /* Assume that block points to a block of memory large enough to store
     * size double values. Read double values from the standard input and 
     * store incoming values in the block of memory passed as the first 
     * parameter. Stop reading when either size values have been read, a
     * value that rounds to 1 (one) has been encounted, or an invalid
     * double value has been encounted.
     * Return the number of values read.
     */
    void show(double *block, int size);
    /* Assume that block points to a block of memory storing size double
     * values. Print these values to the standard output, each value on a
     * separate line.
     */
    double max(double *block, int size);
    /* Assume that block points to a block of memory storing size double
     * values. Return the maximum value.
     */
    
    

    Tehtävät 3-6. Tee menupohjainen ohjelma (kirjan tehtävä 8-6), joka tunnistaa seuraavat syötteenä annetut komennot:

     
    	  i n       n on kokonaislukuarvoa
    	  r name    name on tiedostonimi 
    	  w
    	  s r       r on kaksoistarkkuuden luku (double)
    	  d 
    	  h 
    	  q  
    Ohjelma toimii saadun  syötteen perusteella  seuraavasti:	 
        i    Varaa  muistilohkon n:ää kaksoistarkkuuden lukua varten. Jos on jo valmiiksi 
    	  varattu muistilohko, niin se vapautetaan.
        r    Lukee kaksoistarkkuuden lukuja annetusta tiedostosta muistilohkoon. Lukeminen
              epäonnistuu, jos muistia ei ole varattuna. Lukeminen lopetetaan, kun joko 
    	  varattu muistilohko on  täynnä tai lukuja ei voida enää lukea tiedostosta, 
    	  koska luvut loppuvat tiedostosta (EOF) tai lukemisessa tapahtuu virhe. 
        w	 Tulostaa  muistilohkoon talletetut luvut.
        s    Etsii muistilohkosta annettua lukua ja ilmoittaa, löytyykö se vai ei. Etsiminen 
              epäonnistuu, jos muistilohkoa ei ole varattu.
        d    Tällä säädellään virheenjäljityssanomien tulostusta. Ensimmäisellä kerralla
              asetetaan virheenjäljitys päälle ja tulostetaan virheenjäljitysinformaatiota,
              toisella kerralla poistetaan virheenjäljitys ja siihen liittyvä lisäinformaatio.
              Sen jälkeen aina joka toinen komento asettaa virheenjäljityksen päälle ja joka
              toinen poistaa sen päältä. On käytössä vain, jos ohjelma on käännetty
              virheenjäljitysmoodissa (debugging mode).
        h    Näyttää kaikki käytettävissä olevat komennot.
        q    Sulkee kaikki avatut tiedostot, vapauttaa varatun muistitilan ja lopettaa
              ohjelman suorituksen.
    
  3. Laadi funktio, joka toteuttaa komennon i vaatimat toimenpiteet eli varaa muistilohkon komennossa ilmoitetulle määrälle kaksoistarkkuuden lukuja. Käytä parametreja järkevästi.

  4. Laadi kaksi funktiota, joista toinen toteuttaa komennon r toimenpiteet eli lukee lukuja annetusta tiedostosta muistilohkoon ja toinen toteuttaa komennon w toimenpiteet eli tulostaa muistilohkoon talletetut luvut näytölle.

  5. Laadi funktio, joka toteuttaa komennon s toimenpiteet eli tutkii löytyykö annettu luku muistilohkosta.

  6. Laadi pääohjelma, joka lukee ja tarkistaa syötteen ja saatuaan kelvollisen komennon suorittaa sen edellyttämät toimenpiteet. Komennon voi antaa sekä pienenä että isona kirjaimena. Pääohjelmassa itsessään on toteutettu toiminnot h ja q eli komentojen näyttö ja ohjelman lopetus. Komennon d saadessaan ohjelma voi tarvittaessa ilmoittaa, että sitä ei ole vielä toteutettu. Virheellisen syötteen saadessaan ohjelma tulostaa ohjeen komentojen käytöstä.

.