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

problema con tp de c lista doblemente enlasada

Estas en el tema de problema con tp de c lista doblemente enlasada en el foro de C/C++ en Foros del Web. hola a todos soy nuevo en este grupo me gusto mucho la forma q ayudan y lo bueno q son programando, en este momento tengo ...
  #1 (permalink)  
Antiguo 11/10/2009, 19:07
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 14 años, 6 meses
Puntos: 0
problema con tp de c lista doblemente enlasada

hola a todos soy nuevo en este grupo me gusto mucho la forma q ayudan y lo bueno q son programando, en este momento tengo un p`roblema con un tp q tengo q entregar y nose como terminarlo ni donde esta fallando
el tema es asi yo lo tenia casi cocinado y luego lo intentaron abrir con distintas versiones de c (hasta un portable) y me lo terminaron jodiendo por favor me gustaria si alguien puede ayudarme no pido q me lo hagan solo q me guien como hacerlo ya q de este tp depènde una nota muy importante

desde ya gracias

el tp:

//Trabajo Practico de C

//Crear unalista enlazada doble. Ingrese por teclado un valor entero. Escriba una función que recibiendo los argumentos adecuados, entre ellos el valor ingresado, imserte un nodo en esa posición de la lista; considere que el valor de la posición sea válido para cumplimentar lo pedido. Si no lo es, debe solicitar una nueva entrada y convocar nuevamente a la función.
// Diseño del nodo:
// codigo (7 caracteres)
// precio (float)

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct tipo {
char codigo [8];
float precio;
};

struct nodo
{struct tipo datos;
struct nodo *sigui, *ant;
};

int lista_vacia (struct nodo * t)
{
return (t == NULL);
}
struct nodo * nuevonodo()
{ struct nodo *p = (struct nodo*) malloc (sizeof(struct nodo));
if (p ==NULL)
{puts ("No hay suficiente memoria\n");
exit (1);
getch();
}
return p;
}
struct nodo * creadoble (struct nodo *ult,struct nodo *pri,struct tipo pro, int pos, int canttot)
{struct nodo *ant = pri, *act = pri;
struct nodo *p = nuevonodo ();
p -> datos = pro;
if (pos == 1)
{*pri = p;
p-> ant = NULL;
p-> sigui = act;
act -> ant = p;
}
else
if (pos == canttot + 1)
{ ant -> sigui =p;
p -> ant = ant;
p -> sigui = NULL;
ult = p;
}
else
{ pos -> sigui =p;
p -> ant = pos;
p -> sigui = pos + 1;
act -> ant = p;
while (POS > 1)
{ ant = act;
act = act -> sigui;
pos =pos-1
}
{ act->ant->sig = p;
p->ant = act->ant;
p->sig = act;
act->ant = p;
}

} return ult;
viod vernodo (struct nodo * s)
{ clrsc ();
struct nodo * p = s;
while (p)
{printf ("\n %-7ld %-15s", p->datos.codigo, p->datos.precio);
p = p-> sigui;
}
}
void reves (struct nodo * s)
{ struct nodo * p = s;
printf (" \n \n");
while (p)
{printf ("\n %-7ld %-15s", p->datos.codigo, p->datos.precio);
p = p -> ant;
}
int contador (struct nodo * s)
int i = 0;
while (s)
{ s = s -> sigui;
i ++;
}
return i;
}
void main ()
{ clrsc ();
float aux;
nodo * ult, * pri, tipo pro;
int canttot, pos;
ult = NULL;
pri = NULL;
puts ("\n Ingrese código: (FIN para finalizar)");
fflush (stdin); gets (pro.codigo);
while (strcmpi(pro.codigo, "FIN") != 0)
{
printf (" Ingrese precio");
scanf ("% f", & aux);
pro.precio = aux
canttot = contador (pri);
do {
printf ("Ingrese posicion (entre 1 y %d)", canttot + 1);
scanf ("% d", & pos);
};
while (pos < 0 || pos > canttot + 1);

ult = creadoble (ult, & pri, pos, pro, canttot)
clrscr();
puts ("\n Ingrese codigo: (FIN para finalizar)");
fflush(stdin); gets (pro.codigo);
}
if (lista_vacia (ult))
{ clrscr ();
printf ("\n No hay lista");
getch ();
exit (1);
};
else
{ vernodo (pri);
reves (ult);
};
getch ();
}
  #2 (permalink)  
Antiguo 11/10/2009, 19:34
 
Fecha de Ingreso: octubre-2009
Mensajes: 39
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: problema con tp de c lista doblemente enlasada

Código PHP:
struct tipo {
char codigo [8];
float precio;
}; 
En vez de utilizar char codigo 8 te recomendaria utilizar un apuntador; char*codigo;
y luego le asignas dinamicamente memoria para lo que necesites,

codigo=(char*)malloc(8sizeof(char));

digo es una sugerencia y ademas cual es tu problema exactamente???
  #3 (permalink)  
Antiguo 12/10/2009, 06:58
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: problema con tp de c lista doblemente enlasada

mi problema es que no me corre bajo ninguna version de c y ya no entiendo que es lo que le pasa, si lo pongo a correr me marca 12 errores, cuando los arregle arrancaba y despues colgaba, ya no se como hacerlo funcionar
  #4 (permalink)  
Antiguo 12/10/2009, 23:45
 
Fecha de Ingreso: septiembre-2009
Mensajes: 56
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: problema con tp de c lista doblemente enlasada

Veo varios errores de sintaxis, llaves mal cerradas, o unas abiertas sin estar por qué.
Te recomiendo que lo escribas de forma ordenada (poniendo sangría en el código) y lo vuelvas a postear entre las etiquetas [code] y [ /code] para que se vea mejor.

Una ayuda: En la función creardoble una instrucción dice *pri = p y debe ser pri = p, porque los 2 son del mismo tipo (apuntadores a nodo).
  #5 (permalink)  
Antiguo 14/10/2009, 11:05
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: problema con tp de c lista doblemente enlasada

aca hice otro cpdigo y tampoco me da ayuda por favor tengo que promocionar esta materia

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct tipo {
char codigo [8];
float precio;
};

struct nodo {
struct nodo *ant;
struct tipo datos;
struct nodo *sig;};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///// /////
///// FUNCIONES /////
///// /////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


struct nodo *nuevonodo()
{
struct nodo *p=(struct nodo *) malloc (sizeof (struct nodo));

if (p==NULL)
{
printf ("MEMORIA INSUFICIENTE");
getch();
exit(0);
}
return p;
}

int listavacia (struct nodo *p)
{
return (p==NULL);
}

void vernodo (struct nodo *p)
{
clrscr();
printf("LA LISTA INGRESADA ES LA SIGUIENTE:\n");
printf("===================================\n\n");

while (p)
{
printf("***********\n");
printf("** %s\n",p->datos.codigo);
printf("** %.2f\n",p->datos.precio);
printf("***********\n\n\n");
p=p->sig;
}
}

struct nodo * inserta (struct tipo z,int pos,struct nodo *pri)
{
struct nodo *e,*act,*anter;
int postmp;

int k;

postmp = 0;
k=1;

act=pri;
anter = act->ant;

e=nuevonodo();
e->datos=z;

if(pos==0) //PRIMERO
{
pri->ant=e;
e->sig=pri;
e->ant=NULL;
pri=e;

}
else
{

while(k!=0)
{
if(postmp==pos)
{
if(act==NULL) //ULTIMO
{
e->sig=NULL;
e->ant=anter;
anter->sig=e;
k=0;
}
else //MEDIO
{
e->ant=act->ant;
e->sig=anter->sig;

anter->sig=e;
act->ant=e;
k=0;
}
}
else
{
act=act->sig;

if(act!=NULL)
{
anter=act->ant;
}
else
{
anter=anter->sig;
}

postmp++;
}
}
}
return pri;
}

struct nodo *creadoble (struct nodo *ult, struct nodo **pri, struct tipo x)
{
struct nodo *p;
p=nuevonodo ();
p->datos=x;

if (listavacia(ult))
{
p->sig=NULL;
p->ant=NULL;
ult=p;
*pri=p;
}
else
{
p->ant=ult;
p->sig=NULL;
ult->sig=p;
ult=p;
}
return ult;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///// /////
///// MAIN /////
///// /////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void main(void)
{
clrscr ();

struct nodo * ult, * pri;
struct tipo pro;

int total;
int pos;
float aux;


ult = NULL;
pri = NULL;

total=0;

puts("\nIngrese c¢digo: (FIN para finalizar)");
fflush (stdin);

gets(pro.codigo);

while (strcmpi(pro.codigo,"FIN") != 0)
{
printf("\nIngrese precio:");
scanf ("%f",&aux);

pro.precio=aux;

ult=creadoble(ult,&pri,pro);

total++;

clrscr();
puts("\nIngrese c¢digo: (FIN para finalizar)");
fflush (stdin);

gets(pro.codigo);


}
if (listavacia(ult))
{
clrscr();
printf("\n No hay lista");
getch();
exit(0);
}
else
{
clrscr();
vernodo(pri);
printf("Por favor ingrese una posicion para insertar un nodo:\n");
scanf("%d",&pos);

if(pos<=total)
{
clrscr();
printf("Por favor ingrese codigo para el nuevo nodo:\n");
fflush (stdin);

gets(pro.codigo);

printf("Por favor ingrese un precio para el nuevo nodo:");
scanf("%f",&aux);
pro.precio=aux;

pri=inserta(pro,pos,pri);
}
else
{
clrscr();
printf("El valor ingresado no esta disponible en la lista por favor\ningrese un nuevo valor entre 0 y %d:",total);
scanf("%d",&pos);

if(pos<=total)
{
clrscr();
printf("Por favor ingrese codigo para el nuevo nodo:\n");
fflush (stdin);

gets(pro.codigo);

printf("Por favor ingrese un precio para el nuevo nodo:");
scanf("%f",&aux);
pro.precio=aux;

pri=inserta(pro,pos,pri);
}
else
{
clrscr();
printf("Te dije entre 0 y %d, ahora me cierro!! CHAU!!",total);
getch();
exit(0);
}
}



vernodo (pri);
};
getch ();
}
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:36.