26-05-2013, 20:18
Buenas, estuve gran parte del dia rompiendome la cabeza con un ordenamiento en C de un array string ALFABETICAMENTE.
Probe de todo, googlie, y no encontre nada que me funcione. ¿Algun alma caritativa que me de una mano?
Pego el problema entero, pero todo funciona, menos el orden obviamente que no se ni como encararlo ¬¬
/* El equipo de ventas de una distribuidora de camiones de carga registra las ventas de sus vendores en un vector de 100 elementos.
Cada registro contiene el codigo de vendedores, su nombre, cantidad de ventas realizadas y monto total de ventas para ese vendedor. No hay elementos con vendedores repetidos.
Mensualmente se ingresa el conjunto de datos de facturacion de ventas de ese mes registrando codigo de vendedor y monto de factura. Para cada entrada se actualiza el vector de la siguiente manera.
a) vendedor no existe en el vector
- se agrupa en registro con codigo, cantidad de ventas = 1, nombre ingresa por teclado, monto total = venta de factura.
b) Vendedor existe en el vector
- se increenta en 1 la cantidad de ventas,
- se acumula monto al preexistente.
Mostrar - vendedor con mas ventas
- vendedor con mayor importe de ventas
(en ambos casos si hay mas de uno muestra todos los maximos)
Mostrar vector ordenado por nombre.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 100
typedef struct
{ int codigo;
char nombre[40];
int cantVentas;
float ventasTotal;
} Vendedores;
void cargaVector (Vendedores *);
void mostrarTodo (Vendedores *);
void mostrarMaxVentas (Vendedores *);
void mostrarMaxImporte (Vendedores *);
void ordenVector (Vendedores *);
int main (void)
{
int i=0;
Vendedores vecVend[TAM];
vecVend[i].codigo=0;
puts ("\tREGISTRO DE VENDEDORES");
cargaVector (vecVend);
puts("\nPresione una tecla para mostrar todos los registros ingresados");
getch();
mostrarTodo (vecVend);
puts("\nPresione una tecla para mostrar el/los registro/s con Mas Ventas");
getch();
mostrarMaxVentas (vecVend);
puts("\nPresione una tecla para mostrar el/los registro/s con Maximo Importe");
getch();
mostrarMaxImporte (vecVend);
getch();
puts("Presione una tecla para ordenar todos los registros por nombre");
ordenVector (vecVend);
}
void cargaVector (Vendedores *vecVend)
{
int i=0, j, cod;
float auxVentas;
bool repetido;
int posRepetida;
vecVend[i].cantVentas=0;
printf("\nIngrese el codigo del vendedor, 0 para salir: ");
scanf("%d", &cod);
while (cod != 0)
{
repetido=false;
if (i == TAM-1)
{ puts("El vector esta lleno");
return;
}
for (j=0;j<i;j++)
{
if (vecVend[j].codigo == cod)
{
repetido=true;
posRepetida=j;
}
}
if(repetido)
{
printf("\nEl codigo de vendedor esta repetido, se procede a modificar el vendedor: \ncodigo: %d, \nnombre: %s", vecVend[posRepetida].codigo, vecVend[posRepetida].nombre);
vecVend[posRepetida].cantVentas = vecVend[posRepetida].cantVentas + 1;
printf("\nIngrese el monto de la venta: $");
scanf("%f",&auxVentas);
vecVend[posRepetida].ventasTotal = vecVend[posRepetida].ventasTotal + auxVentas;
}
else
{
vecVend[i].codigo = cod;
printf ("\nIngrese el nombre del vendedor: ");
fflush (stdin);
gets (vecVend[i].nombre);
vecVend[i].cantVentas = 1;
printf("\nIngrese el monto de la venta: $");
scanf("%f",&auxVentas);
vecVend[i].ventasTotal = auxVentas;
}
printf("\nIngrese el codigo del vendedor, 0 para salir: ");
scanf("%d", &cod);
vecVend[i+1].codigo = 0;
i++;
}
return;
}
void mostrarTodo (Vendedores *vecVend)
{
int i=0;
printf("\t Codigo ³ Nombre ³ Cant Ventas ³ Importe Total ");
while (vecVend[i].codigo != 0)
{ printf("\n\t %d ³\t %s ³\t %d ³\t %f ", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
i++;
}
getch();
return;
}
//MOSTRAR MAX CANTIDAD DE VENTAS //////////////////////////////////////////
void mostrarMaxVentas (Vendedores *vecVend)
{ int i=0;
int max=0;
while (vecVend[i].codigo != 0)
{ if (vecVend[i].cantVentas > max)
{ max = vecVend[i].cantVentas;
}
i++;
}
i=0;
printf ("\n\tEl vendedor/es con mas ventas: ");
while (vecVend[i].codigo != 0)
{ if (vecVend[i].cantVentas == max)
{ printf ("\nCodigo: %d \nNombre: %s \nCantidad de Ventas: %d \nVentas Totales: %f", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
}
i++;
}
return;
}
//MOSTRAR MAX IMPORTE DE VENTAS TOTAL ////////////////////////////////////
void mostrarMaxImporte (Vendedores *vecVend)
{ int i=0;
float max=0;
while (vecVend[i].codigo != 0)
{ if (vecVend[i].ventasTotal > max)
{ max = vecVend[i].ventasTotal;
}
i++;
}
i=0;
printf ("\n\tEl vendedor/es con mayor importe de ventas en total: ");
while (vecVend[i].codigo != 0)
{ if (vecVend[i].ventasTotal == max)
{ printf ("\nCodigo: %d \nNombre: %s \nCantidad de Ventas: %d \nVentas Totales: %f", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
}
i++;
}
return;
}
//ORDEN ALFABETICO DE NOMBRES ///////////////////////////////
void ordenVector (Vendedores *vecVend)
HELP
Probe de todo, googlie, y no encontre nada que me funcione. ¿Algun alma caritativa que me de una mano?
Pego el problema entero, pero todo funciona, menos el orden obviamente que no se ni como encararlo ¬¬
/* El equipo de ventas de una distribuidora de camiones de carga registra las ventas de sus vendores en un vector de 100 elementos.
Cada registro contiene el codigo de vendedores, su nombre, cantidad de ventas realizadas y monto total de ventas para ese vendedor. No hay elementos con vendedores repetidos.
Mensualmente se ingresa el conjunto de datos de facturacion de ventas de ese mes registrando codigo de vendedor y monto de factura. Para cada entrada se actualiza el vector de la siguiente manera.
a) vendedor no existe en el vector
- se agrupa en registro con codigo, cantidad de ventas = 1, nombre ingresa por teclado, monto total = venta de factura.
b) Vendedor existe en el vector
- se increenta en 1 la cantidad de ventas,
- se acumula monto al preexistente.
Mostrar - vendedor con mas ventas
- vendedor con mayor importe de ventas
(en ambos casos si hay mas de uno muestra todos los maximos)
Mostrar vector ordenado por nombre.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 100
typedef struct
{ int codigo;
char nombre[40];
int cantVentas;
float ventasTotal;
} Vendedores;
void cargaVector (Vendedores *);
void mostrarTodo (Vendedores *);
void mostrarMaxVentas (Vendedores *);
void mostrarMaxImporte (Vendedores *);
void ordenVector (Vendedores *);
int main (void)
{
int i=0;
Vendedores vecVend[TAM];
vecVend[i].codigo=0;
puts ("\tREGISTRO DE VENDEDORES");
cargaVector (vecVend);
puts("\nPresione una tecla para mostrar todos los registros ingresados");
getch();
mostrarTodo (vecVend);
puts("\nPresione una tecla para mostrar el/los registro/s con Mas Ventas");
getch();
mostrarMaxVentas (vecVend);
puts("\nPresione una tecla para mostrar el/los registro/s con Maximo Importe");
getch();
mostrarMaxImporte (vecVend);
getch();
puts("Presione una tecla para ordenar todos los registros por nombre");
ordenVector (vecVend);
}
void cargaVector (Vendedores *vecVend)
{
int i=0, j, cod;
float auxVentas;
bool repetido;
int posRepetida;
vecVend[i].cantVentas=0;
printf("\nIngrese el codigo del vendedor, 0 para salir: ");
scanf("%d", &cod);
while (cod != 0)
{
repetido=false;
if (i == TAM-1)
{ puts("El vector esta lleno");
return;
}
for (j=0;j<i;j++)
{
if (vecVend[j].codigo == cod)
{
repetido=true;
posRepetida=j;
}
}
if(repetido)
{
printf("\nEl codigo de vendedor esta repetido, se procede a modificar el vendedor: \ncodigo: %d, \nnombre: %s", vecVend[posRepetida].codigo, vecVend[posRepetida].nombre);
vecVend[posRepetida].cantVentas = vecVend[posRepetida].cantVentas + 1;
printf("\nIngrese el monto de la venta: $");
scanf("%f",&auxVentas);
vecVend[posRepetida].ventasTotal = vecVend[posRepetida].ventasTotal + auxVentas;
}
else
{
vecVend[i].codigo = cod;
printf ("\nIngrese el nombre del vendedor: ");
fflush (stdin);
gets (vecVend[i].nombre);
vecVend[i].cantVentas = 1;
printf("\nIngrese el monto de la venta: $");
scanf("%f",&auxVentas);
vecVend[i].ventasTotal = auxVentas;
}
printf("\nIngrese el codigo del vendedor, 0 para salir: ");
scanf("%d", &cod);
vecVend[i+1].codigo = 0;
i++;
}
return;
}
void mostrarTodo (Vendedores *vecVend)
{
int i=0;
printf("\t Codigo ³ Nombre ³ Cant Ventas ³ Importe Total ");
while (vecVend[i].codigo != 0)
{ printf("\n\t %d ³\t %s ³\t %d ³\t %f ", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
i++;
}
getch();
return;
}
//MOSTRAR MAX CANTIDAD DE VENTAS //////////////////////////////////////////
void mostrarMaxVentas (Vendedores *vecVend)
{ int i=0;
int max=0;
while (vecVend[i].codigo != 0)
{ if (vecVend[i].cantVentas > max)
{ max = vecVend[i].cantVentas;
}
i++;
}
i=0;
printf ("\n\tEl vendedor/es con mas ventas: ");
while (vecVend[i].codigo != 0)
{ if (vecVend[i].cantVentas == max)
{ printf ("\nCodigo: %d \nNombre: %s \nCantidad de Ventas: %d \nVentas Totales: %f", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
}
i++;
}
return;
}
//MOSTRAR MAX IMPORTE DE VENTAS TOTAL ////////////////////////////////////
void mostrarMaxImporte (Vendedores *vecVend)
{ int i=0;
float max=0;
while (vecVend[i].codigo != 0)
{ if (vecVend[i].ventasTotal > max)
{ max = vecVend[i].ventasTotal;
}
i++;
}
i=0;
printf ("\n\tEl vendedor/es con mayor importe de ventas en total: ");
while (vecVend[i].codigo != 0)
{ if (vecVend[i].ventasTotal == max)
{ printf ("\nCodigo: %d \nNombre: %s \nCantidad de Ventas: %d \nVentas Totales: %f", vecVend[i].codigo, vecVend[i].nombre, vecVend[i].cantVentas, vecVend[i].ventasTotal);
}
i++;
}
return;
}
//ORDEN ALFABETICO DE NOMBRES ///////////////////////////////
void ordenVector (Vendedores *vecVend)
HELP