Descifrar operaciones en resultados correlativos

Iniciado por luis456, 4 Octubre 2014, 20:55 PM

0 Miembros y 4 Visitantes están viendo este tema.

luis456

Descifrar operaciones en resultados correlativos, ( hoy sabado jej a programar)

la idea es saber como se llega de un numero inicial al segundo numero y como desde el segundo numero al tercero
y asi susecivamente con toda la muestra en el txt


estos numeros estan en un txt.el procedimiento que hago es, tomo el primer numero y lo comparo con el segundo  para
saber que operaciones matematicas hay entre numero y numero.a mano se hacerlo pero npi para hacerlo en net





ejemplo :

  01   07   08   20  23  39 <---numero inicial en el txt (pueden ser miles)

+ 18 + 15 + 19 + 9 + 10 + 7 <------- operaciones para llegar al segundo numero

  19   22   27   29   33  46 <---segundo numero


- 18 - 18 - 16 - 12 - 11 -15 <--operaciones para llegar al tercer numero

  01   04   11   17   22  31 <- tercer numero


En otro txt mostrar:

solo las operaciones encontradas

ejemplo

+ 18 + 15 + 19 + 9 + 10 + 7
- 18 - 18 - 16 - 12 - 11 -15


saludos
Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
Solo tienes que obtener la diferencia, no se que tipo de complicación le encuentras para realizar lo mismo en un código.

Prueba así:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Shadows Sub Load() Handles MyBase.Load

       Dim sb As New System.Text.StringBuilder
       Dim Values As New List(Of Integer()) From
           {
               ({1I, 19, 1I}),
               ({7I, 22, 4I}),
               ({8I, 27, 11}),
               ({20, 29, 17}),
               ({23, 33, 22}),
               ({39, 46, 31})
           }

       For Each ValueCol() As Integer In Values

           Dim Value1 As Integer = ValueCol(0)
           Dim Value2 As Integer = ValueCol(1)
           Dim Value3 As Integer = ValueCol(2)
           Dim Diff1 As String = GetDifferenceExpression(Value1, Value2)
           Dim Diff2 As String = GetDifferenceExpression(Value2, Value3)

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value1.ToString("00"), Value2.ToString("00"), Diff1))

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value2.ToString("00"), Value3.ToString("00"), Diff2))

           sb.AppendLine()

       Next ValueCol

       MessageBox.Show(sb.ToString)

       Application.Exit()

   End Sub

   ' Get Difference expression
   ' ( By Elektro )
   '
   ' Usage Examples:
   ' MessageBox.Show(GetDifferenceExpression(5, 10))
   '
   ''' <summary>
   ''' Gets the arithmetic sum/rest difference expression between two values.
   ''' </summary>
   ''' <param name="Value1">The first value.</param>
   ''' <param name="Value2">The second value.</param>
   ''' <returns>The arithmetic expression.</returns>
   Friend Function GetDifferenceExpression(ByVal Value1 As Long, ByVal Value2 As Long) As String

       Select Case Value2

           Case Is > Value1 ' Value2 is bigger than Value1.
               Return String.Format("+{0}", CStr(Value2 - Value1))

           Case Is < Value1 ' Value2 is lower than Value1.
               Return String.Format("-{0}", CStr(Value1 - Value2))

           Case Else ' Value2 is equals to Value1.
               Return "0"

       End Select

   End Function

End Class






Saludos.








luis456

Bueno no se que ha pasado que no entraba el foro,me imagino que una caida de servidor :)

Gracias elektro lo revizo :)


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

Eleкtro

Cita de: luis456 en  5 Octubre 2014, 17:49 PM
Bueno no se que ha pasado que no entraba el foro,me imagino que una caida de servidor :)

Gracias elektro lo revizo :)


Luis

Dímelo a mi, a los 10 minutos de leer tu pregunta (ayer sabado por la noche) ya habia escrito el ejemplo de arriba para ti y te lo quería mostrar para que tuvieras algo con lo que programar 'por que era sábado' como dijiste ;), pero hasta hoy por la mañana no pude postear el code xD.

PD: Todo es por culpa de un individuo o una panda de Juanckers que se dedican a Ddosear el foro, pero bueno, en este mundo debemos aprender a convivir con gente (y gentuza) de todo tipo.

Saludos!








luis456

Cita de: Eleкtro en  5 Octubre 2014, 09:58 AM
Solo tienes que obtener la diferencia, no se que tipo de complicación le encuentras para realizar lo mismo en un código.

Prueba así:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Shadows Sub Load() Handles MyBase.Load

       Dim sb As New System.Text.StringBuilder
       Dim Values As New List(Of Integer()) From
           {
               ({1I, 19, 1I}),
               ({7I, 22, 4I}),
               ({8I, 27, 11}),
               ({20, 29, 17}),
               ({23, 33, 22}),
               ({39, 46, 31})
           }

       For Each ValueCol() As Integer In Values

           Dim Value1 As Integer = ValueCol(0)
           Dim Value2 As Integer = ValueCol(1)
           Dim Value3 As Integer = ValueCol(2)
           Dim Diff1 As String = GetDifferenceExpression(Value1, Value2)
           Dim Diff2 As String = GetDifferenceExpression(Value2, Value3)

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value1.ToString("00"), Value2.ToString("00"), Diff1))

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value2.ToString("00"), Value3.ToString("00"), Diff2))

           sb.AppendLine()

       Next ValueCol

       MessageBox.Show(sb.ToString)

       Application.Exit()

   End Sub

   ' Get Difference expression
   ' ( By Elektro )
   '
   ' Usage Examples:
   ' MessageBox.Show(GetDifferenceExpression(5, 10))
   '
   ''' <summary>
   ''' Gets the arithmetic sum/rest difference expression between two values.
   ''' </summary>
   ''' <param name="Value1">The first value.</param>
   ''' <param name="Value2">The second value.</param>
   ''' <returns>The arithmetic expression.</returns>
   Friend Function GetDifferenceExpression(ByVal Value1 As Long, ByVal Value2 As Long) As String

       Select Case Value2

           Case Is > Value1 ' Value2 is bigger than Value1.
               Return String.Format("+{0}", CStr(Value2 - Value1))

           Case Is < Value1 ' Value2 is lower than Value1.
               Return String.Format("-{0}", CStr(Value1 - Value2))

           Case Else ' Value2 is equals to Value1.
               Return "0"

       End Select

   End Function

