// mittakal.cpp /* Ohjelma muuttaa kartalta mitattuja matkoja luontoon. Vesa Lappalainen 8.4.1997 Muutokset 10.4.1997 + vertaa-metodi + Kerroin - saantimetodi + muutamia rivinvaihtoja ja mittakaavan lasku oikeaksi Muutokset 10.4.1997 luennolla + k„ytt„j„yst„v„llisyytt„ (ei tarvitse sy”tt„„ mittakaavaa aina) + lukee tiedostoa yksikot.dat, joka on suraavaa muotoa: mm 1.0 cm 10.0 dm 100.0 m 1000.0 km 1000000.0 inch 25.4 + tietorakenne linkityksi listaksi ilman yst„v„luokkaa Muutokset 11.4.1997 + cMuunnos::alusta muutettu int-typpiseksi + cMuunnokset::lue my”s int-tyyppiseksi 1:10000 10 cm => 1000*1000 * 10 1:20 200 kyyn„r„„ Luokat ja vastuut: cNaytto - kysella ja tulostaa cMuunnos - tietaa mika jono muuttuu miksi kertoimeksi - cMuunnokset - etsi„ oikea kerroin Piirr„ t„h„n tietorakenteen kuva */ #include #include #include #include #include using namespace std; #include "mittakal.h" cMuunnokset::~cMuunnokset() { cMuunnos *seur, *p = eka; while ( p != NULL ) { seur = p->Seuraava(); delete p; p = seur; } lkm = 0; eka = NULL; vika = NULL; } int cMuunnokset::lue(const char *nimi) { ifstream fi(nimi); if ( !fi ) return 0; char s[80]; cMuunnos uusi; while ( 1 ) { fi.getline(s,sizeof(s)); if ( !fi ) break; if ( uusi.alusta(s) ) lisaa(uusi); } return lkm; } double cMuunnokset::kerroin(const char *yks) { cMuunnos *p; for ( p = eka; p != NULL; p = p->Seuraava() ) if ( *p == yks ) return p->Kerroin(); return 0; // Makuasia! }