+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Nov 2010
    Ort
    Gernsheim
    Beiträge
    494

    Standard Array befüllen

    Hallo Gemeinde,

    ich hänge hier an einem kleinen Problem, eventuell kann mir jemand mit einem Codeschnipsel auf die Sprünge helfen

    Ich möchte ein Array mit 100 floatwerten befüllen.

    Die Werte kommen alle 5 Sekunden von einem Sensor. Die Werte liegen also am Anfang nicht alle vor, sondern "tröpfeln" langsam das array voll.

    Jetzt der Knackpunkt, an dem ich hänge:

    wenn der 101te Wert vom Sensor kommt, soll der erste Wert (Sensor[0]) rausfliegen, und alle anderen nachrücken...

    Der neue Wert soll in Sensor[99] gespeichert werden, und Sensor[98] soll den alten wert von Sensor [99] bekommen und das ganze bis Sensor[0] rekursiv.....

    Sorry, wenn das ein wenig unverständlich ausgedrückt ist, aber ich hoffe, ihr versteht mich halbwegs

    Ganz liebe Grüße
    Sascha
    Geändert von Sascha (11.07.18 um 19:57 Uhr)
    "the flat earth society has members all around the globe"

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,463

    Array_shift entfernt das erste Elemente.
    Array_push fügt hinten eins an.
    Siehe
    PHP: array_shift - Manual
    PHP: array_push - Manual
    Wann du was machen musst, kannst du ja durch Count oder sizeof ermitteln.
    PHP: count - Manual
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Nov 2010
    Ort
    Gernsheim
    Beiträge
    494

    Vielen Dank für die schnelle Antwort,

    leider programmiere ich das gerade in C++ (Arduino) und merke gerade, dass es diese Funktionen da nicht gibt

    Aber nur zum Verständnis......hätte array_push alle anderen werte auch um einen Speicherplatz nach hinten geschoben ?
    Das wäre genau das, was ich gerade bräuchte....

    Liebe Dank
    Sascha
    "the flat earth society has members all around the globe"

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,463

    Nein Array Shift hatte das erste (älteste) gelöscht. Dadurch rutschen die anderen einen auf.
    Wo steht den das du das in C++ machen willst...
    Warum fragst du so etwas im IPS Forum? Da gibt es doch bestimmt bessere für
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Nov 2010
    Ort
    Gernsheim
    Beiträge
    494

    da hast du natürlich recht......ist quasi eine ausgelagerte Hardware, die dann mit IPS später verknüpft wird.......

    Danke und entschuldige wegen der Verwirrung

    LG
    Sascha
    "the flat earth society has members all around the globe"

  6. #6
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,463

    Ich habe zwar kein Beispiel parat, aber ich würde mir einfach die aktuelle Stelle vom Array merken und wenn das Maximum erreicht ist, von vorne anfangen.
    Will man dann den ältesten Wert lesen, ist es der aktuelle Index +1 (oder halt 0 wenn bisher weniger als max Anzahl Daten geschrieben wurden).
    Gibt bestimmt auch diverse fertige Libs oder Funktionen dafür. Da ich meistens aber nur bei MCUs mit C++ arbeite; bin ich da eher nicht der spezie
    Habe da irgendwo auch mal eine Queue benutzt um einen dynamischen Datenringspeicher umzusetzen.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  7. #7
    Registriert seit
    Nov 2010
    Ort
    Gernsheim
    Beiträge
    494

    Ja, mit den Ringspeichern spiele ich auch gerade rum

    Das scheint mir momentan am performativsten zu sein.

    Mit einer for schleife 700 einträge um eins nach hinten zu kopieren hat mir gerade so die Kiste zerlegt, das ich eine halbe Stunde nichts mehr drauf spielen konnte

    Ich schau mir die Ringspeicher mal genauer an.....

    Vielen Dank und liebe Grüße
    Sascha
    "the flat earth society has members all around the globe"

  8. #8
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,463

    Ist ja Quark Daten zu verschieben.
    Dann lieber nur einen Index versetzen
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  9. #9
    Registriert seit
    Feb 2018
    Ort
    Bochum
    Beiträge
    339

    Ringpuffer ist natürlich immer gut, weil die Bedeutung dann schon am klarsten ist, sonst könnte man das so machen.
    Das ist von der Performance sicher kein Problem

    Code:
    #include <stdio.h>
    #include <string.h>
    
    main(int argc, char *argv[])
    {
        double a[4];
        int i, j, n = 4;
    
        // initialisieren 
        memset(a, 0, sizeof(a)); 
    
        for (i = 1; i < 5; i++) {
    
            // wert setzen
            memcpy(&a[0], &a[1], sizeof(a[0]) * n - 1);
            a[n - 1] = (float)i;
    
            for (j = 0; j < n; j++)
                printf("a[%d]=%f\n", j, a[j]);
            printf("\n");
        }
    }
    das wäre der Output

    Code:
    a[0]=0.000000
    a[1]=0.000000
    a[2]=0.000000
    a[3]=1.000000
    
    a[0]=0.000000
    a[1]=0.000000
    a[2]=1.000000
    a[3]=2.000000
    
    a[0]=0.000000
    a[1]=1.000000
    a[2]=2.000000
    a[3]=3.000000
    
    a[0]=1.000000
    a[1]=2.000000
    a[2]=3.000000
    a[3]=4.000000

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 30.04.18, 19:18
  2. Badewanne befüllen mit Z-Wave
    Von Gerdek im Forum Z-Wave
    Antworten: 3
    Letzter Beitrag: 28.11.14, 14:32
  3. Variable befüllen?
    Von michl im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 11.10.13, 13:42
  4. Antworten: 6
    Letzter Beitrag: 27.11.12, 17:17
  5. Cutter via Script befüllen
    Von heschdy im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 19.08.11, 22:19