Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelma lottokoneen teossa

Sivun loppuun

ZuuZou [16.04.2010 18:19:09]

#

Tuli tuossa mieleen että harjoittelen vähän lisää tuota perus asioita c++ ja päädyin siihen loppu tulokseen että voisinpa testata tehdä lottokoneen ja tulikin sitten pieni pulma vastaan johon omilla aivoilla en ratkaisua keksinyt.

Elikkäs koodi on tässä:

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int arvo(int ala, int yla){
    int tmp_luku;

    tmp_luku = ala + rand() % (yla - ala + 1);

    return tmp_luku;
}

int main()
{
int luvut[7], omat[7], lis[3], n, s, li, oi;
long d;
srand(time(NULL));
    oi = 0;
    li = 0;

cout << "numero 1. ";
cin >> omat[1];
cout << "numero 2. ";
cin >> omat[2];
cout << "numero 3. ";
cin >> omat[3];
cout << "numero 4. ";
cin >> omat[4];
cout << "numero 5. ";
cin >> omat[5];
cout << "numero 6. ";
cin >> omat[6];
cout << "numero 7. ";
cin >> omat[7];
    n = 0;
    s = 0;
    while(n != 7) {
    n++;
    s++;
    luvut[n] = arvo(1, 39);
    lis[s] = arvo(1,39);
    if (lis[n] == luvut[n]) {s--;}
    }
    n = 0;
    while(n != 7){
       n++;
       d = 0;
       cout << luvut[n] << " ";
       while(d != 33333333) {
        d++;
        }
    }
    cout << "\n\nJa lisanumerot ovat:\n";

    n = 0;
    while(n != 3) {
        n++;
        d = 0;
        cout << lis[n] << " ";
        while(d != 33333333) {
        d++;
        }
    }
    n = 0;
    d = 0;
    while(n != 7) {
        n++;
        if(omat[1] || omat[2] || omat[3] || omat[4] || omat[5] || omat[6] || omat[7] == luvut[n]) { oi++;}
    }
    while(d != 3) {
        d++;
        if (omat[1] || omat[2] || omat[3] || omat[4] || omat[5] || omat[6] || omat[7] == lis[d]) { li++;}
    }
    cout << "\n Sinulla oli " << oi << " oikein + " <<  li << " Lisanumeroa!";
}

Eli tuossahan on ongelma kohtana tämä:

while(n != 7) {
    n++;
    if(omat[1] || omat[2] || omat[3] || omat[4] || omat[5] || omat[6] || omat[7] == luvut[n]) { oi++;}
}
while(d != 3) {
    d++;
    if (omat[1] || omat[2] || omat[3] || omat[4] || omat[5] || omat[6] || omat[7] == lis[d]) { li++;}
}

1. Jos ajan tuon niin se antaa vastaukseksi aina 7 oikein ja 3 lisänumeroa oikein.

Metabolix [16.04.2010 18:21:56]

#

Vertailu pitää tehdä joka luvulle erikseen, eli ehdon on oltava "jos a on x tai b on x". Nykyisen ehtosi tulkitaan tarkoittavan "jos a ei ole nolla tai b on x". Lisäksi indeksisi ovat pielessä: taulukon indeksit alkavat nollasta ja loppuvat tuossa tapauksessa kuuteen.

User137 [16.04.2010 18:27:53]

#

Kannattaa myös opetella käyttämään for-silmukkaa. Et tarvitse noin pitkiä if-lauseita tai käsin tehtyä toistoa 7:lle riville.

Milo [17.04.2010 18:19:58]

#

Mikä tämän tarkoitus on?

while (d != 33333333) {
++d;
}

Sisentämään kannattaisi myöskin opetella ._·

Teuro [17.04.2010 18:30:22]

#

Milo kirjoitti:

Mikä tämän tarkoitus on?

while (d != 33333333) {
++d;
}

Sijoitus koodissa viitannee jonkinlaiseen hidastamiseen, mutta aivan järjetön ratkaisu kuitenkin. Taulukoiden käyttöä voisi vielä tosiaan opetella. Nyuo varsinaiset numerot ja lisänumerot voisi tallentaan samaan taulukkoon siten, että ensimmäiset 7 alkiota (0 - 6) ovat varsinaisia ja kolme seuraavaa (7 - 9) lisänumeroita.

ZuuZou [22.04.2010 23:36:06]

#

Teuro kirjoitti:

Milo kirjoitti:

Mikä tämän tarkoitus on?

while (d != 33333333) {
++d;
}

Sijoitus koodissa viitannee jonkinlaiseen hidastamiseen, mutta aivan järjetön ratkaisu kuitenkin. Taulukoiden käyttöä voisi vielä tosiaan opetella. Nyuo varsinaiset numerot ja lisänumerot voisi tallentaan samaan taulukkoon siten, että ensimmäiset 7 alkiota (0 - 6) ovat varsinaisia ja kolme seuraavaa (7 - 9) lisänumeroita.

Joo siis tuo tosiaan on hidastamis tyyli... Ei tullut muutakaan mieleen niin ajattelin et teen vaan jonkinlaisen silmukan sinne hidasteeksi. Niin ja ongelmat on ratkennut nyt eli kone toimii niinkuin pitäisi että kiitos avusta :)

Niin ja tuosta että mikä olisi parempi hidastus tyyli? esim jos haluaa että numerot tulevat parin sekuntin välein näkyviin?

Grez [22.04.2010 23:41:05]

#

sleep(2); //odottaa 2 sekuntia

Metabolix [23.04.2010 00:41:49]

#

Grez: sleep ei kuulu tässä kielessä standardiin. Windowsissa on Sleep, joka nukkuu millisekunteja, ja UNIX-puolella on (nykyään deprekoitu) usleep, joka odottaa mikrosekunteja.

Joka tapauksessa on järkevää mitata jollain tavalla aikaa, jottei koneen nopeus vaikuta. Esimerkiksi seuraava funktio odottaa, että koneen kello siirtyy seuraavaan sekuntiin:

#include <ctime>
void odota_vaihtumista() {
  std::time_t t0 = std::time(0);
  while (t0 == std::time(0)) {
    // Odotetaan; C++ ei sisällä käyttöjärjestelmäriippumatonta tapaa nukkua.
  }
}

Milo [23.04.2010 09:51:49]

#

käyttöjärjestelmäriippumatonta sleepiä saisi esimerkiksi Qt ja Boost -kirjastoista. Eikä varmasti haittaa yhtään, jos alkuun tekee alustariippuvaista koodia, helppohan niitä on karsia, kuhan kieli alkaa hahmottumaan paremmin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta