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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con colas en c/c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con colas en c/c++  (Leído 3,720 veces)
alci06

Desconectado Desconectado

Mensajes: 3


Ver Perfil
ayuda con colas en c/c++
« en: 29 Mayo 2011, 22:23 pm »

miren este es el codigo lo q no logro es q a la hora d imprimir los productos no salen todos nama sale el ultimo q ingrese segun yo es en ciclo for
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct nodo
{
 char nome[30];
 char empleado[30];
 char empresa[30];
 char prov[30];
 char empprov[30];
 char rfcpr[20];
 char rfc[20];
 char produ[30];
 char dian[20];
 int preci;
 long int clave;
 int prod;
 long int debo;
 int long inven;
 struct nodo *siguiente;
};

typedef struct nodo NODO;
typedef NODO*NODOSIG;

void altemple(NODOSIG*,char[30],long int);
void mostrar_alta(NODOSIG*);
void empresa(NODOSIG*,char[30],int);
void mostrar_empresa(NODOSIG*);
void factura(NODOSIG*,char[30],char[20],char[20]);
void mostrar_factura(NODOSIG*);
void proveedor(NODOSIG*,char[30],char[30],char[20]);
void mostrar_provedor(NODOSIG*);
void producto(NODOSIG*,char[30],int,int,int);
void mostrar_producto(NODOSIG*,int);
void invetario(NODOSIG*);
void devol(NODOSIG*);

int main ()
{
    char nom[30],nomemp[30],RFC[20],dia[20];
    char nompr[30],emppr[30],RFCp[20],nomprd[30];
    long int clav,clav2;
    int op,arti,i,np,precio;
    NODOSIG cola=NULL;
    system("cls");
    printf("\n\t introduzca el nombre de la empresa: ");
    _flushall();
    gets(nomemp);
    printf("\n\t introduzca el rfc de la empresa: ");
    _flushall();
    gets(RFC);
    printf("\n\t introduzca el dia: ");
    _flushall();
    gets(dia);
    system("cls");
    factura(&cola,nomemp,RFC,dia);
    mostrar_factura(&cola);
    getch ();
    do
    {
      system("cls");
      printf("\n\t eliga una opccion del menu");
      printf("\n\t\t 1.-proveedor\n\t\t 2.-empleado\n\t\t 3.-inventario\n\t\t 4.-devoluciones");
      printf("\n\t que opcion desea:");
      scanf("%d",&op);
      switch(op)
       {
         case 1:
                   system("cls");
                   _flushall();
                   printf("\n\t proveedor");
                   printf("\n\t nombre del proveedor: ");
                    _flushall();
                   gets(nompr);
                   printf("\n\t nombre de la empresa del proveedor: ");
                   _flushall();
                   gets(emppr);
                   printf("\n\t rfc de la empresa del proveedor: ");
                   _flushall();
                   gets(RFCp);
                   proveedor(&cola,nompr,emppr,RFCp);
                   mostrar_provedor(&cola);
                   printf("\n\t cuantos atriculos se van a registrar: ");
                   scanf("%d",&arti);
                   for(i=0;i<arti;i++)
                    {
                       
                       system("cls");                 
                       printf("\n\t nombre del producto %d: ",i+1);
                       _flushall();
                       gets(nomprd);
                       printf("\n\t cantidad de producto %d: ",i+1);
                       scanf("%d",&np);
                       printf("\n\t precio del producto %d: ",i+1);
                       scanf("%d",&precio);
                       producto(&cola,nomprd,np,precio,arti);
                    }
                   mostrar_producto(&cola,arti);
                  getch();
         break;
         
         case 2:
                 system("cls");
                 printf("\n introduzca su nombre: ");
                 _flushall();
                 gets(nom);
                 printf("\n introduzca una clave: ");
                 scanf("\n%ld",&clav);
                 altemple(&cola, nom , clav);
                 mostrar_alta(&cola);
                 getch ();         
         break;
             
         case 3:
                 printf("\n\t para acceder al inventario necesita estar dado de alta");
                 printf("\n\t introduzca su clave: ");
                 scanf("%ld",clav2);
                 if (clav == clav2)
                   {
                     mostrar_producto(&cola,arti);
                     getch ();
                   }
                 else
                 {
                   printf("\n\t clave incorrecta presione cualquier tecla para volver al menu de inicio"); 
                   getch ();
                  } 
         break;         
                 }
         }while (op != 4);
         getch ();
            return 0;         
}   

void altemple(NODOSIG*cola,char nom[30], long int clav)
{
  NODOSIG nuevo,actual,previo;
  actual=*cola;
  nuevo = new(nodo);
  if (nuevo != NULL)
  {
   strcpy(nuevo->nome,nom);
   nuevo->clave = clav;
   nuevo->siguiente = NULL;
   nuevo -> siguiente = *cola;
   *cola = nuevo;
  }
}   


void producto(NODOSIG*cola,char nomprd[30],int np,int precio,int arti)
{   
 NODOSIG nuevo,actual,previo;
 actual=*cola;
 nuevo = new(nodo);
 if (nuevo != NULL)
   {
    strcpy(nuevo->produ,nomprd);
    nuevo->prod = np;
    nuevo->preci = precio;
    nuevo->siguiente = NULL;
    nuevo -> siguiente = *cola;
    *cola = nuevo;
   }
 
}

