<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
hola como puedo para ver este foro <br>y poder comentar en el. y tambien quiero pedir ayuda para trabajar con x++<br><br>> Date: Fri, 9 Apr 2010 22:22:09 -0400<br>> From: srd4121@njit.edu<br>> To: cconclase@listas.conclase.net<br>> Subject: Re: [C con Clase] 1 lista dentro de otra lista<br>> <br>> Hola Toni,<br>> <br>> Toni wrote:<br>> > hola, estoy aprendiendo a usar C++ y estoy atascado en una práctica.<br>> > <br>> > Después de estar ya un par de horas buscando por donde falla mi<br>> > código, ya lo localicé, y al parecer el void AlmacenarCiudad no<br>> > funciona correctamente, ya que no escribe en el nodo el nombre de la<br>> > ciudad, lo deja en nulo como podeis ver a continuacion.<br>> > <br>> <br>> [CORTE]<br>> <br>> > <br>> <br>> Veamos solamente la función en cuestión.<br>> <br>> > void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){<br>> > <br>> > T_ciudad aux;<br>> > ok=false;<br>> > aux=datos; <br>> > /* if (datos==NULL){<br>> > datos=new nodo1;<br>> > datos->ciutat=ciudad;<br>> > datos->sig=NULL;<br>> > aux=datos;<br>> > }*/<br>> > while (aux!=NULL){ //no consigo que escriba el nombre de la <br>> > ciudad...<br>> > if (aux->sig->ciutat==ciudad){<br>> <br>> No sabes si 'aux->sig' es un puntero válido. Por lo que veo, deberías <br>> comprobar 'aux->ciutat' y no la información del siguiente nodo.<br>> <br>> En segundo lugar, si ya hemos encontrado que la ciudad existe, entonces <br>> deberíamos terminar este bucle 'while' para no continuar. De esta <br>> manera, 'aux' apunta al nodo correcto. De lo contrario, 'aux' acabará <br>> siendo nulo, porque la lista está diseñada así: un puntero nulo al final.<br>> <br>> > ok=true; <br>> > }<br>> > aux=aux->sig; <br>> > }<br>> > if (aux==NULL){<br>> > aux = new nodo1; <br>> > aux->ciutat=ciudad;<br>> > aux->sig=NULL; <br>> > }<br>> > <br>> > if (ok==true){ //true y false funcionan correctamente<br>> > cout<<"La ciudad ya existe"<<endl<<endl; <br>> > }<br>> > else{<br>> > cout<<"La ciudad se anadio correctamente"<<endl<<endl; <br>> > }<br>> > }<br>> > <br>> <br>> Si la ciudad no existe, creas un nuevo nodo, pero no enlazas ese nodo a <br>> la lista actual apuntada por 'datos'. Debes relacionar el nuevo nodo con <br>> los demás en la lista.<br>> <br>> En tu caso, debes guardar el puntero al último nodo, para poder <br>> modificar su puntero 'sig'. Tal y como implementas esta función, 'aux' <br>> llega a ser nulo, lo cual no ayuda si quieres modificar la lista <br>> original; es demasiado tarde.<br>> <br>> Sugiero que mantengas otro puntero al nodo anterior a 'aux'. Por ejemplo,<br>> <br>> ant = datos;<br>> aux = ant->sig;<br>> <br>> while( !aux && !ok )<br>> {<br>> if( aux->ciutat == ciudad )<br>> ok = true;<br>> <br>> ant = aux;<br>> aux = ant->sig;<br>> }<br>> <br>> if( !aux )<br>> {<br>> // Reusamos 'aux'<br>> aux = new nodo1;<br>> aux->ciutat = ciudad;<br>> aux->sig = 0;<br>> }<br>> <br>> ant->sig = aux; // Enlazamos el nuevo nodo a la lista<br>> <br>> Este algoritmo sólo funciona si la lista tiene más de 2 nodos. Deberías <br>> tratar los casos particulares de una lista vacía o de un solo nodo.<br>> <br>> <br>> Espero que esto te oriente.<br>> <br>> Steven<br>> <br>> <br>> _______________________________________________<br>> Lista de correo Cconclase Cconclase@listas.conclase.net<br>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<br>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<br> <br /><hr />Discover the new Windows Vista <a href='http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE' target='_new'>Learn more!</a></body>
</html>