valtozok adatainak ciklusonkenti mentese

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

valtozok adatainak ciklusonkenti mentese

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

Sziasztok,

szeretnem egy valtozo adatait indexaltan elmenteni minden loop futas soran, kesobbi muveletekhez.

Pelda:
int elsofutas;
int masodikfutas;
int harmadikfutas;
int negyedikfutas;
int x;
for (x=0;x<4;x++) // ekkor 4-szer fut le a blokk
{

int elsofutas = x(1) ; // a blokk elso lefutasakor
int masodikfutas = x(2) ; //a blokk masodik lefutasakor
int harmadikfutas = x(3) ; // a blokk harmadik lefutasakor
int negyedikfutass =x(4) ; // a blokk negyedik lefutasakor

float average = (x(1)+x(2)+x(3)+x(4))/4;
}

if (average <1)
{...

Ket problemaba utkoztem:
1. hogyan tudok hivatkozni a lefutasok szamara, azaz hogyan tudom az ertekeket rogziteni elsofutas...negyedikfutas valtozokra?
2. az average valtozot (es erteket) hogyan tudom athozni a for blokkon kivulre? a fenti peldaban az if feltetelnel szerintem hibat irna az arduino mivel az average nincsen definialva.

Koszonom elore is a segitseget.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: valtozok adatainak ciklusonkenti mentese

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

használj mondjuk tömböket
https://www.arduino.cc/en/Reference/Array

nézd meg a változók hatáskörei részt.
https://hu.wikibooks.org/wiki/C_program ... toz%C3%B3k
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

A valtozok hataskorei resz azt irja hogy nem lehet kivinni a valtozot a kapcsos zarojelen kivulre, de lehet persze tobb keretet megadni.
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

A tomboket is megneztem: nem kiiratni szeretnem a valtozo kulonbozo ertekeit, hanem kulonbozo neven eltarolni..
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: valtozok adatainak ciklusonkenti mentese

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

Globális változó

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

int i =  5; /* ez globális változó, a programban akárhol elérhető */
int j = 15; /* ez is */

/*
Ez egy függvény.
Az összes benne definiált változó lokális, csak a függvényben érhető el.
*/
int main(void)
{
    int i = 6; /* 'i' most 6 */
    printf("%d\n", i); /* kiírja a lokális 6-ot a globális i változó 5-ös értéke helyett */
    printf("%d\n", j); /* kiírja a 15-öt, a globális változó értékét */

    return 0;
}

tömbök helyett akkor használhatod ezt
https://www.arduino.cc/en/Reference/SwitchCase

for változóját figyeled és annak értéke határozza meg melyik változót töltöd fel.


Vagy mégiscsak tömböt használsz csak valahogy így

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

#define elso 0
#define masodik 1
#define harmadik 2
int eredmeny;

int futasok[] = {1,2,3};
eredmeny = futasok[elso] + futasok[masodik] + futasok[harmadik];

Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: valtozok adatainak ciklusonkenti mentese

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

A nagy kérdés, hogy hány ciklus értékét akarod eltárolni? Mit akarsz a tárolt értékkel tenni?
Ha pár tízet, jó a tömb.
Tömb[ciklusváltozo] val hivatkozol rá, írhatod, olvashatod. Bármit tudsz tenni vele.
Ha pár száz értéket figyelnél eredménycentrikus adatgyűjtést csináljál, pl hosszú méréssorozat átlagértékéhez az összeget és a ciklusváltozót osztod egymással, és csak ezt a két értéket viszed át a következő ciklusba
Ha nagyon sok mérésből kell eredményt generálni, pl egy komplett fűtési szezon hőadatai idővel, arra ott az sd kártya és a fájlműveletek
Speciális eset, mikor a mérés folyamatos, de nekünk csak az utolsó x db mérésre van szükségünk: ebben az esetben az x mértéke szerint választunk a fenti metódusok szerint (tömbben tároljuk az utolsó x mérést, kivonjuk az x-el előbbi mérést az összegből, és osztjuk x-el
Leprogramozol egy x elemű fifo tárolót és azzal dolgozol)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

Szia,
Koszonom a valaszt. Sztem a print utasitassal lehettem felreertheto. Nekem az ertek monitoron megjelenites nem fontos. Az a lenyeg, hogy pl. fusson le haromszor es ennek eredmenyekenttaroljon el harom kulon neven harom valtozoerteket, amit a harom futas soran detektalt es rendelt hozza a harom (elsofut, masodikfut, harmadikfut) valtozokhoz.
Udv.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: valtozok adatainak ciklusonkenti mentese

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

Ekkor elég a 3 elemű tömb. Azonban vigyázz arra, ha a 4. futás létrejön és a tömb[4] helyre mentesz adatot, akkor a nemdefiniált helyen levő egyéb változódat írja felül!
http://www.tavir.hu - a gazda :)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

Fel tudnatok tenni egy rovid peldat egy haromelemu tombbel? Nem talalok sehol sem gyakorlati peldat ra, mindenutt csak a monitorra iratjak a valtozokat a tenyleges eltarolas helyett.
Udv.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: valtozok adatainak ciklusonkenti mentese

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

Ellemezük a példádat és a benne levő hibákat!

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

//Példa:
//Cikluson kívüli változók
int elsofutas;
int masodikfutas;
int harmadikfutas;
int negyedikfutas;
//int tombx[4]; // tömböt []-jelekkel deklarálunk, és megadjuk a tömb méretét
// vagy ha közvetlen fel akarjuk tölteni, értékel:
int tombx[4]{1,2,3,4}; // tömböt []-jelekkel deklarálunk, és ...

// Külsö változókat nem definiáljuk újra, nem kel int.
 elsofutas = tombx[0] ; // 0-ával kezdődik a blokk első lefutásakor
 masodikfutas = tombx[1] ; //a blokk masodik lefutasakor 
 harmadikfutas = tombx[2] ; // a blokk harmadik lefutasakor
 negyedikfutass = tombx[3] ; // a blokk negyedik lefutasakor
 
// vagy:
 tombx[0] = elsofutas ; // 0-ával kezdődik a blokk első lefutásakor
 tombx[1] = masodikfutas  ; //a blokk masodik lefutasakor 
 tombx[2] = harmadikfutas ; // a blokk harmadik lefutasakor
 tombx[3] = negyedikfutass ; // a blokk negyedik lefutasakor


// extern ként megőrzi a tartalmát
extern float average = (tombx[0]+tombx[1]+tombx[2]+tombx[3])/4; // Ez csak 1* kell végrehajtani a cikluson kívülre való
if (average <1)
{...

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

Re: valtozok adatainak ciklusonkenti mentese

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

Vagy:

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

...
// extern ként megőrzi a tartalmát
extern float average = 0;
for(int x = 0; x<4; x++){
	average += tombx[x];
}
average /= 4;
...
Lehet még:

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

int futas[4];
int tombx[4];

for(int x=0; x<4; x++){
   tombx[x] = futas[x] ;
}

A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2016. december 3. szombat, 16:51-kor.
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

Koszi! Igy mar vilagos a tomb.
Az extern azt jelenti hogy az igy definialt valtozot a kapcsos zarojelen kivul is, azaz az egesz loop-ban hivatkozhatom?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: valtozok adatainak ciklusonkenti mentese

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

C-t nem lehet itt tanítani!
Tessék forgatni a könyvet:
A C programozási nyelv: http://vili.pmmf.hu/portal/documents/18 ... nighan.pdf
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: valtozok adatainak ciklusonkenti mentese

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

elolvastam a magyar konyvet, amit a tanfolyam kapcsan kaptam - igazabol tobbszor is. Azt ertem hogy az nagyon az alap, en pedig egy eleg komplikalt programon dolgozok. A kerdesem ezert gyakorlati problemat erintett, nem agyelszivas volt a celom. :)

koszi a linket!
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: valtozok adatainak ciklusonkenti mentese

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

Az extern-re nincs szükséged.

Több C file esetén használják, amikor egyik c fájl hivatkozik egy másik C fájl változójára.
Válasz küldése