[C con Clase] Ayuda[ordenar elementos en registro]

aaaaaaaa aaasssssssssssssss miotromail.ed en gmail.com
Mar Feb 16 00:24:13 CET 2010


coincido con Steven, mas claro echale agua


Edgardo

El 15 de febrero de 2010 03:14, Steven Davidson <srd4121 en njit.edu> escribió:

> Hola Daniel,
>
> Rido wrote:
>
>> Me he leído el artículo, gracias. Aunque me he perdido en más de una
>> línea (vamos, o párrafo). Pero lo importante es que al final pude
>> hacerlo :D. Mil gracias.
>>
>> Aquí dejo el código: http://cl1p.net/agenda/
>>
>> Si le veis algún error o mejora decídmelo. Creo que ya funciona a la
>>
>
> - Como estás usando C++, sugiero que uses constantes (variables) en lugar
> de las constantes simbólicas del precompilador. Esto es,
>
> const int MAX = 20;
> const int CDIRECCION = 40;
> const int CNOMBRE = 15;
>
> - El 'typedef' no es requerido; puedes eliminarlo.
>
> - Implementaste un número de teléfono como un número entero. Aunque digamos
> "número" de teléfono, realmente no se trata de un número. Los números sirven
> para realizar operaciones aritméticas; esto no lo hacemos con los números de
> teléfono. Además, tienes que tener en cuenta la cantidad de dígitos
> decimales que un 'int' puede representar. Si 'int' ocupa 32 bits, entonces
> sólo puedes representar números de 9 dígitos. Algunos números de teléfono
> pueden contener más dígitos, y por tanto, no serán representados
> correctamente. También ten presente que se suele usar otros símbolos en un
> nº de teléfono como paréntesis, guiones, espacios e incluso letras que
> representan dígitos. Por ejemplo, (888) 999 - 1111. Aconsejo usar una cadena
> de caracteres para representar un nº de teléfono. También podrías usar una
> estructura de datos, para una implementación más compleja.
>
> - Definiste una constante para representar la cantidad máxima de contactos
> en 'agenda', pero no la usas cuando defines este array. Escribes:
>
> Tpersona agenda[20];
>
> Deberías escribir:
>
> Tpersona agenda[MAX];
>
> - Para el caso 'N', escribes:
>
> i = libre( agenda );
> nuevo( agenda, i );
>
> Esto no es necesario. Simplemente escribe:
>
> nuevo( agenda, libre(agenda) );
>
> - En la función 'nuevo()', supones que el índice 'i' de 'agenda' es válido,
> si 'nombre' es una cadena nulo (o vacía). Esto no es un buen método.
>
> Sugiero crear otra estructura para representar una agenda. Esta estructura
> contendrá el array 'agenda' y una cantidad actual de contactos en tal array.
> Por ejemplo,
>
> struct Tagenda
> {
>  Tpersona agenda[MAX];
>  int nCantActual;
> };
>
> Ahora podemos consultar la cantidad actual de la agenda de tipo, 'Tagenda'.
>
> - Haz lo mismo en 'leerag()'.
>
> - Ciertamente, puedes asignar el carácter nulo, '\0', a cada cadena en cada
> registro de la agenda, pero recomiendo usar la función estándar 'memset()'
> para asignar un mismo valor a todos los bytes de 'agenda'. Por ejemplo,
>
> memset( agenda, 0, MAX*sizeof(Tpersona) );
>
> Por otro lado, podríamos haber hecho la inicialización verdadera al definir
> el array 'agenda' en 'main()'. Esto es,
>
> Tpersona agenda[MAX] = {0};
>
> - En la función 'libre()', sugiero usar un bucle 'for', en vez de un bucle
> 'do/while'. Esto es,
>
> for( i=0; i<max && agenda[i].nombre[0]!=0; i++ );
>
> - Como te han mencionado, puedes usar 'strcmp()' para comparar cadenas de
> caracteres.
>
>  perfección y se puede ordenar por nombre (paso de hacer el resto
>> porque es lo mismo pero con otras variables del registro).
>>
>>
> Podrías usar la función estándar 'qsort()', aunque hay que entender bien
> cómo funciona y qué requiere. Puedes consultar nuestra página como
> referencia de las funciones estándares; puedes ir a:
> http://c.conclase.net/librerias/index.php?ansilib=stdlib#inicio
>
>  Por cierto, tenía entendido que las cadenas aceptan también espacios
>> en blanco, y cuando meto la dirección con un espacio en blanco se me
>> pilla el programa, alguno sabría decirme por qué y, más importante,
>> como leñes lo remedio.
>>
>>
> Sí. Las cadenas sí pueden contener espacios, ya que al fin y al cabo, son
> caracteres. El problema es que 'cin >>' se detiene al leer un carácter
> blanco: ' ', '\r', '\n', '\t', '\f', y '\v'. La solución es usar 'getline()'
> para conseguir una línea entera de caracteres terminada por el carácter de
> fin-de-línea, '\n'. Por ejemplo,
>
> char szCad[30];
>
> cin.getline( szCad, 30 );
>
>
> Espero que esto te oriente.
>
> Steven
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100215/bc981904/attachment.html>


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