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 ();
}