Como puedo saber los números que faltan dentro del rango ?

Iniciado por luis456, 18 Enero 2014, 14:06 PM

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

luis456

Como puedo saber los números que faltan dentro del rango ? tengo esta función que recibe los resultados de tres array donde hago unas sumas: y me gustaria mostrar en otro listbox los números que " NO " están dentro de estas sumas. es posible ?


Código (vbnet) [Seleccionar]
Rango 00 al 99

ReadOnly MAX As Integer = 99

Dim Rand As New Random
       ' Concateno, y...
       ' Elimino duplicados, y...
       ' Selecciono los números inferiores a MAX, y...
       ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
       Dim Result1 As IEnumerable(Of Integer) =
           (Result1.Concat(Result3).Concat(Result3).
       Distinct.
       Select(Function(Value As Integer)
                  Return If(Value < MAX, Value, Rand.Next(0, MAX))
              End Function))

       ' Result = 1, RANDOM, 2, 3, 4, 5, RANDOM, 6, 7, 8, 9, 10, 99

       ListBox11.Items.AddRange(Result1.Cast(Of Object).ToArray)



Luis

Edito= no se porque no me sale bien el poner el codigo entre el insert codigo ?
Que tu sabiduria no sea motivo de Humillacion para los demas

luis456

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Yo no entiendo muy bien la pregunta "saber los números que faltan dentro del rango".

saludos








.:Weeds:.

#3
Cita de: Eleкtro en 18 Enero 2014, 20:28 PM
Yo no entiendo muy bien la pregunta "saber los números que faltan dentro del rango".

saludos

Se referirá a los numeros que no esten entre 0 y 99 !!!CREO!!!
Código (vbnet) [Seleccionar]

ReadOnly MAX As Integer = 99
Select(Function(Value As Integer)
  Return If(Value < MAX, Value, Rand.Next(0, MAX))
End Function))


Hombre pues asi a bote pronto o hace un if con Value > MAX o en el if añades un else para que cualquier otro resultado que no sea Value < MAX. Iba a dejar code pero de los retos se aprende  ;D ;D

Saludos.


Eleкtro

#4
Cita de: .:Weeds:. en 19 Enero 2014, 02:58 AMSe referirá a los numeros que no esten entre 0 y 99 !!!CREO!!!

Aquí no es necesario el sarcasmo, primero habla del rango, pero luego según dice: 'me gustaria mostrar en otro listbox los números que " NO " están dentro de estas sumas', como ves no dice: 'los números que NO están dentro del rango'.

Si tu comprendes lo que significa "un número que no está dentro de una suma", me parece bien, aunque digo yo que si sumas 1+1 todo el resto de números existentes estarán fuera de la suma, así que a dudas poco detalladas prefiero preguntar para estar seguro de lo que quiere.

Saludos








luis456

Cita de: Eleкtro en 19 Enero 2014, 04:15 AM
Aquí no es necesario el sarcasmo, primero habla del rango, pero luego según dice: 'me gustaria mostrar en otro listbox los números que " NO " están dentro de estas sumas', como ves no dice: 'los números que NO están dentro del rango'.

Si tu comprendes lo que significa "un número que no está dentro de una suma", me parece bien, aunque digo yo que si sumas 1+1 todo el resto de números existentes estarán fuera de la suma, así que a dudas poco detalladas prefiero preguntar para estar seguro de lo que quiere.

Saludos


Hola

No vi anoche el tema jej

Si Elektro si la función ( pondré corto los números)  me da"  2, 4 ,6,8, 9 " y el rango es de 0 al 10  entonces me faltaría el " 1,3, 5, 7 "  ademas de mostrar "  2, 4 ,6,8, 9 "  también quiero mostrar " 1,3, 5, 7 " pero en otro listbox


Luis



Que tu sabiduria no sea motivo de Humillacion para los demas

engel lex

mi solución seria organizar el array y recorrerlo buscando donde se salta :P
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eleкtro

#7
Cita de: luis456 en 19 Enero 2014, 09:44 AMSi Elektro si la función ( pondré corto los números)  me da"  2, 4 ,6,8, 9 " y el rango es de 0 al 10  entonces me faltaría el " 1,3, 5, 7 "  ademas de mostrar "  2, 4 ,6,8, 9 "  también quiero mostrar " 1,3, 5, 7 " pero en otro listbox

Eso es algo facil de hacer ya sea usando un FOR o usando LINQ, pero como no encontré nada en Google para mostrarte diréctamente un ejemplo parecido al problema que describiste, yo mismo hice una función de uso genérico, aquí la tienes:

