Terve vaan kaikille.
Elikkas AMK:n ohjelmoinnin peruskurssilla ollaan käyty läpi ennen c++:aan siirtymistä pseudokoodilla ohjelmointia.
Nyt sitten tuli kotitehtäväksi loton arvonta/tarkistus koneen ohjelmointi pseudona.
Muuten oon kyllä jo ohjelman saanut tehtyä, mutta tämä viimeinen kohta tökkii ja pahasti. :D
Elikkäs kun alkuvalikosta valitsee numerolla 4 "Lue omat rivit tiedostosta", niin ohjelma kysyy minkä tiedoston haluaa avata ja syöttää siihen vaikka esim.txt, niin ohjelman pitäisi lukea tiedostossa olevat lottorivit ja tarkistaa ne.
Kuva tehtävänannosta: Tehtävä
Mutta, mutta tämä tiedoston palauttaminen ja lukeminen ei vaan lähde avautumaan minulle millään. Olen koittanut seuraavanlaista koodia:
{ TEKSTI( tiedosto ) // tiedoston nimi TEE(TULOSTA("TIEDOSTOSSA OLEVIEN RIVIEN TARKISTUS")) { TEE(TULOSTA(RIVI "Anna tiedoston nimi: ")) TEE(LUE(tiedosto)) TEE(PALAUTA_TIEDOSTO(tiedosto)) TOISTA { TEE( PALAUTA( numerot ) ) JOS( numerot != TIEDOSTON_LOPPU) { TEE( PALAUTA( tnumerot[numerot] ) ) } } UUDESTAAN_JOS( numerot != TIEDOSTON_LOPPU ) }
Jos kuitenkin koitan sitten tulostaa tuolla koodilla saamat numerot, niin ne ei oo lähellekkään tiedoston kanssa yhtenäiset.
Minkälaisella pätkällä tuo kannattaisi tehdä? Ja miten se tarkistus kannattaisi koodata?
Kiitos jo etukäteen vastauksista.
Mod. lisäsi kooditagit!
Voisinko kysyä, miten olet oikein suorittanut tuota koodia?
Visual Studioon ollaan tuota näpytelty ja sen debugerilla sit suoritettu.
Pseudocode-koodihan ei varsinaisesti ole mikään "standard"-ohjelmointikieli. Se on tarkoitettu lähinnä vain esim. algoritmien toiminnan selittämiseen (en oikeesti tiiä, luin vaan wikipediasta xD).
Tästä seuraa, että sitä ei voi käytännössä kai suorittaa tuolla kuvaamallasi tavoin. Täytyy siis päteä: ohjelmasi on ehkä myös jotain muuta kuin PSEUDO-codea TAI ohjelmasi ei ole pseudo-codea tai jotain muuta en ole asiantuntija.
lisäksi koodista on vaikea saada selkoa, vastausta auttaisi jos selventäisit mitä eri metodit tekevät
KOKONAISLUKU(tnumerot[28]) // double tnumerot[28]; // Muuttuja KOKONAISLUKU( numerot) // double numerot; // Muuttuja ALIOHJELMA(LueNumerot) // void LueNumerot(void) { TEKSTI( tiedosto ) // tiedoston nimi // Muuttuja, string nimi; TEE(TULOSTA("TIEDOSTOSSA OLEVIEN RIVIEN TARKISTUS")) //cout <<"TIEDOSTOSSA OLEVIEN RIVIEN TARKISTUS "; { TEE(TULOSTA(RIVI "Anna tiedoston nimi: ")) //cout << ”\n”; cout << "Anna.."; TEE(LUE(tiedosto)) // cin >> tiedosto; TEE(PALAUTA_TIEDOSTO(tiedosto))// tiedosto.open (tiedosto,ios::in); kaiketi? TOISTA // do { TEE( PALAUTA( numerot ) ) // palauttaa numerot muuttujaan tiedostosta? JOS( numerot != TIEDOSTON_LOPPU) // if(numerot !=tiedoston_loppu) { TEE( PALAUTA( tnumerot[numerot] ) ) // tämä?? } } UUDESTAAN_JOS( numerot != TIEDOSTON_LOPPU ) // while(); }
Koitin kääntää tuota sen verran c-kieliseksi mitä osasin. :D
Tuokin näyttää kyllä melko sekavalta väreillä tuota ois helppo selventää...
Mutta tällä pätkällä ideana olisi avata tekstitiedosto ja ladata sieltä taulukkoon nuo 28 eri numeroa, joka on siis 4 riviä lottoa.
Jos jotakin kiinnostaa tutustua aiheeseen niin latasin tuota meidän oppimateriaalia tänne.
Jos joku osaisi tehdä tuollaisen c-kielisenä, niin EHKÄ osaisin kääntää sen sitten tuohon meidän luonnoskieleen.
Saanko kysyä missä AMKissa moista käytetään? Ihan vain sillä, että en itse näe mitään järkeä käyttää moista verrattuna vaikkapa ihan C:hen. Tuo nyt varmaan on tehtykin vain makroilla C:n päälle ja joku JOS vs if, TEE(x) vs x; tuntuu vainn asian sotkemiselta. Joten hieman vaikea kenenkään sanoa mikä on vikana.
(Ja muunsit C++:aan päin, C:ssä ei ole cin/cout jne. Myöskin jos KOKONAISLUKU vastaisi doublea, olisi nimetty aika väärin.)
Kuopion tekustahan tuo kyseinen kurssi. Sama kurssi vedetään myös sähköpuolelle joten pääasiallinen tarkoitus nuilla makroilla on, että porukka saisi nopeasti hieman käsitystä ohjelmoinnista ja saisivat kyseisen kurssin lävitse. Itse olen ainakin kuullut todella myönteistä palautetta tästä "luonnoskielestä" porukalta jotka eivät ole aiemmin ohjelmoineet ja eivät kurssista riippumatta tulevaisuudessakaan aio sitä jatkaa.
C++ tulee kyseisessä kurssissa sitten tuon luonnoskielen jälkeen.
Seuraavalla koodin pätkällä lähtee varmaan toimimaan.
TEE(PALAUTA_TIEDOSTO(tiedosto))// tiedosto.open (tiedosto,ios::in); kaiketi? KOKONAISLUKU(kierros) TEE(kierros = 0) TOISTA // do { TEE( PALAUTA( numerot ) ) // palauttaa numerot muuttujaan tiedostosta? JOS( numerot != TIEDOSTON_LOPPU) // if(numerot !=tiedoston_loppu) { TEE( tnumerot[kierros] = numerot ) // tämä?? TEE(kierros = kierros + 1) } } UUDESTAAN_JOS( numerot != TIEDOSTON_LOPPU ) // while();
Kummallista tuo makrojen käyttö. TEE() lisää vain puolipisteen loppuun, 4 ylimääräistä merkkiä ja epäselvempi koodi. Nimet kuten PALAUTA ja PALAUTA_TIEDOSTO ovat minusta jokseenkin hämääviä... Eivätkö AVAA_TIEDOSTO ja LUE_LUKU olisi parempia?
Jos halutaan tehdä suomenkielinen harjoittelukieli niin miksei tehdä suomenkielistä harjoittelukieltä vaan tuommoinen makrohäkkyrä.
Jos haluat kääntää tuon C:ksi, niin vedä se cpp:n (esikääntäjän) läpi.
Kiitokset Othnokselle, tuo pelasi paremmin kuin hyvin! Eli ongelma ratkaistu, kiitos myös muille keskusteluun osallistuneille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.