elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: 1 2 3 4 5 6 [7] 8 9 10
61  Programación / Scripting / Funcion Palindrome [Batch] en: 15 Junio 2009, 01:09 am
Basicamente se pide una palabra, se pone la cadena de forma inversa y se compara con la primera pedida al usuario.

Código
  1. @echo off
  2. if exist "file.txt" (del /f /q "file.txt")
  3. setlocal enabledelayedexpansion
  4. :code
  5. set /p "cadena=Cadena : "
  6. if not defined cadena (goto:code)
  7. set "cadena_=%cadena%"
  8. set /a "longitud-=1"
  9. :bucle
  10. set "cadena=%cadena:~1%"
  11. set /a "longitud+=1"
  12. if defined cadena goto:bucle
  13. for /l %%_ in (%longitud%=-1=0) do <nul set /p "=!cadena_:~% style="color: #448888;">%_,1!" >> "file.txt"
  14. for /f "tokens=*" %%_ in (file.txt) do (
  15. if /i "%cadena_%"=="%%_" (echo.Palindrome) else (echo.No palindrome)
  16. )
  17. pause>nul 2>&1
  18. exit /b 0

Salida:
Código:
C:\>este
Cadena : seres
Palindrome

C:\>este
Cadena : algo
No palindrome

C:\>este
Cadena : ana
Palindrome

C:\>este
Cadena : Lalo
No palindrome

C:\>este
Cadena : arenero
No palindrome

C:\>este
Cadena : arenera
Palindrome

C:\>
62  Programación / Scripting / Descubrimientos y tecnicas, comando FOR. [Batch] en: 10 Mayo 2009, 22:01 pm
1.-Otras formas de separar los elementos del conjunto en parametro /L:

Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Los elementos del conjunto FOR, los podiamos separar de la siguiente manera:
Código:
for /l %%_ in (1 1 10) do (Acciones)
for /l %%_ in (1,1,10) do (Acciones)
He experimentado con algunas otras:
Código
  1. for /l %%_ in (1;1;10) do (echo %%_)
  2. for /l %%_ in ([1;1;10]) do (echo %%_)
En este hubo un ligero cambio, no inició desde 1, sino desde 0, luego explicaré por qué.
Código
  1. for /l %%_ in ([1,1,10]) do (echo %%_)
Lo mismo, inicia desde 0.
Por qué inicia desde 0 y no de 1?
Aqui:
Código
  1. for /l %%_ in ([1,1,[10]]) do (
  2. echo %%_
  3. )
El primer 1 no es reconocido como un elemento valido y lo inicia desde 0, da lo mismo que hicieramos:
Código
  1. for /l %%_ in ("1" 1 20) do (echo %%_)
Igual lo iniciaría en 0.

Esto puede tener una aplicación práctica, ya sea para confundir un código:
Código
  1. for /l %%_ in (
  2. {[200]}
  3. 2
  4. 100
  5. ) do (
  6. echo %%_
  7. )
Se forza a que el primer elemento empieze por 0.

2.-Especificar numeros en hexadecimal como elementos del conjunto, para el parametro /L
Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Código
  1. for /l %%_ in (0x0001 0x0001 0x0064) do (echo %%_)
Muestra una lista desde 1 hasta 100.
Tambien se puede especificar valores negativos:
Código
  1. for /l %%_ in (-0x0004 0x0001 0X0064) do (echo %%_)
Combinar decimal con hexadecimal:
Código
  1. for /l %%_ in (0x0001 0x0001 100) do (echo %%_)
Más ejemplos:
Código
  1. for /l %%_ in (0x64 0x01 0xC8) do (
  2. echo %%_
  3. )
Código
  1. for /l %%_ in (0x01 0x01 0x64) do (
  2. echo %%_
  3. )

3.-Nueva forma de poner comentarios, sobre el conjunto del comando FOR, parametro /L
Código:
FOR /L %variable IN (inicio, paso, fin) comando DO
Código
  1. for /l %%_ in (1Uno 1Incremento_de_uno 100Hasta_100) do (
  2. echo %%_
  3. )
Como ven, se puede poner texto despues del elemento "inicio" "paso" y "fin".
Otra manera, a mi parecer mas comoda:
Código
  1. for /l %%_ in (2"Dos demas comentarios" 2"Dos dems comentarios" 100"Cien dems comentarios") do (
  2. echo %%_
  3. )
Otros ejemplos:
Código
  1. for /l %%_ in (
  2. 1-"Empezamos en uno"
  3. 1-"Con un incremento de una unidad"
  4. 100-"Terminamos en 100"
  5. ) do (
  6. echo %%_
  7. )
Incluso pueden poner caracteres especiales dentro del comentario, son completamente ignorados.

Combinadas todas las técnicas:
Código
  1. @echo off
  2. for /l %%_ in (
  3. {[-0x001E]}-"Especifico -30 en hexadecimal, pero es ignorado y empieza en 0, por los {[]}"
  4. ;2-"Especifico 2 en decimal, incrementa la unidad en 2"
  5. ;0x0064-"100 en hexadecimal, el loop termina en 100"
  6. ) do (
  7. echo %%_
  8. ping -n 1 loopback > nul 2>&1
  9. )
Salida:
Código:
0
2
4
6
8
10

Nota: Estas son cosas que he descubierto solo, si algunas de ellas ya estaban documentadas, haganmelo saber.

Leo Gutiérrez Ramirez.

Saludos.
63  Programación / Scripting / Juego Ahorcado v.1.1 [Bash] en: 4 Mayo 2009, 06:57 am
Hola, hoy hice el juego del Ahorcado en Bash:


Solo hice el motor basico, luego dibujo el monito.
Código
  1. #!/usr/bin/bash
  2. # Juego de ahorcado
  3. # Leo Gutierrez R
  4. # leorocko13@hotmail.com
  5.  
  6. # Declarar seguir_o_no
  7. intentos=0
  8. contador=0
  9. function pause()   # Funcion pause, ya que no existe en linux
  10. {
  11. read -p "$*"
  12. }
  13. function limpiar()
  14. {
  15. clear
  16. }
  17. limpiar
  18. echo; echo Ahorcado v1.1, Leo Gutierrez Ramirez.; echo
  19. pause 'Presione una tecla para iniciar'.
  20. declare -a palabra_user[20];
  21. echo;
  22. read -p "Palabra : " palabra_user2                # Se lee la palabra
  23. let longitud=`expr length "$palabra_user2"`-1     # Sacar la longitud de la palabra:
  24. # echo $longitud
  25. for i in $(seq 0 $longitud);
  26. do
  27. palabra_user[$i]=${palabra_user2:$i:1}            # Se mete cada caracter en un subindice, en el array palabra_user[x]
  28. # echo palabra_user[$i] = ${palabra_user[$i]}
  29. done
  30. read -p "Defina el numero de intentos : " intentos       # No. de intentos que puede cometer el usuario.
  31. declare -a palabra_adivinar[$longitud];
  32. for i in $(seq 0 $longitud);
  33. do
  34. palabra_adivinar[$i]=_                            # Se meten guiones en cada subindice de palabra_adivinar[x]
  35. echo ${palabra_adivinar[$i]};
  36. done
  37. limpiar;
  38. # Mostrar guiones :
  39. while test $contador -le $intentos
  40. do
  41. echo;echo;
  42. for i in $(seq 0 $longitud);
  43. do
  44. echo -n "${palabra_adivinar[$i]} ";
  45. done
  46. echo;
  47. echo "Letra :                                                      Intentos: $contador de $intentos"
  48. read letra
  49. echo $palabra_user2 | grep "$letra" > nul 2>&1 || let contador+=1
  50. # Busqueda secuencial :
  51. for i in $(seq 0 $longitud);
  52. do
  53. if [ ${palabra_user[$i]} = "$letra" ];then
  54. palabra_adivinar[$i]=$letra
  55. fi
  56. done
  57. # Mostrar los guiones :
  58. echo;echo;
  59. for i in $(seq 0 $longitud);
  60. do
  61. echo -n "${palabra_adivinar[$i]} ";
  62. done
  63. echo;echo;
  64. limpiar
  65. # Aqui va el IF y el break:
  66. if [ "$contador" -ge "$intentos" ];
  67. then
  68. break
  69. fi
  70. i=0
  71. cadena_final=`while test $i -le $longitud; do echo -n ${palabra_adivinar[$i]}; let i+=1; done`
  72. # echo Cadena final : $cadena_final
  73. if [ "$cadena_final" == "$palabra_user2" ];
  74. then
  75. break;
  76. fi
  77. done
  78. if [ "$cadena_final" == "$palabra_user2" ];
  79. then
  80. echo Felicidades, has ganado.
  81. echo Ahorcado v1.1
  82. echo Leo Gutierrez R.
  83. elif [ "$cadena_final" -ne "$palabra_user2" ];
  84. then
  85. echo Lo siento, has perdido.
  86. echo Ahorcado v1.1
  87. echo Leo Gutierrez R.
  88. fi
  89. exit 0
  90.  

Si alguien me pudiera hacer el favor de decirme como dibujar el monito, se me hace demasiado tedioso hacerlo a mano.

Saludos.
64  Programación / Scripting / Descubrimiento en comando FOR [Batch] en: 16 Abril 2009, 22:09 pm
Hola, siguiendo con el descubrimiento que ha hecho Carlos:
Citar
La utilidad de mi descubrimiento es que por ejemplo si antes declaraban:

Código:
Código:
for /f "tokens=1-4" %%Y in ("p1 p2 p3 p4") do (
echo %%Y%%Z...
)

y querían mostrar el token 1,2,3,4 solo podíamos mostrar el token 1 y 2, porque luego de %%Y viene %%Z y después ... no sabíamos que letra venía.

Entonces ahora podemos hacer:
Código:
Código:
for /f "tokens=1-4" %%Y in ("p1 p2 p3 p4") do (
echo %%Y%%Z%%[%%\
)

He descubierto que tambien podemos usar numeros en la variable del for, de la siguiente manera.

Código:
@echo off
for %%^1 in (
hola,
adios,
si,
no,
Ok,
bye
) do (
echo %%^1
)

Código:
for /l %%^6 in (1 1 10) do (
echo %%^6
)

Código:
for /d /r %%^2 in (*) do (
echo %%^2
)
Código:
for /f "tokens=1,2,3" %%^0 in ('ver') do (
echo.%%^0 %%^1 %%^2
)

Código:
for %%^1 in ("%~nx0") do (
echo %%~nxt^1
)


Código:
for /f "tokens=1" %%^7 in ('ver') do (
echo.%%^7
)
Esto no está documentado, al menos que yo sepa.

Rob Van der Woude :
Citar
Hi Leonardo,
 
Amazing! Yet another new feature discovered in CMD, after all these years...
I added your tip on my Clever Tricks page (http://www.robvanderwoude.com/clevertricks.php#FORListNumbers) with a link from the Program Flow section of my Batch Techniques page (http://www.robvanderwoude.com/battech.php#Flow).
 
Thanks again,
 
Rob
Citar
Leonardo Gutierrez Ramirez also found a way to use numbers as variables in a FOR loop:

    Hi, I have discovered that we can use numbers in the variable FOR command, like this:

    FOR /L %%ˆ6 IN (1 1 10) DO (
        ECHO %%ˆ6
    )

    FOR /D /R %%ˆ2 IN (*) DO (
        ECHO %%ˆ2
    )

    FOR /F "tokens=1,2,3" %%ˆ0 IN ('VER') DO (
        ECHO.%%ˆ0 %%ˆ1 %%ˆ2
    )

    FOR %%ˆ1 IN ("%~nx0") DO (
        ECHO %%~nxtˆ1
    )

    FOR /F "tokens=1" %%ˆ7 IN ('VER') DO (
        ECHO.%%ˆ7
    )

    FOR %%ˆ1 IN ("%~nx0") DO (
        ECHO %%~nxatdˆ1
    )

Combined with Carlos' extension of the available variables in FOR loops, we can now, in theory at least, nest up to 75 FOR loops!
Not that I would want to maintain such code...

Thanks Leo

http://www.robvanderwoude.com/clevertricks.php#FORListNumbers

http://www.robvanderwoude.com/battech.php#Flow

Saludos.
65  Programación / Scripting / Algoritmo numeros primos [Batch] en: 14 Abril 2009, 04:56 am
Código
  1. @echo off
  2. :: Algoritmo de numeros primos, Leo Gutierrez R.
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. set /a "contador=1"
  7. set /a "divisores=0"
  8. set /a "numero_=numero+1"
  9. set /a "suma=0"
  10. :bucle
  11. if %contador% equ %numero_% (goto:end)
  12. set /a "operacion=%numero% %% %contador%"
  13. if %operacion% equ 0 (
  14. set /a "divisores+=1"
  15. set /a "suma+=%contador%"
  16. )
  17. set /a "contador+=1"
  18. goto:bucle
  19. :end
  20. set /a "_=%numero%+1"
  21. if %suma% equ %_% (echo.Es primo) else (echo.No es primo)
  22. goto:eof

Salida:
Código:
C:\>code
Numero : 2
Es primo

C:\>code
Numero : 4
No es primo

C:\>code
Numero : 19
Es primo

C:\>code
Numero : 23
Es primo

C:\>code
Numero : 3
Es primo

C:\>code
Numero : 5
Es primo

C:\>
66  Programación / Scripting / Algoritmo "Numeros perfectos" [Batch] en: 13 Abril 2009, 09:09 am

De Wikipedia, la enciclopedia libre
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.

Así, 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los siguientes números perfectos son 28, 496 y 8128.


Código
  1. @echo off
  2. :: Numeros perfectos, Leo Gutierrez R.
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. set /a "i=1"
  7. set /a "suma=0"
  8. set /a "operacion=0"
  9. :bucle
  10. if %i% equ %numero% (goto:end)
  11. set /a "operacion=%numero% %% %i%"
  12. if %operacion% equ 0 (set /a "suma+=%i%")
  13. set /a "i+=1"
  14. goto:bucle
  15. :end
  16. if %suma% equ %numero% (
  17. echo El numero es perfecto.
  18. ) else (
  19. echo El numero no es perfecto.
  20. )
  21. goto:eof
Salida:

Código:
C:\>code
Numero : 4
El numero no es perfecto.

C:\>code
Numero : 6
El numero es perfecto.

C:\>code
Numero : 20
El numero no es perfecto.

C:\>code
Numero : 28
El numero es perfecto.

C:\>code
Numero : 2000
El numero no es perfecto.

C:\>code
Numero : 496
El numero es perfecto.

C:\>496
"496" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\>
67  Programación / Ejercicios / Posición en el abecedario [Batch] en: 12 Abril 2009, 01:54 am
Pedir una cadena al usuario, y de cada caracter de la cadena indicar que posición ocupa en el abecedario :
Código:
Cadena : Leonardo
L = 12
e = 5
o = 15
n = 14
a = 1
r = 18
d = 4
o = 15
Press any key...
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "cadena=Cadena : "
  5. if not defined cadena (goto:code)
  6. set "abecedario=abcdefghijklmnopqrtsuvwxyz"
  7. set /a "longitud=0"
  8. set "cadena2=%cadena%"
  9. set /a "contador=1"
  10. :bucle
  11. if not defined cadena (goto:next)
  12. set "cadena=%cadena:~1%"
  13. set /a "longitud+=1"
  14. goto:bucle
  15. :next
  16. set /a "longitud-=1"
  17. for /l %%$ in (0,1,%longitud%) do (
  18. call :etiqueta !cadena2:~% style="color: #448888;">%$,1!
  19. )
  20. goto:eof
  21. :etiqueta
  22. set /a "contador=1"
  23. set "caracter=%1"
  24. for /l %%_ in (0,1,25) do (
  25. if /i ["!abecedario:~% style="color: #448888;">%_,1!"]==["% style="color: #448888;">caracter%"] (call:view !caracter! !contador!)
  26. set /a contador+=1
  27. )
  28. goto:eof
  29. :view
  30. echo %1 = %2
  31. goto:eof
  32.  
68  Programación / Scripting / Ecuaciones v 0.01 1er grado. [Batch] en: 12 Abril 2009, 01:16 am


Se encarga de resolver ecuaciones de 1er grado, como las que se listar en la opción 2:
Código:
1.  -3x-9=-9x-63
2.   9x-5=-4x-57
3.   5x-9x=39-3
4.  -7x+9=-9x-5
5.  -3x+1=2x+21
6.   7x+4=9x+6
7.  -5x+8=9x+120
8.  -8x+1=6x-111
9.  -4x+6=6x-64
10. -5x-1=-7x+5

El codigo :
Código:
@echo off
:code
setlocal enabledelayedexpansion
:: -3x-9=-9x-63
echo. ------------------------------------------------------------------------------
echo. ^| Ecuaciones de 1ø grado. Ejemplo :                     -3x-9=-9x-63         ^|
echo. ------------------------------------------------------------------------------
echo.
echo. ------------------------------------------------------------------------------
echo. ^| 1.-Resolver ecuaci¢n.                                                      ^|
echo. ^| 2.-Ver ejemplos de ecuaciones.                                             ^|
echo. ^| 3.-Ayuda.                                                                  ^|
echo. ^| 4.-Salir.                                                                  ^|
echo. ------------------------------------------------------------------------------
echo.
set /p "opcion=Teclee el numero de la opcion dada : "
if not defined opcion (goto:code)
if %opcion% equ 1 (goto:r_ecuacion)
if %opcion% equ 2 (goto:examples)
if %opcion% equ 3 (goto:help)
if %opcion% equ 4 (goto:exit) else (
cls
goto:code
)
:r_ecuacion
cls
echo.
set /p "ecuacion=Ecuaci¢n : "
if not defined ecuacion (
cls
goto:code
)
for /f "tokens=1,2 delims==" %%a in ("%ecuacion%") do (
set "termino1=%%a"
set "termino2=%%b"
)
for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "x_1=%%ax")
for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "x_2=%%ax")
set "x1=%x_1:x=%"
set "x2=%x_2:x=%"
if ["%x_2:~0,1%"]==["-"] (
set /a "suma_x=!x1!!x2:-=+!"
) else (
set /a "suma_x=!x1!-!x2!"
)
for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "c_1=%%b")
for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "c_2=%%b")
if ["%c_2:~0,1%"]==["-"] (
set /a "suma_c=!c_1!!c_2:-=+!"
) else (
set /a "suma_c=!c_1!-!c_2!"
)
set /a "resultado=%suma_c%/%suma_x%"
echo.
echo.
echo.------------------------------------------------------------------------
echo.Resultado de la ecuacion.
echo.x =  %resultado%
echo.Ecuacion = !ecuacion:x=(%resultado%)!
echo.------------------------------------------------------------------------
set /p ,=Enter para volver al menu.
cls
goto:code
:examples
cls
echo.Este programa puede resolver ecuaciones como las siguientes :
echo.
echo.1.  -3x-9=-9x-63
echo.2.   9x-5=-4x-57
echo.3.   5x-9x=39-3
echo.4.  -7x+9=-9x-5
echo.5.  -3x+1=2x+21
echo.6.   7x+4=9x+6
echo.7.  -5x+8=9x+120
echo.8.  -8x+1=6x-111
echo.9.  -4x+6=6x-64
echo.10. -5x-1=-7x+5
for /l %%$ in (1,1,4) do (cd.)|echo.
set /p ,=Enter para volver al menu.
cls
goto:code
:help
cls
echo.Este peque¤o programa ayuda a resolver ecuaciones del tipo :
echo.-3x-9=-9x-63
echo.
echo.Solo tiene que teclear su ecuaci¢n en el menu inicial (opci¢n 1). y el
echo.programa se encargar  de resolver la ecuaci¢n.
echo.
echo.
echo.Leo Guti‚rrez R.
echo.
echo.
set /p ,=Pulse enter para volver al men£.
cls
goto:code
:exit
exit /b 0

Salida :
Código:

Ecuación : 9x-5=-4x-57


------------------------------------------------------------------------
Resultado de la ecuacion.
x =  -4
Ecuacion = 9(-4)-5=-4(-4)-57
------------------------------------------------------------------------
Enter para volver al menu.

Tiene bastantes bug´s, que iré solucionando con más tiempo.

Saludos.
69  Programación / Scripting / Calcular el factorial de un numero [Batch] en: 10 Abril 2009, 20:11 pm
Factorial :
 
Código
  1. @echo off
  2. :code
  3. set /p "numero=Numero : "
  4. if not defined numero (goto:code)
  5. set /a "factorial=1"
  6. for /l %%_ in (1 1 %numero%) do (
  7. set /a factorial=factorial * %%_
  8. )
  9. echo.Factorial : %factorial%
  10. pause>nul
  11. exit /b 0

Salida :
Código:
Numero : 4
Factorial : 24

Saludos.
70  Programación / Scripting / Sucesión Fibonacci [Batch] en: 10 Abril 2009, 04:37 am
Hola a todos.

Hace tiempo que tenía ganas de hacer esto en Batch.

Para los que no sepan que es la sucesión Fibonacci:
Citar
En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:

El primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores. A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo XIII también conocido como Fibonacci. Tiene numerosas aplicaciones en ciencias de la computación, matemáticas y teoría de juegos.
De Wikipedia.
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. if %numero% lss 1 (
  7. echo.Error, numero negativo.
  8. set /p ,=Pulse Enter para volver.
  9. goto:code
  10. )
  11. for /l %%_ in (1,1,%numero%) do (set "variable%%_=0")
  12. set /a "variable1=1"
  13. set /a "variable2=2"
  14. set /a contador=0
  15. set /a "token_uno=1"
  16. set /a "token_dos=2"
  17. set /a "aumento_de_variable=3"
  18. :bucle
  19. if %contador% equ %numero% (goto:end)
  20. set /a "variable%aumento_de_variable%=!variable% style="color: #448888;">token_uno%! + !variable% style="color: #448888;">token_dos%!"
  21. set /a "token_uno+=1"
  22. set /a "token_dos+=1"
  23. set /a "aumento_de_variable+=1"
  24. set /a "contador+=1"
  25. goto:bucle
  26. :end
  27. for /l %%_ in (1,1,%numero%) do (
  28. echo !variable% style="color: #448888;">%_!
  29. )
  30. set /p =Teclee ENTER para salir.
  31. exit /b 0
Salida :
Código:
Numero : 9
1
2
3
5
8
13
21
34
55
Teclee ENTER para salir.
Código:
C:\>code
Numero : 5
1
2
3
5
8
Teclee ENTER para salir.
Código:
C:\>code
Numero : 25
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
Teclee ENTER para salir.

Saludos.
Páginas: 1 2 3 4 5 6 [7] 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines