Y tercera y ultima parte:
   
Código C:
Ver original//-----------------------------------------------------------------------------
 
//Busca las palabras de length caracteres en la lista de palabras y las guarda en
//la estructura indicada
int SearchNextWords(char *word,int length,ListaPalabras *Lista)
{
   char cadena[SIZE],salida[SIZE];
   char nameFile[13]={0};
   char aux;
   int a,i,contador,retval;
   FILE *archivo;
 
   sprintf(nameFile
,"%i_Letras.txt",length
+1);    archivo
=fopen(nameFile
,"r"); 
   if(archivo != NULL){
      if(Lista->nEncontradas !=0){
         Lista->Palabras=NULL;
         Lista->nEncontradas=0;
      }
      do{
         retval
=fread(cadena
,SIZE
,1,archivo
);         contador=length;
         for(a=0;a<length;a++){
            for(i=0;i<=contador;i++){
               if(word[a]==cadena[i])
               {
                  aux=cadena[i];
                  cadena[i]=cadena[contador];
                  cadena[contador]=aux;
                  contador--;
                  break;
               }
            }
         }
         if(contador==0){
            Lista->nEncontradas++;
            Lista
->Palabras 
= realloc(Lista
->Palabras
,Lista
->nEncontradas
*sizeof(Palabra
));            strcpy(Lista
->Palabras
[Lista
->nEncontradas
-1].
Palabra,salida
);             Lista
->Palabras
[Lista
->nEncontradas
-1].
PosCaracterExtra=(int)strchr(Lista
->Palabras
[Lista
->nEncontradas
-1].
Palabra,cadena
[0])-(int)Lista
->Palabras
[Lista
->nEncontradas
-1].
Palabra;         }
      retval=Lista->nEncontradas;
   }else{
      retval=-1;
   }
   return retval;
}
//-----------------------------------------------------------------------------
 
//Elije una palabra al azar del archivo elegido
int SearchFirstWord(char *nameFile,char *word)
{
   int retval,nPalabras,posPalabra;
   FILE *archivo;
   char palabra[SIZE];
 
   archivo
=fopen(nameFile
,"r");   if(archivo != NULL){
      fseek(archivo
,0,SEEK_END
);       nPalabras
=ftell(archivo
)/SIZE
;      posPalabra
=rand()%nPalabras
;      fseek(archivo
,posPalabra
*SIZE
,SEEK_SET
);       retval
=fread(palabra
,SIZE
,1,archivo
);      if(retval==1)
   }else{
      retval=-1;
   }
   return retval;
}