Két random szám összehasonlítása

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
Eugen
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2012. május 29. kedd, 6:00

Két random szám összehasonlítása

Hozzászólás Szerző: Eugen »

Sziasztok!

A lenti programnak az lenne a működése, hogy két véletlen számot generál, a soros monitorra kiírja, majd a felhasználó igen - nem válasszal eldönti, azonos-e a két szám. De a program folyamatosan fut, kiadja sorban a két számot, nem "várja meg" a felhasználó válaszát a soros monitorról. Próbáltam for cikulssal is, de elakadtam. Kerestem példaprogramokat is, de azokban sem találtam meg a megoldást. Mi lehet a gond?

Kód: Egész kijelölése

/// Ket veletlen szam osszehasonlitasa

int randomNumber = 1;
int random1;
int random2;
int betu; // bejovo adat a soros portrol

void setup(){ 
  // megnyitjuk a soros portot
  Serial.begin(9600); 
  randomSeed(analogRead(0)); 
}  


void loop(){
     /// véletlenszám generálás
      random1 = random(1, 20);
      random2 = random(1, 20);
       Serial.println(); 
      Serial.println(random1);  // első szám kiíratás
      Serial.println(random2);  // 2. szám kiíratás
      Serial.println();  
      /// soros portrol adatot var
if  (Serial.available() > 0) {
       betu = Serial.read();
       if (random1 == random2)
       if (betu == 'i'){
        Serial.println("Helyes 1");
        Serial.println();}
          else {
            if (random1 == random2){
            if (betu == 'n'){
            Serial.println("Rossz valasz 2");
            Serial.println();
              }
        }
      }
          else 
            if (random1 != random2)
            if (betu == 'i') {
          Serial.println("Rossz 3.");
          Serial.println();}           
            else {
              if (random1 != random2)
              if (betu == 'n') {
              Serial.println("Helyes válasz 4");
              Serial.println();
            }
            } 
      }
}


   

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Két random szám összehasonlítása

Hozzászólás Szerző: kapu48 »

Tanulmányozd a „while” utasítást!
És egyszerűsítsd az if feltételek megadását!
http://elmki.hu/mc/tavir_arduino_notebook.pdf

Kód: Egész kijelölése

void loop(){
     /// véletlenszám generálás
      random1 = random(1, 20);
      random2 = random(1, 20);
      Serial.println(); 
      Serial.println(random1);  // első szám kiíratás
      Serial.println(random2);  // 2. szám kiíratás
      Serial.println();  
      /// soros portrol adatot var
  while(!Serial.available()) {}// Itt várakozik amíg a bejövő adat = 0
       betu = Serial.read();
       if (random1 == random2){
        if (betu == 'i'){
          Serial.println("Helyes 1");
          Serial.println();
        }
        if (betu == 'n'){
           Serial.println("Rossz valasz 2");
           Serial.println();
        }
      }else { 
        if (betu == 'i') {
           Serial.println("Rossz 3.");
           Serial.println();
        }           
        if (betu == 'n') {
           Serial.println("Helyes válasz 4");
           Serial.println();
        }                          
      }
}
És vigyáz a blokk kezdő { és végző } zárójelek elhelyezésére!
Ne felejtsd le őket!
Ha kihagyod pl: if(feltétel) Utasítás; // A feltételes elágazás csak erre az 1 sorra érvényes
Utasítások;
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Két random szám összehasonlítása

Hozzászólás Szerző: csegebiga »

Kapu48 már mondott egy működő megoldást, de az eredeti kérdésedre a válasz:

Kód: Egész kijelölése

      /// soros portrol adatot var
if  (Serial.available() > 0) {
ez nem vár adatot, csak megnézi, hogy van-e adat?
ennek az if-nek az else ágában kellene lekezelni azt az esetet, ha még nem jött adat, ne generáljon újabb kérdéseket.
(hanem várjon a válaszra)

Kód: Egész kijelölése

      /// soros portrol adatot var
  while(!Serial.available()) {}// Itt várakozik amíg a bejövő adat = 0
a While (üres) ciklus addig pörög, amíg nem jön adat a soros porton. azután továbbmegy a program
Avatar
Eugen
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2012. május 29. kedd, 6:00

Re: Két random szám összehasonlítása

Hozzászólás Szerző: Eugen »

Köszönöm a segítséget, átírom a programot a javaslatotok szerint. Ma is tanultam valamit. :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Két random szám összehasonlítása

Hozzászólás Szerző: kapu48 »

Magyarázat helyet.
Direkt belinkeltem a Robert által írt „arduino_notebook”-ot! :!:
Ami igen érthetően és tömören, elmagyarázza a „while” utasítás lényegét!

Különben a Cpp rejtelmeiről már írtak több kötetes könyveket!
Amiket szerintem csak a gyakorlás során lehet memorizálni.
Válasz küldése