Hola como andan, estoy haciendo un tp para la facu y tengo un problema.
Primero les cuento mas o menos lo k tengo k hacer:
"Desarrollar un sistema Help Desk. El sistema contempla la modalidad usuario y la modalidad administrador..
Un servicio de help desk recibe casos durante la noche, y los resuelve durante el dia.
Los usuarios ingresan al sistema en modo usuario para registrar sus casos.
Cada usuario tiene la misma prioridad, y los casos son atendidos por orden de llegada
Una vez terminada la noche, el administrador debe llegar al help desk y activar el proceso de atención de casos, que distribuye los casos a cada agente. Luego de ser resueltos los casos son enviados al historial como resueltos
"
aca les pongo el codigo y ahora explico mi duda.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista
{
char elem [200];
int usu;
int caso;
struct lista *sig;
} nodo;
void crear (nodo *pt);
int main()
{
nodo *prin;
int log;
printf("Ingresar como usuario(1) o como helpdisk(2): ");
scanf("%d",&log);
if(log==1)
{
prin=(nodo *)malloc(sizeof(nodo));
crear(prin);
}
return 0;
}
void crear (nodo *registro)
{
int cont=1;
char pro[200];
printf("Usuario: Usuario\n");
printf("Caso numero: %d\n",cont);
cont++;
printf("Ingrese el problema (FIN para finalizar): \n");
scanf(" %[^\n]", pro);
if (strcmp (pro,"FIN")==0)
{
registro->sig=NULL;
return;
}
else
{
strcpy(registro->elem, pro);
registro->caso=cont;
registro->sig=(nodo*)malloc(sizeof(nodo));
crear (registro->sig);
}
return;
}
Lo k estoy buscando es, k el contador de casos sea automatico, o autonumero, osea a medida k van ingresado casos este vaya sumando de a 1, el usuario es siempre el mismo.... y bueno dsp estan los casos. Lo k no entiendo es el pork no me anda el contador, lo estoy haciendo recursivamente??? el void crear?
Desde ya muchas gracias
P.D.: espero haber sido claro con la explicacion :D
Bueno, creo haberlo resulto, lo k hice fue mandar el contador dsd el main, de esta manera no se inicializa cada vez k se repite la funcion, les pego el codigo
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista
{
char elem [200];
int caso,esta;
struct lista *sig;
} nodo;
void crear (nodo *registro,int cont);
void mostrar (nodo *registro);
int main()
{
nodo *prin;
int log,cont=0;
printf("Ingresar como usuario(1) o como helpdisk(2): ");
scanf("%d",&log);
if(log==1)
{
printf("Estados de casos: 1 Nuevo, 2 Pendiente, 3 Revisado, 4 Resuelto \n");
prin=(nodo *)malloc(sizeof(nodo));
crear(prin,cont);
}
mostrar(prin);
return 0;
}
void crear (nodo *registro, int cont)
{
char pro[200];
printf("\nUsuario: Usuario\n");
cont++;
printf("Caso numero: %d\n",cont);
registro->esta=1;
printf("Estado del caso: %d\n",registro->esta);
printf("Ingrese el problema (FIN para finalizar): \n");
scanf(" %[^\n]", pro);
if (strcmp (pro,"FIN")==0)
{
registro->sig=NULL;
return;
}
else
{
strcpy(registro->elem, pro);
registro->caso=cont;
registro->sig=(nodo*)malloc(sizeof(nodo));
crear (registro->sig,cont);
}
return;
}
void mostrar (nodo *registro)
{
if (registro->sig !=NULL)
{
printf("\nNumero de caso:%d\n",registro->caso);
printf("Estado:%d\n",registro->esta);
printf ("Caso:%s\n",registro->elem);
mostrar (registro->sig);
}
return;
}
Muchas gracias, igual les pido a los mod´s k no cierren este theard, preferira dejarlo abierto hasta k termine el tp, k es para el jueves, GRACIAS!
¡Buenas!
En el primer post que has enviado, el contador se crea en la pila como parametro, inicializado a uno, en cada llamada a la funcion recursiva. Si quieres que todas las llamadas a la funcion recursiva compartan una variable tendras que declararla estatica.
¡Saludos!
PD: Si declaras la variable estatica, como consecuencia de que todas las llamadas a la funcion la comparten, cualquier modificacion en alguna de las llamadas hara que el nuevo valor sea compartido por todas la copias.
a k llamas declarar la variable estatica??
osea, k si yo uso el contador en otra variable, esta va a tomar el valor de la ultima funcion? por ejemplo
si en la funcion crear el cont termina en 7, la proxima vez k lo use va a arrancar de 7?
y ahora estoy teniendo otro problema, estoy keriendo usar 2 listas, una k contiene en numero de caso, el estado y el problema en si, y otra k sea de usuarios, pero por alguna razon no me la esta creando y la verdad k nose pork.... aki el codigo
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista
{
char elem [200];
int caso,esta;
struct lista *sig;
} nodo;
typedef struct usuario
{
char usu [20];
struct usuario *sigu;
} nodou;
void crear (nodo *registro,int cont);
void mostrar (nodo *registro);
void generar (nodou *registro);
void mostrar2(nodou *registro);
int main()
{
nodo *prin;
nodou *prin2;
int log,cont=0;
prin2=(nodou *)malloc(sizeof(nodou));
generar(prin2);
mostrar2(prin2);
printf("Ingresar como usuario(1), helpdisk(2), modificar usuarios (3): ");
scanf("%d",&log);
if(log==1)
{
printf("Estados de casos: 1 Nuevo, 2 Pendiente, 3 Revisado, 4 Resuelto \n");
prin=(nodo *)malloc(sizeof(nodo));
crear(prin,cont);
}
else if (log==3)
{
}
mostrar(prin);
return 0;
}
void crear (nodo *registro, int cont)
{
char pro[200];
printf("\nUsuario: Usuario\n");
cont++;
printf("Caso numero: %d\n",cont);
registro->esta=1;
printf("Estado del caso: %d\n",registro->esta);
printf("Ingrese el problema (FIN para finalizar): \n");
scanf(" %[^\n]", pro);
if (strcmp (pro,"FIN")==0)
{
registro->sig=NULL;
return;
}
else
{
strcpy(registro->elem, pro);
registro->caso=cont;
registro->sig=(nodo*)malloc(sizeof(nodo));
crear (registro->sig,cont);
}
return;
}
void mostrar (nodo *registro)
{
if (registro->sig !=NULL)
{
printf("\nNumero de caso:%d\n",registro->caso);
printf("Estado:%d\n",registro->esta);
printf ("Caso:%s\n",registro->elem);
mostrar (registro->sig);
}
return;
}
void generar (nodou *registro)
{
/*strcpy(registrou->usu, "Usuario");
registrou->sigu=(nodou *)malloc(sizeof(nodou);
strcpy(registrou->usu, "Senior");
registrou->sigu=(nodou *)malloc(sizeof(nodou);
strcpy(registrou->usu, "SSR");
registrou->sigu=(nodou *)malloc(sizeof(nodou);
strcpy(registrou->usu, "Junior");*/
printf("Agrear usuairo: \n");
scanf("%s",registro->usu);
if (strcmp (registro->usu,"FIN")==0)
registro->sigu=NULL;
else
{
registro->sigu=(nodou *)malloc(sizeof(nodou); //<- creo k aca esta el ERROR!
generar() (registro->sigu);
}
return;
}
void mostrar2(nodou *registro)
{
if (registro->sigu !=NULL)
{
printf ("%s\n",registro->usu);
mostrar2 (registro->sigu);
}
return;
}
desde ya muchas gracias!
Hola! mira como llamas a generar:
generar() (registro->sigu);
Saludos
gracias por la correcion! :D igualmente el error sigue :(
xDD sabia que ese no era el problema, es que no tenia ganas de analizar :P.... finalmente lo compile y me anduvo bien, cual es tu problema?? detalla mejor el problema y da un ejemplo, xq a mi me anda
Saludos
Cita de: elbuitre86 en 3 Julio 2012, 05:47 AM
a k llamas declarar la variable estatica??
osea, k si yo uso el contador en otra variable, esta va a tomar el valor de la ultima funcion? por ejemplo
si en la funcion crear el cont termina en 7, la proxima vez k lo use va a arrancar de 7?
Si.
Prueba con esto:
void recursion(void)
{
static int c=0;
if(c==10)
return;
c++;
printf("%d\n",c);
recursion();
printf("%d\n",c);
}
¡Saludos!
gracias durasno!!! me re sirvio!!! uso el contador dentro de la "sub funcion" asi k kedo de 10!! ademas tengo k usar unos 3 o 4 contadores, asi k me viene genial!
el problema k tenia era k me faltaba un parentesis por eso no me compilaba!! y la verdad k no me di cuenta hasta hoy a la mañana
asi estaba registro->sigu=(nodou *)malloc(sizeof(nodou);
y lo solucione asi registro->sigu=(nodou *)malloc(sizeof(nodou));
y ahora anda! :D
el tema es k yo lo estoy haciendo asi
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista
{
char elem [200];
int caso,esta;
struct lista *sig;
} nodo;
typedef struct usuario
{
char usu [20];
int nusu;
struct usuario *sigu;
} nodou;
void crear (nodo *registro);
void mostrar (nodo *registro);
void generar (nodou *registro);
void mostrar2(nodou *registro);
int inicio(int log);
int main()
{
nodo *prin;
nodou *prin2;
int l,log,log2;
prin=(nodo *)malloc(sizeof(nodo));
prin2=(nodou *)malloc(sizeof(nodou));
generar(prin2);
mostrar2(prin2);
do
{
printf("Ingresar como usuario(1), helpdisk(2), modificar usuarios (3): FIN: (4)");
scanf("%d",&log);
l=inicio(log);
switch(l)
{
case 1:
printf("Estados de casos: 1 Nuevo, 2 Pendiente, 3 Revisado, 4 Resuelto \n");
crear(prin);
mostrar(prin);
continue;
case 2:
printf("Modificar caso: 1 Eliminar Caso: 2 Insertar Caso: 3 Principio: 4");
scanf("%d",&log2);
l=inicio(log2);
/*do
{
op=menu();
switch(op)
{
case 1:
printf("ingrese un valor: ");
scanf("%d", &valor);
agregar(&cabeza, &fin, valor);
printf("\n");
mostrar(cabeza);
continue;
case 2:
if (cabeza == NULL)
printf("\n VACIA!\n");
else
{
x=sacar(&cabeza, &fin);
printf("\n el valor eliminado es %d\n", x);
}
mostrar(cabeza);
continue;
case 3:
printf("\nFin proceso\n");
continue;
}
while (op != 3);
}*/
continue;
case 4:
printf("\nFin proceso\n");
continue;
}
}
while (l!=4);
return 0;
}
int inicio(int log)
{
do
{
if (log<1 || log>4)
printf("ERROR!\n");
}
while (log<1 || log>4);
return log;
}
void crear (nodo *registro)
{
char pro[200];
static int cont=0;
printf("\nUsuario: Usuario\n");
cont++;
printf("Caso numero: %d\n",cont);
registro->esta=1;
printf("Estado del caso: %d\n",registro->esta);
printf("Ingrese el problema (FIN para finalizar): \n");
scanf(" %[^\n]", pro);
if (strcmp (pro,"FIN")==0)
{
registro->sig=NULL;
return;
}
else
{
strcpy(registro->elem, pro);
registro->caso=cont;
registro->sig=(nodo*)malloc(sizeof(nodo));
crear (registro->sig);
}
return;
}
void mostrar (nodo *registro)
{
if (registro->sig !=NULL)
{
printf("\nNumero de caso:%d\n",registro->caso);
printf("Estado:%d\n",registro->esta);
printf ("Caso:%s\n",registro->elem);
mostrar (registro->sig);
}
return;
}
void generar (nodou *registro)
{
/*strcpy(registro->usu, "Usuario");
registro->sigu=(nodou *)malloc(sizeof(nodou));
generar(registro->sigu);
strcpy(registro->usu, "Senior");
registro->sigu=(nodou *)malloc(sizeof(nodou));
generar(registro->sigu);
strcpy(registro->usu, "SSR");
registro->sigu=(nodou *)malloc(sizeof(nodou));
generar(registro->sigu);
strcpy(registro->usu, "Junior");*/
printf("Agrear usuairo: \n");
scanf("%s",registro->usu);
if (strcmp (registro->usu,"FIN")==0)
registro->sigu=NULL;
else
{
registro->sigu=(nodou *)malloc(sizeof(nodou));
generar(registro->sigu);
}
return;
}
void mostrar2(nodou *registro)
{
if (registro->sigu !=NULL)
{
printf ("%s\n",registro->usu);
mostrar2 (registro->sigu);
}
return;
}
yo lo k quiero k esta lista
typedef struct usuario
{
char usu [20];
int nusu;
struct usuario *sigu;
} nodou;
ya este cargada con datos, en el programa lo estoy haciendo " a mano" y lo k quiero es k esos usuarios ya esten pre cargados.
Mi fin con esta lista es despues poder modificarla, agregar usuarios o eliminarlos, pero quiero k haya pre cargados ya usaurios.
GRACIAS!!!!!!! :D