Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Löytyisikö apuja yhden luokan suunnitteluun?

JusaO [20.04.2004 17:27:37]

#

Olisko täällä foorumissa sellasta todellista koodigurua, joka osaisi antaa vinkkejä niinkin "helppoon" tehtävään kuin luokan suunnitteluun?
Kyseessä on tehtävä, jossa tulisi antaa henkilön nimi(char*), hänen tekemänsä 3 pituushyppytulosta(int hypyt[3]) ja niistä ohjelman tulisi valita pisin(int) hyppy.
Luokalla tulee olla rakennin, joka asettaa nimen tyhjäksi merkkijonoksi ("") ja pisimmäksi sekä hyppytuloksiksi arvon 0.
Tämän lisäksi tulee olla jäsenfunktiot:
void syota_nimi(char*)
void syota_hyppy(int kierros, tulos)
int kerro_pisin()
char* kerro_nimi()

Ohjelma vaatii .cpp ja .h tiedostot sekä toisen .cpp tiedoston testiin.
Siinä esitellään uusi kilpailija- olento (vaikkapa kilpailija oma_kilpailija), kysytään käyttäjältä nimi kilpailijalle ja syötetään se oma_kilpailija- olennolle.
Arvotaan 3 tulosta ja syötetään ne oma_kilpailija- olennolle.
Lopuksi tulostetaan näytölle pisin hyppytulos.

Tässä tehtävä lyhyesti. Olen kiitollinen, jos joku osaisi auttaa!

thefox [22.04.2004 12:30:43]

#

Ei tähän tehtävään mitään koodigurua tarvita. Luokan jäseniksi kannattanee pistää joko char taulukko (char nimi[256] tms) tai sitten käyttää standardikirjaston string-luokkaa. Ehkä tässä tapauksessa char-taulukko on ihan riittävä tapa, kunhan vain muistat tarkistaa että käyttäjän antama nimi ei ylitä esimerkiksi tuota 256:ta merkkiä.

syota_nimi on niinkin yksinkertainen funktio, että se nimen pituustarkistuksen jälkeen kopioi nimen vaikkapa memcpy:llä luokan nimi-jäseneen.

syota_hyppy sijoittaa tuloksen annetun kierroksen paikalla hypyt-jäsenen tiettyyn soluun. Kierrokselle kannattaa tietty tehdä arvoalueen tarkistus.

kerro_pisin-funktion voisi tehdä parilla if-vertailulla kun vertailtavia on noin vähän, tai sitten voi käyttää hieman hitaampaa for-looppia (mikä on tietysti hieman geneerisempi, yksittäisten if:ien kirjoittaminen esimerkiksi 100:lle vertailtavalle voisi olla hieman tuskaista):

int suurin = hypyt[0];
for(int c = 1; c < 3; ++c)
  if(hypyt[c] > suurin) suurin = hypyt[c];
// suurin sisältää suurimman arvon hypyt-taulukosta

Kerro nimi palauttaa yksinkertaisesti luokan nimi-jäsenmuuttujan, tottakai mielellään "const char *"-tyyppisenä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta