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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda con numeros random en arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con numeros random en arrays  (Leído 3,989 veces)
Edu


Desconectado Desconectado

Mensajes: 1.082


Ex XXX-ZERO-XXX


Ver Perfil
Ayuda con numeros random en arrays
« en: 6 Diciembre 2010, 19:01 pm »

Espero que entiendan el codigo, es decir.. lo q quiero hacer, y si me lo pueden corregir, y si tienen q cambiar muchas cosas para q quede mejor no importa pero lo q quiero es generar un numero al azar desde 0 hasta 7 y ponerlo en el array[0] solo si es distinto a 0 y si no se repite con los otros indices del array, parece simple pero me ha costado y ya pregunte una vez aca pero no entendi bien y ahora quiero ver si solo pueden corregirme los errores porfavor

Código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace juego_de_cartas
{
    class Program
    {
        Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
       public int[] pozo1 = new int[7];
        public int valor = 0;
       public int ant = 0;
        
        static void Main(string[] args)
        {
            

            Repartir();
          
        }

        public static bool IsValid(int bvalor, int bant)
        
        
                {
                    if (bvalor == 0)
                    {

                        return false;
                    }
                    else
                    {
                        if (bvalor == bant)
                        {
                            return false;
                        }
                        else
                        {
                            return true;
                        }
                    }
                }

        public static void Repartir()
        
        {

            for (int i = 0; i < pozo1.Length; i++)
            {
            first:
                valor = (int)(rnd.NextDouble() * 8D);
                ant = valor;

                if (IsValid(valor, ant))
                {
                    pozo1[i] = valor;
                    Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]);
                }
                else { goto first; }
            }




            Console.ReadKey();

        }


    }

 }



En línea

Siuto
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
Re: Ayuda con numeros random en arrays
« Respuesta #1 en: 6 Diciembre 2010, 20:54 pm »

El metodo IsValid() lo podes reducir a una linea:

Código
  1. return bvalor != 0 && bvalor != bant


No lo corri, solo lo pense en el aire, pero no uses etiquetas con GOTO, no es una forma feliz de programar.

Código
  1. public static void Repartir()
  2. {
  3. for (int i = 0; i < this.pozo1.Length; i++)
  4. {
  5. this.pozo1[i] = this.GetValidValue(i);
  6. Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]);
  7. }
  8.  
  9. Console.ReadKey();
  10. }
  11.  
  12. public int GetValidValue(int i)
  13. {
  14. int ant;
  15.  
  16. if (i == 0) ant = 0;
  17. else ant = this.pozo1[i-1];
  18.  
  19. // no me acuerdo si es valido esta asignacion dejo una alternativa abajo
  20. while (!IsValid(valor = (int)(this.rnd.NextDouble() * 8D), ant));
  21.  
  22. return valor;
  23. }
  24.  
  25.  
  26. // alternativa
  27. do
  28. {
  29. valor = (int)(this.rnd.NextDouble() * 8D);
  30. } while (!IsValid(valor, ant));
  31.  


« Última modificación: 6 Diciembre 2010, 21:07 pm por Siuto » En línea

Edu


Desconectado Desconectado

Mensajes: 1.082


Ex XXX-ZERO-XXX


Ver Perfil
Re: Ayuda con numeros random en arrays
« Respuesta #2 en: 6 Diciembre 2010, 21:58 pm »

Código:
return bvalor != 0 && bvalor != bant

Crees que no lo intente? xD

Quiero ver otras soluciones porfavor y q funcione como quiero q funcione please esque usando la logica es facil pero da error en muchas cosas cuando quiero hacerlo :S

edit: Lo arregle para q quede mejor con lo q comento Siuto y quedo asi:

Código
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace juego_de_cartas
  8. {
  9.    class Program
  10.    {
  11.        static Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
  12.       public static int[] pozo1 = new int[7];
  13.        public static int valor = 0;
  14.       public int ant = 0;
  15.  
  16.        static void Main(string[] args)
  17.        {
  18.  
  19.  
  20.            Repartir();
  21.  
  22.        }
  23.  
  24.        public static bool IsValid(int bvalor, int bant)
  25.  
  26.                {
  27.                    return ((bvalor != 0) && (bvalor != bant));
  28.                }
  29.  
  30.  
  31.        public static void Repartir()
  32.  
  33.        {
  34.  
  35.            for (int i = 0; i < pozo1.Length; i++)
  36.            {
  37.                pozo1[i] = GetValidValue(i);
  38.                Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]);
  39.            }
  40.  
  41.            Console.ReadKey();
  42.  
  43.        }
  44.  
  45.  
  46.        public static int GetValidValue(int i)
  47.  
  48.        {
  49.            int ant;
  50.  
  51.            if (i == 0) ant = 0;
  52.            else ant = pozo1[i-1];
  53.  
  54.                // no me acuerdo si es valido esta asignacion dejo una alternativa abajo
  55.            while (!IsValid(valor = (int)(rnd.NextDouble() * 8D), ant));
  56.  
  57.            return valor;
  58.             }
  59.  
  60.  
  61.  
  62.    }
  63.  
  64. }
  65.  
  66.  

