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>#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><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=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>                </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 class="gmail_quote">El 8 de marzo de 2012 09:48, 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">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 class="h5"><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><br></div>