un if con cálculos múltiples[BATCH]

Iniciado por trolleoatodos, 21 Agosto 2013, 09:59 AM

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

trolleoatodos

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 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í
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
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

Eleкtro

#1
Solución al primer problema:

Código (dos) [Seleccionar]
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 (dos) [Seleccionar]
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 (dos) [Seleccionar]
SetLocal EnableDelayedExpansion
echo !mitad!


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

3.
Citarif %%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:
if numero == "número"

4.
Citar((%%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 (dos) [Seleccionar]


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


Saludos!








trolleoatodos

Buenas gracias por tu ayuda PERO no me sale , por ahora conseguí esto :
@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

Meine programmen

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:

@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
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


trolleoatodos

¡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

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");

}

}

}