[AYUDA] Porcentaje de un número en Batch

Iniciado por Geormarsch, 16 Octubre 2016, 05:37 AM

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

Geormarsch

Hola, buenas, después de muchísimo tiempo de inactividad aquí estoy.
Más inútil que nunca jajaj  ;D

Tengo este script sencillo, que únicamente el objetivo de éste es obtener el porcentaje de un número y mostrarlo en pantalla.

En el fondo, por si no me expliqué bien, o mí código está malo(cosa que es muy probable, ya que no lo ejecuté porque estoy en Linux)
Pretendo consultar al usuario un número, por ejemplo 50.000
una vez teniendo esa cantidad, sacar 2% - 40% - 8% - 50% y mostrarlo en pantalla en el orden que puse en el script.

Fuerza     : 1.000
Agilidad   : 20.000
Vitalidad  : 4.000
Energia    : 2.500


Mí consulta es la siguiente, cómo puedo ejecutar éste script en Linux, o cómo pasarlo a otro lenguaje compatible con Linux.
pensé en html y ver si podía subirlo a algún hosting gratuito. Pero a pesar de qué indague y pedí ayuda en el foro, no pude lograr nada.
Por eso recurro a ésta sección, ya que antiguamente hice alguno que otro aporte. que quizás a alguien le sirvio.



Dejo mí codigo!!!

Código (dos) [Seleccionar]

@echo off
title Stats
:menu
cls
echo.&&echo.
echo Ingresa Stats totales:
set /p stats =
echo Presiona Enter para obtener tus stats recomendados.
pause > nul
goto calcular

:calcular
cls
REM LOS NÚMEROS AQUÍ SUPONEN UN PORCENTAJE
set fuerza = 2
set agilidad = 40
set vitalidad = 8
set energia = 50
set porcieno = 100
echo.
set /a fz=%stats% * %fuerza%
set /a r1=%fz% / %porciento%
set /a ag=%stats% * %agilidad%
set /a r2=%ag% / %porciento%
set /a vt=%stats% * %vitalidad%
set /a r3=%vt% / %porciento%
set /a ene=%stats% * %energia%
set /a r4=%ene% / %porciento%
echo Procesando...
ping -n 3 localhost >nul
echo Fuerza     : %r1%
echo Agilidad   : %r2%
echo Vitalidad  : %r3%
echo Energia    : %r4%
echo.&&echo.
echo Presiona una tecla para volver al menu
pause >nul
goto menu




PD: Elektro, espero que sigas aquí y puedas darme una manito.


EDIT:
Buenas noches gente!
Disculpen la hora de la publicación, soy Chileno y aquí apenas es media noche!!!
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

engel lex

si sabes lo minimo de programación es simple pasarlo a ya sea c++, python, javascript (no es necesario el server, solo te creas un html y listo) que los 3 son compatibles nativamente en la mayor parte de los linux, con algunas modificaciones podrías dejarlo listo para bash

lo unico que tienes que saber es que lo que está entre %% son las variables antes declaradas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Geormarsch

Cita de: engel lex en 16 Octubre 2016, 05:59 AM
si sabes lo minimo de programación es simple pasarlo a ya sea c++, python, javascript (no es necesario el server, solo te creas un html y listo) que los 3 son compatibles nativamente en la mayor parte de los linux, con algunas modificaciones podrías dejarlo listo para bash

lo unico que tienes que saber es que lo que está entre %% son las variables antes declaradas

Ese es el problema, hace bastantes años atrás sólo aprendí Batch, hice un par de script, descubrí el ciclo del FOR y bueno, sólo eso tengo en mente, cómo podría ejecutar esa idea en Linux, si es en Bash, espero puedan instruirme por que desconozco.
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Geormarsch

Encontré la solución, ejecuté mediante Wine el script en .bat
el problema ahora es, cómo sacar porcentajes en batch... :o
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Eleкtro

#4
Para sacar un porcentaje del número 50.000 podrías hacerlo así:

Código (dos) [Seleccionar]
Set /A "num=50000"
Set /A "percent=50"

Set /A "result=(%num%*%percent%) / 100"


