Arduino - C nyelv és az IF szerkezet (volt LCD-óra)

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

GPeti írta:Az Arduino Help-jében (arduino-1.0.1/reference/index.htm) nem találom a ? és a : jelentését.
Robert írta:Mert ez a jelölés C és nem Arduino. Csak az ifjak kihagytás a beszélgetés elejéből .... :evil:

U.i.: a Tanfolyam címe emlékeztetőül: 60 nap alatt Arduino.
Bocsi, Robinak teljesen igaza van, ez nem Arduinoul van hanem C-ül.
Én voltam, aki előhoztam ezt az egész mizériát, elnézést érte.

Működik, de illetlenség Arduinó programban használni.
Mentségemre legyen mondva nekem is új az Arduino, a tanfolyam kezdetéig nem is volt ilyen a kezemben.

GPeti: Ha a ? : három operandusú feltételes operátor érdekel akkor vagy kérdezz vagy pl olvasd el a Kernighan & Ritchie C könyv 13. oldalán a magyarázatát a 7.15 pontban.
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

SzLacus írta:Teljesen igaz. A lustaság a fejlődés motorja. De azért céltalanul nem vagyunk lusták. Továbbra is a hónap neveinek megjelenítésére koncentrálva, létrehozunk egy 12*3 elemű tömböt a 12 hónapunk nevével. De ezt 12 elemben is megtehetnénk, ha az egyes hónapokat jelentő három betűt egybe írnánk. A null lezárást elkerülendő csak így 'Jan'.....'Dec'.
Igen, csak az a fránya C illetve "Arduino" nyelv nem ismer ilyet.
Ha aposztróf akkor egy karakter, punktum.
Ha idézőjel akkor pedig lehet akárhány karakter, de a végére tenni fog lezáró nullát.
SzLacus írta: A kiírásnál úgyan úgy a honapok tömb ho elemét választanánk a számolás alapján, csak nem kéne az 1...2...3 elemét külön egymás után kizavarni a kijelzőre. Vagy tévedek? Annak volna valami olyan következménye ami most nem látszik, de majd jól beleütközünk, és itt még nem kerül magyarázatra?
Nézd, azzal sincs semmi baj, ha "Jan", "Feb", stb a tömbelemek definiálási módja, legföljebb lesz 12 elfecsérelt byte a kódban. Több is veszett Mohácsnál. Csak ha az ember igyexik összehúznia magát a mikrokontroller csekélyke memóriájában akkor a 12 bájtot sem hagyja veszni.
SzLacus írta:Másik kérdésem a tömör írásmóddal kapcsolatban adódik.
honaphossz = (ho==2) ? ( (!(ev%4) && (ev%100)) || !(ev%400) ? 29 : 28 ) : ((ho+(ho>7))%2) ? 31 : 30;
Tudjuk minek kell kijönni, így könnyebb, de egy 4-el osztás maradékának negálásával kezdünk egy & kapcsolatot. A maradék lehet 0-3-ig. Ebből nekünk a 0 a nyerő és annak negálása 1-et eredményez az & egyik bemenetén, tehát ekkor már csak a másik bemenettől függ a dolog. De az 1-3 maradékok esetén mi lesz a negálás eredménye?
Utána az & másik bemenete a 100-as osztás maradéka. Ugyan ez a kérdésem, csak itt nincs negálás. Ami nem nulla az 1-nek számít, egy logikai műveletben?
Mert itt a nulla maradék esetén lehet nem szökőév.
A 400-as osztásnak meg bele sem fér egy bájtba a maradéka. Azzal mi a helyzet? Értem én, hogy most pont a nulla maradék az ami nekünk kell, és negálva a vagy kapcsolat eredménye az, hogy a 400-al osztható év az szökőév, csak mi történik belül.
A C és emiatt az Arduino nyelv (Robi, helyes ezt Arduino nyelvnek mondani?) úgy rendelkezik, h ami 0 az hamis, ami nem nulla az igaz.
SzLacus írta:(Vicces, hogy az idézetben smile lett a 8-as és zárójelből, de az érthetőséget talán nem zavarja.)
Ha a hsz alatti 3 pipalehetőségből a középsőt bekapcsolod (Emotikonok kikapcsolása a hozzászólásban) akkor megmarad a nyolcas meg a zárójel viszont sehol nincs szmájli.
Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00

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

