Duda-- problema con ejercicio en batch

Iniciado por estebankpo15, 20 Septiembre 2013, 23:33 PM

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

estebankpo15

Hola este es mi primer post en este maravillóso foro
Estoy estudiando programación y tengo un problema con un batch, este es la cosigna
Tengo que crear un batch que pida en pantalla 3 números y que me los presente ordenados de mayor a menor, ósea primero: el mayor
Segundo: el que sigue del primero
Tercero: el menor

Espero no parecer un estúpido con este post pero me declaró super noob

El código que logre fue este
@echo off
set/p %núm1%=Ingrese un número
set/p %núm2%=ingrese un número
Acá lo mismo sólo que con un Núm3
If %Núm1% GTR %Núm2% goto %Núm1% GTR %Núm3%
If %Núm2% GTR %Núm3%

A eso llegue noce si voy bien o todo lo que he hecho esta mal
Espero que me ayuden. Saludos!

Enviado desde mi ST25i usando Tapatalk 2

Almapa

#1
Hola estebankpo15, veamos:

Citarset/p %núm1%=Ingrese un número
Cuando a una variable se le ponen los símbolos "%" a ambos lados es para obtener su valor pero no para definirla, es decir, que con dicha línea de código estarías definiendo una variable que se llamaría como el valor con el que está definida núm1 y no la variable núm1 en sí. No se si me explico. Un ejemplo:
set /p var=Introduce un nombre
set %var%=15

En la primera línea definirías la variable "var" con el nombre que tú insertas (supongamos que insertas estebankpo), pero en la segunda estas definiendo una variable llamada "estebankpo" con un valor de 15.

En cuanto a:
CitarIf %Núm1% GTR %Núm2% goto %Núm1% GTR %Núm3%
If %Núm2% GTR %Núm3%
Cuando haces una sentencia condicional has de poner cuales serán los comandos llevados a cabo en el caso que se cumpla la condición, pues si te das cuenta comparas los números pero no hace nada. Para organizar bien vale la pena utilizar paréntesis. Para comparar los números puedes hacerlo de varias formas, una seria:
if %num1% GTR %num2% (if %num2% GTR %num3% (Echo Primero: %num1% && Echo Segundo: %num2% && Echo Tercero: %num3%))
Esto sería solo para un caso en concreto en el que  num1>num2>num3 y deberías poner los otros posibles casos.

Por cierto, en general no te aconsejo utilizar tildes por lo que respecta a la programación. En cambio, si tu redacción de la duda es correcta te tomarán más en serio.

Un saludo

estebankpo15

Por lo que veo mezcle muchas cosas, jajajaja lo que pasa es que yo más o menos intente hacerlo en base a otro problema en el cual tenia que formular la tabla de multiplicar del 1 al 10 del número que ingrese en pantalla por lo que veo no tiene nada que ver con el otro problema.
Te agradecería más de lo que te agradezco ahora, si pudieras resolverlo porque tengo 2 ejercicios más parecidos a estos y necesito un ejercicio bien hecho para tener una base de como realizar los otros, y no estar molestando tanto
Muchas gracias por responder!
Saludos!

Enviado desde mi ST25i usando Tapatalk 2

Eleкtro

Podrías ordenar los números por el método burbuja, pero es una técnica "avanzada" y sabrían que el code no lo has hehco tu, además como estás empezando tampoco podrías explicar mucho lo que hace, así que te muestro una manera de hacerlo mediante condicionales:


@Echo OFF

Set /A "Big=-1"
Set /A "Mid=-1"
Set /A "Low=-1"

Set /P "Num1=Inserta el numero 1>> "
Set /P "Num2=Inserta el numero 2>> "
Set /P "Num3=Inserta el numero 3>> "

If %Num1% GEQ %Num2% If %Num1% GEQ %NUM3% (Set /A "Big=Num1")
If %Num2% GEQ %Num1% If %Num2% GEQ %NUM3% (Set /A "Big=Num2")
If %Num3% GEQ %Num1% If %Num3% GEQ %NUM2% (Set /A "Big=Num3")

If %Num1% LEQ %Num2% If %Num1% LEQ %NUM3% (Set /A "Low=Num1")
If %Num2% LEQ %Num1% If %Num2% LEQ %NUM3% (Set /A "Low=Num2")
If %Num3% LEQ %Num1% If %Num3% LEQ %NUM2% (Set /A "Low=Num3")

If %Num1% GEQ %Num2% If %Num1% LEQ %NUM3% (Set /A "Mid=Num1")
If %Num1% GEQ %Num3% If %Num1% LEQ %NUM2% (Set /A "Mid=Num1")
If %Num2% GEQ %Num1% If %Num2% LEQ %NUM3% (Set /A "Mid=Num2")
If %Num2% GEQ %Num3% If %Num2% LEQ %NUM1% (Set /A "Mid=Num2")
If %Num3% GEQ %Num1% If %Num3% LEQ %NUM2% (Set /A "Mid=Num3")
If %Num3% GEQ %Num2% If %Num3% LEQ %NUM1% (Set /A "Mid=Num3")

Echo Big: %Big%
Echo Mid: %Mid%
Echo Low: %Low%

Pause&Exit








estebankpo15

Cita de: EleKtro H@cker en 21 Septiembre 2013, 08:27 AM
Podrías ordenar los números por el método burbuja, pero es una técnica "avanzada" y sabrían que el code no lo has hehco tu, además como estás empezando tampoco podrías explicar mucho lo que hace, así que te muestro una manera de hacerlo mediante condicionales:


@Echo OFF

Set /A "Big=-1"
Set /A "Mid=-1"
Set /A "Low=-1"

Set /P "Num1=Inserta el numero 1>> "
Set /P "Num2=Inserta el numero 2>> "
Set /P "Num3=Inserta el numero 3>> "

If %Num1% GEQ %Num2% If %Num1% GEQ %NUM3% (Set /A "Big=Num1")
If %Num2% GEQ %Num1% If %Num2% GEQ %NUM3% (Set /A "Big=Num2")
If %Num3% GEQ %Num1% If %Num3% GEQ %NUM2% (Set /A "Big=Num3")

If %Num1% LEQ %Num2% If %Num1% LEQ %NUM3% (Set /A "Low=Num1")
If %Num2% LEQ %Num1% If %Num2% LEQ %NUM3% (Set /A "Low=Num2")
If %Num3% LEQ %Num1% If %Num3% LEQ %NUM2% (Set /A "Low=Num3")

If %Num1% GEQ %Num2% If %Num1% LEQ %NUM3% (Set /A "Mid=Num1")
If %Num1% GEQ %Num3% If %Num1% LEQ %NUM2% (Set /A "Mid=Num1")
If %Num2% GEQ %Num1% If %Num2% LEQ %NUM3% (Set /A "Mid=Num2")
If %Num2% GEQ %Num3% If %Num2% LEQ %NUM1% (Set /A "Mid=Num2")
If %Num3% GEQ %Num1% If %Num3% LEQ %NUM2% (Set /A "Mid=Num3")
If %Num3% GEQ %Num2% If %Num3% LEQ %NUM1% (Set /A "Mid=Num3")

Echo Big: %Big%
Echo Mid: %Mid%
Echo Low: %Low%

Pause&Exit

Muchas gracias!!! A los dos por la gran ayuda ahora llegó a mi casa y lo pongo en práctica y veo si hay algo que no me queda claro y les pregunto. Saludos!!!

Enviado desde mi ST25i usando Tapatalk 2

estebankpo15

Cita de: estebankpo15 en 22 Septiembre 2013, 06:40 AM
Muchas gracias!!! A los dos por la gran ayuda ahora llegó a mi casa y lo pongo en práctica y veo si hay algo que no me queda claro y les pregunto. Saludos!!!

Enviado desde mi ST25i usando Tapatalk 2

Aca una duda amigo, esta parte del codigo no me quedo clara
Set /A "Big=-1"
Set /A "Mid=-1"
Set /A "Low=-1"


primero se puede cambiar los nombres de Big, mid y low?
y porque se le asicnas el valor -1 ?

Eleкtro

#6
Cita de: estebankpo15 en 22 Septiembre 2013, 07:24 AMse puede cambiar los nombres de Big, mid y low?
Claro, puedes nombrarlas de la manera que prefieras.


Cita de: estebankpo15 en 22 Septiembre 2013, 07:24 AMporque se le asicnas el valor -1 ?

Le puse un valor negativo "-1" como podría haberle puesto un "0" o absolutamente nada,
esas tres lineas las escribí para hacer más legible el código dejando constancia del nombre de las variables que se iban a usar en el resto del código.

Y también porque considero que es una buena costumbre declarar las variables en la cabecera de un código y al mismo tiempo asignarle un valor inicial a cada variable, un valor nulo por ejemplo, aunque esto en Batch no se tiene casi en cuenta y tampoco tiene mucha importancia, para ser sinceros puedes eliminar las tres lineas de esas variables y el code seguirá funcionando... pero en otros lenguajes es conveniente hacer lo que acabo de comentar para prevenir posibles errores.

Saludos








estebankpo15

Cita de: EleKtro H@cker en 22 Septiembre 2013, 07:41 AM
Claro, puedes nombrarlas de la manera que prefieras.


Le puse un valor negativo "-1" como podría haberle puesto un "0" o absolutamente nada,
esas tres lineas las escribí para hacer más legible el código dejando constancia del nombre de las variables que se iban a usar en el resto del código.

Y también porque considero que es una buena costumbre declarar las variables en la cabecera de un código y al mismo tiempo asignarle un valor inicial a cada variable, un valor nulo por ejemplo, aunque esto en Batch no se tiene casi en cuenta y tampoco tiene mucha importancia, para ser sinceros puedes eliminar las tres lineas de esas variables y el code seguirá funcionando... pero en otros lenguajes es conveniente hacer lo que acabo de comentar para prevenir posibles errores.

Saludos

Haaaa ahora si me quedo claro, osea da lo mismo ponerle un valor negativo o nulo como 0, en todo caso como dices es solo para prolijidad.
Tambien ya descubri que podia ponerle a big, mid, low cualquier nombre :).

Ahora q lo cache bien es super fasil xD, en el caso de que me pidan hacerlo con 4 numeros tengo que agregar un parrafo mas de condisiones y otra set/p para que funcione?

Eleкtro

#8
Cita de: estebankpo15 en 23 Septiembre 2013, 02:01 AMAhora q lo cache bien es super fasil xD, en el caso de que me pidan hacerlo con 4 numeros tengo que agregar un parrafo mas de condisiones y otra set/p para que funcione?

Si, además de eso debes agregar la condición de la 4ª variable al resto de comparaciones (low, mid, big),
pero como te comenté al principio, existen otras técnicas más profesionales, si quieres impresionar a tu profesor (o quien sea xD) puedes ordenar los números por el método burbuja:

Google + Batch Bubble sort

Otra alternativa igual de efectiva sería:

1. Contar la cantidad de dígitos de los números para obtener el string más largo.

2. Agregar un "0" a la izquierda las veces que sean necesarias al resto de números hasta que tengan la misma longitud de dígitos que el número más largo.

3. Ordenar los números mediante Batch usando el comando Sort con la columna por defecto (1).

Saludos.








estebankpo15

jaja, al profesor jaja. El metodo burbuja parece ya muy avanzado como dices, pero el segundo el de contar los digitos para saber el mas alto y el orden voy a ver si consigo aserlo de esa manera y investigare. Muchas gracias por la ayuda! ;-)