Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MatiDiyo en 5 Septiembre 2018, 16:33 pm



Título: Recorrer un archivo recursivamente.
Publicado por: MatiDiyo en 5 Septiembre 2018, 16:33 pm
Hola gente que tal?

Estoy atorado en un ejercicio de recursividad, en el cual tengo que buscar el menor elemento de un archivo de enteros. No le puedo encontrar la forma de recorrer el archivo recursivamente.

Código:
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    FILE *fp;
    int *datos;

    printf("%i ", BuscarMenorArchivo_Recursiva(&fp, &datos));


}

int BuscarMenorArchivo_Recursiva(FILE *fp, int *datos)
{
    fp = fopen("datos.dat", "rb");

    fread(datos, sizeof(int), 1, archi);

    int menor = (*datos);

    if(feof(fp) != NULL)
    {
        menor = BuscarMenorArchivo_Recursiva(archi, datos);

        fread(datos, sizeof(int), 1, fp);

        if( (*datos) < menor)
            menor = (*datos);
    }

    fclose(fp);
    return menor;
}

Saludos gente  ;D


Título: Re: Recorrer un archivo recursivamente.
Publicado por: MAFUS en 6 Septiembre 2018, 14:59 pm
Para hacer algo bonito debes hacer uso de dos funciones: Una que usarás de interfaz y la otra quien realmente trabajará con la recursión.

Cuidado que el archivo puede estar vacío y deberías comprobar eso antes de usar estas funciones. Otra idea sería modificar la función inicial para que devuelva si ha habido error accediendo al archivo o éste se encuentra vacío y devuelva por referencia el valor conseguido.

Código
  1. static int f_interno(FILE *fp, int menor) {
  2.    if(!feof(fp)) {
  3.        int actual;
  4.        int siguiente;
  5.        fread(&actual, sizeof(int), 1, fp);
  6.        siguiente = f_interno(fp, menor);
  7.        menor = actual<siguiente? actual : siguiente;
  8.    }
  9.    return menor;
  10. }
  11.  
  12. int f(FILE *fp) {
  13.    int menor;
  14.    fread(&menor, sizeof(int), 1, fp);
  15.    menor = f_interno(fp, menor);
  16.  
  17.    return menor;
  18. }


Título: Re: Recorrer un archivo recursivamente.
Publicado por: MatiDiyo en 7 Septiembre 2018, 02:30 am
Hola MAFUS, gracias por la ayuda el código funciona de maravilla. Aunque tengo una duda del porque hiciste la función con el "static".

Muchas gracias y saludos  ;D


Título: Re: Recorrer un archivo recursivamente.
Publicado por: MAFUS en 7 Septiembre 2018, 10:43 am
Sirve para que un objeto global no sea visto desde fuera del archivo, así si hicieras una librería esa sería la forma de ocultar esas función que no quieres que la gente use. Cómo un método private en POO.


Título: Re: Recorrer un archivo recursivamente.
Publicado por: MatiDiyo en 8 Septiembre 2018, 05:27 am
Gracias por el dato, no lo sabía.

Saludos