Autor
|
Tema: Ayuda con una ordenacion de un array please? :P (Leído 2,613 veces)
|
valeeen
Desconectado
Mensajes: 46
|
Buenas amigos! Para clase tengo que ordenar un array alfabeticamente, es un array que se forma a partir de la lectura de un fichero, tiene 4 columnas, la primera es el nombre que es por la que quiero ordenarlo... el caso es que he llegado a esto: void sortByName(producto productoArray[], int pLength) { char *temp; int i, j; for (i = 0; i<pLength - 1; i++) { for (j = i + 1; j<pLength; j++) { if (strcmp(productoArray[i].nombre, productoArray[j].nombre) > 0) { temp = productoArray[i].nombre; productoArray[i] = productoArray[j]; *productoArray[j].nombre = *temp; } } } for (int i = 0; i<pLength; i++) cout << i << ". Nombre: " << productoArray[i].nombre << ", Codigo de barras: " << productoArray[i].codigobarras << ", Precio: " << productoArray[i].precio << ". Fecha de entrada: " << productoArray[i].fechaentrada.dia << "/" << productoArray[i].fechaentrada.mes << "/" << productoArray[i].fechaentrada.anyo << endl; } Peeeeeero, esto me cambia el nombre de todos los productos por el nombre del que seria el primero ordenado, es decir, si fuera el alfabeto, el array quedaria con todos A A A A A A A A menos el último, que deja la Z. A esta funcion la llamo asi: void sortByName(producto productoArray[], int pLength); ¿Podéis ayudarme? Mil gracias!
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Muy buenas: Por lo pronto se me ocurre lo siguiente: Hacer una función que compare dos productos. int comparar_producto(const void *p1, const void *p2) { articulo *art1 = (articulo*) p1; articulo *art2 = (articulo*) p2; return strcmp(art1 ->nombre , art2 ->nombre ); }
Y finalmente usas la función qsort, de stdlib, para que te ordene ella sola el array. qsort(productoArray [], pLength , sizeof(producto ), comparar_producto );
|
|
|
En línea
|
|
|
|
valeeen
Desconectado
Mensajes: 46
|
Muy buenas: Por lo pronto se me ocurre lo siguiente: Hacer una función que compare dos productos. int comparar_producto(const void *p1, const void *p2) { articulo *art1 = (articulo*) p1; articulo *art2 = (articulo*) p2; return strcmp(art1 ->nombre , art2 ->nombre ); }
Y finalmente usas la función qsort, de stdlib, para que te ordene ella sola el array. qsort(productoArray [], pLength , sizeof(producto ), comparar_producto );
Gracias Mafus por la idea! tengo un problemilla, y es que no se como pasar mi array como parametro a esa funcion que me has dicho jeje. en el productos.h tengo la llamada a la funcion: #include <stdlib.h> void ordenarProductos(producto productoArray[], int pLength);
y en el productos.cpp tengo la definición en dos partes, primero: int comparar_producto(const void *p1, const void *p2) { articulo *art1 = (articulo*)p1; articulo *art2 = (articulo*)p2; return strcmp(art1->nombre, art2->nombre); }
y despues: void ordenarProductos(producto productoArray[], int pLength) { qsort(productoArray[], pLength, sizeof(producto), comparar_producto); }
Estoy empezando con C++ y está claro que algo estoy haciendo mal jeje. A ver si me podéis ayudar! Gracias! Un saludo
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Muy buenas. Ahora que lo he visto, fallo mio. Siendo productoArray tu array de productos declarado como producto productoArray[pLength];
siendo pLength una constante numérica que marca el tamaño de tu array, la llamada a qsort debe ser así: qsort(productoArray , pLength , sizeof(producto ), comparar_producto );
No se si la funcion ordenarProducto debes incluirla obligatoriamente pero no te haría falta porque qsort hace todo el trabajo. Allí donde tengas ordenarProducto pones directamente qsort y tu array se debe ordenar directamente.
|
|
|
En línea
|
|
|
|
valeeen
Desconectado
Mensajes: 46
|
Muy buenas. Ahora que lo he visto, fallo mio. Siendo productoArray tu array de productos declarado como producto productoArray[pLength];
siendo pLength una constante numérica que marca el tamaño de tu array, la llamada a qsort debe ser así: qsort(productoArray , pLength , sizeof(producto ), comparar_producto );
No se si la funcion ordenarProducto debes incluirla obligatoriamente pero no te haría falta porque qsort hace todo el trabajo. Allí donde tengas ordenarProducto pones directamente qsort y tu array se debe ordenar directamente. Ha funciona a la perfección Mafus!! Muchas gracias! Una duda que me queda, en vez de modificar el txt original... ¿Se podría hacer un "cout" de un array temporal ordenado? Para dejar el archivo original intacto. Gracias por la solución! Un saludo!
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Muy buenas.
Si a lo que te refieres a no cambiar el archivo, pues sin guardarlo en dicho archivo seguirá desordenado. Si te refieres a seguir teniendo el array original desordenado puedes hacerle una copia y trabajar sobre la copia.
|
|
|
En línea
|
|
|
|
valeeen
Desconectado
Mensajes: 46
|
Muy buenas.
Si a lo que te refieres a no cambiar el archivo, pues sin guardarlo en dicho archivo seguirá desordenado. Si te refieres a seguir teniendo el array original desordenado puedes hacerle una copia y trabajar sobre la copia.
Bueno, lo voy a dejar así al final jeje Gracias por la ayuda Mafus! Saluds
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda sobre ordenacion en C#
.NET (C#, VB.NET, ASP)
|
F3RN1
|
4
|
4,424
|
2 Julio 2008, 13:25 pm
por kargarof
|
|
|
ayuda metodo de ordenacion...
Java
|
PsyAcCes
|
1
|
2,177
|
14 Junio 2010, 02:08 am
por Leyer
|
|
|
Ayuda con metodo de ordenacion
Programación C/C++
|
Rilax
|
9
|
4,376
|
21 Junio 2010, 15:45 pm
por cbug
|
|
|
Ayuda con ordenación plis!
Programación C/C++
|
mihina
|
1
|
1,988
|
22 Febrero 2011, 13:25 pm
por mihina
|
|
|
Ayuda algoritmo de ordenacion
Programación C/C++
|
0and6
|
2
|
2,110
|
1 Agosto 2015, 07:27 am
por 0and6
|
|