Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BatchianoISpyxolo

#121
Se puede simplificar el code... pero ahí está mi intento... Deberías identar tu code...

Código (dos) [Seleccionar]

::Cuenta atrás
::Batchiano
@echo off
setlocal enabledelayedexpansion
:menu
set /p h="Horas: "
set /p m="Minutos: "
set /p s="Segundos: "
for %%z in (h,m,s) do if not defined %%z (
call :formato
)
if %h% GEQ 0 (
if %m% GEQ 0 (
if %m% LEQ 59 (
if %s% GEQ 0 (
if %s% LEQ 59 (
call :contador
) else (
call :formato
)
) else (
call :fomato
)
) else (
call :formato
)
) else (
call :formato
)
) else (
call :formato
)
goto :eof

:contador
cls
if %h% GEQ 0 (
if %m% GEQ 0 (
if %s% GEQ 0 (
for /l %%a in (!h!,-1,0) do (
for /l %%b in (!m!,-1,0) do (
for /l %%c in (!s!,-1,0) do (
echo Contador: %%a:%%b:%%c
ping localhost -n 2 > nul
cls
)
set s=59
)
set m=59
)
)
)
)
goto :eof

:formato
echo Formato incorrecto. Vuelva a intentarlo
pause>nul & cls & call :menu
#122
Scripting / Re: Negativos en batch
7 Junio 2012, 00:33 AM
Cita de: puntoinfinito en  6 Junio 2012, 22:09 PM
Una pregunta, aun que batch no enseñe números negativos los calcula?


? Batch trabaja en Z y con límites dependiendo de la computadora.

No entiendo como antes de escribir en el foro no hacen pruebas. Tan simple como en cmd poner:

Código (dos) [Seleccionar]
set /a 0-1
#123
Ahí tienes la función dectobin:
Código (dos) [Seleccionar]
@echo off
:: Batchiano para elhacker.net :)
set decimal=%1
set bin=2
set "resultado="
set "dectobin="
:dectobin
set /a r=%decimal%%%bin%
set /a decimal=%decimal% / %bin%
set resultado=%r%%resultado%
if %decimal% GTR 0 (goto dectobin)
set dectobin=%resultado%


Como se puede apreciar, los restos se colocan inversamente.
#124
Scripting / Re: Variable general....
3 Junio 2012, 23:54 PM
Cita de: Seazoux en  3 Junio 2012, 21:02 PM
Hola amigos, no hay alguna forma que por ejemplo, que haya un if "%*%"=="lo que sea" comando??? algo así? es para enlazar todas las variables a un comando en comun...  :huh:

Puedes hacer un for.
#125
Utiliza aritmética modular.
#126
Un ejemplo de Unit - TAD Números Racionales - con implementación dinámica de punteros.

Código (pascal) [Seleccionar]
////////////////////////////////////////////////////////////
/////////////Nombre de Unidad: TAD Racionales///////////////
///////////////////Autor: Batchiano/////////////////////////
//////////////////////////////////////////////////////////
unit Racional;

interface

type
tPRacional = ^tRacional; // Tipo puntero a racional
tRacional = record // Tipo racional con un registro
numerador,denominador:integer;
end;

function CrearRacional(a,b:integer):tPRacional; { Crea un número racional }
function MostrarRacional(r:tPRacional):string; { Muestra un número racional }
function Numerador(r:tPRacional):integer; { Obtiene el numerador de un número racional }
function Denominador(r:tPRacional):integer; { Obtiene el denominador de un número racional }
function SumarRacional(r,s:tPRacional):tPRacional; { Suma dos números racionales }
function RestarRacional(r,s:tPRacional):tPRacional; { Resta el segundo número racional al primero }
function MultiplicarRacional(r,s:tPRacional):tPRacional; { Multiplica dos números racionales }
function DividirRacional(r,s:tPRacional):tPRacional; { Divide el primer número racional pasado por el segundo }
function SimplificarRacional(var r:tPRacional):tPRacional; { Simplifica un número racional }
function mcd(a,b:integer):integer; { Obtiene el m.c.d de dos enteros (en términos positivos) }


implementation

function min(a,b:integer):integer;
begin
min:=a;
if b<a then
min:=b;
end;

function CrearRacional(a,b:integer):tPRacional;
begin
new(CrearRacional);
CrearRacional^.numerador := a;
CrearRacional^.denominador := b;
end;

function MostrarRacional(r:tPRacional):string;
var num,den:string;
begin
if ((numerador(r)>0) and (denominador(r)>0)) or ((numerador(r)<0) and (denominador(r)<0)) then begin
str(abs(numerador(r)),num);
str(abs(denominador(r)),den);
MostrarRacional := num + '/' + den;
end
else begin
str(abs(numerador(r)),num);
str(abs(denominador(r)),den);
MostrarRacional := '-' + num + '/' + den;
end;

end;

function Numerador(r:tPRacional):integer;
begin
numerador := r^.numerador;
end;

function Denominador(r:tPRacional):integer;
begin
denominador := r^.denominador;
end;

function SimplificarRacional(var r:tPRacional):tPRacional;
var a,b:integer;
begin
a:=abs(numerador(r));
b:=abs(denominador(r));
r^.numerador := numerador(r) div mcd(a,b);
r^.denominador := denominador(r) div mcd(a,b);
SimplificarRacional := r;
end;

function SumarRacional(r,s:tPRacional):tPRacional;
begin
new(SumarRacional);
SumarRacional^.denominador := denominador(r) * denominador(s);
SumarRacional^.numerador := denominador(SumarRacional) div denominador(r) * numerador(r) + denominador(SumarRacional) div denominador(s) * numerador(s);
SumarRacional := SimplificarRacional(SumarRacional);
end;

function RestarRacional(r,s:tPRacional):tPRacional;
begin
new(RestarRacional);
RestarRacional^.denominador := denominador(r) * denominador(s);
RestarRacional^.numerador := denominador(RestarRacional) div denominador(r) * numerador(r) - denominador(RestarRacional) div denominador(s) * numerador(s);
RestarRacional := SimplificarRacional(RestarRacional);
end;

function MultiplicarRacional(r,s:tPRacional):tPRacional;
begin
new(MultiplicarRacional);
MultiplicarRacional^.numerador := numerador(r) * numerador(s);
MultiplicarRacional^.denominador := denominador(r) * denominador(s);
MultiplicarRacional := SimplificarRacional(MultiplicarRacional);
end;

function DividirRacional(r,s:tPRacional):tPRacional;
begin
new(DividirRacional);
DividirRacional^.numerador := numerador(r) * denominador(s);
DividirRacional^.denominador := denominador(r) * numerador(s);
DividirRacional := SimplificarRacional(DividirRacional);
end;

function mcd(a,b:integer):integer;
var t:integer;
begin
a:=abs(a);
b:=abs(b);
t:=min(a,b);
while (t>1) and (((b mod t) <> 0) or ((a mod t) <> 0)) do begin
t:=t-1;
end;
mcd := t;
end;

begin

end.
#127
También puedes diseñar un include de operaciones para manejar esta lista estática específica.
#128
Scripting / Re: [Reto Batch] cifrado caesar
24 Mayo 2012, 01:59 AM
Sí, el código se puede optimizar xD pero no sé por qué tuve muchos problemas por los argumentos y bueno ahora es lo que es pero al menos funciona correctamente.

¡Saludos!

:: CIFRADO CAESAR - BATCHIANO :)
@echo off
setlocal enabledelayedexpansion
set "CHARS= abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
:MAIN
cls
echo.
echo CIFRADO CAESAR - BATCHIANO :)
echo.
echo. 1. cifrar
echo. 2. descifrar
echo. 3. salir
echo.
set /p op=Opcion:
if not defined op (
goto :main
) else (
if !op!==1 (
goto :cifrar
) else if !op!==2 (
goto :descifrar
) else (
exit/b
)
)
:cifrar
cls
set /p desp=Desplazamiento lateral:
set /p texto=Texto a cifrar:
for %%? in (desp,texto) do if not defined %%? goto :cifrar
call :analizar "e" "!texto!" !desp!
echo -------------------
echo. Texto cifrado: !cad!
pause>nul
goto :eof

:descifrar
cls
echo El formato para descifrar es [desplazamiento]texto - Ejemplo: 2razqnq
set /p texto=Texto a descifrar:
if not defined texto goto :descifrar
call :analizar "d" "!texto!"
echo -------------------
echo. Texto descifrado: !cad!
pause>nul
goto :eof

:analizar
set t=%~2
set TYPE=%~1
if "!TYPE!"=="e" (
set /a d=%3
set cad=!d!
set /a i=0
) else (
set /a i=1
set "cad="
set shift=!t:~0,1!
)
::while
:while
if "!t:~%i%,1!" NEQ "" (
call :find_char "!t:~%i%,1!" "!CHARS!"
call :class !return!
if "!TYPE!"=="e" (
set /a rd=!return!+!d!
) else (
set /a rd=!return!-!shift!
)
if "!CLASS!"=="NONE" (
set "cad=!cad!!t:~%i%,1!"
) else (
if "!CLASS!"=="SPACE" (
set "cad=!cad! "
) else (
if "!TYPE!"=="e" (
call :resize_enc !rd!
) else (
call :resize_dec !rd!
)
call :select_char "!CHARS!" !rd!
set "cad=!cad!!sc!"
)
)
set /a i+=1
goto :while)
goto :eof


:find_char
set C=%~1
set L=%~2
set /a pos=0
:loop
if "!C!" NEQ "!L:~%pos%,1!" (
set /a pos+=1
if !pos! LSS 64 (goto :loop)
)
set /a return=%pos%
goto :eof


:select_char
set lc=%~1
set key=%2
set sc=!lc:~%key%,1!
goto :eof


:class
if %1 == 0 (
set CLASS=SPACE
) else if %1 GTR 0 (
if %1 LSS 27 (
set CLASS=MIN
) else if %1 LSS 53 (
set CLASS=MAY
) else if %1 LSS 63 (
set CLASS=NUM
) else (
set CLASS=NONE
)
)
goto :eof


:resize_enc
if "!CLASS!"=="MIN" (
if !rd! gtr 26 (
set /a rd-=26
)
)
if "!CLASS!"=="MAY" (
if !rd! gtr 52 (
set /a rd-=26
)
)
if "!CLASS!"=="NUM" (
if !rd! gtr 62 (
set /a rd-=10
)
)
goto :eof

:resize_dec
if "!CLASS!"=="MIN" (
if !rd! lss 1 (
set /a rd+=26
)
)
if "!CLASS!"=="MAY" (
if !rd! lss 26 (
set /a rd+=26
)
)
if "!CLASS!"=="NUM" (
if !rd! lss 52 (
set /a rd+=10
)
)
goto :eof