Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mostrar el mayor de 2 registros

Estas en el tema de Mostrar el mayor de 2 registros en el foro de C/C++ en Foros del Web. Buenas a todos, este es mi primer post, a ver como se me trata :P Necesito saber una cosa en la que me he atascado ...
  #1 (permalink)  
Antiguo 20/01/2011, 11:00
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 3 meses
Puntos: 0
Mostrar el mayor de 2 registros

Buenas a todos, este es mi primer post, a ver como se me trata :P

Necesito saber una cosa en la que me he atascado y no consigo sacarla, y es que me pide lo siguiente:
Código HTML:
[I] "Diseña una función que calcule el producto más demandado de acuerdo a sus ventas habituales. Para ello el supermercado utiliza el siguiente método: hay que revisar todos los productos cuyo stock actual es menor que el mínimo. Se calcula la diferencia entre ambas cantidades y se devuelve como resultado el producto cuya diferencia sea máxima."[/I]
Y Aquí os adjunto mi código:
Código:
void exito (produc prod, provee prov, int p_prod, int p_prov)
{
  cout << endl << "Exito: " << endl;
 for (int i=0; i< p_prod-1; i++)
 {
   if (prod[i].sto_ac < prod[i].sto_min)   
     if ((prod[i].sto_ac - prod[i].sto_min) < (prod[i+1].sto_ac - prod[i+1].sto_min))
      cout << prod[i].cod;
 }
}
  #2 (permalink)  
Antiguo 20/01/2011, 11:09
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Mostrar el mayor de 2 registros

en que te has atascado?
  #3 (permalink)  
Antiguo 20/01/2011, 11:18
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Mostrar el mayor de 2 registros

Me he atascado en que o me saca el primer registro que tenga menos stock actual en vez de sacarme el que tenga una mayor diferencia entre stock actual y stock minimo.

Si quieres puedo colgar el código entero del programa para hacéroslo mas cómodo.
  #4 (permalink)  
Antiguo 20/01/2011, 11:45
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Mostrar el mayor de 2 registros

sin duda seria una buena idea
  #5 (permalink)  
Antiguo 20/01/2011, 11:52
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Mostrar el mayor de 2 registros

Primero te paso el enunciado de todo el ejercicio:

Código HTML:
Un supermercado quiere gestionar la información acerca de sus productos y sus proveedores. De cada producto le interesa conservar los siguientes datos: código, nombre, proveedor, precio, stock actual, stock mínimo y stock máximo. En el caso de los proveedores, le interesa almacenar la siguiente información: CIF, nombre, teléfono, dirección y sector (cárnico, frutas y verduras, pescadería y droguería). Los proveedores suministran diversos tipos de productos.
a) Diseña las estructuras de datos necesarias para almacenar toda la información teniendo en cuenta que el supermercado gestiona 500 tipos de productos y trabaja con 30 proveedores.
b) Diseña un módulo que muestre un listado de pedidos. En dicho listado deben aparecer los productos cuyo stock actual sea menor que el stock mínimo. El listado debe mostrar la siguiente información: código del producto, nombre del proveedor y cantidad a pedir. La cantidad a pedir será la suficiente como para que el stock del producto sea igual al stock máximo.
c) Diseña una función que calcule el producto más demandado de acuerdo a sus ventas habituales. Para ello el supermercado utiliza el siguiente método: hay que revisar todos los productos cuyo stock actual es menor que el mínimo. Se calcula la diferencia entre ambas cantidades y se devuelve como resultado el producto cuya diferencia sea máxima.
Aquí tienes el ćodigo de todo el programa:
Código:
#include <iostream>
#include <cstring>

using namespace std;

const int Knom=120;
const int Kprov=120;
const int Kdir=60;
const int Ksector=30;
const int cant_prod=500;
const int cant_prov=30;

typedef struct
{
  int cod;
  char nom [Knom];
  char prov [Kprov];
  float pre;
  int sto_ac;
  int sto_min;
  int sto_max;
  int exito;
} TProducto;

typedef TProducto produc[cant_prod];
produc prod;


typedef struct
{
  int cif;
  char nom [Knom];
  int telf;
  char dir [Kdir];
  char sector [Ksector];
} TProveedor;
  
typedef TProveedor provee[cant_prov];
provee prov;


void lista_pedidos (produc prod, provee prov, int p_prod, int p_prov)
{
  for (int i=0; i< p_prod; i++)
    if (prod[i].sto_ac < prod[i].sto_min)
    {
      cout << "Codigo: " << prod[i].cod << endl;      
      cout << "Pedido: " << prod[i].sto_max - prod[i].sto_ac << endl;       
      for (int j=0; j<p_prov; j++)
      {
	if (strcmp (prod[i].prov, prov[j].nom) == 0)
	  cout << "Proveedor: " << prov[j].nom << endl;    
      }     
      cout << "________________________________" << endl;
     }
}


