Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda Con Insercion De Listas (c++)

Estas en el tema de Ayuda Con Insercion De Listas (c++) en el foro de Programación General en Foros del Web. Hola gurus, ahora me ha surgido un problema a mi, les comento que tengo que hacer un programa, que guarda datos priemero en vectores, y ...
  #1 (permalink)  
Antiguo 28/10/2004, 18:38
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Ayuda Con Insercion De Listas (c++)

Hola gurus, ahora me ha surgido un problema a mi, les comento que tengo que hacer un programa, que guarda datos priemero en vectores, y despues discrimina, a los datos que tienen un monto mayor a 300 los selecciona, y despues los inserta en nodos, en una lista, que usa los punteros para para guardar la direccion de los siguientes.
A medida que inserta lo hace ordenadamente.
Estoy usando el compilador de Dev-C++
Y cuando tiene que hacer el trabajo en la memoria me tira un error, de que debo reiniciar el progrma porque se produjo un error.
Aqui les dejo el codigo, y me dicen en que me he equivocado.
Muchas gracias.

Código:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

struct cliente
{
 int cod_c, cod, tpag;
 char nom[30];
 float imp;
};

struct Nodo
{
 cliente info;
 Nodo *prox;
};

void InsertVec(cliente vec[10]);
void InsertOrd(Nodo *&raiz, cliente x);
void PuntoA(Nodo *&raiz, cliente vec[10], cliente &x);

void main()
{
 Nodo *raiz;
 raiz = NULL;
 cliente x;
 cliente vec[10];
 InsertVec(vec);
 PuntoA(raiz, vec, x);

}

void InsertVec(cliente vec[10])
{
 char nom2[30];
 for(int i=0; i<10; i++)
 {
  cout << "\nIngresar Codigo de cliente (Valor entre 0 y 99): ";
  cin >> vec[i].cod_c;
  cout << "\nIngresar Nombre del cliente: ";
  strcpy(vec[i].nom, gets(nom2));
  cout << "\nCodigo del negocio donde se efectuo la compra (Valor entre 1 y 4): ";
  cin >> vec[i].cod;
  cout << "\nImporte de la compra: ";
  cin >> vec[i].imp;
  cout << "\nIngrese tipo de pago (Valor entre 0 y 2): ";
  cin >> vec[i].tpag;
 }
 cout << "\nPresione una tecla para continuar...";
 getch();
}

void InsertOrd(Nodo *&raiz, cliente x)
{
 Nodo *nuevo;
 nuevo = new Nodo;
 //Asiganacion de valores para el puntero
 nuevo->info.cod_c = x.cod_c;
 strcpy(nuevo->info.nom, x.nom);
 nuevo->info.cod = x.cod;
 nuevo->info.imp = x.imp;
 nuevo->info.tpag = x.tpag;
 //Creacion del nodo
 //Insercion de elementos en forma ordenada
 if(raiz==NULL)
 {
  raiz = nuevo;
 }
 else
 {
  Nodo *p,*q;
  q=raiz;
         for(p=raiz; p!=NULL&&p->info.cod_c < x.cod_c; p = p->prox)
         {
          q=p;
          if(p==q)
          {
           nuevo->prox = raiz;
           raiz = nuevo;
          }
          else
          {
           q->prox = nuevo;
           nuevo->prox = p;
          }
         }
 }
}


void PuntoA(Nodo *&raiz, cliente vec[10], cliente &x)
{
   for(int i=0; i<10; i++)
   {
     x.cod_c = vec[i].cod_c;
     strcpy(x.nom, vec[i].nom);
     x.cod = vec[i].cod;
     x.imp = vec[i].imp;
     x.tpag = vec[i].tpag;

      if(vec[i].imp>300)
      {
       InsertOrd(raiz, x);
      }

   }
   getch();
}
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #2 (permalink)  
Antiguo 28/10/2004, 20:28
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola, revisando un poco el codigo he encontrado un error, y lo que me faltaba era borrar la lista entera, aca dejo el codigo completo funcionando, que en teoria deberia andar bien, pero surgio otro problema ahora.
El problema es que cuando te va a mostrar los datos de la lista, te muestra solamente 2 y los demas no te los muestra, no se a que se debe pero lo dejo como una incongnita, un reto a que si lo descubrimos, seria bueno para tener una solucion a un problema que quiza sea comun a todos nosotros los programadores.
Buena suerte un abrazo

Código:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

struct cliente
{
 int cod_c, cod, tpag;
 char nom[30];
 float imp;
};

struct Nodo
{
 cliente info;
 Nodo *prox;
};

void InsertVec(cliente vec[10]);
void InsertOrd(Nodo *&raiz, cliente x);
void PuntoA(Nodo *&raiz, cliente vec[10], cliente &x);
void borrar(Nodo *&raiz);

void main()
{
 Nodo *raiz;
 raiz = NULL;
 cliente x;
 cliente vec[10];
 InsertVec(vec);
 PuntoA(raiz, vec, x);
 borrar(raiz);

}

void InsertVec(cliente vec[10])
{
 char nom2[30];
 for(int i=0; i<10; i++)
 {
  cout << "\nIngresar Codigo de cliente (Valor entre 0 y 99): ";
  cin >> vec[i].cod_c;
  cout << "\nIngresar Nombre del cliente: ";
  strcpy(vec[i].nom, gets(nom2));
  cout << "\nCodigo del negocio donde se efectuo la compra (Valor entre 1 y 4): ";
  cin >> vec[i].cod;
  cout << "\nImporte de la compra: ";
  cin >> vec[i].imp;
  cout << "\nIngrese tipo de pago (Valor entre 0 y 2): ";
  cin >> vec[i].tpag;
 }
 cout << "\nPresione una tecla para continuar...";
 getch();
}

void InsertOrd(Nodo *&raiz, cliente x)
{
 Nodo *nuevo;
 nuevo = new Nodo;
 //Asiganacion de valores para el puntero
 nuevo->info.cod_c = x.cod_c;
 strcpy(nuevo->info.nom, x.nom);
 nuevo->info.cod = x.cod;
 nuevo->info.imp = x.imp;
 nuevo->info.tpag = x.tpag;
 //Creacion del nodo
 //Insercion de elementos en forma ordenada
 if(raiz==NULL)
 {
  raiz = nuevo;
 }
 else
 {
  Nodo *p,*q;
  q=raiz;
         for(p=raiz; p!=NULL&&p->info.cod_c>x.cod_c; p = p->prox)
         {
          q=p;
          if(p==q)
          {
           nuevo->prox = raiz;
           raiz = nuevo;
          }
          else
          {
           q->prox = nuevo;
           nuevo->prox = p;
          }
         }
 }
}


void PuntoA(Nodo *&raiz, cliente vec[10], cliente &x)
{
   for(int i=0; i<10; i++)
   {
     x.cod_c = vec[i].cod_c;
     strcpy(x.nom, vec[i].nom);
     x.cod = vec[i].cod;
     x.imp = vec[i].imp;
     x.tpag = vec[i].tpag;

      if(vec[i].imp>300)
      {
       InsertOrd(raiz, x);
      }

   }
   cout << "Presione una tecla para mostrar los elementos ordenados\n";
   getch();
   Nodo *p;
   for(p=raiz; p!=NULL; p=p->prox)
   {
    cout << p->info.nom;
   }
   getch();
}

void borrar(Nodo *&raiz)
{
  while(raiz!=NULL)
  {
   Nodo *r=raiz;
   raiz = r->prox;
   delete r;
  }
}
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
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 21:57.