Köszi Macsek, összefoglalom a magam konyha nyelvén. Ha felső vesszők közé rakom, akkor csak egy karakter lehet közte, és spóroltam a lezáró null-t. Több karakter esetén mindegy mik közé teszem, hozzárakja a fordító a null-t. Ez az amit null terminálásnak neveznek? Ezzel a fogalommal már találkoztam, pontosabban hallottam már.
A logikai műveletnél sejtettem, hogy csak a nulla a konkrét, minden más 1-nek értelmezendő, de ha esetleg összehasonlítom 1-el akkor nem okvetlenül egyezik. Vagyis a "nulla", vagy "nem nulla" az eredményre vezető vizsgálat.
Köszi, meg Kapu48-nak is, mert ezt már abból megértettem.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Logikai igaz: 1
Logikai hamis: minden más :)


Karakterlánc lezárása: "0" kódú karakterrel. Bascomban a karakterkód jelölése: {xxx} - utalva a régi ASCII kódtáblára.

Azaz a karakterlánc: ABC{000}
Ha meg BINÁRIS adatként viszed be (aposztróf), akkor a byte-k egymás után:{065}{066}{077}
És nincs lezáró 0-s kódú karakter, mert 3 db byte-ként vitted be....
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

Robert írta:Logikai igaz: 1
Logikai hamis: minden más :)
Ez hol van így, BASCOM-nál?
Mert C-nél (és ebből adódóan Arduinonál) 0=hamis, nem nulla=igaz
Robert írta:Karakterlánc lezárása: "0" kódú karakterrel. Bascomban a karakterkód jelölése: {xxx} - utalva a régi ASCII kódtáblára.

Azaz a karakterlánc: ABC{000}
Ha meg BINÁRIS adatként viszed be (aposztróf), akkor a byte-k egymás után:{065}{066}{077}
És nincs lezáró 0-s kódú karakter, mert 3 db byte-ként vitted be....
SzLacus írta:Több karakter esetén mindegy mik közé teszem, hozzárakja a fordító a null-t.
NEM
Egy karakter egyszeres felső vesszők (aposztrofok) között: char, egy byte hosszú.
Mindegy hány (akár nulla vagy egy is) karakter, idézőjelek között: karakterlánc és odateszi a fordító a lezáró nullát a végére.
SzLacus írta:Ez az amit null terminálásnak neveznek
Igen. :)
Zero terminated vagy nullával lezárt vagy null terminált vagy C string, ez mind ezt jelenti.
Előnye, h akármilyen hosszú lehet, mert addig tart, amig az első 0 kódú karakter következik benne.
Hátránya, h így csak 255 féle értéket vehetnek fel a benne levő karakterek.

Ezzel ellentétben a Pascal típusú karakterláncoknál az első byte a hossz, aztán akármilyen (tehát 256-féle) karakterek állhatnak bármely pozíción.
Ennek hátránya pedig a limitált hossz. De ezt most csak kitérőként említettem meg.
Ismereteim szerint ez a két string-tárolási módszer terjedt el a gyakorlatban.
Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00

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

Köszönöm a különórát, úgy gondolom, hogy értem. Hogy alkalmazni is tudom-e az majd elválik. :-)
Ezt a "0=hamis, minden más igaz", vagy "1= igaz, minden más hamis" kérdést ne hagyjuk elhamvadni, mert ez elég fontosnak tűnik számomra. Már csak azért, mert itt nem bitekről beszélünk, ahol nincs más lehetőség, hanem ha jól értem, akkor bájt, vagy bármi lehet a vizsgálat tárgya. (Egy osztás maradéka az sokféle lehet, a 0....osztó értéke-1 tartományban.) Az eddig olvasott kódokból én a nullát látom az egyetlen fix pontnak, és logikailag is ez tűnik az egy lépésben fixen felismerhető értéknek, ha nem bitekről beszélünk.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Próbálj futatni valamilyen teszt programot!
Példáúl ezt:

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

long time; 
long oldtime;

void setup(){ 
   Serial.begin(9600); 
   Serial.println("Start"); 
    
 }  
 
void loop(){ 
   oldtime = millis()/100; 
   if (oldtime){ 
     Serial.print("IGAZ = Time/100: "); 
     Serial.println(oldtime);
   }else
   {
     Serial.print("HAMIS = Time/100: ");  
     Serial.println(oldtime);
   }  
    Serial.println();
    delay(1000);
 }
A "oldtime = millis()/100;" helyet lehet bármilyen műveletet!
Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00

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

Ebből szerintem az látszik, hogy minden ami nem nulla az igaz.
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

SzLacus írta:Ebből szerintem az látszik, hogy minden ami nem nulla az igaz.
Valahogy sejtettem, h ez jön majd ki belőle 8)
Válasz küldése