Cita de: http://foro.elhacker.net/net/libreria_de_snippets_compartan_aqui_sus_snippets-t378770.0.html;msg1913189#msg1913189
Código (vbnet) [Seleccionar]
     
    ' Get Numbers Not In Range.
    ' ( By Elektro )
    '
    ' Usage Examples:
    '
    ' MsgBox(String.Join(", ", GetNumbersNotInRange({1, 3, 5, 7, 9}, 0, 10).ToArray)) ' Result: 0, 2, 4, 6, 8, 10
    '
    ''' <summary>
    ''' Given a numeric collection, gets all the numbers which are not in a specified range.
    ''' </summary>
    ''' <param name="NumbersInRange">Indicates the numbers collection which are in range.</param>
    ''' <param name="MinRange">Indicates the minimum range.</param>
    ''' <param name="MaxRange">Indicates the maximum range.</param>
    ''' <returns>System.Collections.Generic.IEnumerable(Of System.Int32).</returns>
    Private Function GetNumbersNotInRange(ByVal NumbersInRange As IEnumerable(Of Integer),
                                          ByVal MinRange As Integer,
                                          ByVal MaxRange As Integer) As IEnumerable(Of Integer)

        Return From Number As Integer
               In Enumerable.Range(MinRange, MaxRange + 1)
               Where Not NumbersInRange.Contains(Number)

    End Function

Ejemplo de uso:

Código (vbnet) [Seleccionar]
   Private Sub Test(sender As Object, e As EventArgs) Handles MyBase.Shown

       Dim NumbersInRange As Integer() = {2, 4, 6, 8, 9}

       Dim NumbersNotInRange As Integer() = GetNumbersNotInRange(NumbersInRange, 0, 10).ToArray

       MsgBox(String.Join(", ", NumbersNotInRange)) ' Result: 0, 1, 3, 5, 7, 10

   End Sub

Saludos








.:Weeds:.

Cita de: Eleкtro en 19 Enero 2014, 04:15 AM
Aquí no es necesario el sarcasmo, primero habla del rango, pero luego según dice: 'me gustaria mostrar en otro listbox los números que " NO " están dentro de estas sumas', como ves no dice: 'los números que NO están dentro del rango'.

Si tu comprendes lo que significa "un número que no está dentro de una suma", me parece bien, aunque digo yo que si sumas 1+1 todo el resto de números existentes estarán fuera de la suma, así que a dudas poco detalladas prefiero preguntar para estar seguro de lo que quiere.

Saludos

No era sarcasmo, puse creo (Lo añadi editando el mensaje) por que no estaba seguro  :¬¬ despues de leer el mensaje 3 o 4 veces mas.

Saludos.


luis456

#9
Nada dos dias y nada no logro hacerlo funcionar  :rolleyes:


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

   Dim XMax As Short = 99
   Dim Xmin As Short = 0
   Dim x As Integer = 0
   Dim Número As Double
   Private TextBoxes As TextBox() = {Nothing}
   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
   Private _textBox As Object
   Private _getNumbersNotInRange As Object

   Private Property ListBox1Count As Integer
   ReadOnly MAX As Integer = 99
   Private Property Calcular As Object

   Private Property TextBox(ByVal TextBoxCount As Short) As Object
       Get
           Return _textBox
       End Get
       Set(ByVal value As Object)
           _textBox = value
       End Set
   End Property


   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property

   Private Property GetNumbersNotInRange(ByVal Result11 As IEnumerable(Of Integer), ByVal Xmin As Integer, ByVal XMax As Integer) As Object
       Get
           Return _getNumbersNotInRange
       End Get
       Set(ByVal value As Object)
           _getNumbersNotInRange = value
       End Set
   End Property


   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

       

       Result1 = {Num1 + 10, Num1 + 20, Num1 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 10, Num2 + 20, Num2 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 + 10, Num3 + 20, Num3 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       
       ' primero concatenas y eliminas duplicados en el primer array:
       Dim Result11 As IEnumerable(Of Integer) =
             (Result1.Concat(Result3).Concat(Result3).
             Distinct).ToArray

       ' luego instancias un segundo array que obtiene los números que no están dentro del rango 'Xmin'-'Xmax' del primer array:
       Dim NumbersNotInRange As Integer() =
            GetNumbersNotInRange(Result11, Xmin, XMax).ToArray

       ' Y por último reemplazas los números que no están en el rango, en el primer array:
      Result11 =Result11.Select(Function(Value As Integer)
                             ReadOnly If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function))


       ' y los añades a los listbox:
       ListBox1.Items.AddRange(Result11.Cast(Of Object).ToArray)
       ListBox2.Items.AddRange(NumbersNotInRange.Cast(Of Object).ToArray)


   End Sub

   
End Class


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