void exito (produc prod, provee prov, int p_prod, int p_prov)
{
  cout << endl << "Exito: " << endl;
 for (int i=0; i< p_prod-1; i++)
 {
   if (prod[i].sto_ac < prod[i].sto_min)   
     if ((prod[i].sto_ac - prod[i].sto_min) < (prod[i+1].sto_ac - prod[i+1].sto_min))
      cout << prod[i].cod;
 }
}









void inseret_prod (produc &prod, int p_prod)
{
  for (int i=0; i<p_prod; i++)
  {
    cout << "_______________" << i << "_____________" << endl;
    cout << "Cod: ";
    cin >> prod[i].cod;
    cout << "Nom: ";
    cin >> prod[i].nom;
    cout << "Prov: ";
    cin >> prod[i].prov;
    cout << "Pre: ";
    cin >> prod[i].pre;
    cout << "Sto_ac: ";
    cin >> prod[i].sto_ac;
    cout << "Sto_min: ";
    cin >> prod[i].sto_min;
    cout << "Sto_max: ";
    cin >> prod[i].sto_max;
  }
}

void insert_prov (provee prov, int p_prov)
{
  for (int i=0; i<p_prov; i++)
  {
    cout << "_______________" << i << "_____________" << endl;
    cout << "Cif: ";
    cin >> prov[i].cif;
    cout << "Nom: ";
    cin >> prov[i].nom;
    cout << "Telf: ";
    cin >> prov[i].telf;
    cout << "dir: ";
    cin >> prov[i].dir;
    cout << "Sector: ";
    cin >> prov[i].sector;
  }
}

main()
{
    int no;
  do
  {
    int p_prod; 
    cout << "cantidad de productos: ";
    cin >> p_prod;
    inseret_prod (prod, p_prod); 
    
    int p_prov;
    cout << endl << endl << "cantidad de proveedores: ";
    cin >> p_prov;
    insert_prov (prov, p_prov);
    
    cout << "-_-_-_-_-_- LISTA PEDIDOS -_-_-_-_-_-_-" << endl;
    lista_pedidos(prod, prov, p_prod, p_prov);
    

    exito(prod, prov, p_prod, p_prov);
    cout << "Salir?? 1- SI ; 2- NO";
    cin >> no;
  }while (no != 1);
}
Compila, no tiene errores y funciona perfectamente a falta de lo que te comentaba antes.

Muchas gracias por adelantado por las molestias que te estas tomando!!
  #6 (permalink)  
Antiguo 20/01/2011, 12:05
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Mostrar el mayor de 2 registros

Código:
void exito (produc prod, provee prov, int p_prod, int p_prov)
{
  cout << endl << "Exito: " << endl;
 for (int i=0; i< p_prod-1; i++)
 {
   if (prod[i].sto_ac < prod[i].sto_min)   
     if ((prod[i].sto_ac - prod[i].sto_min) < (prod[i+1].sto_ac - prod[i+1].sto_min))
      cout << prod[i].cod;
 }
}
creo que el error esta aqui:
if ((prod[i].sto_ac - prod[i].sto_min) < (prod[i+1].sto_ac - prod[i+1].sto_min))
cout << prod[i].cod


estas comparando un producto con el siguiente. es decir comparas el primero con el segundo y el que tenga mas diferencia lo imprimes, con lo cual puedes imprimir varias veces los "cod" de los productos.

pero a ti solo te piden un producto el que tenga mas diferencia
Cita:
y se devuelve como resultado el producto cuya diferencia sea máxima.
por lo que tendrias que coger el primer producto (me refiero siempre a la diferencia ya me entiendes) guardarlo en un auxiliar e ir comparando con el siguiente, si es mayor el siguiente, lo guardas en el auxiliar. lo comparas con el tercero, (imaginate que es menor) pues no haces nada, pasas al cuarto.

de manera que al final te quedas con el producto que mayor diferencia tiene, y lo imprimes, el codigo o lo que sea.
  #7 (permalink)  
Antiguo 20/01/2011, 12:18
 
Fecha de Ingreso: enero-2011
Mensajes: 13
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Mostrar el mayor de 2 registros

Cierto cierto!! Anda que tener que preguntar esa tontería... xDD

Gracias por la ayuda!!

Etiquetas: mayor, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:16.