Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////
- // ALGORITMO DEL PROGRAMA //
- ////////////////////////////
- TIPO 'tarea':
- - Una variable <tiempoPropio> de tipo numérico
- - Una variable <tiempoTotal> de tipo numérico
- - Un contenedor <dependencias> de tipo vector de elementos de tipo numérico
- :fin-TIPO
- FUNCIÓN procesaFicheroDependencias():
- - Abrir secuencialmente con formato ascii en la variable <fichero> el archivo de relaciones
- - Eliminar una línea del <fichero> // "#Number of tasks"
- // LEER EL NÚMERO DE TAREAS
- - Declarar una variable <numeroTareas> de tipo numérico
- - Leer un número de <fichero> y guardarlo en la variable <numeroTareas>
- - Declarar un contenedor <tareas> de tipo vector de elementos de tipo 'tarea'
- - Dimensionar el vector con tantos elementos como indique el valor de <numeroTareas>
- - Declarar un contenedor <tareasPendientes> de tipo lista doblemente enlazada de elementos de tipo numérico
- - Eliminar una línea del <fichero> // "#Task duration"
- // LEER LAS DURACIONES DE CADA TAREA
- - Declarar una variable <duracion> de tipo numérico
- - Declarar una variable <indice> de tipo numérico
- - Declarar una variable <i> de tipo numérico
- - Asignar a <i> el valor "0"
- MIENTRAS( <i> sea menor o igual que <numeroTareas> ):
- - Leer un número del <indice> y guardarlo en la variable <duracion>
- - Leer un caracter del <fichero> // La coma entre un indice y una duración
- - Leer un número del <fichero> y guardarlo en la variable <duracion>
- - Asignar a <tiempoPropio> del elemento <indice> de <tareas> el valor de <duracion>
- - Asignar a <tiempoTotal> del elemento <indice> de <tareas> el valor "-1"
- -fin-MIENTRAS
- - Eliminar una línea del <fichero> // "#Task dependencies"
- // LEER DEPENDENCIAS E IR RESOLVIÉNDOLAS AQUELLAS QUE SE PUEDA CON COSTE LINEAL
- - Declarar una variable <tiempoDependencias> de tipo numérico
- - Declarar una variable <indiceActual> de tipo numérico
- - Asignar a <indiceActual> el valor "0"
- - Declarar una variable <resoluble> de tipo booleano
- REPETIR mientras( queden líneas en <fichero> ):
- - Leer un número del <fichero> y guardarlo en la variable <indice>
- - Asignar a la variable <peticion><indice> el valor de <indice>
- REPETIR mientras( <indiceActual> sea menor que <indice> ): // COMO ESTÁN ORDENADOS, SE PUEDE HACER ESTO:
- - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> su propio valor <tiempoPropio>
- - Incrementar la variable <indiceActual> en una unidad
- :fin-REPETIR
- - Asignar a <resoluble> el valor "1"
- REPETIR mientras( no se llegue a un final de línea ):
- - Leer un carácter de <fichero> // la coma separadora
- - Leer un número del <fichero> y guardarlo en la variable <i>
- - Añadir por el final de <dependencias> del elemento <indiceActual> de <tareas> el valor <i>
- SI( el valor <tiempoTotal> del elemento <i> de <tareas> es "-1" ):
- - Asignar a <resoluble> el valor "0"
- :fin-SI
- :fin-REPETIR
- SI( <resoluble> tiene el valor "1" ):
- - Declarar una variable <tiempoDependencias> de tipo numérico
- - Asignar a <tiempoDependencias> el valor "0"
- - Asignar a <i> el valor "0"
- REPETIR mientras( <i> no sea el tamaño del <dependencias> del elemento <indiceActual> de <tareas> ):
- SI( <tiempoDependencias> es mayor que el <tiempoTotal> del elemento <i> de <tareas> ):
- - Asignar a <tiempoDependencias> el valor de <tiempoTotal> del elemento <i> de <tareas>
- :fin-SI
- - Incrementar el valor de <i> en una unidad
- :fin-REPETIR
- - Incrementar el valor de <tiempoDependencias> en el valor del <tiempoPropio> del elemento <indiceActual> de <tareas>
- - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> el valor de <tiempoDependencias>
- :SI-NO:
- - Añadir por el principio de <tareasPendientes> el valor <indiceActual>
- :fin-SI
- - Incrementar el valor de <indiceActual> en una unidad
- :fin-REPETIR
- REPETIR mientras( <indiceActual> sea menor que <numeroTareas> ):
- - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> su propio valor <tiempoPropio>
- - Incrementar la variable <indiceActual> en una unidad
- :fin-REPETIR
- // RESOLVER LAS DEPENDENCIAS DE AQUELLAS QUE NO HAN SIDO RESUELTAS
- - Declarar una variable <numeroIteraciones> de tipo numérico
- - Inicializar la variable <numeroIteraciones> con el valor "0"
- MIENTRAS( (queden elementos en <tareasPendientes>) y <numeroIteraciones> no sea mayor que el número de elementos en <tareasPendientes> ):
- - Asignar a <indiceActual> el valor del primer elemento de <tareasPendientes>
- - Eliminar el primer elemento de <tareasPendientes>
- - Asignar a <tiempoDependencias> el valor "0"
- - Asignar a <i> el valor "0"
- REPETIR mientras( <i> no sea el tamaño del <dependencias> del elemento <indiceActual> de <tareas> ):
- SI( el <tiempoTotal> del elemento <i> de <tareas> es "-1" ):
- - Asignar a <tiempoTotal> el valor "-1"
- :fin-REPETIR
- :fin-SI
- SI( <tiempoDependencias> es mayor que el <tiempoTotal> del elemento <i> de <tareas> ):
- - Asignar a <tiempoDependencias> el valor de <tiempoTotal> del elemento <i> de <tareas>
- :fin-SI
- - Incrementar el valor de <i> en una unidad
- :fin-REPETIR
- SI( <tiempoTotal> es "-1" )
- - Añadir por el final de <tareasPendientes> el valor de <indiceActual>
- - Incrementar el valor de <numeroIteraciones> en una unidad
- :SI-NO:
- - Incrementar el valor de <tiempoDependencias> en el valor del <tiempoPropio> del elemento <indiceActual> de <tareas>
- - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> el valor de <tiempoDependencias>
- - Asignar a <numeroIteraciones> el valor "0"
- :fin-SI
- :fin-MIENTRAS
- RETORNA( <tareas> )
- tareas
- :fin-FUNCION
- PROGRAMA:
- - Declarar un contenedor <tareas> de tipo vector de elementos de tipo 'tarea'
- - Asignar a <tareas> lo retornado por la función <procesaFicheroDependencias()>
- // El valor de <tareas> incluye el tiempo total calculado para todas las tareas. Puede guardarse de
- // forma persistente en un fichero binario para futuras ejecuciones y evitar volver a hacer el cálculo.
- - Declarar una variable <indiceTarea> de tipo numérico
- REPETIR mientras( queden líneas ):
- - Leer un número y asignarlo a <indiceTarea>
- - Mostrar el valor <indiceTarea> seguido de un espacio y el valor de <tiempoTotal> del elemento <indice> de <indiceTarea>
- :fin-REPETIR
- :fin-PROGRAMA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement