Solucion segundo parcial 2017 problema 2.2 posibles errores

Solucion segundo parcial 2017 problema 2.2 posibles errores

de Federico Ciuffardi Alves -
Número de respuestas: 1

El codigo que presenta la solucion con recorrida no eficiente es el siguiente:

1 function deleteFile(inodo: Integer): boolean;
2   var cambiado, encontre: boolean; nroInodo, block, entry: Integer;
3   buff: array[1..64] of dir_entry;
4 begin
5   if(IT[inodo].used && IT[inodo].type == ‘file’)then
6     nroInodo := 0;
7     while(nroInodo < Max_Inodos && IT[inodo].reference > 0) do
8       if(IT[nroInodo].used && IT[nroInodo].type == 'dir' && IT[nroInodo].tope > 0) then
9         cambiado := false;
10        block := 1;
11        while(block < IT[nroInodo].tope)do
12          read(D, IT[nroInodo].data[block], buff);
13          entry := 1;
14          while (entry <= 64) do
15            if(buff[entry].used and buff[entry].inode_num == inodo)then
16              buff[entry].used := false;
17              IT[inodo].reference--;
18              cambiado := true;
19            end if;
20          end while;
21        end while;
22        if(cambiado)then
23          write(D, IT[nroInodo].data[block], buff);
24        end if
25        nroInodo++;
26      end while;
27      for(int i = 0; i < IT[inodo].tope; i++)
28        MB[IT[inodo].data[i]] = 0; // libero bloques
29      IT[inodo].used := false;
30      return (IT[inodo].reference==0); 

31    else
32      return false;
33  end if
34end functon;


Creo que de llegar tanto al while de la linea 11 y de la linea 14 nunca se saldira del loop ya que ni entry ni block se incrementan.

Tambien se tiene que el write esta en la linea 23 despues de que se termina el while que tiene como intencion iterar los bloques por lo cual el unico bloque que puede ser reescrito es el ultimo recorrido.

Ademas es en la linea 9 que se setea cambiado a false por lo que no en caso de arreglar el error anterior se deberia cambiar esto a antes de analizar el siguiente bloque ya que de no ser asi el hecho de que se cambie el primer bloque por ejemplo causaria que todos los siguientes se deban reescribir aunque no tengan cambios.

Cosas similares suceden en la solucion con recorrida eficiente.