[C con Clase] Resumen de Cconclase, Vol 57, Envío 2

Edinson Vivas edinson.vivas en gmail.com
Jue Feb 3 22:40:28 CET 2011


Yo de nuevo muchachos, quisiera saber sí me pueden ayudar en otra
cosa, ya logré eliminar un dato de una estructura gracias a los
consejos que me dieron, pro ahora necesito sabes como se puede validar
un dato entero largo, para ke no escriban caracteres ni elementos
flotantes... Alguna sugerencia?

El 02/02/11, cconclase-request en listas.conclase.net
<cconclase-request en listas.conclase.net> escribió:
> Envíe los mensajes para la lista Cconclase a
> 	cconclase en listas.conclase.net
>
> Para subscribirse o anular su subscripción a través de la WEB
> 	http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
> 	cconclase-request en listas.conclase.net
>
> Puede contactar con el responsable de la lista escribiendo a:
> 	cconclase-owner en listas.conclase.net
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of Cconclase digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
>    1. Re: Resumen de Cconclase, Vol 57, Envío 1 (Edinson Vivas)
>    2. Re: Resumen de Cconclase, Vol 57, Envío 1 (Steven Davidson)
>    3. Re: Eliminar dato de una structura (era: Resumen de
>       Cconclase, Vol 57, Envío 1) (Programante)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Tue, 1 Feb 2011 15:21:36 -0400
> From: "Edinson Vivas" <edinson.vivas en gmail.com>
> To: <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Resumen de Cconclase, Vol 57, Envío 1
> Message-ID: <4d486526.1d4de50a.30dd.ffff8e00 en mx.google.com>
> Content-Type: text/plain;	charset="iso-8859-1"
>
> // estructura destinada al registro alumnos
> struct Estudiante
> {
> 	unsigned long int cedula;
> 	char pnombre[50];
> 	char snombre[50];
> 	char papellido[50];
> 	char sapellido[50];
> 	int codsemestre;
> 	int codcarrera;
> 	int matriculadas;
> 	int materia [6];
> 	unsigned long int telefono;
> }lista[100];
>
> Esta es la estructura, si deseo integrar a mi proyecto, una opción para
> eliminar los datos de cualquier alumno, como seria ?
>
> Yo coloque lo siguiente: lista[contador].cedula = NULL; (buscándolo por
> elemento cedula, mostrando su información y luego corroborando si los datos
> son ciertos me permita modificarlos y/o eliminarlos).
>
> Esto lo hace, pero lo malo, es que si el registro se encuentra ubicado en la
> posicion: por ejemplo lista[10]...
> Se eliminaran todos los registros posteriores a el... osea lista[11]...,
> lista[12]..., etc... Hasta llenar nuevamente ese espacio vacio (NULL), luego
> de haberlo llenado aparecen los datos posteriores como si no fuera pasado
> nada xD... osea lista[11]..., lista[12]..., etc...
>
> Alguna sugerencia ?
>
> -----Mensaje original-----
> De: cconclase-bounces en listas.conclase.net
> [mailto:cconclase-bounces en listas.conclase.net] En nombre de
> cconclase-request en listas.conclase.net
> Enviado el: martes, 01 de febrero de 2011 7:00
> Para: cconclase en listas.conclase.net
> Asunto: Resumen de Cconclase, Vol 57, Envío 1
>
> Envíe los mensajes para la lista Cconclase a
> 	cconclase en listas.conclase.net
>
> Para subscribirse o anular su subscripción a través de la WEB
> 	
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
> 	cconclase-request en listas.conclase.net
>
> Puede contactar con el responsable de la lista escribiendo a:
> 	cconclase-owner en listas.conclase.net
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of Cconclase digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
>    1. Re: Eliminar dato de una structura (alvaro martin garcia)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 31 Jan 2011 13:16:41 +0100
> From: alvaro martin garcia <purifuri en gmail.com>
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] Eliminar dato de una structura
> Message-ID:
> 	<AANLkTi=+EuO8xJV-gDPowZHHgc_9pbEtKpgvc3FFiSwE en mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Me imagino que con estructura te refieres a que tienes un array de struct.
>
> Usas memoria dinámica o estática?, es decir, ¿tienes:
> struct loquesea {...}
>
> loquesea a
>
> o tienes: loquesea *a?
>
> Si lo tienes las variables de la primera (que me imagino que será así), la
> gestión de la memoria se encarga el sistema, es decir, no hay forma de que
> tú lo puedas borrar.
>
> Puedes, por ejemplo, al struct añadirle un campo que sea un booleano llamado
> "valido", por ejemplo, y cuando lo quieras "borrar", poner el booleano a
> false. Y cuando accedas al dato, preguntar si el dato es valido.
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL:
> <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachme
> nts/20110131/f9da0989/attachment-0001.html>
>
> ------------------------------
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> Fin de Resumen de Cconclase, Vol 57, Envío 1
> ********************************************
>
>
>
>
> ------------------------------
>
> Message: 2
> Date: Tue, 01 Feb 2011 16:37:44 -0500
> From: Steven Davidson <srd4121 en njit.edu>
> To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Resumen de Cconclase, Vol 57, Envío 1
> Message-ID: <4D487D28.6020208 en njit.edu>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Hola Edinson,
>
> On 2/1/2011 2:21 PM, Edinson Vivas wrote:
>> // estructura destinada al registro alumnos
>> struct Estudiante
>> {
>> 	unsigned long int cedula;
>> 	char pnombre[50];
>> 	char snombre[50];
>> 	char papellido[50];
>> 	char sapellido[50];
>> 	int codsemestre;
>> 	int codcarrera;
>> 	int matriculadas;
>> 	int materia [6];
>> 	unsigned long int telefono;
>
> No aconsejo implementar 'telefono' como un valor entero. Sugiero usar
> una cadena de caracteres.
>
>> }lista[100];
>>
>> Esta es la estructura, si deseo integrar a mi proyecto, una opción
>> para eliminar los datos de cualquier alumno, como seria ?
>>
>
> Como se trata de un array (de estructuras), no puedes eliminar un
> elemento de un array. Una solución, que podemos hacer, es la que te
> comentaron otros socios: "marca" un elemento (una estructura) como
> "eliminado". Esto significa que cada elemento debe contener un atributo
> dedicado para esta marcación. O bien, tenemos que agregar otro dato
> miembro de esta estructura para tal marcación; por ejemplo,
>
> struct Estudiante
> {
>    bool bEliminado;
>    unsigned long int cedula;
>    ...
> };
>
> O bien, podemos usar un dato miembro existente el cual puede guardar un
> valor inválido para su propósito, pero podemos interpretarlo como
> "eliminado"; por ejemplo,
>
> struct Estudiante
> {
>    unsigned long int cedula;
>    ...
> };
>
> Como 'cedula' debe ser mayor que 0, el valor de 0 es inválido para este
> concepto. Por lo tanto, podemos usar este campo y con un valor de 0 para
> indicar que esta estructura está eliminada. Posiblemente podamos elegir
> otro campo, como por ejemplo, 'pnombre' que no tiene sentido que sea una
> cadena nula: "".
>
> En cualquier caso, tu programa deberá interpretar este dato miembro y su
> valor para poder tratar el array y sus elementos correctamente.
>
>
> La otra solución con un array es mantener todos los elementos válidos
> agrupados y separados de todos los elementos inválidos porque están
> eliminados. Además, mantenemos una variable para indicar la cantidad
> actual de elementos en el array. Esto supone que cada vez que tengamos
> que eliminar un elemento, debemos recolocar la sublista de elementos
> válidos posteriores a tal elemento a eliminar para mudarlos a la
> "izquierda", para que estén todos los elementos válidos agrupados. Por
> ejemplo,
>
> Si tenemos 40 elementos y queremos eliminar 'lista[5]', entonces tenemos
> que copiar todos los elementos entre 'lista[6]' y 'lista[39]' (ambos
> incluidos) para que empiecen en 'lista[5]' - el elemento a eliminar.
> Obviamente, después de esta copia (o mudanza) restamos uno a la cantidad
> actual de elementos del array.
>
>
> Otras soluciones existen si no usas un array, sino estructuras
> dinámicas, pero no sé si se te permite o no.
>
>> Yo coloque lo siguiente: lista[contador].cedula = NULL; (buscándolo
>
> No sugiero usar la constante simbólica 'NULL', al menos que la hayas
> definido tú mismo. Elige un valor apropiado y conocido.
>
>> por elemento cedula, mostrando su información y luego corroborando
>> si los datos son ciertos me permita modificarlos y/o eliminarlos).
>>
>> Esto lo hace, pero lo malo, es que si el registro se encuentra
>> ubicado en la posicion: por ejemplo lista[10]...
>> Se eliminaran todos los registros posteriores a el... osea
>
> Esto no debería ocurrir. Al fin y al cabo, tú eres quién dicta la
> interpretación de esta marcación.
>
>> lista[11]..., lista[12]..., etc... Hasta llenar nuevamente ese
>> espacio vacio (NULL), luego de haberlo llenado aparecen los datos
>> posteriores como si no fuera pasado nada xD... osea lista[11]...,
>> lista[12]..., etc...
>>
>> Alguna sugerencia ?
>>
>
> Como he mencionado, debe ser algún error en tu interpretación de la
> marcación. Sin ver algo de código fuente donde se encuentra este
> comportamiento extraño, no puedo entrar en detalles.
>
>
> Espero que todo esto te oriente.
>
> Steven
>
>
>
>
> ------------------------------
>
> Message: 3
> Date: Tue, 01 Feb 2011 23:27:50 +0100
> From: Programante <programante en gmail.com>
> To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Eliminar dato de una structura (era:
> 	Resumen de Cconclase, Vol 57, Envío 1)
> Message-ID: <4D4888E6.1060900 en gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
>
> El 01/02/11 22:37, Steven Davidson escribió:
>> Si tenemos 40 elementos y queremos eliminar 'lista[5]', entonces
>> tenemos que copiar todos los elementos entre 'lista[6]' y 'lista[39]'
>> (ambos incluidos) para que empiecen en 'lista[5]' - el elemento a
>> eliminar. Obviamente, después de esta copia (o mudanza) restamos uno a
>> la cantidad actual de elementos del array.
> Otra opción -si no hace falta mantenerlos ordenados- es copiar lista[39]
> a list[5] y decrementar la cantidad de elementos.
>
>>> Yo coloque lo siguiente: lista[contador].cedula = NULL; (buscándolo
>>
>> No sugiero usar la constante simbólica 'NULL', al menos que la hayas
>> definido tú mismo. Elige un valor apropiado y conocido.
> Especialmente dado que cedula es un entero y no un puntero.
>
>
>
>
> ------------------------------
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> Fin de Resumen de Cconclase, Vol 57, Envío 2
> ********************************************
>

-- 
Enviado desde mi dispositivo móvil

\---/___(O_o)__\-/
◄E-d-i-N-s-O-N☻




Más información sobre la lista de distribución Cconclase