¿como consultar si todos los valores del array tienen el mismo valor?

Started by Futu-block, March 17, 2011, 09:04:40 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

¿hay alguna formula mas sencilla que:?

if (array[1] == array[2] == array[3] == array[4] == array[5] == array[6] array[...

como tenga un array[500] no te digo na... :D

panreyes

valor=array[0];
error=0;
from i=1 to 500;
if(array != valor) error=1; break; end
end

FreeYourMind

Quote from: PiXeL on March 17, 2011, 09:21:39 AM
valor=array[0];
error=0;
from i=1 to 500;
if(array != valor) error=1; break; end
end

Hay hay esos errores xD


error=0;
from i=1 to 500;
if(array[i - 1] != array[i]) error=1; break; end
end

Futu-block

entonces no hay ninguna funcion que lo compruebe???

y para poner todo el array a un valor? esta si lo hay no??

panreyes

Para poner a todo un array el mismo valor es así xD

valor=14;
from i=0 to 500;
array=valor;
end

Abram

Quote from: PiXeL on March 17, 2011, 10:29:29 AM
Para poner a todo un array el mismo valor es así xD

valor=14;
from i=0 to 500;
array=valor;
end


Otra manera mas eficiente si damos por hecho que 0 es vacio seria:

[code language="bennu"]
while(array!=0)
    array=valor;
    i++
end
[/code]

Drumpi

Para poner a cero, o a cualquier valor si el tipo de dato del array es de 1B (byte o char) hay una manera super rápida de hacerlo, pero también peligrosa:
http://wiki.bennugd.org/index.php?title=Memset

Pero lo ideal es lo que te dicen arriba: bucles. Arrays y bucles van siempre cogidos de la mano, quieras o no.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

para poner todo a 0 (salvo floats):

memset(&array[0], 0, sizeof(array));

para comparar si todo un array es igual...

for (indice=1,valor=array[0]; indice<max_indice && valor == array[indice]; indice++) end
resultado = (indice==max_indice);
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Quote from: FreeYourMind on March 17, 2011, 09:26:30 AM
Quote from: PiXeL on March 17, 2011, 09:21:39 AM
valor=array[0];
error=0;
from i=1 to 500;
if(array != valor) error=1; break; end
end

Hay hay esos errores xD


error=0;
from i=1 to 500;
if(array[i - 1] != array[i]) error=1; break; end
end


Discrepo. El mío requiere un poco más de RAM, pero el tuyo requiere más ciclos de CPU :)

SplinterGU

claro, yo no quise comentar nada, pero si, el de free consume mas, porque hace 2 indexados a array por cada ciclo del bucle... encima el if como instruccion y el salto del if y luego el salto del end...

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Puede consumir mas pero el mio te dice que posicion tiene el valor distinto...

SplinterGU

en todas dice cual es la posicion del valor distinto, en la de pixel es en el i, en la tuya tambien, en la mia es indice.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Venga, optimización definitiva xD

error=0;
from i=1 to 500;
if(array[i] != array[0]) error=1; break; end
end

SplinterGU

no pixel, estba mejor la primera, no hagas 2 indexaciones dentro del loop, es mas, si podes evitar los if e instrucciones dentro del loop mejor... aprovecha el if que se hace si o si, que es la condicion de la instruccion loop, yo recomiendo uses for.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

No se ve el contenido de las etiquetas code, no se porque...