Hola, alguien me podría ayudar con el metodo de la burbuja? lo quiero aplicar a estructuras, xo tengo problemas con el final del archivo.<div>quiero ordenar un numero concreto de estructuras, que cada una contiene un float, y las quiero ordenar por ese float.</div>
<div>Muchas gracias</div><div><br></div><div>aqui esta el ejemplo, considerando que hay 4 palabras escritas (xk dudo mucho en el valor de jota)</div><div><br></div><div><div>#include <stdio.h></div><div>#include <string.h></div>
<div><br></div><div>struct t_palabra {</div><div> char castellano[40];</div><div> char aleman[40];</div><div> float cont_aciertos;</div><div> float cont_errores;</div><div> float eff;</div><div>};</div><div><br>
</div><div>int main (void)</div><div>{</div><div> FILE *fichero;</div><div> struct t_palabra palabra;</div><div> struct t_palabra temp;</div><div> char respuesta[40];</div><div> int i, j, nPalabras;</div><div> float virt1, virt2;</div>
<div><br></div><div><br></div><div><br></div><div> fichero = fopen ("datos.dat", "rb+");</div><div> if (fichero == NULL)</div><div> printf ("Error: No se ha podido abrir el fichero datos.dat.");</div>
<div> else {</div><div> </div><div> for (j=5; j>0; j--){</div><div> </div><div> fseek(fichero, 0*sizeof(palabra), SEEK_SET);</div><div> </div><div> for (i=0; i<j; i++){</div>
<div> </div><div> fseek(fichero, i*sizeof(palabra), SEEK_SET);</div><div> fread(&palabra, i*sizeof(palabra), 1, fichero);</div><div> virt1 = palabra.eff;</div>
<div> fseek(fichero, (i+1)*sizeof(palabra), SEEK_SET);</div><div> fread(&palabra, sizeof(palabra), 1, fichero);</div><div> virt2 = palabra.eff;</div><div> </div>
<div> if (virt1 > virt2){</div><div> </div><div> fseek(fichero, i*sizeof(palabra), SEEK_SET);</div><div> fread(&palabra, sizeof(palabra), 1, fichero);</div>
<div> //fwrite (&temp, i*sizeof(palabra), 1, fichero);</div><div> </div><div> strcpy (temp.castellano, palabra.castellano);</div><div> strcpy (temp.aleman, palabra.aleman);</div>
<div> temp.cont_aciertos = palabra.cont_aciertos;</div><div> temp.cont_errores = palabra.cont_errores;</div><div> temp.eff = palabra.eff;</div><div> </div><div> fseek(fichero, (i+1)*sizeof(palabra), SEEK_SET);</div>
<div> fread(&palabra, sizeof(palabra), 1, fichero);</div><div> fseek(fichero, i*sizeof(palabra), SEEK_SET);</div><div> fwrite (&palabra, sizeof(palabra), 1, fichero);</div>
<div> </div><div> </div><div> strcpy (palabra.castellano, temp.castellano);</div><div> strcpy (palabra.aleman, temp.aleman);</div><div> palabra.cont_aciertos = temp.cont_aciertos;</div>
<div> palabra.cont_errores = temp.cont_errores;</div><div> palabra.eff = temp.eff;</div><div> fseek(fichero, (i+1)*sizeof(palabra), SEEK_SET);</div><div> fwrite (&palabra, sizeof(palabra), 1, fichero);</div>
<div> </div><div> </div><div> }</div><div> }</div><div> }</div><div> </div><div> </div>
<div><br></div><div> fclose (fichero);</div><div> </div><div> </div><div> }</div><div> fflush(stdin);</div><div> printf("\n\nPulse Intro para finalizar...");</div><div> getchar();</div>
<div><br></div><div>}</div><div><br></div><br><div class="gmail_quote">El 10 de marzo de 2012 16:01, Albert Montolio <span dir="ltr"><<a href="mailto:albert.montolio@gmail.com">albert.montolio@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola, tengo un problema con el metodo de la burbuja. Lo se hacer para una serie de numeros simples, xo no me ha salido para una estructura.<div>
tengo un fichero donde contiene la estructura palabra, formada por palabras y un contador que es la efectividad. quiero ordenar de menor a mayor a efectividad todas las palabras (con todos sus campos dentros)</div>
<div>He implementando este metodo de la burbuja, para ordenar el fichero, pero no me lo ordena, me lo deja igual. Alguien me podria ayudar a buscar el error?¿ muchas gracias de antemano</div><div><br></div><div><br></div>
<div><br></div><div><div class="im"><div>#include <stdio.h></div><div>#include <string.h></div><div><br></div><div>struct t_palabra {</div></div><div> char castellano[40];</div><div> char aleman[40];</div>
<div> float cont_aciertos;</div>
<div> float cont_errores;</div><div> float eff;</div><div class="im"><div>};</div><div><br></div><div>int main (void)</div><div>{</div><div> FILE *fichero;</div><div> struct t_palabra palabra;</div></div><div> struct t_palabra temp;</div>
<div> char respuesta[40];</div><div> int i, j, nPalabras;</div><div class="im"><div><br></div><div><br></div><div><br></div><div> fichero = fopen ("datos.dat", "rb+");</div><div> if (fichero == NULL)</div>
<div>
printf ("Error: No se ha podido abrir el fichero datos.dat.");</div><div> else {</div><div> </div></div><div> for (j=2; j>0; j--){</div><div> </div><div> fseek(fichero, 0*sizeof(palabra), SEEK_SET);</div>
<div> </div><div> for (i=0; i<j; i++){</div><div> </div><div> if (fread(&palabra, i*sizeof(palabra), 1, fichero) < fread(&palabra, (i+1)*sizeof(palabra), 1, fichero)){</div>
<div> </div><div> fread(&palabra, i*sizeof(palabra), 1, fichero);</div><div> //fwrite (&temp, i*sizeof(palabra), 1, fichero);</div><div> </div><div> strcpy (temp.castellano, palabra.castellano);</div>
<div> strcpy (temp.aleman, palabra.aleman);</div><div> temp.cont_aciertos = palabra.cont_aciertos;</div><div> temp.cont_errores = palabra.cont_errores;</div><div> temp.eff = palabra.eff;</div>
<div> </div><div> fread(&palabra, (i+1)*sizeof(palabra), 1, fichero);</div><div> fwrite (&palabra, i*sizeof(palabra), 1, fichero);</div><div> </div><div>
strcpy (palabra.castellano, temp.castellano);</div><div> strcpy (palabra.aleman, temp.aleman);</div><div> palabra.cont_aciertos = temp.cont_aciertos;</div><div> palabra.cont_errores = temp.cont_errores;</div>
<div> palabra.eff = temp.eff;</div><div> </div><div> fwrite (&palabra, (i+1)*sizeof(palabra), 1, fichero);</div><div class="im"><div> </div><div> </div>
<div> }</div>
<div> }</div><div> }</div><div> </div><div> </div><div><br></div><div> fclose (fichero);</div><div> </div><div>
</div><div> }</div><div> fflush(stdin);</div><div> printf("\n\nPulse Intro para finalizar...");</div><div> getchar();</div><div><br></div><div>}</div><br></div><div class="gmail_quote">El 8 de marzo de 2012 09:48, Albert Montolio <span dir="ltr"><<a href="mailto:albert.montolio@gmail.com" target="_blank">albert.montolio@gmail.com</a>></span> escribió:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">muchas gracias por la ayuda<br><br><div class="gmail_quote">El 6 de marzo de 2012 22:46, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span> escribió:<div>
<div><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
El pasado 2012-03-06 21:08:55, Albert_Munich escribió:<br>
<br>
A> A Salvador le queria preguntar como es que a el le ha funcionado. Has<br>
A> utilizado mi codigo fuente?<br>
<br>
Hola:<br>
<br>
He utilizado tu programa, lo he hecho de nuevo ahora, y a mi me funciona correctamente. No entiendo lo que puede estar pasando.<br>
<br>
Te paso "mi versión" del programa, espero que te ayude.<br>
<br>
----8<------<br>
<div>#include <stdio.h><br>
#include <string.h><br>
<br>
struct t_palabra {<br>
</div><div> char castellano[30];<br>
char ingles[30];<br>
int cont_aciertos;<br>
int cont_errores;<br>
};<br>
<br>
int main (void)<br>
{<br>
FILE *fichero;<br>
</div><div> struct t_palabra palabra;<br>
char respuesta[30];<br>
</div> int i, nPalabras;<br>
<br>
/* Crea un fichero con dos palabras, quitar los comentarios para que lo haga cada vez */<br>
/*<br>
fichero = fopen ("datos.dat", "wb+");<br>
strcpy(palabra.castellano, "casa");<br>
strcpy(palabra.ingles, "house");<br>
palabra.cont_aciertos = palabra.cont_errores = 0;<br>
fwrite(&palabra, sizeof(palabra), 1, fichero);<br>
strcpy(palabra.castellano, "coche");<br>
strcpy(palabra.ingles, "car");<br>
fwrite(&palabra, sizeof(palabra), 1, fichero);<br>
fclose(fichero);<br>
*/<br>
<div><br>
fichero = fopen ("datos.dat", "rb+");<br>
</div><div> if (fichero == NULL)<br>
printf ("Error: No se ha podido abrir el fichero datos.dat.");<br>
else {<br>
</div> i=0;<br>
while(!feof(fichero))<br>
{<br>
fseek(fichero, i*sizeof(palabra), SEEK_SET);<br>
if(fread(&palabra, sizeof(palabra), 1, fichero) > 0) {<br>
<div> printf ("\nEscribe la traduccion de...: ");<br>
</div><div> printf ("\n%s: ", palabra.castellano);<br>
gets(respuesta);<br>
</div> if (!strcmp(respuesta, palabra.ingles)) {<br>
printf ("\nCorrecto!");<br>
palabra.cont_aciertos++;<br>
<div> } else {<br>
printf ("\nIncorrecto.");<br>
</div> palabra.cont_errores++;<br>
}<br>
fseek(fichero, (-1)*sizeof(struct t_palabra), SEEK_CUR);<br>
<div> fwrite (&palabra, sizeof(palabra), 1, fichero);<br>
</div> i++;<br>
<div> }<br>
}<br>
fclose (fichero);<br>
}<br>
fflush(stdin);<br>
printf("\n\nPulse Intro para finalizar...");<br>
getchar();<br>
<br>
</div>/* Parte para ver el estado final del fichero, quitar comentarios para activar */<br>
/*<br>
<div> fichero = fopen ("datos.dat", "rb+");<br>
</div> rewind(fichero);<br>
while(!feof(fichero)) {<br>
if(fread(&palabra, sizeof(palabra), 1, fichero)) {<br>
printf("%s Ac: %d Er: %d\n", palabra.castellano, palabra.cont_aciertos, palabra.cont_errores);<br>
}<br>
}<br>
fclose (fichero);<br>
*/<br>
return 0;<br>
}<br>
----8<------<br>
<div><div><br>
Hasta pronto.<br>
<br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div></div></div><br>
</blockquote></div></div></div><br></div>
</blockquote></div><br></div>