Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Aloittelija kyselee funktioista ja tietueista

Redeep [26.04.2012 16:19:30]

#

No niin, elikkä nyt pitäisi harjoitustyössä määritellä funktio, jolle ohjelma syöttää parametrina taulukon, jonka alkiona on tietue. Olen kyllä määrittänyt tietueen mainin sisällä, mutta miten se samantyyppinen tietue määritellään funktioille mainin ulkopuolella, kun globaaleja muuttujia ei saisi käyttää? Pitäisikö se nyt määritellä jotenkin sinne funktion argumenttiin niin kuin muutkin sen käyttämien muuttujien tietotyypit? Ja sitten semmoista vielä, että onko noita 'cinin' jälkeen tulostuvia rivinvaihtoja mahdollista saada kumottua?

Olisin todella kiitollinen jos saisin vähän teknistä osviittaa. :)

User137 [26.04.2012 16:24:18]

#

Jos menis tässä järjestyksessä. Ethän sinä globaaleja muuttujia tarvitse jos funktio saa sen tietueen parametrina:

struct määrittely
{}

funktio
{}

main
{}

Metabolix [26.04.2012 16:24:35]

#

Osaatko tehdä vastaavan ohjelman, jossa funktiolle välitetään vaikka int-taulukko? Jos osaat, mitään ongelmaa ei pitäisi olla. Jos et osaa, aloita siitä, niin on vähemmän mietittävää kerralla.

Viestistäsi jäi kuva, että ehkä kuvittelet, että tietueen tyyppi olisi muuttuja ja pitäisi siksi laittaa main-funktion. Näin ei tietenkään ole, vaan se struct-sanasta alkava osa kuuluu nimenomaan funktion ulkopuolelle.

Redeep kirjoitti:

onko noita 'cinin' jälkeen tulostuvia rivinvaihtoja mahdollista saada kumottua?

Ei standardikirjaston välineillä. Nehän eivät ole ohjelmasi tulostamia vaan komentorivin ominaisuus.

Redeep [26.04.2012 20:30:59]

#

Juu, kiitoksia. Olen tosiaan mieltänyt nuo tietueet vähän väärin. Noista cineistä vielä sen verran, että ohjelman pitäisi ajettaessa olla myös kosmeettisesti samanlainen kuin tehtävänannossa. Siinä siis pyydetään toistuvasti syöttämään kahdeksan kokonaisluvun sarja, ja tiedot tallennettaan kahteen sisäkkäiseen taulukkoon (1:ssä alkiona sarja, 2:ssä sarjan luvut). Nämä pitäisi saada ihan selvyydenkin vuoksi syötettyä pinon sijasta rivissä, mieluiten välitilalla erotettuina.

Ajattelin ensin ottaa sarjan yhtenä stringinä, nappailla siitä luvut, muuttaa ne int-muotoon ja tallentaa samassa järjestyksessä taulukkoon, mutta se onnistuisi vain yksinumeroisilla luvuilla. Päätin sitten ottaa ne ihan yksinkertaisesti kahdeksalla cinillä ja ohjelma toimii vallan mainiosti. Ehkä pyydän vähän turhia/mahdottomia, mutta olisiko silti mitään ideaa, miten siitä syöttötapahtumasta saisi vähän paremman näköisen?

Metabolix [26.04.2012 20:50:36]

#

Ilmeisesti et ole edes kokeillut, mitä tapahtuu, jos syötät ohjelmalle molemmat luvut samalla rivillä. Ennen kysymistä on yleensä viisasta kokeilla.

Kokeile esimerkiksi tätä:

int a, b;
std::cout << "Anna kaksi lukua: ";
std::cin >> a;
std::cout << "a = " << a << std::endl;
std::cin >> b;
std::cout << "b = " << b << std::endl;

Kokeile syöttää ohjelmalle luvut eri riveillä ja samalla rivillä, niin näet, että molemmat tavat toimivat mutta vähän eri tavalla. Kokeile myös antaa välissä ylimääräisiä tyhjiä rivejä.

Lisäksi kannattaa lukea opasta.

Lisäys: Vai eikö tullut mieleen, että välilyönti löytyy näppäimistöstä vielä ohjelmaa ajettaessakin? ;)

Redeep [27.04.2012 15:14:40]

#

No voi hemmetti. En edes tiennyt, että se tunnistaa erotinmerkiksi myös välilyönnin, ei siis pelkän enterin. :D Anteeksi vaiva, meillä on TTY:llä tosiaan pakollisena tämä yksi ohjelmoinnin peruskurssi, eikä kyllä oikein lukeudu mieliaineisiini. :)

Vastaus

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

Tietoa sivustosta