End Class






Saludos.



En si el código hace lo que quería exactamente ,pero como no puedo meter miles de números a mano  :)  ¿ como y por donde empiezo a romperme el coco para que pueda hacerlo desde un txt que tenga ya estos números  ? estos números pueden de de cuatro números ( 10 20 30 80 )  hasta 10 números ( 01 05 06 20 25 40 50 55 60 90 ) por ejemplo y que devuelva los resultados  ademas de pantalla en otro txt ?


Luis



Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#5
Cita de: luis456 en  6 Octubre 2014, 06:12 AM¿ como y por donde empiezo a romperme el coco para que pueda hacerlo desde un txt que tenga ya estos números  ?

-> File.ReadAllLines(String)

Cita de: luis456 en  6 Octubre 2014, 06:12 AMestos números pueden de de cuatro números ( 10 20 30 80 )  hasta 10 números ( 01 05 06 20 25 40 50 55 60 90 ) por ejemplo

-> For Each...Next
+
-> String().Count
+
GetDifferenceExpression(Long, Long) by Elektro

Saludos!








luis456

#6
:) Bueno en el poquito rato he modificado para crear el archivo pero no se que hago mal .ya que me da error de ruta y la he cambiado varias veces ?? y voy a pie jeje

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Shadows Sub Load() Handles MyBase.Load

       Dim sb As New System.Text.StringBuilder
       Dim Values As New List(Of Integer()) From
           {
               ({1I, 20, 1I}),
               ({7I, 22, 4I}),
               ({8I, 27, 11}),
               ({20, 29, 17}),
               ({23, 33, 22}),
               ({39, 46, 31})
           }

       For Each ValueCol() As Integer In Values

           Dim Value1 As Integer = ValueCol(0)
           Dim Value2 As Integer = ValueCol(1)
           Dim Value3 As Integer = ValueCol(2)
           Dim Diff1 As String = GetDifferenceExpression(Value1, Value2)
           Dim Diff2 As String = GetDifferenceExpression(Value2, Value3)

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value1.ToString("00"), Value2.ToString("00"), Diff1))

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value2.ToString("00"), Value3.ToString("00"), Diff2))

           sb.AppendLine()

       Next ValueCol

       MessageBox.Show(sb.ToString)

       Application.Exit()

       
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, _
                      ByVal e As System.EventArgs) Handles MyBase.Load
       Try
           Dim Archivo As System.IO.FileStream
           ' crea un archivo vacio prueba.txt  
           Archivo = System.IO.File.Create("c:Documentos\Prueba.txt")
           ' error  
       Catch oe As Exception
           MsgBox(oe.Message, MsgBoxStyle.Critical)
       End Try
   End Sub
 
   ' Get Difference expression
   ' ( By Elektro )
   '
   ' Usage Examples:
   ' MessageBox.Show(GetDifferenceExpression(5, 10))
   '
   ''' <summary>
   ''' Gets the arithmetic sum/rest difference expression between two values.
   ''' </summary>
   ''' <param name="Value1">The first value.</param>
   ''' <param name="Value2">The second value.</param>
   ''' <returns>The arithmetic expression.</returns>
   Friend Function GetDifferenceExpression(ByVal Value1 As Long, ByVal Value2 As Long) As String

       Select Case Value2

           Case Is > Value1 ' Value2 is bigger than Value1.
               Return String.Format("+{0}", CStr(Value2 - Value1))

           Case Is < Value1 ' Value2 is lower than Value1.
               Return String.Format("-{0}", CStr(Value1 - Value2))

           Case Else ' Value2 is equals to Value1.
               Return "0"

       End Select

   End Function

End Class




ya que en programacion no da error solo una pantalla que dice " no se puede encontrar parte de la ruta ) lo que me estraña es que dice " PARTE " no lo habia visto antes :)

luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#7
Cita de: luis456 en  7 Octubre 2014, 13:42 PMme da error de ruta

Código (vbnet,6) [Seleccionar]

   Private Sub Form1_Load(ByVal sender As System.Object, _
                      ByVal e As System.EventArgs) Handles MyBase.Load
       Try
           Dim Archivo As System.IO.FileStream
           ' crea un archivo vacio prueba.txt  
           Archivo = System.IO.File.Create("c:Documentos\Prueba.txt")
           ' error  
       Catch oe As Exception
           MsgBox(oe.Message, MsgBoxStyle.Critical)
       End Try
   End Sub


Estoy harto de repetir que porfavor cuando tengas una excepción muestres el mensaje de error tal y como es.

Te faltó por añadir un backslash en la ruta, después de la letra del dispositivo:
c:\Documentos\Prueba.txt

Además, ten en cuenta que si el directorio no existe, primero deberás crearlo.

Saludos!








luis456

????


c:\Prueba.txt

Excepción del tipo 'System.IO.DirectoryNotFoundException' en mscorlib.dll
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Eso si que es raro xD

Quizás estás intentando procesar la ruta como directorio, y no como archivo, porque de otra forma es ilógico que te de ese error. Muestra el código donde te salta esa excepción :-/