Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: rochro en 27 Junio 2014, 23:38 PM

Título: ARREGLOS VISUAL.NET
Publicado por: rochro en 27 Junio 2014, 23:38 PM
Hola, soy nueva con lo que es el desarrollo pero estoy intentando en que me salga un simulador de semana gps (referencia:  http://gps.geo.upm.es/www/calactal.htm) donde al colocar el día (del 1 al 365) me bote como resultado la semana gps que le corresponde: ejem:  034 corresponde a 1778. El código que generé y el cual no me funciona, es el siguiente:


           
Código (vbnet) [Seleccionar]
Dim semanagps As Integer
            Dim i As Integer = textbox1.text
            Dim numdia(i) As Integer
         
            numdia(0) = Nothing   
            numdia(1) = 1773          'si nos fijamos en el calendario la semana 1773
            numdia(2) = 1773          'tiene del día 1 al 4 y las demás semanas tendrán
            numdia(3) = 1773          'los siete días que comprende la semana, es por
            numdia(4) = 1773          'ello que genero el for.
            For i = 5 To 365 Step 1
                For k = 1773 To 1825 Step 1
                   For j = 1 To 7 Step 1
                       numdia(i) = k + 1
                    Next
                Next
            Next

            semanagps = numdia(i)


De repente mi lógica esta mal, quisiera que me apoyen por favor.

Gracias de antemano.


Título: Re: ARREGLOS VISUAL.NET
Publicado por: engel lex en 28 Junio 2014, 01:05 AM
esto entiendo en tu codigo

por cada i hasta 365
por cada k en el rango
por cada j
numdia en la posicion i es igual a k +1

así que
Código (vbnet) [Seleccionar]
numdia(5) = 1826
numdia(6) = 1826

... ergo hasta el final...



observa con detalle... i te apunta a la posicion de el array... k genera un numero... j repite 7 veces la operación por cada k asignando el mismo valor de k+1 en el mismo i

creo que es mejor que hagas 2 for...

Código (vbnet) [Seleccionar]
k = 1773
para i desde 5 hasta 365, step 7 (para ir de 7 en 7)
Código (vbnet) [Seleccionar]
k = k+1
para j desde 0 a 6
numdia(i+j) es igual k


i te mueve semana a semana... j te mueve entre los días de la semana... como el numero (1773) solo cambia una vez por semana k se suma 1 en el ciclo exterior y j rellena el interior con este valor...


(sorry por lo de las etiquetas :P lo daba por pseudo-psuedo-codigo ya que era solo una explicación XD pero lo tendré en cuenta)
Título: Re: ARREGLOS VISUAL.NET
Publicado por: Eleкtro en 28 Junio 2014, 02:54 AM
Reacuerdo haber solucionado un tema parecido para VisualBasicScript, quizás te sirva de algo: http://foro.elhacker.net/scripting/batch_obtener_nombre_con_extension-t410321.0.html;msg1926804#msg1926804

Tu metodología no me parece la mas idonea, más si estás empezando, ya que tanto For anidado y además especificando pasos solo puede acabar liandote,
te muestro otro enfoque más liviano que he ideado:

(http://i.imgur.com/lkouivj.png)

Código (vbnet) [Seleccionar]
   ' Creo un Array para almacenar como referencia el rango de semanas GPS.
   ' Al valor inicial hay que descontarle un '1' (1772) porque el índice de un array empieza por '0'.
   Private ReadOnly GPSWeeks As Integer() =
       Enumerable.Range(1773 - 1, 1825).ToArray

   ' Obtengo la cantidad de dias del año actual.
   ' Esto lo hago por los años bisiestos, que tienen '1' día más (366).
   Private ReadOnly TotalDaysInYear As Integer =
       (From month As Integer In Enumerable.Range(1, 12)
       Select DateTime.DaysInMonth(Now.Year, month)).Sum

   ' Ya estamos listos para iterar los elementos ...del modo que uno prefiera :), esto solo es un ejemplo:
   Private Sub Test() Handles MyBase.Shown

       Dim sb As New System.Text.StringBuilder

       For DayOfYear As Integer = 1 To TotalDaysInYear ' (365 or 366)

           ' Obtengo la fecha exacta dado el número del día del año actual.
           Dim DateOfYear As DateTime = New DateTime(Now.Year, 1, 1).AddDays(DayOfYear - 1)

           sb.AppendLine(String.Format("Day Of Year: {0}", CStr(DayOfYear)))
           sb.AppendLine(String.Format("Date: {0}", CStr(DateOfYear)))
           sb.AppendLine(String.Format("GPS Week: {0}", CStr(Me.GPSWeeks(DatePart(DateInterval.WeekOfYear, DateOfYear)))))

           MessageBox.Show(sb.ToString, "GPS Calendar Info - By Elektro",
                           MessageBoxButtons.OK, MessageBoxIcon.Information)

           sb.Clear()

       Next DayOfYear

   End Sub





@engel lex

Porfavor, ya que tienes el detalle de llevar las normas del foro en tu firma, la próxima vez podrías intentar respetar la utilización de las etiquetas GeShi, no es un muy buen ejemplo :P...
Título: Re: ARREGLOS VISUAL.NET
Publicado por: rochro en 30 Junio 2014, 18:31 PM
Cita de: Eleкtro en 28 Junio 2014, 02:54 AM

(http://i.imgur.com/lkouivj.png)


Está muy bien, ahora trato de adecuar tu codigo a mi aplicacion, ya que el día lo tendria que ingresar en un text ejem: 52 y que me de como resultado la semana ejem: del dia 52 la semana gps es 1780.

Gracias elektro =)
Título: Re: ARREGLOS VISUAL.NET
Publicado por: Eleкtro en 30 Junio 2014, 18:45 PM
es muy facil de adaptar, incluso puedes crear una función de uso genérico para devolver todos los datos necesarios (dias, semanas gps) en un objeto, ejemplo:

Código (vbnet) [Seleccionar]
Public Class GPSTest : Inherits Form

   ' TKey   = Day of year
   ' TValue = GPS Week
   Friend ReadOnly GPSDictionary As Dictionary(Of Integer, Integer) = Me.GetGPSDictionary

   Private Function GetGPSDictionary() As Dictionary(Of Integer, Integer)

       Dim ThisYear As Integer = Now.Year

       Dim DaysInThisYear As Integer = (From month As Integer In Enumerable.Range(1, 12)
                                        Select DateTime.DaysInMonth(ThisYear, month)).Sum

       Dim GPSWeeks As IEnumerable(Of Integer) = Enumerable.Range(1773 - 1, 1825)

       Dim Result As New Dictionary(Of Integer, Integer)

       For Day As Integer = 1 To DaysInThisYear

           Result.Add(Day, GPSWeeks(DatePart(DateInterval.WeekOfYear,
                                             New DateTime(ThisYear, 1, 1).AddDays(Day - 1))))

       Next Day

       Return Result

   End Function

   Private Sub Test() Handles MyBase.Load

        MessageBox.Show(Me.GPSDictionary(CInt(InputBox("Intoduce un dia del año", "Dia del año", 1))), "Semana GPS:",
                        MessageBoxButtons.OK, MessageBoxIcon.Information)

        Application.Exit()

   End Sub

End Class


Saludos
Título: Re: ARREGLOS VISUAL.NET
Publicado por: rochro en 3 Julio 2014, 22:34 PM
Cita de: Eleкtro en 30 Junio 2014, 18:45 PM
es muy facil de adaptar, incluso puedes crear una función de uso genérico para devolver todos los datos necesarios (dias, semanas gps) en un objeto, ejemplo:


Elektro, muchas gracias por apoyarme. Está OK  :D