Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Lottomasiina ongelma

Sivun loppuun

vikakoodi [05.12.2013 19:02:02]

#

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!

kllp [05.12.2013 21:36:42]

#

Voisinko kysyä, miten olet oikein suorittanut tuota koodia?

vikakoodi [05.12.2013 23:19:43]

#

Visual Studioon ollaan tuota näpytelty ja sen debugerilla sit suoritettu.

kllp [06.12.2013 00:56:41]

#

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.

OliO [06.12.2013 00:59:29]

#

lisäksi koodista on vaikea saada selkoa, vastausta auttaisi jos selventäisit mitä eri metodit tekevät

vikakoodi [06.12.2013 02:39:59]

#

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.

feenix [06.12.2013 12:19:20]

#

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.)

Othnos [06.12.2013 13:01:06]

#

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();

fergusq [06.12.2013 14:40:10]

#

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.

vikakoodi [06.12.2013 15:47:39]

#

Kiitokset Othnokselle, tuo pelasi paremmin kuin hyvin! Eli ongelma ratkaistu, kiitos myös muille keskusteluun osallistuneille.


Sivun alkuun

Vastaus

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

Tietoa sivustosta