Visual Basic - Variables en una Type

Life is soft - evento anual de software empresarial
 
Vista:

Variables en una Type

Publicado por Alvaro (3 intervenciones) el 02/09/2010 13:09:01
Hola camaradas. Tengo una pequeña duda que hace que no pueda seguir con un programilla. A ver si me explico bien:
Dentro de un programa, llega un momento en el que utilizo una subrrutina de ordenación, en concreto HOARE o también conocida como QUICKSHORT. Antes de nada, creo un archivo temporal de acceso directo (o aleatorio) para pasar los datos originales ahí y así tener tanto el archivo original (desordenado), como el archivo temporal (el que voy a tener al final ordenado). Esta el la Type en cuestión:

Type REG_TEMP
T_EST As Integer 'ESTACION
T_REF As Integer 'REFERENCIA
T_I As Double 'ALTURA INSTRUMENTO
T_PTO As Integer 'PUNTO VISADO
T_M As Double 'ALTURA DE LA MIRA
T_LH As Double 'LECTURA HORIZONTAL
T_LV As Double 'LECTURA VERTICAL
T_D As Double 'DISTANCIA
T_C As String * 20 'COMENTARIO
T_LREF As Double
End Type

Public TEMPORAL As REG_TEMP
Public CALTO As REG_TEMP
Public CBAJO As REG_TEMP

Luego empiezo con la subruina de ordenación, pero, por si no quereis leer todo el código, la duda es que si yo paso los datos originales (en un fichero secuencial) a un fichero TEMPORAL (Len =Len (TEMPORAL)), ¿también se graban esos datos en las variables CALTO y CBAJO? si no es así, ¿tendría que grabar también todos los datos del archivo original en CALTO y CBAJO? No sé si me he explicado bien, a lo mejor si leeis el código os aclarais :( . Espero que alguien me pueda ayudar, ya que tengo el examen el día 8 de septiembre y estoy un poco atascado.

Public Sub ORDHOARE()

Dim COMIENZO As Integer
Dim FINAL As Integer
Dim NUM_LISTA As Integer
Close (4)
'CREO UN FICHERO TEMPORAL
Open "C:\TEMPORAL.DAT" For Random As #4 Len = Len(TEMPORAL) 'AL ABRIR FOR RANDOM SI NO EXISTE SE CREA, Y SINO SE ABRE

'PASO LOS DATOS DE LA LIBRETA A UN FICHERO TEMPORAL
'LO CIERRO Y ABRO DE NUEVO PARA PODER LEER DESDE EL PRINCIPIO Y HACER LO Q PROCEDA
Close (2)
Open RADIACION.LIBRETA.Text For Input As #2
Do While Not (EOF(2))

Input #2, LIBRET.LI_EST, LIBRET.LI_REF, LIBRET.LI_I, LIBRET.LI_PTO, LIBRET.LI_M, LIBRET.LI_LH, LIBRET.LI_LV, LIBRET.LI_D, LIBRET.LI_COM
If LIBRET.LI_REF <> 0 Then 'SI LO QUE LEE ES REFERENCIA
REFERENCIA = LIBRET.LI_REF
LECTURH = LIBRET.LI_LH

Else 'LO QUE LEE ES PUNTO RADIADO
CONTADOR = CONTADOR + 1
TEMPORAL.T_PTO = LIBRET.LI_PTO
TEMPORAL.T_EST = LIBRET.LI_EST
TEMPORAL.T_REF = REFERENCIA
TEMPORAL.T_I = LIBRET.LI_I
TEMPORAL.T_M = LIBRET.LI_M
TEMPORAL.T_LH = LIBRET.LI_LH
TEMPORAL.T_LV = LIBRET.LI_LV
TEMPORAL.T_D = LIBRET.LI_D
TEMPORAL.T_C = LIBRET.LI_COM
TEMPORAL.T_LREF = LECTURH

Put #4, CONTADOR, TEMPORAL 'ESCRIBE EN TEMP EL NUMERO DE REGISTROS Q HAY
End If
Loop

'CREO UN FICHERO (INICIO FINAL) DONDE GUARDO LAS LISTAS A ORDENAR
Open "C:\TEMPIF.DAT" For Random As #5
CF.COM = 1
CF.FIN = LOF(4) / Len(TEMPORAL)
NUM_LISTA = 1

Put #5, NUM_LISTA, CF 'ESCRIBA

Do
Get #5, NUM_LISTA, CF
COMIENZO = CF.COM
FINAL = CF.FIN
Call ORDEN(COMIENZO, FINAL, BAJO, ALTO)
Public Sub ORDEN(COMIENZO, FINAL, BAJO, ALTO)
Dim MITAD As Integer
Dim PIBOTE As Integer
ALTO = FINAL
BAJO = COMIENZO
MITAD = Fix((ALTO + BAJO) / 2)

Get #4, MITAD, TEMPORAL
PIBOTE = TEMPORAL.T_PTO

Do
Do
Get #4, BAJO, CBAJO
If CBAJO.T_PTO < PIBOTE Then
BAJO = BAJO + 1
End If
Loop Until CBAJO.T_PTO >= PIBOTE

Do
Get #4, ALTO, CALTO
If CALTO.T_PTO > PIBOTE Then
ALTO = ALTO - 1
End If
Loop Until CALTO.T_PTO <= PIBOTE

If BAJO <= ALTO Then
Put #4, ALTO, CBAJO
Put #4, BAJO, CALTO
BAJO = BAJO + 1
ALTO = ALTO - 1
End If

Loop Until (BAJO > ALTO)
End Sub
If COMIENZO < ALTO Then
NUM_LISTA = NUM_LISTA + 1
CF.COM = COMIENZO
CF.FIN = ALTO
Put #5, NUM_LISTA, CF
End If

If BAJO < FINAL Then
NUM_LISTA = NUM_LISTA + 1
CF.COM = BAJO
CF.FIN = FINAL
Put #5, NUM_LISTA, CF
End If
Loop Until NUM_LISTA = 0

Close #5

Kill "C:\TEMPIF.DAT" 'CON KILL BORRO EL FICHERO, PERO PREVIAMENTE A DE ESTAR CERRADO
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder