elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Saber las diferencias entre numeros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Saber las diferencias entre numeros  (Leído 4,143 veces)
luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
Saber las diferencias entre numeros
« en: 17 Febrero 2015, 07:11 am »

Estoy tratando de averiguar las diferencias entre una gran base de numeros entre si,tratare de explicarlo :) tengo en un txt una lista de numeros

numeros en el txt que debera de leer el codigo en forma descendente

02 15 28 50 45 60
10 20 35 40 60 80
11 40 49 50 77 99
20 25 33 48 60 88
30 36 44 55 77 95


Bien lo que se nesecita es saber las diferencias entre ellos

02 15 28  50  45  60 <--primer numero de la lista

10 20 35  40  60  80 <--segundo numero comparar con el primero

+8 +5 +7 -10 +15 +20 <--resultados


10  20  35  40  60 80 <-se toma el segundo numero  compara con el  tercer numero
11  40  49  50  77 99 <- com compara al igual que el anterior y haci con todos los numeros hasta acabar la muestra

+1 +20 +14 +10 +17 +19 < resultados


en fin en el txt resultante lo unico que tiene que estar son los resultados

+8 +5  +7  -10 +15 +20  <--resultados
+1 +20 +14 +10 +17 +19

Tengo este codigo amabilididad por elektro


Código
  1. Public Class Form1
  2.  
  3.    Private Shadows Sub Load() Handles MyBase.Load
  4.  
  5.        Dim sb As New System.Text.StringBuilder
  6.        Dim Values As New List(Of Integer()) From
  7.            {
  8.                ({1I, 20, 1I}),
  9.                ({7I, 22, 4I}),
  10.                ({8I, 27, 11}),
  11.                ({20, 29, 17}),
  12.                ({23, 33, 22}),
  13.                ({39, 46, 31})
  14.            }
  15.  
  16.        For Each ValueCol() As Integer In Values
  17.  
  18.            Dim Value1 As Integer = ValueCol(0)
  19.            Dim Value2 As Integer = ValueCol(1)
  20.            Dim Value3 As Integer = ValueCol(2)
  21.  
  22.            Dim Diff1 As String = GetDifferenceExpression(Value1, Value2)
  23.            Dim Diff2 As String = GetDifferenceExpression(Value2, Value3)
  24.  
  25.  
  26.            sb.AppendLine(String.Format("{0} -> {1} = {2}",
  27.                          Value1.ToString("00"), Value2.ToString("00"), Diff1))
  28.  
  29.            sb.AppendLine(String.Format("{0} -> {1} = {2}",
  30.                          Value2.ToString("00"), Value3.ToString("00"), Diff2))
  31.  
  32.  
  33.            sb.AppendLine()
  34.  
  35.        Next ValueCol
  36.  
  37.        MessageBox.Show(sb.ToString)
  38.  
  39.        Application.Exit()
  40.  
  41.  
  42.    End Sub
  43.  
  44.    Private Sub Form1_Load(ByVal sender As System.Object, _
  45.                       ByVal e As System.EventArgs) Handles MyBase.Load
  46.        Try
  47.            Dim Archivo As System.IO.FileStream
  48.            ' crea un archivo vacio prueba.txt  
  49.            Archivo = System.IO.File.Create("c:\asi\Prueba.txt")
  50.            ' error  
  51.        Catch oe As Exception
  52.            MsgBox(oe.Message, MsgBoxStyle.Critical)
  53.        End Try
  54.    End Sub
  55.  
  56.    ' Get Difference expression
  57.    ' ( By Elektro )
  58.    '
  59.    ' Usage Examples:
  60.    ' MessageBox.Show(GetDifferenceExpression(5, 10))
  61.    '
  62.    ''' <summary>
  63.    ''' Obtiene la expresión aritmética suma diferencia / descanso entre dos valores.
  64.    ''' </summary>
  65.    ''' <param name="Value1">El primer valor.</param>
  66.    ''' <param name="Value2">El segundo valor.</param>
  67.    ''' <returns>La expresión aritmética.</returns>
  68.    Friend Function GetDifferenceExpression(ByVal Value1 As Long, ByVal Value2 As Long) As String
  69.  
  70.        Select Case Value2
  71.  
  72.            Case Is > Value1 ' Value2 es más grande que Valor1.
  73.                Return String.Format("+{0}", CStr(Value2 - Value1))
  74.  
  75.            Case Is < Value1 ' Value2 es inferior a Valor1.
  76.                Return String.Format("-{0}", CStr(Value1 - Value2))
  77.  
  78.            Case Else ' Value2 es igual a Valor1.
  79.                Return "0"
  80.  
  81.        End Select
  82.  
  83.    End Function
  84.  
  85. End Class



