elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con una ordenacion de un array please? :P
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con una ordenacion de un array please? :P  (Leído 2,613 veces)
valeeen

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Ayuda con una ordenacion de un array please? :P
« en: 12 Diciembre 2015, 19:30 pm »

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:

Código:
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:

Código:
void sortByName(producto productoArray[], int pLength);

¿Podéis ayudarme?

Mil gracias!


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #1 en: 12 Diciembre 2015, 21:23 pm »

Muy buenas:

Por lo pronto se me ocurre lo siguiente:
Hacer una función que compare dos productos.

Código
  1. int comparar_producto(const void *p1, const void *p2) {
  2.    articulo *art1 = (articulo*) p1;
  3.    articulo *art2 = (articulo*) p2;
  4.    return strcmp(art1->nombre, art2->nombre);
  5. }

Y finalmente usas la función qsort, de stdlib, para que te ordene ella sola el array.

Código
  1. qsort(productoArray[], pLength, sizeof(producto), comparar_producto);


En línea

valeeen

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #2 en: 13 Diciembre 2015, 01:36 am »

Muy buenas:

Por lo pronto se me ocurre lo siguiente:
Hacer una función que compare dos productos.

Código
  1. int comparar_producto(const void *p1, const void *p2) {
  2.    articulo *art1 = (articulo*) p1;
  3.    articulo *art2 = (articulo*) p2;
  4.    return strcmp(art1->nombre, art2->nombre);
  5. }

Y finalmente usas la función qsort, de stdlib, para que te ordene ella sola el array.

Código
  1. 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:

Código:
#include <stdlib.h>
void ordenarProductos(producto productoArray[], int pLength);

y en el productos.cpp tengo la definición en dos partes, primero:

Código:
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:

Código:
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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #3 en: 13 Diciembre 2015, 02:17 am »

Muy buenas.

Ahora que lo he visto, fallo mio.  :-(

Siendo productoArray tu array de productos declarado como

Código
  1. producto productoArray[pLength];

siendo pLength una constante numérica que marca el tamaño de tu array, la llamada a qsort debe ser así:

Código
  1. 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 Desconectado

Mensajes: 46


Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #4 en: 13 Diciembre 2015, 02:30 am »

Muy buenas.

Ahora que lo he visto, fallo mio.  :-(

Siendo productoArray tu array de productos declarado como

Código
  1. producto productoArray[pLength];

siendo pLength una constante numérica que marca el tamaño de tu array, la llamada a qsort debe ser así:

Código
  1. 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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #5 en: 13 Diciembre 2015, 02:37 am »

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 Desconectado

Mensajes: 46


Ver Perfil
Re: Ayuda con una ordenacion de un array please? :P
« Respuesta #6 en: 13 Diciembre 2015, 20:01 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda sobre ordenacion en C#
.NET (C#, VB.NET, ASP)
F3RN1 4 4,424 Último mensaje 2 Julio 2008, 13:25 pm
por kargarof
ayuda metodo de ordenacion...
Java
PsyAcCes 1 2,177 Último mensaje 14 Junio 2010, 02:08 am
por Leyer
Ayuda con metodo de ordenacion
Programación C/C++
Rilax 9 4,376 Último mensaje 21 Junio 2010, 15:45 pm
por cbug
Ayuda con ordenación plis!
Programación C/C++
mihina 1 1,988 Último mensaje 22 Febrero 2011, 13:25 pm
por mihina
Ayuda algoritmo de ordenacion
Programación C/C++
0and6 2 2,110 Último mensaje 1 Agosto 2015, 07:27 am
por 0and6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines