C-ohjelmointi syksy 2010


Harjoitus 4

29-1.10.2010

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

  2. Tee ohjelma, joka lukee tiedostoa, jossa tieto on seuraavassa muodossa:
    kokonaisluku, jota seuraa liukuluvut (double).
    Ohjelma lukee ensin kokonaisluvun (n) ja varaa sen jälkeen muistia n:lle liukuluvulle ja lukee sen jälkeen nämä luvut tiedostosta ja tallettaa muistiin varaamalleen alueelle. Sen jälkeen ohjelma järjestää luvut ja kirjoittaa ne takaisin tiedostoon. Muista myös virhetarkistukset.

    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 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ä.

  6. Korjaa laatimiesi funktioiden dokumentaatio niin, että se vastaa oppikirjassa ja luentokalvoissa esitettyä tapaa.

.

Muita opittavia ja aloitettavia asioita:
  1. Puskurin ylivuoto -vältä tätä!
  2. Bittioperaatiot (Esim. 13.1)
  3. Harjoitustyön aloittaminen