Pero sigue sin andar, exactamente hace lo mismo q hacia yo es decir, el 0 no aparece mas pero lo de if bvalor != bant es como si no le hace caso xD
« Última modificación: 6 Diciembre 2010, 22:37 pm por XXX-ZERO-XXX » En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Ayuda con numeros random en arrays
« Respuesta #3 en: 6 Diciembre 2010, 22:48 pm »

Por lo que entendí tienes un array de tamaño 7 y quieres almacenar en ese array números desde el 0 al 7, sin que se repitan. El algoritmo creo que es bastante sencillo. Prueba a hacer algo como esto:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.    class Program
  9.    {
  10.        private static int[] Lista = new int[7];
  11.  
  12.        public static bool NumExists(int Num, int MaxPos)
  13.        {
  14.            bool resultado = false;
  15.                for (int i = 0; i < MaxPos; i++)
  16.                    if (Lista[i] == Num)
  17.                    {
  18.                        resultado = true;
  19.                        break;
  20.                    }
  21.            return resultado;
  22.        }
  23.  
  24.        public static void RandomNumbers()
  25.        {
  26.            Random Rnd = new Random(unchecked((int)DateTime.Now.Ticks));
  27.            for (int i = 0; i < Lista.Length; i++)
  28.                do{
  29.                    Lista[i] = Rnd.Next(8);
  30.                }while(NumExists(Lista[i], i) == true);
  31.            Rnd = null;
  32.        }
  33.  
  34.        static void Main(string[] args)
  35.        {
  36.            RandomNumbers();
  37.            for (int i = 0; i < Lista.Length; i++)
  38.                Console.WriteLine("Número: {0}", Lista[i]);
  39.            Console.ReadLine();
  40.        }
  41.    }
  42. }
  43.  


La salida de la consola sería algo como esto:

Código:
Número: 7
Número: 5
Número: 0
Número: 1
Número: 6
Número: 4
Número: 2

Saludos.
« Última modificación: 6 Diciembre 2010, 22:49 pm por Khronos14 » En línea

Edu


Desconectado Desconectado

Mensajes: 1.082


Ex XXX-ZERO-XXX


Ver Perfil
Re: Ayuda con numeros random en arrays
« Respuesta #4 en: 6 Diciembre 2010, 22:58 pm »

y sin el 0 tamb xD porfavor.. esq creo q al combinarlos es q da el error :S
En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Ayuda con numeros random en arrays
« Respuesta #5 en: 6 Diciembre 2010, 23:04 pm »

y sin el 0 tamb xD porfavor.. esq creo q al combinarlos es q da el error :S

Es tan simple que con cambiar está línea ya lo haces:

Código
  1. Lista[i] = Rnd.Next(8);
  2.  

por esta:

Código
  1. Lista[i] = Rnd.Next(1, 8);
  2.  

Y como la lista tiene tamaño 7 y le pides valores entre 1 y 7, siempre te va a mostrar desde 1 hasta 7 pero con los números desordenados.

Saludos.
En línea

Edu


Desconectado Desconectado

Mensajes: 1.082


Ex XXX-ZERO-XXX


Ver Perfil
Re: Ayuda con numeros random en arrays
« Respuesta #6 en: 6 Diciembre 2010, 23:09 pm »

Muchisimas gracias la verdad, ahora sigo solo ya q tengo q hacer eso pero con 2 arrays mas xD pero el 2do empieza por 8 hasta 15 y el 3ero de 15 a 21
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA!! Sobre un programa de numeros Random y Timer ??
Programación Visual Basic
Laura_12 1 1,564 Último mensaje 4 Junio 2007, 23:26 pm
por Jareth
Random: Numeros Aleatorios
.NET (C#, VB.NET, ASP)
MANULOMM 3 13,209 Último mensaje 15 Julio 2007, 14:20 pm
por Meta
[Ayuda](Batch) 10 Numeros random del 1 al 10
Scripting
JoakoDS 6 6,673 Último mensaje 7 Febrero 2015, 13:35 pm
por Eleкtro
Problema con numeros random en shell scripting
Scripting
titopown 0 1,553 Último mensaje 10 Marzo 2016, 16:44 pm
por titopown
numeros random en una matriz
Programación C/C++
taku86 0 1,655 Último mensaje 23 Abril 2018, 01:39 am
por taku86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines