Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 28-oct-2008, 18:34   #1
SMARTGENIUS
Guest
 
Amigos
Mensajes: n/a
Predeterminado Algoritmo de Numeros Primos

Bueno...en respuesta al Reto Propuesto por ECDundy de crear el Algoritmo para Trabajar con Numeros Primos

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Traigo aqui lo que he hecho....

Cita:
1. Implemente el método "call:EsPrimo valor" que devuelve true o false en dependiendo de si el valor de la variable a es un número primo o no. Intente hacerlo de la manera más eficiente posible.
EsPrimo.bat

Código:
@echo off
REM Comprueba si un Numero es Primo
REM Coded by :: SmartGenius ::
color 0a
if ["%1"]==[""] goto :error

:ini
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :cprimo %num%
echo %primo%
goto :eof

:cprimo
set primo=True
set /a lim=%1-1
for /l %%a in (2,1,%lim%) do (call :cprimo2 %%a)
goto:eof
:cprimo2
set /a p=(%num%)%%(%1)
if %p%==0 set primo=False
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
  
Cita:
2. Implemente el método "call:PrimoMasCercano valor" Este método debe devolver el número primo más cercano al valor.
PrimoMasCercano.bat
Código:
@echo off
color 0a
REM Busca el Numero Primo mas cercano al Valor N
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set n=%1
set /a c=%n%*1
if not %c%==%n% goto :error
call :near %n%
echo %near%
goto :eof

:near
set lim=%1
for /l %%b in (1,1,%lim%) do (
for /f %%c in ('call EsPrimo %%b') do (
if %%c==True set near=%%b
))
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
  
Cita:
3. Implemente el método "call:TérminoPrimo valor" Este método debe devolver el n-ésimo término de la sucesión de números primos.
TerminoPrimo.Bat
Código:
@echo off
color 0a
REM Busca El N-esimo valor de la Sucesion de Numeros Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set t=%1
set /a c=%t%*1
if not %c%==%t% goto :error
call :ter %t%
echo %ene%
goto :eof

:ter
set lim=%1
set l=1
for /l %%b in (1,1,9999) do (
for /f %%c in ('call EsPrimo %%b') do (
if defined ene goto :eof &goto :eof
if %%c==True call :val %%b
))
goto :eof

:val
if %l%==%lim% set ene=%1
set /a l=%l%+1
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
  
Cita:
4. Implemente el método "callescomposiciónPrimos valor" Este método debe escribir en la consola la descomposición en números primos del valor.
DescomposicionPrimos.bat
Código:
@echo off
color 0a
REM Descomposicion en Factores Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
setlocal
:ini
set op=
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :func1 %num%
:fin
echo %op:~1%
endlocal
goto :eof

:func1
set lim=%1
for /f %%z in ('call EsPrimo %lim%') do (if %%z==True set op=*1*%lim% & goto :eof)
for /l %%n in (2,1,%lim%) do (
for /f %%c in ('call EsPrimo %%n') do (
if %%c==True call :func2 %lim% %%n
))
goto :eof

:func2
set val=%1
:func3
set var=%op%
set /a c=%var:~1%
if %c% GEQ %lim% goto :eof
set /a mod=(%val%)%%(%2)
if %mod%==0 set op=%op%*%2& set /a val=(%val%)/(%2)&goto :func3
goto :eof

:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
  
Cita:
5. Implemente el metodo "call:PowerPrimos cadena" Teniendo una cadena como "2*2*3*3*23" que es la descomposicion de "828" en numeros primos devolver una cadena que eleve los valores que se repiten. Para este caso el metodo debe devolver "2^2*3^2*23".
PowerPrimos.bat
Código:
@echo off
color 0a
REM Simplificacion de Cadenas
REM Coded by :: SmartGenius ::
setlocal enabledelayedexpansion
if ["%1"]==[""] goto :error
:init
set cadena=%1
call :string %cadena%
:func
for /l %%f in (1,1,%l%) do (call :func2 %%f)
for /l %%g in (1,1,%l%) do (call :func3 %%g)
goto :next
:func2
set lim=%1
for /f "tokens=%lim% delims=*" %%k in ("%cadena%") do (call :add %%k)
goto :eof
:func3
set lim=%1
for /f "tokens=%lim% delims=*" %%j in ("%cadena%") do (call :var %%j)
goto:eof
:next
set oper=%oper:l1=%
set oper=%oper:l=^^^^%
echo %oper:~1%
goto :eof

:var
set t1=%1
if not defined t%t1% call :var2 %t1%
goto:eof
:var2
call set var=!p%1!l!n%1!
set t%1=%1
set oper=%oper%*%var%
goto :eof

:add
set /a n%1+=1
set p%1=%1
goto:eof

:string
set texto=%1
:string2
if not "%texto:~0,1%"=="" (set /a l=%l%+1)
set texto=%texto:~1%
if "%texto%"=="" goto :eof
goto :string2
  