Luis





« Última modificación: 17 Febrero 2015, 18:43 pm por luis456 » En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #1 en: 17 Febrero 2015, 14:52 pm »

El siguiente código asume que todas las combinaciones tienen la misma cantidad de números, y que en el archivo de texto de donde quieres sacar las combinaciones, hay un número par de combinaciones para ir sacándolas de dos en dos, como me comentaste.

con este ya van 100 ejemplos que te muestro Luis,
saludos!

Código
  1. Public Class TestForm
  2.  
  3.    ' Aquí guardas los dos combos, y la diferencia de la resta entre ambos.
  4.    Public NotInheritable Class ComboDiff
  5.  
  6.        ''' <summary>
  7.        ''' Gets or sets the first combination.
  8.        ''' </summary>
  9.        ''' <value>The first combination.</value>
  10.        Public Property First As IEnumerable(Of Integer)
  11.  
  12.        ''' <summary>
  13.        ''' Gets or sets the second combination.
  14.        ''' </summary>
  15.        ''' <value>The second combination.</value>
  16.        Public Property Second As IEnumerable(Of Integer)
  17.  
  18.        ''' <summary>
  19.        ''' Gets the combination difference.
  20.        ''' </summary>
  21.        ''' <value>The combination difference.</value>
  22.        Public ReadOnly Property Difference As IEnumerable(Of Integer)
  23.            Get
  24.                Dim comdoDiff As New List(Of Integer)
  25.                For i As Integer = 0 To (First.Count - 1)
  26.                    comdoDiff.Add(Me.Second(i) - Me.First(i))
  27.                Next i
  28.                Return comdoDiff
  29.            End Get
  30.        End Property
  31.  
  32.    End Class
  33.  
  34.    Private Sub Test() Handles MyBase.Shown
  35.  
  36.        Dim comboDiffs As New List(Of ComboDiff)
  37.        Dim txtFilePath As String = "C:\Archivo.txt"
  38.        Dim txtLines As IEnumerable(Of String) = IO.File.ReadAllText(txtFilePath).
  39.                                                         Split({ControlChars.NewLine},
  40.                                                               StringSplitOptions.RemoveEmptyEntries)
  41.  
  42.        For i As Integer = 0 To (txtLines.Count - 1) Step 2
  43.  
  44.            Dim comboDiff As New ComboDiff
  45.            With comboDiff
  46.                .First = From value As String In txtLines(i).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
  47.                         Select Integer.Parse(value)
  48.  
  49.                .Second = From value As String In txtLines(i + 1).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
  50.                          Select Integer.Parse(value)
  51.            End With
  52.            comboDiffs.Add(comboDiff)
  53.  
  54.        Next i
  55.  
  56.        For Each comboDiff As ComboDiff In comboDiffs
  57.            Dim sb As New System.Text.StringBuilder
  58.            With sb
  59.                .AppendLine(String.Format("Primer combo : {0}", String.Join(",", comboDiff.First)))
  60.                .AppendLine(String.Format("Segundo combo: {0}", String.Join(",", comboDiff.Second)))
  61.                .AppendLine(String.Format("Diferencia   : {0}", String.Join(",", comboDiff.Difference)))
  62.            End With
  63.            MessageBox.Show(sb.ToString, "", MessageBoxButtons.OK)
  64.        Next comboDiff
  65.  
  66.    End Sub
  67.  
  68. End Class


« Última modificación: 17 Febrero 2015, 14:58 pm por Eleкtro » En línea

luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #2 en: 17 Febrero 2015, 14:59 pm »

Gracias mil de nuevo elektro no que haria sin ti :) lo estoy probando y me da este error


Error1   No se puede encontrar el evento 'Shown'.



luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #3 en: 17 Febrero 2015, 15:02 pm »

Error1   No se puede encontrar el evento 'Shown'.

Es porque el nombre de tu formulario será "Form1", no "TestForm", al no existir un Form con ese nombre no existen sus eventos... modifica el nombre a "Form1" en el código de arriba y ya.

Saludos
« Última modificación: 17 Febrero 2015, 15:04 pm por Eleкtro » En línea

luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #4 en: 17 Febrero 2015, 15:11 pm »

Era eso  :( mil gracias lo estoy probando :)


luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #5 en: 17 Febrero 2015, 15:32 pm »

Bien estoy probandolo y me funciono bien la primera ves pero haciendo pruebas con mas numeros me da error.

estoy probando con esta coleccion de numeros que estan dentro del txt

24 25 28 41 43 60
22 23 24 27 42 47
20 26 27 40 44 49
24 25 28 41 43 49
22 23 24 27 42 88
20 26 27 40 44 99
24 25 28 41 43 49
22 23 24 27 42 47
20 26 27 40 44 88
24 25 28 41 43 49
22 23 24 27 42 99
20 26 27 40 44 49
24 25 28 41 77 49
22 23 24 27 42 47
20 26 27 40 44 80

error que me da

" El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index "

aca donde me lo da

Código
  1.  .Second = From value As String In txtLines(i + 1).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
  2.                          Select Integer.Parse(value)  

y otra cosa como me lo muestra en un combo debo de ir pasando de uno en uno y cuando le ponga tresmil numeros sera toda una faena jejej no se puede grabar en un txt ?

luis








En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #6 en: 17 Febrero 2015, 15:43 pm »

El siguiente código asume que todas las combinaciones tienen la misma cantidad de números, y que en el archivo de texto de donde quieres sacar las combinaciones, hay un número par de combinaciones para ir sacándolas de dos en dos, como me comentaste.


24 25 28 41 43 60
22 23 24 27 42 47
20 26 27 40 44 49
24 25 28 41 43 49
22 23 24 27 42 88
20 26 27 40 44 99
24 25 28 41 43 49
22 23 24 27 42 47
20 26 27 40 44 88
24 25 28 41 43 49
22 23 24 27 42 99
20 26 27 40 44 49
24 25 28 41 77 49
22 23 24 27 42 47
20 26 27 40 44 80

error que me da

" El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index "

Número de combinaciones: 15, impar.
El error te está indicando que no puede encontrar el siguiente item/linea (txtLines(i + 1), que viene siendo txtLines(15)), al no existir un número par de lineas como se supone que debería existir.



y otra cosa como me lo muestra en un combo debo de ir pasando de uno en uno y cuando le ponga tresmil numeros sera toda una faena jejej no se puede grabar en un txt ?

Poder claro que puedes hacerlo, como ya se te explicó aquí:
Puedo grabar en un txt varios listbox ?

No voy a ponerme a desarrollar otro elaborado ejemplo como ese para que mañana vuelvas a preguntar como hacer lo mismo sobre el mismo tema Luis, creo que con ese ejemplo es suficiente si realmente quieres aprender... puedes estudiarlo, el ejemplo lo puedes adaptar para usarlo con los miembros del Type "ComboDiff".
Puedo ayudarte a resolver las preguntas específicas que tengas al respecto de ese código u otro método que hayas escogido tú para llevar a cabo la tarea que comentas.

Si quieres algo más simple y sencillo entonces puedes combinar la utilización de: IO.File.WriteAllText + String.Join + ComboDiff

Código:
IO.File.WriteAllText(".\archivo.txt", String.Join(Environment.Newline, ComboDiff.Difference))
o:
Código:
IO.File.WriteAllLines(".\archivo.txt", ComboDiff.Difference)

Saludos
« Última modificación: 17 Febrero 2015, 15:58 pm por Eleкtro » En línea

luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
Re: Saber las diferencias entre numeros
« Respuesta #7 en: 17 Febrero 2015, 15:59 pm »

Gracias :) ya entendi la dinamica del codigo con eso me basta :) ahora a chapucearlo jejej


luis

En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Diferencias entre un mpeg y un avi
Multimedia
trapo 2 2,003 Último mensaje 19 Noviembre 2004, 00:08 am
por Songoku
Diferencias entre VCDs
Multimedia
¤ Nerviozzo ¤ 0 14,156 Último mensaje 13 Marzo 2005, 21:18 pm
por ¤ Nerviozzo ¤
DIFERENCIAS ENTRE VB 6.0 Y VB.NET ??? « 1 2 »
.NET (C#, VB.NET, ASP)
Helicot 10 9,182 Último mensaje 5 Agosto 2007, 12:40 pm
por Meta
[Problema] Programa para averiguar números pares entre 2 números
Programación Visual Basic
Dreamaker 3 5,654 Último mensaje 21 Mayo 2010, 23:45 pm
por Shell Root
Concatenar los números entre 1 y N y ver si es divisible entre 3 (Python)
Scripting
ThePaquet1 2 2,258 Último mensaje 29 Enero 2021, 23:56 pm
por ThePaquet1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines