Autor
|
Tema: Sucesión Fibonacci [Batch] (Leído 15,196 veces)
|
0x0309
Desconectado
Mensajes: 215
|
Leo, el límite para cmd.exe es 32 bits de amplitud o ancho. Así:
11111111111111111111111111111111 notación binaria: 32 bits o flags.
es en notación decimal: 4294967295
Ahora, el rango abarca números negativos y positivos, por lo que queda así:
-2147483648 a 2147483647
Hice una función que suma números en formato cadena de caracteres, para que así la sucesión no quede negativa.
|
|
|
En línea
|
|
|
|
0x0309
Desconectado
Mensajes: 215
|
aqui una versión con la funcion suma: @echo off
setlocal
:fibonacci set n1=0 set n2=1
echo.%n1% echo.%n2%
:hola
call :suma %n1% %n2% set n1=%n2% set n2=%suma%
echo.%suma%
goto hola
endlocal goto :eof
::suma dos numeros positivos. ::Recibe dos numeros en formato de cadena de caracteres. ::util para sumar numeros mayores a 2147483647 (limite positivo. el rango de 32 bits en cmd solo permite numeros entre -2147483648 y 2147483647 ) ::En windows nt y 2000 las cadenas de variables tiene un largo de maximo de 2047 caracteres, y en xp y superior: 8191. ::programado a la rapida por 0x0309 :suma setlocal enableextensions enabledelayedexpansion set primerNumero=%~1 set segundoNumero=%~2 call :len %primerNumero% set /a lenPrimerNumero=%tam% call :len %segundoNumero% set /a lenSegundoNumero=%tam% if %lenPrimerNumero% gtr %lenSegundoNumero% ( set mayor=primerNumero set /a len=%lenPrimerNumero%-1 set menor=segundoNumero ) else ( set /a len=%lenSegundoNumero%-1 set mayor=segundoNumero set menor=primerNumero ) set /a diferencia=!len%mayor%!-!len%menor%! set "loQueFalta=" for /l %%a in (1,1,%diferencia%) do (set loQueFalta=!loQueFalta!0) set %menor%=%loQueFalta%!%menor%! set /a reserva=0 set "suma=" :ciclo for /F %%a in ("primerNumero:~!len!,1") do set digitoUno=!%%a! for /F %%a in ("segundoNumero:~!len!,1") do set digitoDos=!%%a! set /a sumaDigitos=!digitoUno!+!digitoDos!+!reserva! set /a digitoResultante=!sumaDigitos!%%10 set /a reserva=!sumaDigitos!-!digitoResultante! set /a reserva /=10 set suma=!digitoResultante!!suma! set /a len -=1 if !len! geq 0 goto ciclo if !reserva! gtr 0 (set suma=!reserva!!suma!) ( endlocal set suma=%suma% ) goto :eof
:len setlocal set /a contl=0 set wordl=%~1 :loopl if not defined wordl (goto endl) set wordl=%wordl:~1% set /a contl +=1 goto loopl :endl endlocal & set /a tam=%contl% goto :eof
lista generada: 0 1 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 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 2971215073 4807526976 7778742049 12586269025 20365011074 32951280099 53316291173 86267571272 139583862445 225851433717 365435296162 591286729879 956722026041 1548008755920 2504730781961 4052739537881 6557470319842 10610209857723 17167680177565 27777890035288 44945570212853 72723460248141 117669030460994 190392490709135 308061521170129 498454011879264 806515533049393 1304969544928657 2111485077978050 3416454622906707 5527939700884757 8944394323791464 14472334024676221 23416728348467685 37889062373143906 61305790721611591 99194853094755497 160500643816367088 259695496911122585 420196140727489673 679891637638612258 1100087778366101931 1779979416004714189 2880067194370816120 4660046610375530309 7540113804746346429 12200160415121876738 19740274219868223167 31940434634990099905 51680708854858323072 83621143489848422977 135301852344706746049 218922995834555169026 354224848179261915075 573147844013817084101 927372692193078999176 1500520536206896083277 2427893228399975082453 3928413764606871165730 6356306993006846248183 10284720757613717413913 16641027750620563662096 26925748508234281076009 43566776258854844738105 70492524767089125814114 114059301025943970552219 184551825793033096366333 298611126818977066918552 483162952612010163284885 781774079430987230203437 1264937032042997393488322 2046711111473984623691759 3311648143516982017180081 5358359254990966640871840 8670007398507948658051921 14028366653498915298923761 22698374052006863956975682 36726740705505779255899443 59425114757512643212875125 96151855463018422468774568 155576970220531065681649693 251728825683549488150424261 407305795904080553832073954 659034621587630041982498215 1066340417491710595814572169 1725375039079340637797070384 2791715456571051233611642553 4517090495650391871408712937 7308805952221443105020355490 11825896447871834976429068427 19134702400093278081449423917 30960598847965113057878492344 50095301248058391139327916261 81055900096023504197206408605 131151201344081895336534324866 212207101440105399533740733471 343358302784187294870275058337 555565404224292694404015791808 898923707008479989274290850145 1454489111232772683678306641953 2353412818241252672952597492098 3807901929474025356630904134051 6161314747715278029583501626149 9969216677189303386214405760200 16130531424904581415797907386349 ...
|
|
« Última modificación: 14 Abril 2009, 09:55 am por 0x0309 »
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Simplemente excelente, 0x0309.
Saludos.
|
|
|
En línea
|
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Más optimizado, menos variables. :: Leo Gutierrez R. :code set /p "numero=Terminos : " :fibonacci
|
|
|
En línea
|
|
|
|
Darioxhcx
Desconectado
Mensajes: 2.294
|
tengo una duda.. no tiene que ver con el codigo.. lo vi y me gusta y esta bueno... pero la duda que tengo es si dependiendo el sistema x ejemplo sea 32 o 64 bits... te permitira trabajar con cifras mas grandes como pasa con php
un sistema de 64 permite mas que uno de 32 alguien probo algo en 32 y 64 ?
puede ser que cambien en cuanto a eso o no ?
un saludo
|
|
|
En línea
|
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Mas corto aun:
Termino n = 1/raiz(5) * [(1+raiz(5)/2)^n-(1-raiz(5)/2)^n]
PD:
La raiz es cuadrada.
Saludos.
Bien, pero lamentablemente no poseemos soporte para numeros decimales.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Código-Ruby]Sucesión Fibonacci - JaAViEr
Scripting
|
0x5d
|
0
|
2,744
|
8 Enero 2012, 08:57 am
por 0x5d
|
|
|
Cual es el proximo numero en la sucesion?
Dudas Generales
|
CATBro
|
2
|
8,257
|
5 Mayo 2012, 00:18 am
por CATBro
|
|
|
Duda en el código (porgrama sucesión de Fibonacci)
Programación C/C++
|
b_rabbit10
|
2
|
2,605
|
18 Febrero 2013, 22:15 pm
por b_rabbit10
|
|
|
Sucesion de Fibonacci recursiva optimizada
« 1 2 »
Programación C/C++
|
do-while
|
18
|
12,415
|
29 Julio 2013, 13:47 pm
por eferion
|
|
|
[Perl] Ejemplo de Sucesion Fibonacci
Scripting
|
BigBear
|
0
|
2,644
|
5 Diciembre 2014, 15:04 pm
por BigBear
|
|