bueno primero q todo un saludo a todos... como veran soy nuevo en el foro.. me gustaria experimentar el como me podrian ayudar a ver si les entiendo... es algo relativamente sencillo (para ustedes), estoy cursando computacion y miesntras he estado estudiando un problema me han surgido una serie de dudas pero como no tengo a quien preguntar, me inscribi en el foro... aca les dejo el programa. por cierto los datos q me dan estan en un archivo de txt (centro de la circunferencia 1 (x,y) y su radio, igualmente con la circunferencia 2 "es una lista de varias circunferencias")
'Ejercicio Modificado de la clasificacion de la forma tangencial que tiene
'dos circunferencias
'Elaborado por: Prof. Hugo Hernández
'Fecha: 09/05/2010
'El enunciado se encuentra en el aula virtual Tema 3
'Declaracion de las estructuras
Structure Punto
Dim x, y As Single
End Structure
'Estructura anidada
Structure Circunferencia
Dim C As Punto
Dim R As Single
End Structure
'Definicion de los subprogramas
'Procedimiento de lectura de una variable tipo Circunferencia
Sub Leer_Circunferencia(ByRef Cir As Circunferencia)
With Cir
With .C
Input(1, .x)
Input(1, .y)
End With
Input(1, .R)
End With
End Sub
Sub Intercambio(ByRef C1 As Circunferencia, ByRef C2 As Circunferencia)
Dim Caux As Circunferencia
Caux = C1
C1 = C2
C2 = Caux
End Sub
'Funcion que determina la distancia entre dos datos tipo Punto
Function Distancia(ByVal P1 As Punto, ByVal P2 As Punto) As Single
Distancia = Math.Sqrt((P1.x - P2.x) ^ 2 + (P1.y - P2.y) ^ 2)
End Function
'Funcion que clasifica la forma tangencial de dos circunferencias
Function Clasificacion(ByVal C1 As Circunferencia, ByVal C2 As Circunferencia) As Integer
Dim Dis As Single
'Llamado al subprograma distancia pasando los datos del las coordenada del centro de las
'dos circunferencias los cuales son datos tipo Punto
Dis = Distancia(C1.C, C2.C)
If Equals(C1, C2) Then
Clasificacion = 4
ElseIf Dis = C1.R + C2.R Then
Clasificacion = 1
ElseIf Dis = C1.R - C2.R Then
Clasificacion = 2
Else
Clasificacion = 3
End If
End Function
'Procedimiento que imprime al archivo de datos 2 los datos de una variable tipo Circunferencia
Sub Imprimir_Circunferencia(ByVal Cir As Circunferencia)
With Cir
With .C
Print(2, "[(" & Format(.x, "0.00") & ", " & Format(.y, "0.00") & "), ")
End With
Print(2, Format(.R, "0.00") & "] ")
End With
End Sub
Sub Main()
'Que tengo
Dim C1, C2 As Circunferencia
'Que quiero
Dim Rel As Integer
Dim Cmax As Circunferencia
'Variables auxiliares
Dim Ban As Boolean = True 'Incluye en la declaracion la iniciacion de la bandera
'Manejo de archivos
FileOpen(1, "..\..\..\Circunferencias.dat", OpenMode.Input)
FileOpen(2, "..\..\..\Resultados.dat", OpenMode.Output)
Console.Clear() 'Limpia pantalla
'Ciclo de lectura
While Not EOF(1)
'Lectura de una línea del archivo
Leer_Circunferencia(C1)
Leer_Circunferencia(C2)
'Ordenamiento de las circunferencias segun su radio
If C1.R < C2.R Then
Intercambio(C1, C2)
End If
'Clasificacion del tipo de ralacion que hay entre las circunferencias
Rel = Clasificacion(C1, C2)
'Determinacion de la circunferencia mas grande
If Ban Then
Cmax = C1
Ban = False
ElseIf Cmax.R < C1.R Then
Cmax = C1
End If
'Impresion para cada par de circunferencias
Imprimir_Circunferencia(C1)
Imprimir_Circunferencia(C2)
PrintLine(2, Rel)
End While
'Impresion de la cirucnferencia mas grande
Print(2, "La circunferencia con mayor radio: ")
Imprimir_Circunferencia(Cmax)
'Cierre de archivos
FileClose(1)
FileClose(2)
'Mensaje al usuario de comprobacion
Console.WriteLine("El programa ha ejecutado con exito")
Console.WriteLine("Pulse cualquier tecla para finalizar")
Console.ReadKey()
End Sub
End Module
es respecto a unas circunferencias y me mandan a determinar de q tipo son, tangentes internas, externas etc etc en fin son solo 4 posibles casos, y tambien a determinar la circunferencia de mayor radio, mis dudas empiezan en el "sub intercambio" ya q no estoy totalmente familiarizado con el byref se q el byval es como evaluar un numero en una funcion (corriganme si me equivoco) el ref estoy un tanto liado, ya que en el sub main no entiendo como el programa es capaz de ordenar las circunferencias segun radio entrando en intercambio () :S :S .... luego la parte mas abajo del sub main en la q se determina la circufenrencia de radio maximo (donde se usa la variable boolean) solo leen la circunferencia 1 tampoco entiendo ya que no solo me estan dando una circunferencia por cada linea sino q son 2
gracias !