Foro de elhacker.net

Programación => .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
  1. Dim semanagps As Integer
  2.            Dim i As Integer = textbox1.text
  3.            Dim numdia(i) As Integer
  4.  
  5.            numdia(0) = Nothing  
  6.            numdia(1) = 1773          'si nos fijamos en el calendario la semana 1773
  7.            numdia(2) = 1773          'tiene del día 1 al 4 y las demás semanas tendrán
  8.            numdia(3) = 1773          'los siete días que comprende la semana, es por
  9.            numdia(4) = 1773          'ello que genero el for.
  10.            For i = 5 To 365 Step 1
  11.                For k = 1773 To 1825 Step 1
  12.                   For j = 1 To 7 Step 1
  13.                       numdia(i) = k + 1
  14.                    Next
  15.                Next
  16.            Next
  17.  
  18.            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
  1. numdia(5) = 1826
  2. 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
  1. k = 1773
para i desde 5 hasta 365, step 7 (para ir de 7 en 7)
Código
  1. k = k+1
  2. para j desde 0 a 6
  3. 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
  1.    ' Creo un Array para almacenar como referencia el rango de semanas GPS.
  2.    ' Al valor inicial hay que descontarle un '1' (1772) porque el índice de un array empieza por '0'.
  3.    Private ReadOnly GPSWeeks As Integer() =
  4.        Enumerable.Range(1773 - 1, 1825).ToArray
  5.  
  6.    ' Obtengo la cantidad de dias del año actual.
  7.    ' Esto lo hago por los años bisiestos, que tienen '1' día más (366).
  8.    Private ReadOnly TotalDaysInYear As Integer =
  9.        (From month As Integer In Enumerable.Range(1, 12)
  10.        Select DateTime.DaysInMonth(Now.Year, month)).Sum
  11.  
  12.    ' Ya estamos listos para iterar los elementos ...del modo que uno prefiera :), esto solo es un ejemplo:
  13.    Private Sub Test() Handles MyBase.Shown
  14.  
  15.        Dim sb As New System.Text.StringBuilder
  16.  
  17.        For DayOfYear As Integer = 1 To TotalDaysInYear ' (365 or 366)
  18.  
  19.            ' Obtengo la fecha exacta dado el número del día del año actual.
  20.            Dim DateOfYear As DateTime = New DateTime(Now.Year, 1, 1).AddDays(DayOfYear - 1)
  21.  
  22.            sb.AppendLine(String.Format("Day Of Year: {0}", CStr(DayOfYear)))
  23.            sb.AppendLine(String.Format("Date: {0}", CStr(DateOfYear)))
  24.            sb.AppendLine(String.Format("GPS Week: {0}", CStr(Me.GPSWeeks(DatePart(DateInterval.WeekOfYear, DateOfYear)))))
  25.  
  26.            MessageBox.Show(sb.ToString, "GPS Calendar Info - By Elektro",
  27.                            MessageBoxButtons.OK, MessageBoxIcon.Information)
  28.  
  29.            sb.Clear()
  30.  
  31.        Next DayOfYear
  32.  
  33.    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

(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
  1. Public Class GPSTest : Inherits Form
  2.  
  3.    ' TKey   = Day of year
  4.    ' TValue = GPS Week
  5.    Friend ReadOnly GPSDictionary As Dictionary(Of Integer, Integer) = Me.GetGPSDictionary
  6.  
  7.    Private Function GetGPSDictionary() As Dictionary(Of Integer, Integer)
  8.  
  9.        Dim ThisYear As Integer = Now.Year
  10.  
  11.        Dim DaysInThisYear As Integer = (From month As Integer In Enumerable.Range(1, 12)
  12.                                         Select DateTime.DaysInMonth(ThisYear, month)).Sum
  13.  
  14.        Dim GPSWeeks As IEnumerable(Of Integer) = Enumerable.Range(1773 - 1, 1825)
  15.  
  16.        Dim Result As New Dictionary(Of Integer, Integer)
  17.  
  18.        For Day As Integer = 1 To DaysInThisYear
  19.  
  20.            Result.Add(Day, GPSWeeks(DatePart(DateInterval.WeekOfYear,
  21.                                              New DateTime(ThisYear, 1, 1).AddDays(Day - 1))))
  22.  
  23.        Next Day
  24.  
  25.        Return Result
  26.  
  27.    End Function
  28.  
  29.    Private Sub Test() Handles MyBase.Load
  30.  
  31.        MessageBox.Show(Me.GPSDictionary(CInt(InputBox("Intoduce un dia del año", "Dia del año", 1))), "Semana GPS:",
  32.                        MessageBoxButtons.OK, MessageBoxIcon.Information)
  33.  
  34.        Application.Exit()
  35.  
  36.    End Sub
  37.  
  38. End Class

Saludos


Título: Re: ARREGLOS VISUAL.NET
Publicado por: rochro en 3 Julio 2014, 22:34 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