Todos estos codigos debian ser llamados desde un codigo Principal usando el FOR /f y los tokens....

AlgoritmoPrimos.bat
Código:
@echo off
mode con cols=40 lines=20
title Algoritmo de Numeros Primos
color 0a
REM Calculo de Funciones y Algoritmos con Numeros Primos
REM Matematicas Euclidianas
REM Coded by :: SmartGenius ::

:main
set opc=
cls
echo.
echo  Bienvenido al Programa
echo.
echo Escoja un Opcion   [X] Salir
echo.
echo 1. Comprobar si un Numero es Primo
echo 2. Primo mas cercano de un Numero (N)
echo 3. Obtener el N-esimo termino Primo
echo 4. Descomponer un Numero
echo 5. Mostrar Descomposicion Recursiva
echo.
set /p opc="Opcion >> "
if not defined opc goto main
if /i %opc%==x exit
if %opc%==5 call :func5
if %opc% GTR 5 goto main
set /p number="Introduzca el Dato : "
if not defined number goto main
set /a b=%number%*1
if not %b%==%number% goto :error
if %opc%==1 call :func1 %number%
if %opc%==2 call :func2 %number%
if %opc%==3 call :func3 %number%
if %opc%==4 call :func4 %number%
pause
goto :main

:func1
set esprimo=NO
set valor=%1
for /f %%c in ('call EsPrimo %valor%') do (
if %%c==True set esprimo=SI
)
echo ^> %valor% %esprimo% es un Numero Primo
pause
goto :main

:func2
set valor=%1
for /f %%d in ('call PrimoMasCercano %valor%') do (set next=%%d)
echo ^> Primo mas cercano de %valor% es %next%
pause
goto :main

:func3
set valor=%1
for /f %%e in ('call TerminoPrimo %valor%') do (set termino=%%e)
echo El %valor% Numero de la Sucesion de 
echo Numeros Primos corresponde a %termino%
pause
goto :main

:func4
set nmb=%1
for /f %%u in ('call DescomposicionPrimos %nmb%') do (set desc=%%u)
echo Descomposicion de %nmb% = %desc%
pause
goto :main

:func5
set /p txt="Introduzca la cadena > "
if not defined txt goto :func5
call PowerPrimos %txt%
pause
goto :main

:error
echo No ha introducido un Valor Numerico
pause
goto :main
  
Pero esto puede tardar que el 4 punto se demore mas de lo normal...

Las Pruebas tambien las hice por consola....


y funciona muy bien...aunque claro no soy perfecto y puede tener errores...pero en mi concepto es lo que se pide en el reto....asi que yo lo doy por solucionado...

Descargar todo:

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Espero sea de utilidad...

Saludos.
  Responder Citando
Antiguo 29-oct-2008, 15:16   #2
carlitos.java
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Algoritmo de Numeros Primos

Buen aporte Smart.
  Responder Citando
Antiguo 29-oct-2008, 15:23   #3
Gran Colaborador
 
Fecha de Ingreso: octubre-2005
Amigos 4
Mensajes: 1.312
Gracias: 0
Agradecido 12 veces en 5 mensajes.
Predeterminado Re: Algoritmo de Numeros Primos

Pinta bien, a ver cuando tengo tiempo para leermelo, espero que este fin de semana pueda

Bytes, Espectro Infernal.
__________________




Espectro Infernal está desconectado   Responder Citando
Antiguo 30-oct-2008, 14:34   #4
SMARTGENIUS
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Algoritmo de Numeros Primos

Cita:
Iniciado por carlitos.java
Buen aporte Smart.
jeje...pues era la solucion a un reto que habian propuesto, pero esto tiene mucha utilidad en lo que a matematicas refiere usadas desde batch...sobre todo la funcion de descomposicion en factores primos y la ultima funcion....

Bajen el archivo que les di y lo prueban desde la consola...

Saludos.
  Responder Citando
Antiguo 02-nov-2008, 23:32   #5
ECDundy
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Algoritmo de Numeros Primos

ok smart has mejorado, veamos como te sigues desarrollando...observemos si logras realizar los proximos retos los cuales por si mismos poco a poco te exigiran optimizacion... Los que no lo han resuelto todavia tienen la oportunidad de poner su nombre en el top del reto resuelto logrando la optimizacion...
  Responder Citando
Antiguo 22-nov-2008, 17:28   #6
SMARTGENIUS
Guest
 
Amigos
Mensajes: n/a
Predeterminado Re: Algoritmo de Numeros Primos

bien, revise un poco el codigo y lo reacomode, haciendo una optimizacion y adaptandolo para que sea una funcion mas...