void proveedor(NODOSIG*cola,char nompr[50],char emppr[50],char RFCp[50])
{
   NODOSIG nuevo,actual,previo;
  actual=*cola;
  nuevo = new(nodo);
  if (nuevo != NULL)
  {
   strcpy(nuevo->prov,nompr);
   strcpy(nuevo->empprov,emppr);
   strcpy(nuevo->rfcpr,RFCp);
   nuevo->siguiente = NULL;
   nuevo -> siguiente = *cola;
   *cola = nuevo;
  }
}   
     

void factura(NODOSIG*cola,char nomemp[30],char RFC[30],char dia[20])
{
  NODOSIG nuevo,actual,previo;
  actual=*cola;
  nuevo = new(nodo);
  if (nuevo != NULL)
  {
   strcpy(nuevo->empresa,nomemp);
   strcpy(nuevo->dian,dia);
   strcpy(nuevo->rfc,RFC);
   nuevo->siguiente = NULL;
   nuevo -> siguiente = *cola;
   *cola = nuevo;
  }
}   

void mostrar_alta(NODOSIG* cola)
{
 NODOSIG actual=*cola;
 printf("\n-nombre: %s\n clave: %ld",actual->nome,actual->clave);
 }

void mostrar_provedor(NODOSIG* cola)
{
 NODOSIG actual=*cola;
 printf("\n\tnombre del proveedor: %s",actual->prov);
 printf("\n\t empresa del proveedor: %s",actual->empprov);
 printf("\n\t RFC del proveedor: %s",actual->rfcpr);
}

void mostrar_producto(NODOSIG* cola,int arti)
{
 int i; 
 for(i=0;i<arti;i++)
 {
  NODOSIG actual=*cola;
  printf("\n\t nombre del producto: %s\n\t cantidad del producto: %d\n\t precio del producto: %d",
               actual->produ,actual->prod,actual->preci);
 }
}


         
void mostrar_factura(NODOSIG* cola)
{
 NODOSIG actual=*cola;
 printf("\n\t dia: %s",actual->dian);
 printf("\n\t nombre de la empresa: %s",actual->empresa);
 printf("\n\t RFC: %s",actual->rfc);
 }


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ayuda con colas en c/c++
« Respuesta #1 en: 29 Mayo 2011, 22:33 pm »

Tu problema es que no avanzas el puntero que recorre la cola y por otro lado, aprecio problemas con punteros.

Tu código:
Código
  1. void mostrar_producto(NODOSIG* cola,int arti)
  2. {
  3. int i;
  4. for(i=0;i<arti;i++)
  5. {
  6.  NODOSIG actual=*cola;
  7.  printf("\n\t nombre del producto: %s\n\t cantidad del producto: %d\n\t precio del producto: %d",
  8.               actual->produ,actual->prod,actual->preci);
  9. }
  10. }

Una aproximación que mantiene la mayor parte de tu código:

Código
  1. void mostrar_producto(NODOSIG* cola,int arti)
  2. {
  3. int i;
  4. NODOSIG *actual=cola;
  5. for(i=0;i<arti;i++)
  6. {
  7.  printf("\n\t nombre del producto: %s\n\t cantidad del producto: %d\n\t precio del producto: %d",
  8.               actual->produ,actual->prod,actual->preci);
  9. actual=actual->siguiente;
  10. }
  11. }

Cambiar el tipo de "actual" de NODOSIG a NODOSIG* evita que tengas que cambiar todo "actual->" por "actual." (actual punto) para acceder a los campos, ya que NO sería un puntero.


« Última modificación: 29 Mayo 2011, 22:35 pm por Akai » En línea

alci06

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: ayuda con colas en c/c++
« Respuesta #2 en: 29 Mayo 2011, 23:06 pm »

amigo ia lo ise asi como m dijiste y m salen errores m dice q no sta validado produ, prod, preci en mostrar_producto
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ayuda con colas en c/c++
« Respuesta #3 en: 29 Mayo 2011, 23:11 pm »

Fallo mío, no me había leído el código completo y tienes un typedef que "rompe" las referencias.

Código
  1. void mostrar_producto(NODOSIG* cola,int arti)
  2. {
  3. int i;
  4. NODOSIG actual=*cola;
  5. for(i=0;i<arti;i++)
  6. {
  7.  
  8.  printf("\n\t nombre del producto: %s\n\t cantidad del producto: %d\n\t precio del producto: %d",
  9.               actual->produ,actual->prod,actual->preci);
  10. actual=actual->siguiente;
  11. }
  12. }
En línea

alci06

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: ayuda con colas en c/c++
« Respuesta #4 en: 29 Mayo 2011, 23:55 pm »

ia lo ise amigo y m imprime lo ultimo q ingrese namas q imprime el numero de veces del ciclo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Pilas y Colas
Programación Visual Basic
[Decoded] 5 8,639 Último mensaje 30 Agosto 2010, 15:06 pm
por goldarg
ayuda con colas en visual c++
Programación C/C++
nevfuck 1 3,252 Último mensaje 6 Octubre 2010, 16:02 pm
por Akai
Ayuda con Pilas y Colas
Programación C/C++
HeavyPsychedelic 1 3,645 Último mensaje 26 Octubre 2010, 18:57 pm
por Littlehorse
Ayuda con colas en C++
Programación C/C++
edgar_areyes 0 5,318 Último mensaje 28 Noviembre 2010, 05:42 am
por edgar_areyes
ayuda en colas
Programación C/C++
josue_tux 0 2,191 Último mensaje 25 Mayo 2011, 00:08 am
por josue_tux
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines