User Tools

Site Tools


Writing /var/lib/dokuwiki/data/meta/teaching/ie0117/actividad_funciones_recursion.meta failed
teaching:ie0117:actividad_funciones_recursion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:ie0117:actividad_funciones_recursion [2016/06/13 11:01] – [Instrucciones] adminteaching:ie0117:actividad_funciones_recursion [2022/09/20 00:08] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Actividad 10. Funciones, recursión, entrada, salida y funciones de sistema ======+====== Funciones, recursión, entrada, salida y funciones de sistema ======
  
 ===== Funciones que podrían ser utilizadas en esta actividad ===== ===== Funciones que podrían ser utilizadas en esta actividad =====
Line 7: Line 7:
  
 ===== Instrucciones ===== ===== Instrucciones =====
 +
 +==== Programa Examinador de directorios ====
  
  
Line 29: Line 31:
  
   * Construya un programa que abra el archivo root_dir/d1/e1.txt y muestre su contenido en pantalla. Agregue este programa al informe.   * Construya un programa que abra el archivo root_dir/d1/e1.txt y muestre su contenido en pantalla. Agregue este programa al informe.
-  * Modifique el programa anterior para que lea el contenido de root_dir/d1/e1.txt, lo copie en un nuevo archivo llamado root_dir/result y además agregue una línea que diga: "el directorio actual es: root_dir/d1" (el directorio actual realmente). Agregue este programa al informe. +  * Modifique el programa anterior para que lea el contenido de root_dir/d1/e1.txt, lo copie en un nuevo archivo llamado root_dir/result y además agregue una línea que diga: "el directorio actual es: root_dir/d1" (el directorio actual realmente, debe ser extraído del nombre completo del archivo leído). Agregue este programa al informe. 
-  * Utilizando los programas anteriores y recursión, construya un programa que examine todo el árbol de archivos de arriba y copie la lista de archivos (con su directorio) de todos los archivos terminados en .txt en pantalla y en el archivo "root_dir/result". Agregue este programa al informe.+  * Utilizando los programas anteriores y recursión, construya un programa que examine todo el árbol de archivos de arriba y copie la lista de archivos (con su directorio) de todos los archivos terminados en .txt en pantalla y en el archivo "root_dir/result". Agregue este programa al informe. (opcional 20%) 
 + 
 +==== Algunas funciones de ayuda ==== 
 + 
 +Estas funciones pueden contener errores y estar incompletas (no se chequean errores). Usted es responsable de corregirlas o completarlas. 
 + 
 +  int get_len(char *data) { 
 +    int len=0; 
 +    while(data[len]!='\0'){ 
 +      len++; 
 +    } 
 +    return(len); 
 +  } 
 + 
 + 
 +  char * get_dir(char *filename) { 
 +    char *output; 
 +    output=calloc(256, sizeof(char)); 
 +    int last_dir_pos=0; 
 +    int i; 
 +    for (i=0; i<256; i++) { 
 +      if (filename[i]=='/') { 
 +        last_dir_pos=i; 
 +      } else { 
 +        if (filename[i]=='\0') { 
 +   break; 
 +        } else { 
 +   if (filename[i]=='\n') { 
 +     break; 
 +   } 
 +        } 
 +      } 
 +    } 
 +    if ((i==256) || (last_dir_pos==0)) { 
 +      output[0]='\0'; 
 +    } else { 
 +      for (i=0; i<last_dir_pos; i++) { 
 +        output[i]=filename[i]; 
 +      } 
 +    } 
 +    return(output); 
 +  } 
 + 
 +  void mystrcpy(char *dataout, char *datain) { 
 +    int i=0; 
 +    char c; 
 +    while ((c=datain[i])!='\0') { 
 +      dataout[i]=c; 
 +      i++; 
 +    } 
 +    dataout[i]='\n'; 
 +    dataout[++i]='\0'; 
 +  } 
 + 
 +  char *grow_str(char *old, char sep, char *new) { 
 +    int old_total_size=get_len(old); 
 +    printf("Grow str old len %d, new len %d\n", old_total_size, (get_len(old)+get_len(new)+2)); 
 +    char *output=realloc(old, sizeof(char)*(get_len(old)+get_len(new)+2)); 
 +    output[old_total_size]=sep; 
 +    mystrcpy(output+old_total_size+1, new); 
 +    output[old_total_size+get_len(new)+1]='\0'; 
 +    return(output); 
 +  } 
 + 
 +  bool is_txt(char *filename) { 
 +    int len; 
 +    len=get_len(filename); 
 +    if ((filename[len-1]=='t') && (filename[len-2]=='x') && (filename[len-3]=='t')){ 
 +      return(true); 
 +    } else { 
 +      return(false); 
 +    } 
 +  } 
 + 
 +  bool is_dir(char *filename) { 
 +    struct stat mystat; 
 +    printf("Is dir? %s\n", filename); 
 +    if (stat(filename, &mystat)!=0) { 
 +      printf("Error %d\n", errno); 
 +      printf("%s\n", strerror(errno)); 
 +      exit(0); 
 +    } 
 +    mode_t mymode; 
 +    mymode=mystat.st_mode; 
 +    if (S_ISDIR(mymode)) { 
 +      return(true); 
 +      } else { 
 +      return(false); 
 +    } 
 +  } 
  
teaching/ie0117/actividad_funciones_recursion.1465815672.txt.gz · Last modified: 2022/09/20 00:08 (external edit)