Código:
@echo off
REM Funcion de Numeros Primos
REM Coded by :: SmartGenius ::
setlocal enabledelayedexpansion
if ["%1"]==[""] goto :syntaxis
if ["%2"]==[""] goto :syntaxis
set num=%2
set /a c=%num:~0,1%*1
if not %c%==%num:~0,1% (echo Parametro Numerico Invalido &goto :syntaxis)
if ["%1"]==["/c"] call :cprimo %2
if ["%1"]==["/n"] call :nprimo %2
if ["%1"]==["/t"] call :tprimo %2
if ["%1"]==["/d"] call :dprimos %2
if ["%1"]==["/p"] call :pprimos %2
if ["%1"]==["/h"] goto :syntaxis
if ["%1"]==["/?"] goto :syntaxis
endlocal
goto :eof

::Numero Primo
:cprimo
set primo=True
set /a lim=%1-1
for /l %%a in (2,1,%lim%) do (
set /a p=%1%%%%%a
if !p!==0 set primo=False)
echo %primo%
goto :eof

::Primo mas Cercano de un Numero
:nprimo
set lim2=%1
for /l %%b in (1,1,%lim2%) do (
call :cprimo %%b >nul
if !primo!==True set near=%%b)
echo %near%
goto:eof

::N-esimo Termino de la Sucesion de Numeros Primos
:tprimo
set lim3=%1
set l=1
set cont=1
:tprimo2
call :cprimo %cont% >nul
if !primo!==True call :tprimo3 %cont%
if defined tprimo echo %tprimo% &goto :eof
set /a cont=%cont%+1
goto :tprimo2
:tprimo3
if %l%==%lim3% set tprimo=%1
set /a l=%l%+1
goto :eof

::Descomposicion de un Numero en Factores Primos
:dprimos
set lim4=%1
call :cprimo %lim4% >nul
if !primo!==True (echo 1*%lim4% &goto :eof)
for /l %%n in (2,1,%lim4%) do (
call :cprimo %%n >nul
if !primo!==True call :dprimos2 %lim4% %%n
)
echo %op:~1%
goto :eof
:dprimos2
set val=%1
:dprimos3
set var=%op%
set /a c=%var:~1%
if %c% GEQ %lim4% goto :eof
set /a mod=(%val%)%%(%2)
if %mod%==0 set op=%op%*%2& set /a val=(%val%)/(%2)&goto :dprimos3
goto :eof

::Simplificacion de Cadenas
:pprimos
set cadena=%1
call :string %cadena%
:func
for /l %%f in (1,1,%len%) do (call :func2 %%f)
for /l %%g in (1,1,%len%) do (call :func3 %%g)
set oper=%oper:l1=%
set oper=%oper:l=^^^^%
echo %oper:~1%
goto :eof
:func2
set lim5=%1
for /f "tokens=%lim5% delims=*" %%k in ("%cadena%") do (call :add %%k)
goto :eof
:func3
set lim6=%1
for /f "tokens=%lim6% delims=*" %%j in ("%cadena%") do (call :var %%j)
goto:eof

:var
set t1=%1
if not defined t%t1% call :var2 %t1%
goto:eof
:var2
call set var=!p%1!l!n%1!
set t%1=%1
set oper=%oper%*%var%
goto :eof

:add
set /a n%1+=1
set p%1=%1
goto:eof

:string
set texto=%1
set len=0
:string2
if not "%texto:~0,1%"=="" (set /a len=%len%+1)
set texto=%texto:~1%
if "%texto%"=="" goto :eof
goto :string2

:syntaxis
echo.   -------------------------------
echo   ^| Funciones de Numeros Primos ^|
echo   ^| Coded by :: SmartGenius ::  ^|
echo    -------------------------------
echo Modo de Uso
echo.
echo %~n0 [Modificadores] Numero^|Operacion
echo Ej: %~n0 /c Variable Numerica
echo.
echo Modificadores:
echo /c Comprueba si el Numero Introducido es Primo
echo   devolviendo un valor de True o False
echo /n Imprime en Pantalla el Primo mas Cercano del
echo   Numero introducido.
echo /t Imprime en Pantalla el N-esimo Termino de la
echo   Sucesion de Numeros Primos.
echo /d Descompone un Numero en sus Factores Primos.
echo /p Simplifica una Cadena de Operaciones
echo   Ej: 2*2*2*3*3*5 --^> 2^^3*3^^2*5
echo.
echo. /h^| /? Muestra esta ayuda.
goto :eof
  
Sera usada para trabajar en consola y mediante parametros....y pues es mas facil de usar al estar todos los codigos juntos...

Ojala y les sirva de algo... =S

Saludos.
  Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
NUMEROS PRIMOS SEGUN OCUPACION nikecito Juegos y Humor (Diversión) 1 13-sep-2008 18:18
Generador de Numeros Primos 2.5 Espaol programas-gratis Top 100 0 12-jun-2006 21:55
Generador de Numeros Primos 2.2 Espaol programas-gratis Top 100 0 19-feb-2006 11:33
Generador de Numeros Primos 2.1 Espaol programas-gratis Top 100 0 05-feb-2006 20:56
Generador de Numeros Primos 2.02 Espaol programas-gratis Top 100 0 06-dic-2005 18:59



Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0