html>C-ohjelmointi, laskuharj. 1

C-ohjelmointi syksy 1999

Harjoitus 6 (25.-29.10.1999)

HUOM! HUOM! HUOM! HUOM!
Näitä harjoituksia ei käsitellä harjoitusryhmissä, vaan ratkaisut tulee lähettää sähköpostitse oman harjoitusryhmän ohjaajalle viimeistään perjantaina 29.10 klo 10. Malliratkaisut ilmestyvät kurssisivulle viimeistään ma 31.10.

1. Kirjoita funktio struct lista *kaanna(struct lista *l), joka kääntää yksisuuntaisen linkitetyn listan sellaiseksi, että viimeisestä solmusta tulee ensimmäinen, toiseksi viimeisestä toinen, jne. Listan alkioihin on talletettu kirjaimia. Kirjoita myös pääohjelma, jolla testaat funktiotasi. Muut tarvittavat yksisuuntaisen linkitetyn listan käsittelyfunktiot löytyvät luentomateriaalista.

2. Kirjoita rakenteet struct lista ja struct solmu nousevaan järjestykseen järjestetyn kaksisuuntaisen linkitetyn listan käsittelyyn. Listan alkioina on kokonaislukuja ja listassa pidetään kirjaa listan alkioiden lukumäärästä. Kirjoita lisäksi funktiot, joilla luot tyhjän listan sekä funktio lisaa_solmu, joka lisää solmun listaan:

 
     int lisaa_solmu(struct lista *l, struct solmu *s);
      /* lisää solmun listaan sen oikella paikalle  eli niin että listan
         alkiot ovat edelleen nousevassa järjestyksessä  */
Kirjoita myös pääohjelma, jolla testaat funktioitasi.

3. Kirjoita edellisen tehtävän järjestetyn listan käsittelyyn seuraavat funktiot:

         
       struct solmu *etsi_solmu(struct lista *l, int i);
      /* etsii listasta solmun, johon on talletettu kokonaisluku i, ja  palauttaa
      osoittimen löydettyyn solmuun. Jos etsittyä alkiota ei löydy listasta
      palautetaan NULL */
      
      
      int  poista_solmu(struct lista *l, struct solmu *s);
      /* poistaa listasta solmun ja vapauttaa solmulle varatun tilan */
      
      int alkioiden_lkm (struct lista *l):
      /* palauttaa listan alkioiden lukumäärän*/
Kirjoita myös pääohjelma, jolla testaat funktioitasi.

4. Suunnittele sopivat rakenteet kompleksiluvuille. Kirjoita näitä rakenteita käyttävät funktiot kompleksilukujen yhteen- ja kertolaskulle sekä kompleksiluvun tulostukselle. Kompleksiluku muodostuu reaaliosasta ja imaginaariosasta: x= a +bi. Yhteenlaskussa lasketaan lukuja yhteen termeittäin, kertolaskussa i*i =-1. Kertoimet a ja b ovat reaalilukuja.

5. Kirjoita ohjelma, joka saa komentorivin argumentteina joukon tiedostojen nimiä ja tulostaa niiden sisältämien rivien lukumäärän tiedostoittain. Jos jotain annettua tiedostoa ei ole olemassa, ohjelma tulostaa tämän nimen kohdalla virheilmoituksen, mutta jatkaa muiden tiedostojen rivimäärien tulostamista.

6.Täytä ja palauta kurssikysely laitoksen WWW-kotisivulla. Osoite on http://www.cs.helsinki.fi/kurssit/kyselyt/syksy_1999/