Tema: saludos..
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/05/2010, 15:24
Markonikov
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta saludos..

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 !