Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: trolleoatodos en 21 Agosto 2013, 09:59 am



Título: un if con cálculos múltiples[BATCH]
Publicado por: trolleoatodos en 21 Agosto 2013, 09:59 am
Buenas ,soy un nuevo user , el nick es en honor a otro user jajajaj
LLevo toda la noche y ahora en la mañana intentando rular un code , en java
fue fluido ,peroen batch no me sale buf
me salían cosas como poner en la cmd
Código:
set var=7 && echo %var%
y me salía %var% , pero luego ya en la segunda ejecusion ya me salía 7
Aparte lo más importante , tengo un if que quiero que evalúe y calcule y antes
que muestre un dato que es una variable que es la mitad que otra tal que así
Código:
set mitad=%a/2 ::Esta parte funciona ,veo en la cmd 30/2 por ej
echo %mitad%::Esta NO ,muestra %mitad% o 0 o sale Echo está activado
if %mitad% == ((%a-1)*3 -(%a+30))  echo La respuesta es %a
y ya en batch
Código:
set mitad=%%a/2 
echo %%mitad%% ::MISMO error qu arriba ..
if %%a == "((%%a-1)*3 -(%%a+30))"  echo La respuesta es %%a
El code está dentro de un for ,gracias por leer jajajaj


Título: Re: un if con cálculos múltiples[BATCH]
Publicado por: Eleкtro en 21 Agosto 2013, 10:43 am
Solución al primer problema:

Código
  1. Set /A "VAR=7" 1>NUL & call echo %VAR%

En el resto del código, hay varias cosas mal.

1. Cuando setees valores numéricos usa el switch "/A" en el comando set:
Código
  1. set /A "Var=0"

2. Si estás dentro de un if o un for es por eso que no te puede mostrar el contenido de la variable "%mitad%", debes habilitar la expansión de variables y usar la sintaxis correcta:

Código
  1. SetLocal EnableDelayedExpansion
  2. echo !mitad!

...O bien usar el comando call como más arriba he comentado.

3.
Citar
Código:
if %%a == "((%%a-1)*3 -(%%a+30))"

Esto no es Java :P, desconozco el valor que tiene la variable del for pero me imagino que es un número, así que estás intentando comparar un número con un string:
Código:
if numero == "número" 

4.
Citar
Código:
((%%a-1)*3 -(%%a+30))

Repito lo mismo de antes, Batch es tán limitado que no puedes hacer ese tipo de operaciones de la manera en la que lo estás haciendo, pues no es Java.

No agrupes los números, y no uses números, usa variables, es decir, primero calculas el valor de la operación y lo seteas en una variable, pero no lo intentes calcular así diréctamente en la expresión de la comparación, y luego ya comparas una variable con la otra.

Código
  1.  
  2. :: Primero seteas la operación aritmética que quieras:
  3. Set /A "Valor= 1 * 3 - 3"
  4. :: Y luego comparar variable con variable:
  5. If %%a EQU %Valor% () ELSE ()

Saludos!


Título: Re: un if con cálculos múltiples[BATCH]
Publicado por: trolleoatodos en 21 Agosto 2013, 13:20 pm
Buenas gracias por tu ayuda PERO no me sale , por ahora conseguí esto :
Código:
@echo on
SetLocal EnableDelayedExpansion::setlocal enabledelayedexpansion
echo la mitad de los años que tiene ahora es igual al triple de los años que tenía el
echo año pasado  restandole los años de ahora que tendrá dentro de 30

echo %edad%
for /L %%a IN (1,1,30) DO (
set mitad=nul
set /a mitad=%%a/2
set /a edad=%%a
set /a edadmenosun=%edad%-1
set /a tripl=%edadmenosun%*3
set /a segundomiembr=edad+30
set /a aftermath=tripl-segundomiembr
call echo %mitad% ::Sale echo está activado y si pongo !mitad! sale echo !mitad! y ahora no sale nada
::if %%a == "((%%a-1)*3 -(%%a+30))"  echo La respuesta es %%a :: el segundomiembr es (%%a+30)
if %aftermath% EQU %mitad% echo "LA respuesta es "%%a
)
pause>nul

Por lógica matématica el número ganador es el 22


Título: Re: un if con cálculos múltiples[BATCH]
Publicado por: Meine programmen en 21 Agosto 2013, 13:52 pm
Si no me equivoco, lo que quieres hacer es que el .bat pruebe con los numeros del 1 al 30 hasta que encuentre la solucion. En ese caso podrias calcular con un solo set /a cada una de las partes y luego compararlas, algo asi:
Código:
@echo off
echo la mitad de los años que tiene ahora es igual al triple de los años que tenía el
echo año pasado  restandole los años de ahora que tendrá dentro de 30
for /L %%a in (1,1,30) do (set edad=%%a
call :Etiqueta)
:Salida
echo La solucion es %edad%
pause>nul
exit

:Etiqueta
set /a expresion1=%edad%/2
set /a expresion2=3*(%edad%-1)-(%edad%+30)
if %expresion1% equ %expresion2% (goto Salida)
goto:eof


Título: Re: un if con cálculos múltiples[BATCH]
Publicado por: trolleoatodos en 21 Agosto 2013, 14:14 pm
¡GROSO! así que se hacía con calls y como se llaman a lo que llaman ¿subrutinas?
Ya tengo el code gracias de verdad yo soy programador java , aquí va el code en JAVA
Código:
 	public static void main(String[] args) {
int edadtemp;
for (int i= 0;i<99;i++){
edadtemp = i +30;
if ((i -1 )* 3 - edadtemp == i/2){
System.out.println("\""+i+"\""+" Es la respuesta");

}

}

}