Pole v C

Zdeněk Materna zdenek.materna@gmail.com
Středa Listopad 26 14:42:32 CET 2008


Dne 26. listopad 2008 14:25 Lukáš Grepl <L.Grepl@sh.cvut.cz> napsal(a):

> > Toto nefunguje:
> >
> > for(uint8_t i=0; i<((*m).e_arr_len-1);i++)
> >   (*m).e[i] = (*m).e[i+1];
>
> Na první pohled to vypadá, že by to principiálně fungovat mohlo. Určitě
> máte v tom m a m->e_arr_len to, co předpokládáte?


Myslím, že už jsem tu chybu odhalil - holt občas se člověk musí trochu
znemoĹľnit...


>
>
> > A toto ano:
> >
> > (*m).e[0] = (*m).e[1];
> > (*m).e[1] = (*m).e[2];
> > (*m).e[2] = (*m).e[3];
> > (*m).e[4] = ((*m).req_speed - (*m).act_speed);
> >
> > Samozřejmě bych radši používal for, protože je to čistší a navíc chci to
> > pole alokovat dynamicky. Ale ať na to koukám, jak na to koukám, chybu
> > nevidím. Kompilátorem to projde, ale bohužel to nefunguje.
>
> Pro čtyři položky je to asi skoro jedno, ale obvykle bývá efektivnější
> místo přerovnávání a sčítání celého pole napsat klouzavý průměr
> přibližně takto:
>
> int update_moving_average(int value)
> {
>        static int acc, buffer[N], i;
>
>        acc = acc - buffer[i] + value;
>        buffer[i] = value;
>        if (++i >= N)
>                i = 0;
>
>        return acc;     // nebo acc/N podle potřeby
> }


Díky za inspiraci, vyzkouším.


>
>
> Lukáš Grepl
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- daląí část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20081126/496adf64/attachment-0002.htm 


Daląí informace o konferenci Hw-list