/* seurkuu.c */ /* Vihje: T„ss„ teht„v„ss„ EI oteta karkausvuosia huomioon! Kirjoita ensin seuraava_kuu aliohjelmasta versio, joka vain lis„„ kuukauteen 1:en ilman sen kummempia tarkistuksia. Tee samoin funktiolle lisaa_pvm. Kirjoita tulosta_pvm toimivaksi. Kun tulosta pvm toimii, ryhdy t„ydent„m„„n seuraava_kuu aliohjelmaa. Aluksi siten, ett„ jos pp > 28 niin siirryt„„n seuraavalle kuulle. Kun t„m„ toimii, niin sitten siten ett„ otetaan huomioon kuukauden pituus. Kun t„m„ toimii, t„ydenn„ lisaa_pvm aliohjelmaa aluksi siten, ett„ lis„tt„v„ p„iv„m„„r„ voi olla alle 2 kuukautta. Kun t„m„ toimii, t„ydenn„ viel„ toimivaksi my”s suurilla lis„yksill„. Keksi miss„ aliohjelmia voitaisiin k„ytt„„! */ typedef struct { int pv; int kk; int vv; } Pvm_tyyppi; /* 1. 2. 3. 4. 5. 6. 7. 8. 9.10.11.12 */ int k_pituudet[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; char *k_nimet[12] = {"tammi","helmi","maalis","huhti","touko","kes„", "hein„","elo","syys","loka","marras","joulu"}; int seuraava_kuu(...) /* Funktio muuttaa parametrina tuodun p„iv„m„„r„n seuraavalle kuukaudelle. Mik„li p„iv„m„„r„st„ tulee laiton (esim. 31.1.1995 -> 31.2.1995) muutetaan laiton p„iv„m„„r„ viel„ seuraavan kuun 1. p„iv„ksi (esim 1.3.1995). Funktio palauttaa 1, mik„li my”s vuosi vaihtuu, muuten 0. */ { ... } int lisaa_pvm(...) /* Funktio lis„„ parametrina tuotuun p„iv„m„„r„„n parametrina tuodun m„„r„n p„ivi„. Mik„li p„iv„m„„r„st„ tulee laiton (esim. 31.1.1995 + 3 -> 34.1.1995) muutetaan laiton p„iv„m„„r„ seuraavalle kuulle v„hent„m„ll„ kuukauden p„ivien m„„r„ ja lis„„m„ll„ kuukautta yhdell„. Funktio palauttaa 1, mik„li my”s vuosi vaihtuu, muuten 0. */ { ... } ...tulosta_pvm(...) /* Aliohjelmalla tulostetaan p„iv„m„„r„ muodossa 31. tammikuuta 1995 */ { } int main(void) { Pvm_tyyppi pvm1 = {31,1,1995}, pvm2 = {24,12,1995}; int vaihtui; tulosta_pvm(...pvm1); printf(" -> "); vaihtui = seuraava_kuu(...pvm1); tulosta_pvm(...pvm1); printf(" (%d) + 4 = ",vaihtui); vaihtui = lisaa_pvm(...pvm1,4); tulosta_pvm(...pvm1); printf(" (%d)\n",vaihtui); tulosta_pvm(...pvm2); printf(" -> "); vaihtui = seuraava_kuu(...pvm2); tulosta_pvm(...pvm2); printf(" (%d) + 367 = ",vaihtui); vaihtui = lisaa_pvm(...pvm2,367); tulosta_pvm(...pvm2); printf(" (%d)\n",vaihtui); return 0; }