Forma de programar

Re: Forma de programar

de Pedro Liber Antonio Carrasco Aguilar -
Número de respuestas: 0

Me quedo clarisimo.

En cuanto a puntos a la hora de correjir.

Si yo implemento esto para las solucion del problema 1 parte practica (3) copiar

http://www.fing.edu.uy/inco/cursos/sistoper/examenes/2011/Sol2011MAR.pdf

viod cpFile(......){

   ok=false;

   int index_dest=-1;

   for(int i=0; i< max_files_on_dir;i++){

      if (!d_target[i].used) index_dest=i; // busco dir_entry_libre

     if(d_target[i].used && (d_target[i].type=="file") && (d_target[i].file_name==name_t) && (d_target[i].file_ext==ext_t){ //busco_si_esta_dest

          ok=false;

          return; //ERNO_FILE_EXIST

     }

      if(d_source[i].used && (d_source[i].type=="file") && (d_source[i].file_name == name_s) && (d_source[i].file_ext==ext_s) { //busco_source

         if (index_dest=-1){//si no encontre un dir_entry libre sigo buscando

            for (int j=i; j<max_files_on_dir; j++)

                if (!d_target[i].used){

                    index_dest=i;

                    break;

                }//if

            if (index_dest=-1) return; //ERNO_DIRFULL

         }//if

         int sig= -1; //siguiente bloque libre

         int cont =512;

         int ll //linekd_list_libres

         int size = d_source[i].size;

         for(int j=0; i<sector_in_disk){

             if(FAT[j] =-1){//si esta vacio lo rrelleno con el puntero del "anterior"

                FAT[j]=sig;

                sig=j;

                ll=j;//mantengo el puntero a mi linked list de libres

                if (cont >=size) break;

                cont+=512;

             }//if

         }//for

         if (cont < size){//no hay espacio suficiente en disco

            int aux;

            while(FAT[ll]!=-1){//desago la linked list

                aux=FAT[ll];

                FAT[ll]=-1;

                ll=aux;

            }//while

         }else{//hay espacio

               int source=d_source[i].start;

               d_target[index_dest].start=ll;//guardo el cominzo del archivo copiado;

               sector blk;              

               for(int j=0; j<size; j+=512){//copio arch

                   FAT[ll]=FAT[source];

                   readSector(D,source,blk, ok); if (!ok) return;//ERNO_BADSECTOR

                   writeSector(D,ll,blk, ok); if (!ok) return;//ERNO_BADSECTOR

                   ll = FAT[ll];

                   source=FAT[source];

               }//for (si rollback)

               d_target[index_dest].file_name=name_t;

              d_target[index_dest].file_ext=ext_t;

              d_target[index_dest].dir_index=index_dest;

              d_target[index_dest].size=size;

              d_target[index_dest].type="file";

              d_target[index_dest].info=d_source[i].info;//¿Esto va o depende de la fecha?

              d_target[index_dest].used=true;//a lo ultimo

              return;

         }//if-else

      }//if

   }//for

No esta modulado y e implemento whiles con for y break ¿se gana los pts del ejer o resta algo? Funcionalmente se parece bastante a la solucion.

FAT de linked list. Con -1 si esta libre, indice al siguiente si esta ocupado. No menejo fin de archivo xq lo manejo con el size del archivo.

Pros: me sale asi, es mas eficiente.

Contras: menos mantenible, debugeable tal vez y.. ¿correjible?

Salu2