html>C-ohjelmointi, laskuharj. 1

C-ohjelmointi syksy 1999

Harjoitus 4 (11.-15 .10.1999)

Tee C-ohjelmasi heti alusta alkaen tietokoneella. Pisteitä jaetaan vain tietokoneella koetelluista ratkaisuista. Varmistaudu ohjelmasi toimivuudesta kääntämällä ja suorittamalla sitä, tarpeen mukaan erilaisilla testiaineistoilla. Vältä sellaisten piirteiden käyttöä harjoituksissa, joita ei vielä ole käsitelty kurssilla.

1. Kirjoita makro VAIHDA(T,X,Y) joka vaihtaa tyyppiä T olevien muuttujien X ja Y arvot keskenään (C:n lohkorakenteesta ja kootusta lauseesta on apua).

2. Kirjoita funktio etsi(char *s, char c), joka etsii parametrina annetun merkin ensimmäisen esiintymän annetusta merkkijonosta ja palauttaa osoittimen tähän esiintymään. Jos merkkiä ei löydy, funktio palauttaa NULLin. Älä käytä standardikirjastojen funktioita (paitsi pääohjelman syöttöön ja tulostukseen.) Käytä osoittimia merkkijonon käsittelyyn.

3. Kirjoita funktio sijoita(char *tulos, char *tahan, char *tasta, char c), joka sijoittaa osoittimen tasta osoittaman merkkijonon osoittimen tahan osoittamaan merkkijonoon heti merkin c ensimmäisen esiintymän jälkeen. Näin koottu merkkijono sijoitetaan osoittimen tulos osoittamaan taulukkoon. Jos merkki c ei esiinny lainkaan merkkijonossa tahan, niin merkkijono tahan kopioidaan sellaisenaan taulukkoon tulos. Käytä osoittimia merkkijonojen käsittelyyn.

4. Kirjoita funktio lavenna(char *s1, char *s2), joka laventaa merkkijonossa s1 olevat lyhennysmerkinnät (esim. a-d tai 1-6) siten, että kaikki välille kuuluvat merkit kirjoitetaan. Lavennettu merkkijono (abcd tai 123456) tallennetaan s2:een. Funktion on lavennettava isojen kirjainten, pienten kirjainten ja numero- merkkien välit.

5. Tee funktio, joka laskee merkkijonosta isojen tai pienten kirjainten lukumäärän. Laskettava kirjainkoko annetaan omana parametrinaan.

6. Opiskelija A on kirjoittanut tekstitiedoston käyttämällä vain isoja kirjaimia. Hän haluaa muuttaa tiedostonsa paremman näköiseksi siten, että vain kunkin virkkeen ensimmäinen kirjain on iso ja muut kirjaimet ovat pieniä. Kirjoita hänen avukseen ohjelma, joka kopioi s tandardisyöttövirrasta merkit standarditulosvirtaan siten, että se muuttaa isot kirjaimet pieniksi virkkeiden 1. kirjaimia lukuunottamatta. Ohjelma tunnistaa virkkeen 1. kirjaimen siitä, että sitä ennen välilyöntiä tai rivinvaihtoa edeltävä merkki on joko piste, kysymysmerkki tai huutomerkki. Muut erikoistapaukset voit jättää käsin muutettavaksi. Ohjelmasi ei tarvitse muuttaa skandinaavisia aakkosia (å, ä , ö).