Autor Tema: ¿cómo puedo limpiar un array?  (Leído 26835 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
¿cómo puedo limpiar un array?
« en: 16 de Octubre de 2011, 18:58:56 »
Hola a tod@s, una vez más tengo un problema y una vez más les pido ayuda.
 Tengo un programa donde meto datos de un teclado numérico en un array, hasta ahí todo funciona perfecto, pero necesito limpiar el array y dejarlo libre para hacer una nueva lectura de teclado, he probado algunos mecanismos pero no me ha funcionado a ver si me echan una mano, gracias de ante mano
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ¿cómo puedo limpiar un array?
« Respuesta #1 en: 16 de Octubre de 2011, 19:13:27 »
  Una forma que debería funcionar es hacer un ciclo for con la cantidad de elementos que tenga tu array y poner el caracter nulo en cada elemento. Es funciona, aunque tal vez sea poco eficaz, tal vez exista otra forma de hacerlo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ¿cómo puedo limpiar un array?
« Respuesta #2 en: 16 de Octubre de 2011, 19:19:44 »
utilizar memset() es lo más eficiente en tiempos de ejecución. Revisar la ayuda del compilador para ver como se aplica.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ¿cómo puedo limpiar un array?
« Respuesta #3 en: 17 de Octubre de 2011, 20:55:17 »
Hola.

Yo prefiero el for() .... la función memset() me trajo problemas con las interrupciones en el CCS ...

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ¿cómo puedo limpiar un array?
« Respuesta #4 en: 17 de Octubre de 2011, 21:05:05 »
Y bueno, es CCS  :mrgreen:  Raro, porque no es más que un for pero en asm, o algo muy parecido.

Saludos
No contesto mensajes privados, las consultas en el foro

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: ¿cómo puedo limpiar un array?
« Respuesta #5 en: 17 de Octubre de 2011, 21:52:13 »
Hola la mejor forma es como indico Suky usando el memset. Igualmente con colocar el primer elemento en 0 alcanza, ya que C lo debe interpretar como string nulo.

Código: C
  1. unsigned char MyStr[ 80 ];
  2. ...
  3.  
  4. MyStr[ 0 ] = 0;

Saludos !

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ¿cómo puedo limpiar un array?
« Respuesta #6 en: 17 de Octubre de 2011, 22:06:05 »
 De hecho, en Hitech sí funciona con solo colocar el caracter nulo en el primer elemento del array.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: ¿cómo puedo limpiar un array?
« Respuesta #7 en: 18 de Octubre de 2011, 14:17:16 »
Hola a todos.
He solucionado el problema que tenía para limpiar un array, de la manera que lo he hecho es como vosotros me habéis indicado, hay otras opciones que tengo que estudiar, pero por la primera que optado ha salido bien, pongo como lo he hecho:
Con un bucle for de esta manera:

Tengo un array de 4 elementos, el último elemento es un \0 que es el final del array.
Código: [Seleccionar]
Int array[4];
//con este bucle lo dejo todo a 0
For(i=0;i<4;i++){
array[i]=NULL;
}

Pero tengo un problema, resulta que al principio del programa, ese array lo grabo con los datos de un teclado que se queda grabado según pulse las teclas de esta manera:
Código: [Seleccionar]
array[i]=x; //la x es la variable del teclado
i++;

Y graba bien en cada posición del array, solo si ejecutamos el programa por primera vez.

Al tener ya cargado el array, después de aplicar el bucle for para limpiar el array y cargar todas las posiciones a 0, al intentar volver a grabar números con el teclado, el array no se carga y se queda como lo ha dejado el bucle for todo a 0.

No comprendo que puede estar fallando, ¿Por qué graba el bucle for y no graba el primer bucle que hice?. y ¿por que graba bien del teclado al iniciar el programa y luego ya no graba más?, es cómo si el programa detectara que las posiciones están llenas y no deja machacarlas.

Llevo tiempo programando o más bien "intentando" programar pero me falta mucha experiencia y conocimiento, ruego me disculpen, los único profesores que tengo son ustedes.

Espero explicarme bien les pido perdón e intentaré hacerlo mejor.
gracias
« Última modificación: 18 de Octubre de 2011, 14:20:41 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ¿cómo puedo limpiar un array?
« Respuesta #8 en: 18 de Octubre de 2011, 15:02:42 »
Si podés subir el programa va a ser mas fácil que podamos aportar algo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: ¿cómo puedo limpiar un array?
« Respuesta #9 en: 19 de Octubre de 2011, 00:02:29 »
char *p, x;
p=&array[0];
for(x=0;x<tamaño;x++) *p++=0;

PD: Los [] ocupan el doble de instrucciones mas que utilizar un puntero.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ¿cómo puedo limpiar un array?
« Respuesta #10 en: 19 de Octubre de 2011, 11:23:57 »
No termino de entender porque podes borrarlo y volver a cargarlo. Si borrarlo es lo mismo que cargarlo sólo que con los datos en 0.

¿Estás reseteando la posición del puntero? Tal vez te está ocurriendo que dejás el puntero donde terminaste antes y por ello te queda en cualquier lado.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: ¿cómo puedo limpiar un array?
« Respuesta #11 en: 19 de Octubre de 2011, 11:31:00 »
Hola, aunque sigo pensando que con solo colocar el primer miembro en 0 alcanza, estoy totalmente de acuerdo con este último post, casi siempre trabajar con punteros es mas eficiente que trabajar con los indices de los arrays.

Saludos !

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ¿cómo puedo limpiar un array?
« Respuesta #12 en: 19 de Octubre de 2011, 13:39:12 »
Hola, aunque sigo pensando que con solo colocar el primer miembro en 0 alcanza, estoy totalmente de acuerdo con este último post, casi siempre trabajar con punteros es mas eficiente que trabajar con los indices de los arrays.

Saludos !

Sip, en el foro hay un post que se vio el tema, el orden fue el siguiente:

memset
Punteros
Indices de arrays

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: ¿cómo puedo limpiar un array?
« Respuesta #13 en: 20 de Octubre de 2011, 13:00:03 »
Gracias por toda la información, uno de los problemas que me he dado cuenta que tengo, es que todos estos códigos los pruebo en el simulador proteus y me estoy dando cuenta que no funciona muy bien, para pequeños códigos va bien pero para proyectos más complejos engaña mucho, estoy a la espera de comprarme un kit de desarrollo.
he pensado en el que vende mikroelectronika, ¿alguien me puede recomendar alguno diferente para estudiarlo o este que he mirado va bien?, estoy pensando hasta comprar el kit que viene con el mikroC-pro.
gracias a todos
« Última modificación: 20 de Octubre de 2011, 13:04:01 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: ¿cómo puedo limpiar un array?
« Respuesta #14 en: 21 de Octubre de 2011, 21:57:49 »
lo mejor es un pic, un programador con debugger y una protoboard  ;-) te lo digo porke los kits de desarrollo estan bien para algunas cosas, pero donde mas aprenderas sera al montarlo tu, al programar tu tu codigo, al fallar y al solucionarlo... Un kit de desarrollo ya esta hecho, diseñado, y tiene su codigo ya hecho.


 

anything