Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

saludos..

Estas en el tema de saludos.. en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/05/2010, 15:24
 
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 !
  #2 (permalink)  
Antiguo 14/05/2010, 16:54
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: saludos..

Hola, ante todo Bienvenido, y ahora permíteme una pregunta relativa a este programa que has dejado expuesto: ¿ Esto es Visual Basic 6.0 ?, porque creo que o mucho me equivoco o no lo es, porque empezando por Structure mi VB no lo reconoce.

Así que si aceptas un consejo, tal vez no sea este el foro adecuado.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 14/05/2010, 17:11
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: saludos..

a, usamos visual basic express edition 2008
  #4 (permalink)  
Antiguo 14/05/2010, 17:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: saludos..

pero bueno especificamente hablando, lo q no entiendo es el parametro ByRef las funciones de ese parametro deberian ser igual para todas las versiones. hasta el momento he revisado en otras pags y dicen q es q sirve como un valor que afectara las funciones de los demas "subs" a diferencia del Byval q es como dije al principio (creo). si puedes darme una explicacion de cual es su funcion como a un niño
  #5 (permalink)  
Antiguo 15/05/2010, 02:02
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: saludos..

Cuando pasas un valor por Referencia, ByRef, cualquier cambio que efectues en la Rutina afecta al valor original, sin embargo cualquier valor que pases por ByVal le estas pasando realmente el valor, no la variable por lo que su valor original no cambiará .

Prueba si quieres este código que te lo demostrará:

Private Sub Command1_Click()
Dim Prueba As Integer
Prueba = 1
Call PorByRef(Prueba)
MsgBox "Después de ByRef su valor a cambiado a " & Prueba
Prueba = 2
Call PorByVal(Prueba)
MsgBox "Después de ByVal su valor se mantiene " & Prueba
End Sub

Private Sub PorByRef(ByRef Variable As Integer)
Variable = 0
End Sub

Private Sub PorByVal(ByVal Variable As Integer)
Variable = 0
End Sub


Usar uno u otro dependerá de tu decisión en cada momento y según desees.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #6 (permalink)  
Antiguo 15/05/2010, 06:20
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: saludos..

a ver dejame ver si te entiendo byref es como si hiciera una funcion compuesta?
q por ejemplo f (g(x)) y en donde este f () se evaluara g (x) mientras q byval es un valor f(4) es asi correcto ?
  #7 (permalink)  
Antiguo 15/05/2010, 09:23
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: saludos..

Hola, nada que ver, con ByRef pasas el valor por Referencia o sea que le pasas realmente la Variable y por Byval pasas el Valor de la variable, no la variable en si por tanto con ByRef puedes modificar la variable y con ByVal no puedes modificarla.

Es mas que nada para preveer un posible error por por si dentro de un procedimiento largo quieres tener la certeza que no modificarás en en cálculo el valor de entrada.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:36.