[Reto Batch] IsFibonacciNumber (79137913)

Iniciado por Eleкtro, 5 Mayo 2012, 12:39 PM

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

79137913

HOLA!!!

Tardaron mucho en responder aqui esta mi solucion...

Analicen el codigo:

Código (dos) [Seleccionar]
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO VERIFICADOR DE NUMEROS PRIMOS POR 79137913
ECHO EJEMPLO:
ECHO Entrada:1 2 3 4 5 6 7 8 9 10 11 12 13
ECHO Salida: 1 1 1 0 1 0 0 1 0 0 0 0 1
SET PROC=PROCESANDO
SET /P N=INSERTE UNA CADENA DE NUMEROS A VERIFICAR SEPARADOS POR UN ESPACIO:
:NEXTNUM
IF "%FIN%"=="1" GOTO SHOWNUMS
SET RN=
:NEXTCHAR
call set CHAR=%%N:~%NUM%,1%%%
set /a NUM+=1
IF "%CHAR%" EQU " " (GOTO EMPIEZA)
IF "%CHAR%" EQU "" SET FIN=1
IF "%CHAR%" EQU "" (GOTO EMPIEZA)
SET RN=%RN%%CHAR%
GOTO NEXTCHAR
:EMPIEZA
SET X=%RN%
SET Y=%X%
SET CT=0
SET /A Y=(5*%X%*%X%)+4
SET RETURN=POSITIVO
GOTO CHECKROOT
:POSITIVO
IF "%EXACTO%"=="1" GOTO ISFIB
SET RETURN=NEGATIVO
SET /A Y=!Y!-8
GOTO CHECKROOT
:NEGATIVO
IF "%EXACTO%"=="1" GOTO ISFIB
SET OUTP=%OUTP% 0
GOTO NEXTNUM
:ISFIB
SET OUTP=%OUTP% 1
GOTO NEXTNUM
:SHOWNUMS
CLS
ECHO %OUTP%
PAUSE
EXIT
:CHECKROOT
CLS
SET PROC=%PROC%.
ECHO %PROC%
SET /A DEND=!Y!
SET EXACTO=0
FOR /L %%I IN (%DEND%, -1, 1) DO (
   SET /A SQR=%%I*%%I
   IF !SQR!==%DEND% (SET EXACTO=1)
)
GOTO %RETURN%


por las dudas pastebin
http://pastebin.com/vW61JYzi

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BatchianoISpyxolo

#11
Una instantánea del funcionamiento:



Y el código:

@echo off
setlocal enabledelayedexpansion
echo. Introduzca una secuencia de enteros (separados por espacios)
echo. para verificar si pertenencen a la sucesion de Fibonacci.
echo.
set /p seq=Secuencia:
set /a i=0
set "SALIDA="
:seq
if "!seq:~%i%,1!" NEQ "" (
if "!seq:~%i%,1!" NEQ " " (
set num=!num!!seq:~%i%,1!
) else (
call :NUMERO !num!
set "num="
)
set /a i+=1
goto seq
) else (
call :NUMERO !num!
)
echo Salida:  !SALIDA!
pause&exit/b

:NUMERO
set /a NUMERO=%1
set /a inc=0
:GS
call :SucesionFibonacci !inc!
if !NUMERO! GTR !f1! (set /a inc+=1 & goto GS)
if !NUMERO! EQU !f1! (
set SALIDA=!SALIDA! 1
) else (
set SALIDA=!SALIDA! 0
)

:SucesionFibonacci
set /a N=%1
set /a f0=0
set /a f1=1
for /l %%S in (1,1,!N!) do (
set /a f=!f0!+!f1!
set /a f0=!f1!
set /a f1=!f!
)
Puede que desees aprender a programar desde 0: www.espascal.es

79137913

HOLA!!!

Genial, ahora hace que devuelva la respuesta en una sola linea de ceros y unos y estas!

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BatchianoISpyxolo

Cita de: 79137913 en 14 Mayo 2012, 15:56 PM
HOLA!!!

Genial, ahora hace que devuelva la respuesta en una sola linea de ceros y unos y estas!

GRACIAS POR LEER!!!

Ya concatené la salida -_- XD **CODE EDITADO**
Puede que desees aprender a programar desde 0: www.espascal.es

Binary_Death

#14
Aquí está mi solución:


@Echo Off
setlocal enableextensions enabledelayedexpansion
set /p "seq=-Input  >> "
set "b_s=" & set /a bgr=0
for %%_ in (%seq%) do if %%_ GTR !bgr! set/a bgr=%%_
call:_fib %bgr%
for %%_ in (%seq%) do (
1>nul 2>&1, (echo:%f_s%|find "$%%_$") && (
set "b_s=!b_s! 1"
) || (
set "b_s=!b_s! 0"
)
)
echo:-Output ^>^>%b_s%
pause 1>nul & exit
:_fib
set "f_s=$1$"
set/a f_n=1,s_n=2
for /l %%_ in (1,1,%~1) do (
set/a n_n=!f_n!+!s_n!
set/a f_n=!s_n!,s_n=!n_n!
set "f_s=!f_s!$!n_n!$"
if !n_n! geq %~1 goto :eof
)
goto :eof


Creo poder hacer un método más rápido... pero no me lo permiten mis escasos conocimientos de matemáticas (¡que aunque se me den bien, todavía recién acabé 4º de ESO!).
Posteé en un foro una duda relacionada, si me la solucionan, podré hacer un algoritmo más eficiente. Mientras, queda esto  :xD