Ayuda números aleatorios

Iniciado por Delikatovic, 24 Noviembre 2016, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Delikatovic

No entiendo en qué fallo, para que al elegir Opcion1 me muestre los números aleatorios... Sera por la llamada a la funcion? hago algo mal en Opcion1???

    class Program
    {
        static void Main(string[] args)
        {
            string op = null;
            int num;
            Console.WriteLine("Elija una opcion:");
            op = Console.ReadKey().ToString();

            switch (op)
            {
                case "1":
                    Opcion1();
                   
                    break;
                case "2":
                    Opcion2();

                    break;
                case "3":

                    break;
                case "4":
                    break;

            }
            Console.ReadLine();
        }
        static void Opcion1()
        {
           
            Random rdn = new Random();
            int a = rdn.Next(10, 30);
            int b = rdn.Next(10, 30);
            Console.WriteLine("Números aleatorios: {0} y {1}", a, b);
           
        }

        static string Opcion2()
        {

        }
    }
}

Slava_TZD

Tu problema es que estás asignando un ConsoleKeyInfo a una string.

Código (csharp) [Seleccionar]
static void Main(string[] args)
{
Console.WriteLine("Elija una opcion:");
switch (Console.ReadKey().KeyChar)
{
case '1':
Opcion1();
break;
default:
break;

}
Console.ReadLine();
}


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

okik

#2
Usa Console.ReadKey().KeyChar


Al pulsar 1 crea los números aleatorios:

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           char op = '\0';
          // int num = 0;
           Console.WriteLine("Elija una opcion:");
           op = Console.ReadKey().KeyChar;

           switch (op)
           {
               case '1':
                   Opcion1();
                   break;
               case '2':
                   Opcion2();
                   break;
               case '3':
                   break;
               case '4':
                   break;
           }

           Console.ReadLine();
       }
       public static void Opcion1()
       {


           Random rdn = new Random();
           int a = rdn.Next(10, 30);
           int b = rdn.Next(10, 30);
           Console.WriteLine(Environment.NewLine);
           Console.WriteLine("Números aleatorios: {0} y {1}", a, b);

       }


       public static void Opcion2()
       {
       }
   }
}





Usa Console.ReadLine() en lugar de Console.ReadKey(), pero tienes que pulsar Enter para iniciar la función

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           int op = 0;
          // int num = 0;
           Console.WriteLine("Elija una opcion:");
           op = Convert.ToInt32(Console.ReadLine());

           switch (op)
           {
               case 1:
                   Opcion1();
                   break;
               case 2:
                   Opcion2();
                   break;
               case 3:
                   break;
               case 4:
                   break;
           }

           Console.ReadLine();
       }
       public static void Opcion1()
       {


           Random rdn = new Random();
           int a = rdn.Next(10, 30);
           int b = rdn.Next(10, 30);
           Console.WriteLine(Environment.NewLine);
           Console.WriteLine("Números aleatorios: {0} y {1}", a, b);

       }


       public static void Opcion2()
       {
       }
   }
}



También:
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           string op = null;
          // int num = 0;
           Console.WriteLine("Elija una opcion:");
           op = Console.ReadLine();

           switch (op)
           {
               case "1":
                   Opcion1();
                   break;
               case "2":
                   Opcion2();
                   break;
               case "3":
                   break;
               case "4":
                   break;
           }

           Console.ReadLine();
       }
       public static void Opcion1()
       {


           Random rdn = new Random();
           int a = rdn.Next(10, 30);
           int b = rdn.Next(10, 30);
           Console.WriteLine(Environment.NewLine);
           Console.WriteLine("Números aleatorios: {0} y {1}", a, b);

       }


       public static void Opcion2()
       {
       }
   }
}


Delikatovic

#3
muchas gracias!! le he añadido un do...while para que me siga preguntando opciones :)
Mira.. tengo otro problemilla, en la opción 2:
Desde el main pedir dos cadenas de caracteres (string).La función deberá convertir las dos cadenas a minúsculas, comparar-las, y devolver, por el tercer parámetro(no con return), la palabra "MENOR" si la 1ª cadena es inferior a la 2ª (alfabéticamente), un "MAYOR", si es mayor alfabéticamente, y un "IGUAL" si son la misma.

No tengo ni idea por donde empezar.. algun enlace de referencia?

Slava_TZD

Código (csharp) [Seleccionar]
bool? isit_greater(string a, string b)
{
if (a.Length == b.Length)
return null;
return a.Length > b.Length ? true : false;
}


No es exactamente lo que pides, pero es tu tarea casi resuelta :D googlea mas la próxima vez.


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Delikatovic

si supieras cuanto googleo...

Estoy creando el código, ahora lo paso a ver si alguien me ayuda

Delikatovic

Cita de: Slava_TZD en 25 Noviembre 2016, 19:41 PM
Código (csharp) [Seleccionar]
bool? isit_greater(string a, string b)
{
if (a.Length == b.Length)
return null;
return a.Length > b.Length ? true : false;
}


No es exactamente lo que pides, pero es tu tarea casi resuelta :D googlea mas la próxima vez.

Lo tengo a media.. cuando elijo la opcion2 ni me pregunta por el texto a escribir, que hago??
Codigo del main