¿Te refieres a ese tipo de operación, verdad?, si con eso te es suficiente entonces ok, pero de todas formas deberías tener en cuenta que la capacidad de Batch está limitada a un valor entero de 32 bits (2.147.483.647) y olvídate de operaciones con decimales... es preferible que lo hagas en Ruby u otro lenguaje multi plataforma como los que ya te han mencionado.

Saludos!








Geormarsch

#5
Código (dos) [Seleccionar]

Set /A "num=%numero%"
Set /A "percent=%p1%"

Set /A "result=(%num% * %percent%) / 100"


Es viable setear una variable con otra variable??

Los números que el usuario introducirá, irán aumentando 300,
Por ejemplo el siguiente valor que el usuario podría introducir sería, 50.300, luego 50.600, 50.900 y así sucesivamente, crees que podría funcionar??

La idea de este script es para un juego, en el cual de un número total nos arroja esos porcentajes para repartir esos puntos a los stats del personaje, los cuales son los más "optimos"
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

tincopasan

perdón, ¿vale la pena tanto laburo en batch?  cuando podrías usar python(nativo en linux) o vbscript igual en windows. Donde ambos lenguajes proveen más funcionalidades.

Eleкtro

#7
Cita de: Geormarsch en 18 Octubre 2016, 21:12 PMEs viable setear una variable con otra variable??

Viable, sí, no hay problema en hacer eso que has hecho, pero todo incluso lo más sencillo carece de eficiencia al implementarlo en un lenguaje tan limitado como es Batch.

Desde el principio todos te hemos aconsejado que lo hagas en otro lenguaje, sencillamente deberías olvidarte de Batch no solo para este problema sino para todo lo demás, olvídalo de por vida y avanza un nivel para aprender lo básico de otro lenguaje, ¡solo lo básico he dicho!, con eso ya te sería más que suficiente y de mayor utilidad... mucho más útil que ignorar el consejo que se te ha dado desde el principio.

Aquí abajo puedes compprobar lo sencillo que sería el equivalente a ese Batch-script en Ruby, he intentado evitar estructurarlo correctamente y evitar modificarlo más de lo necesario al adaptarlo para que te resulte facil compararlo con el código original. El código es portable para Windows y Linux... o al menos debería (excepto el comando CHCP, no se como manejará la terminal de Linux las codificaciones de texto/sets de caracteres)

script.rb
Código (ruby) [Seleccionar]
#!/usr/bin/ruby
# -*- coding: Windows-1252 -*-
require 'io/console'

@stats = nil

def Main()
   while true
       SetUserInput()
       puts('Presione cualquier tecla para continuar...')
       STDIN.getch()

       CalcStats()
       print('Presione cualquier tecla para volver al menú...')
       STDIN.getch()
   end
end

def SetUserInput()
   system("clear") or system('cls')
   print('Ingrese el valor de estadísticas totales: ')
   @stats = Integer(gets) rescue SetUserInput()
end

def CalcStats()
   # LOS NÚMEROS AQUÍ SUPONEN UN PORCENTAJE
   strPct =  2
   agiPct = 40
   vitPct =  8
   enePct = 50

   pctVal = 100

   str = (@stats * strPct) / (pctVal)
   agi = (@stats * agiPct) / (pctVal)
   vit = (@stats * vitPct) / (pctVal)
   ene = (@stats * enePct) / (pctVal)

   # no deberías hacer esto de esperar 3 segundos intencionadamente, es absurdo.
   system("clear") or system('cls')
   puts('Procesando...')
   sleep(3)
   system("clear") or system('cls')

   puts("Fuerza     : #{str}\n"\
        "Agilidad   : #{agi}\n"\
        "Vitalidad  : #{vit}\n"\
        "Energia    : #{ene}\n\n")
end

system('(CHCP 1252)1>NUL')
Main()

__END__


No siempre te lo van a dar todo hecho, aprende un lenguaje para lo que necesites, no cuesta nada aprender lo más básico de lo básico que en este caso sería aprender a imprimir texto, usar los operadores aritméticos, y quizás los tipos de búcles, fin.

Saludos!








Geormarsch

Toda la razón, me iré por python y veré que sucede respecto al Script.

Gracias totales.
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"