Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 65. #define MAX(x,y) x < y? y : x Korjaa edellä esitelty makro siten että se toimii oikein. Tehtävä 66. Kirjoita makro joka palauttaa suurimman kolmesta luvusta. Tehtävä 67. Kirjoita makro, joka nollaa taulukon. Makro saa parametrina taulukon nimen ja koon. Tehtävä 68. Kirjoita makro, joka vaihtaa kahden muuttujan arvon keskenään.
Tehtävä 69. Kirjoita makro TUPLAA( x ) ((x)+ (x)) Mitä on tuloksena kun kutsut makroa seuraavalla tavalla int luku = 5; int tulos = 0; tulos = TUPLAA( luku++ ); Tehtävä 70. // makro jonka pitäisi jakaa ja pyöristää ylöspäin // tuloksena on kokonaisluku #define ceil_div(x, y) (x + y - 1) / y Toimiiko edellä esitelty makro aina oikein? Mitä tapahtuu kun kutsut makroa seuraavalla tavalla: tulos = ceil_div(luku1 + luku2,luku2 + luku1); Korjaa makroa tarvittaessa, niin että se toimii oikein. Tehtävä 71. Kirjoita editorilla tekstitiedosto, jonne tallennat henkilöiden nimiä ja ikiä seuraavaan tapaan: Matti;12 Liisa;34 Kalle;23 Esa;50 Kirjoita ohjelma, joka tulostaa tiedoston sisällön seuraavasti: Matti 12 Liisa 34 Hessu 23 Esa 50
Tehtävä 72. VintovsPC on kerran vuodessa ilmestyvä julkaisu. Lehden asiakasrekisterin tietuerakenne on seuraava: Nimi Osoite Henkilötunnus Tilaustiedot 30 merkkiä 50 merkkiä 12 merkkiä 60 merkkiä Kirjoita ohjelma, jonka avulla rekisteristä poistetaan henkilötunnukset. Tehtävä 73. Kirjoita suomi - englanti atk-sanakirjaohjelma, joka käyttää tiedostoksi talletettua sanakirjaa. Ohjelma pyytää sanan, joka voi olla suomeksi tai englanniksi. Ohjelma tulostaa sanan vastineen toisella kielellä. Tehtävä 74. Yksinkertainen salakirjoitus tapahtuu kaavan C = P + k (mod 26) avulla (C-kielessä: C = (P + k) % 26; ), missä P on muutettavan kirjaimen arvo. C on ko. kirjaimen salakirjoitettu arvo ja k on kokonaisluku väliltä 1..25. Englanninkielen aakkoset a z, joita on 26 kappaletta, saavat järjestysnumerot (arvot) 0-25 (esimerkiksi aakkoset laitetaan taulukkoon, jossa indeksit ilmaisevat järjestysnumeron). Samoin kirjaimet A Z saavat järjestysnumerot 0-25 (esim. toisen taulukon indeksien avulla). Huomaa, että skandinaavisia kirjaimia ja muita merkkejä ei muuteta ollenkaan.
Esim. jos k==3, aakkoset muutetaan seuraavasti a->d, b->e,..., w->z, x->a, y->b ja z->c (sekä A->D,..., Z->C). Tee ohjelma, joka salakirjoittaa käyttäjän antaman tekstin, kun hän antaa luvun k (väliltä 1 25). Käyttäjä voi halutessaan tulostaa näytölle tekstin selväkielisenä tai salakirjoitettuna. Ohjelmalla voi tallettaa salakirjoitetun tekstin tiedostoon, lukea tämän tekstin tiedostosta ja tehdä myös dekoodauksen salakirjoitetusta muodosta selväkieliseen (kaavalla P = C - k (mod 26)). Ohjelma kysyy käyttäjältä dekoodaukseen luvun k arvon. Jos käyttäjä ei osaa antaa oikeaa arvoa luvulle k, hän saa yrittää useita kertoja ja hätätilassa jopa pyytää luvun k ohjelmalta. Jos salakirjoitettu teksti on talletettu tiedostoon ja ohjelman käyttö lopetettu, ohjelman ei tarvitse tallettaa lukua k mihinkään. Tällaisissa tapauksissa (kun salakirjoitettu teksti on luettu tiedostosta) ohjelma tarvittaessa ilmoittaa, että ei tiedä luvun k arvoa! Käytä apuna sopivia C-kielen valmisfunktioita.
Tehtävä 75. Tee ohjelma, joka pelaa käyttäjän kanssa Hangman-peliä (hirsipuu). Ohjelma lukee arvuutettavat sanat tekstitiedostosta ja valitsee satunnaisesti yhden näistä sanoista arvattavaksi. Käyttäjän tulee arvata sanaan kuuluvat kirjaimet ja jokaisesta väärästä arvauksesta kone rankaisee rakentamalla hirsipuuta yhden osan lisää. Käyttäjä antaa yhden kirjaimen kerralla ja kone tarkistaa onko kyseinen kirjain arvattavassa sanassa. Peli päättyy kun pelaaja arvaa sanan ennen kuin hirsipuu on valmis tai kun pelaaja hirtetään. Kone pitää kirjaa oikeista ja vääristä vastauksista ja ilmoittaa onko pelaajan vastaus oikein vai väärin ja näyttää lopputuloksen pelaajalle.
Tehtävä 76. Tee ohjelma, joka tallettaa pankin asiakastietoja suorasaantitiedostoon. Asiakkaasta talletetaan ainakin seuraavat tiedot: - etunimi - sukunimi - asiakasnumero - saldo Tee ohjelmaan käyttöliittymä, jossa käyttäjä valitsee toiminnon: - uuden asiakkaan lisääminen - asiakkaan saldon muuttaminen - asiakkaan poistaminen asiakasnumeron perusteella - kyselyt ja kyselyjen tallettaminen tekstitiedostoon myöhempää käyttöä varten o negatiiviset saldot o nollasaldot o positiiviset saldot - tallennus tiedostoon - tiedostosta lukeminen - kyselyjen tuottaminen tiedostojen selmaaminen
Tehtävä 77. Tee ohjelma, joka laskee tekstitiedoston rivien ja merkkien lukumäärät ja tulostaa tiedot kuvaruudulle. Tehtävä 78. Tee ohjelma, joka tulostaa tekstitiedoston sisällöstä aina 20 riviä kerralla. Kun käyttäjä painaa enteriä, niin tulostetaan seuraavat 20 riviä. Jos käyttäjä enterin painalluksen sijaan kirjoittaakin merkin Q ja painaa enteriä, niin ohjelman suoritus päättyy (vastaa Unix/Linux more komentoa). Tehtävä 79. Tee ohjelma, joka saa parametrina kaksi tiedostoa, ohjelma vertaa tiedostojen sisältöjä ja ilmoittaa onko niiden sisällöt identtisiä.
EXTRATEHTÄVIÄ, JOITA EI OLE PAKKO TEHDÄ Tehtävä 80. Tee ohjelma joka tallettaa linkitettyyn listaan henkilön nimen, osoitteen ja puhelinnumeron. Tehtävä 81. Muokkaa edellistä tehtävää siten, että käyttäjä voi valita: 1. uuden tiedon lisääminen 2. tiedon poistaminen 3. haku Tehtävä 81. Tee ohjelma joka liittää kaksi kirjaimia sisältävää linkitettyä listaa yhdeksi listaksi siten, että kirjaimet tulevat listaan aakkosjärjestykseen. Tehtävä 82. Tee ohjelma, joka tallettaa 25 satunnaislukua (arvot väliltä 0 100) linkitettyyn listaan. Ohjelma käy listan läpi ja laskee talletetut arvot yhteen ja tulostaa summan kuvaruudulle. Tehtävä 83. Lisää tehtävään 82 lajittelu. (Vihje: kopioi lista ensin taulukkoon, joka sitten lajitellaan ja lopuksi luodaan uusi lista, johon arvo saadaan lajitellusta taulukosta.
Tehtävä 84. Tee ohjelma, joka luo kymmenen alkion linkitetyn listan. Ohjelma tekee listasta kopion, jossa alkiot ovat käänteisessä järjestyksessä. Tehtävä 85. Tee ohjelma, jossa talletetaan käytettyjen autojen tietoja listarakenteeseen, jossa on yksi solu kutakin autovalmistajaa kohden. Näistä soluista on linkki listaan (alilista), johon talletetaan ko. automerkin käytettyjen autojen tiedot. Talletettavia tietoja ovat: 1. Auton merkki 2. malli 3. rekisteröintivuosi 4. ajokilometrit 5. myyntihinta Ohjelma lukee tiedot käyttäjältä ja lisää tiedot alilistan loppuun. Käyttäjä voi valita automerkin ohjelma tulostaa ko. merkin autojen tiedot. Tehtävä 86. Tee ohjelma, joka saa komentoriviparametrina laskutehtävä, jonka ohjelma tulkitsee ja suorittaa. Jos ohjelman nimi on laske, niin kutsu: laske 1 + 2 tulostaisi: 1 + 2 = 3 Jos ohjelma ei tunnista tehtävää, niin se tulostaa käyttäjälle käyttöohjeet ja käyttäjä joutuu käynnistämään ohjelman uudelleen.
Tehtävä 87. Tee ohjelma, joka tallettaa reaalilukuja dynaamiseen taulukkoon. Taulukon koko kysytään ohjelman käyttäjältä. Tehtävä 88. Tee ohjelma, joka pystyy käsittelemään suurempia kokonaislukuja kuin C:n omat tietotyypit kykenevät käsittelemään. Tee ohjelmaan funktiot: 1. luvun lukeminen 2. luvun tulostaminen 3. kahden suuren luvun yhteenlasku