case '2':
                    Console.WriteLine("Introduce texto:");
                    texto1= Console.ReadLine();
                    Console.WriteLine("Introduce texto:");
                    texto2= Console.ReadLine();
                    Opcion2(ref texto1, ref texto2, out compara);

Codigo de la funcion Opcion2

public static void Opcion2( ref string a, ref string b, out int c)
        {
            Console.WriteLine(a.ToLower());
            Console.WriteLine(b.ToLower());
            c = string.Compare(a, b);
            Console.WriteLine(c);
        }


me echan un cable?

okik

#7
En el case 2

Código (csharp) [Seleccionar]

 Console.WriteLine(Environment.NewLine);
              Console.WriteLine("Introduce texto 1:");
string texto1 = Console.ReadLine();
Console.WriteLine("Introduce texto 2:");
string texto2 = Console.ReadLine();
Opcion2(texto1, texto2);
               break;



la función Option2:
Código (csharp) [Seleccionar]

public static void Opcion2(string a, string b)
       {
           int c = 0;
           c = string.Compare(a, b);
           switch (c)
           {
               case -1:
                   Console.WriteLine(Environment.NewLine);
                   Console.WriteLine("{0} y {1} --> {2}", a.ToLower(), b.ToLower(), "Son diferentes");
                   break;
               case  0:
                   Console.WriteLine(Environment.NewLine);
                   Console.WriteLine("{0} y {1} --> {2}", a.ToLower(), b.ToLower(), "Son iguales");
                   break;
           }
         
       }



Te comento, no  se para que pones el REF y el OUT C en la declaración de la función si es la misma función la que luego muestra el resultado en la consola.

"Ref" es para desde la función introducir un valor o nuevo valor a una variable declarada en otra parte del código. Como tras usar la variable en la función no la usas más desde el 'Case' no entiendo para qué le pones el Ref. El uso correcto de ref sería asi..:

En case 2
Código (csharp) [Seleccionar]

  Console.WriteLine(Environment.NewLine);
              string a= null;
              string b= null;
                int c = 0;
                  Opcion2(ref a, ref b, ref c);
         
           switch (c)
           {
               case -1:
                   Console.WriteLine(Environment.NewLine);
                   Console.WriteLine("{0} y {1} --> {2}", a.ToLower(), b.ToLower(), "Son diferentes");
                   break;
               case  0:
                   Console.WriteLine(Environment.NewLine);
                   Console.WriteLine("{0} y {1} --> {2}", a.ToLower(), b.ToLower(), "Son iguales");
                   break;
           }
                   break;



La función option 2:
Código (csharp) [Seleccionar]

public static void Opcion2(ref string a,ref string b, ref int c)
       {
         
           Console.WriteLine(Environment.NewLine);
           Console.WriteLine("Introduce texto 1:");
           a = Console.ReadLine();
       
           Console.WriteLine("Introduce texto 2:");
           b = Console.ReadLine();
           c = string.Compare(a, b);
       }


Aunque realmente tampoco sería del todo correcto pues la función en este caso no necesita que a y b tengan ningún valor para trabajar con esas variables. En su lugar usar out:

Código (csharp) [Seleccionar]
 
...
Opcion2(out a, out b, out c);
...


Código (csharp) [Seleccionar]

public static void Opcion2(out string a, out string b, out int c)
       {
   ....
       }



En resumen Ref es para valores de ida y vuelta, ida para la función y vuelta lo que se establece en la función  o subproceso para esa variable.

Por ejemplo (lo he rectificado, estaba mal hecho):

Código (csharp) [Seleccionar]

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           int a = 5;
           int b = 8;
           int c = 0;
           Multiplicar(ref a, ref b, out c);
           Console.WriteLine("a + 5 = {0}", a);
           Console.WriteLine("b + 5 = {0}", b);
           Console.WriteLine("c= a * b = {0}", c);
           Console.ReadLine();
       }
          public static void Multiplicar(ref int a, ref int b, out int c)
       {
        a+= 5;
        b+= 5;
        c = a * b;
       }
   }
}
     


En este caso A llega a la función como 5 y B como 8, luego le suma 5 a cada uno y establece el nuevo resultado en A y B, luego los multiplica y asigna el valor a C

Delikatovic

La verdad es que los ref y out no los tengo claro..

okik

#9
Cita de: Delikatovic en 27 Noviembre 2016, 16:39 PM
La verdad es que los ref y out no los tengo claro..

Hombre, pues ya lo he explicado.

Es una variable de ida y vuelta. Entra en la función con un valor, y cuando se procesa la función sale con otro valor.

Se declara una variable antes de llamar a la función. Pongamos int A= 16;


Luego llamas a la función FunciónX(ref int valor) del modo FunciónX(ref A). Entonces la función trabajará con dicho valor A=16.

En la funciónX, se establece un nuevo valor para A, pongamos A= A * 2. Ahora después de la declaración de la función tendrá valor 32


Código (csharp) [Seleccionar]

funciónX(ref int Valor)
{
Valor= Valor * 2
}



Código (csharp) [Seleccionar]

//A tiene valor 16
int A= 16;

//Entra dentro como A=16  y opera como A= 16* 2= 32 y ahora el nuevo valor es 32
FunciónX(ref A);

//a partir de aquí el valor de A es 32

//Muestra el valor de A que es 32
console.WriteLine(A);