Advertisement
Guest User

Algoritmo - Challenge 4

a guest
Jun 20th, 2011
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.44 KB | None | 0 0
  1. ////////////////////////////
  2. // ALGORITMO DEL PROGRAMA //
  3. ////////////////////////////
  4.  
  5. TIPO 'tarea':
  6.     - Una variable <tiempoPropio> de tipo numérico
  7.     - Una variable <tiempoTotal> de tipo numérico
  8.     - Un contenedor <dependencias> de tipo vector de elementos de tipo numérico
  9. :fin-TIPO
  10.  
  11. FUNCIÓN procesaFicheroDependencias():
  12.  
  13.     - Abrir secuencialmente con formato ascii en la variable <fichero> el archivo de relaciones
  14.    
  15.     - Eliminar una línea del <fichero> // "#Number of tasks"
  16.    
  17.     // LEER EL NÚMERO DE TAREAS
  18.    
  19.     - Declarar una variable <numeroTareas> de tipo numérico
  20.     - Leer un número de <fichero> y guardarlo en la variable <numeroTareas>
  21.    
  22.     - Declarar un contenedor <tareas> de tipo vector de elementos de tipo 'tarea'
  23.     - Dimensionar el vector con tantos elementos como indique el valor de <numeroTareas>
  24.    
  25.     - Declarar un contenedor <tareasPendientes> de tipo lista doblemente enlazada de elementos de tipo numérico
  26.  
  27.     - Eliminar una línea del <fichero> // "#Task duration"
  28.    
  29.     // LEER LAS DURACIONES DE CADA TAREA
  30.    
  31.     - Declarar una variable <duracion> de tipo numérico
  32.     - Declarar una variable <indice> de tipo numérico
  33.    
  34.     - Declarar una variable <i> de tipo numérico
  35.     - Asignar a <i> el valor "0"
  36.            
  37.     MIENTRAS( <i> sea menor o igual que <numeroTareas> ):
  38.    
  39.         - Leer un número del <indice> y guardarlo en la variable <duracion>
  40.        
  41.         - Leer un caracter del <fichero> // La coma entre un indice y una duración
  42.        
  43.         - Leer un número del <fichero> y guardarlo en la variable <duracion>
  44.    
  45.         - Asignar a <tiempoPropio> del elemento <indice> de <tareas> el valor de <duracion>
  46.        
  47.         - Asignar a <tiempoTotal> del elemento <indice> de <tareas> el valor "-1"
  48.        
  49.     -fin-MIENTRAS
  50.    
  51.     - Eliminar una línea del <fichero> // "#Task dependencies"
  52.    
  53.     // LEER DEPENDENCIAS E IR RESOLVIÉNDOLAS AQUELLAS QUE SE PUEDA CON COSTE LINEAL
  54.    
  55.     - Declarar una variable <tiempoDependencias> de tipo numérico
  56.     - Declarar una variable <indiceActual> de tipo numérico
  57.     - Asignar a <indiceActual> el valor "0"
  58.  
  59.     - Declarar una variable <resoluble> de tipo booleano
  60.    
  61.     REPETIR mientras( queden líneas en <fichero> ):
  62.  
  63.         - Leer un número del <fichero> y guardarlo en la variable <indice>
  64.  
  65.         - Asignar a la variable <peticion><indice> el valor de <indice>
  66.        
  67.         REPETIR mientras( <indiceActual> sea menor que <indice> ): // COMO ESTÁN ORDENADOS, SE PUEDE HACER ESTO:
  68.             - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> su propio valor <tiempoPropio>
  69.             - Incrementar la variable <indiceActual> en una unidad
  70.         :fin-REPETIR       
  71.        
  72.         - Asignar a <resoluble> el valor "1"
  73.        
  74.         REPETIR mientras( no se llegue a un final de línea ):
  75.             - Leer un carácter de <fichero> // la coma separadora
  76.             - Leer un número del <fichero> y guardarlo en la variable <i>
  77.             - Añadir por el final de <dependencias> del elemento <indiceActual> de <tareas> el valor <i>
  78.             SI( el valor <tiempoTotal> del elemento <i> de <tareas> es "-1" ):
  79.                 - Asignar a <resoluble> el valor "0"
  80.             :fin-SI
  81.         :fin-REPETIR
  82.        
  83.         SI( <resoluble> tiene el valor "1" ):
  84.             - Declarar una variable <tiempoDependencias> de tipo numérico
  85.             - Asignar a <tiempoDependencias> el valor "0"
  86.             - Asignar a <i> el valor "0"
  87.             REPETIR mientras( <i> no sea el tamaño del <dependencias> del elemento <indiceActual> de <tareas> ):
  88.                 SI( <tiempoDependencias> es mayor que el <tiempoTotal> del elemento <i> de <tareas> ):
  89.                     - Asignar a <tiempoDependencias> el valor de <tiempoTotal> del elemento <i> de <tareas>
  90.                 :fin-SI
  91.                 - Incrementar el valor de <i> en una unidad
  92.             :fin-REPETIR
  93.             - Incrementar el valor de <tiempoDependencias> en el valor del <tiempoPropio> del elemento <indiceActual> de <tareas>
  94.             - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> el valor de <tiempoDependencias>
  95.         :SI-NO:
  96.             - Añadir por el principio de <tareasPendientes> el valor <indiceActual>
  97.         :fin-SI
  98.        
  99.         - Incrementar el valor de <indiceActual> en una unidad
  100.        
  101.     :fin-REPETIR
  102.    
  103.     REPETIR mientras( <indiceActual> sea menor que <numeroTareas> ):
  104.         - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> su propio valor <tiempoPropio>
  105.         - Incrementar la variable <indiceActual> en una unidad
  106.     :fin-REPETIR
  107.    
  108.     // RESOLVER LAS DEPENDENCIAS DE AQUELLAS QUE NO HAN SIDO RESUELTAS
  109.    
  110.     - Declarar una variable <numeroIteraciones> de tipo numérico
  111.     - Inicializar la variable <numeroIteraciones> con el valor "0"
  112.    
  113.     MIENTRAS( (queden elementos en <tareasPendientes>) y <numeroIteraciones> no sea mayor que el número de elementos en <tareasPendientes> ):
  114.         - Asignar a <indiceActual> el valor del primer elemento de <tareasPendientes>
  115.        
  116.         - Eliminar el primer elemento de <tareasPendientes>
  117.        
  118.         - Asignar a <tiempoDependencias> el valor "0"
  119.         - Asignar a <i> el valor "0"
  120.         REPETIR mientras( <i> no sea el tamaño del <dependencias> del elemento <indiceActual> de <tareas> ):
  121.             SI( el <tiempoTotal> del elemento <i> de <tareas> es "-1" ):
  122.                 - Asignar a <tiempoTotal> el valor "-1"
  123.                 :fin-REPETIR
  124.             :fin-SI
  125.             SI( <tiempoDependencias> es mayor que el <tiempoTotal> del elemento <i> de <tareas> ):
  126.                 - Asignar a <tiempoDependencias> el valor de <tiempoTotal> del elemento <i> de <tareas>
  127.             :fin-SI
  128.             - Incrementar el valor de <i> en una unidad
  129.         :fin-REPETIR
  130.    
  131.         SI( <tiempoTotal> es "-1" )
  132.             - Añadir por el final de <tareasPendientes> el valor de <indiceActual>
  133.             - Incrementar el valor de <numeroIteraciones> en una unidad
  134.         :SI-NO:
  135.             - Incrementar el valor de <tiempoDependencias> en el valor del <tiempoPropio> del elemento <indiceActual> de <tareas>
  136.             - Asignar a <tiempoTotal> del elemento <indiceActual> de <tareas> el valor de <tiempoDependencias>
  137.             - Asignar a <numeroIteraciones> el valor "0"
  138.         :fin-SI
  139.    
  140.     :fin-MIENTRAS
  141.  
  142.     RETORNA( <tareas> )
  143. tareas
  144. :fin-FUNCION
  145.  
  146. PROGRAMA:
  147.    
  148.     - Declarar un contenedor <tareas> de tipo vector de elementos de tipo 'tarea'
  149.     - Asignar a <tareas> lo retornado por la función <procesaFicheroDependencias()>
  150.    
  151.     // El valor de <tareas> incluye el tiempo total calculado para todas las tareas. Puede guardarse de
  152.     // forma persistente en un fichero binario para futuras ejecuciones y evitar volver a hacer el cálculo.
  153.    
  154.     - Declarar una variable <indiceTarea> de tipo numérico
  155.  
  156.     REPETIR mientras( queden líneas ):
  157.         - Leer un número y asignarlo a <indiceTarea>
  158.         - Mostrar el valor <indiceTarea> seguido de un espacio y el valor de <tiempoTotal> del elemento <indice> de <indiceTarea>
  159.     :fin-REPETIR
  160.  
  161. :fin-PROGRAMA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement