Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Base de datos
EJERCICIOS
FUNCIONES ESCALARES
1. LISTA DE NMEROS CAPICAS
Base de datos
FORMA 2: Usando recursividad pero ahora se enva un rango donde encontrar los
capicas.
use master
go
-- verificamos si la funcion que vamos a crear existe
if OBJECT_ID('dbo.fnNumInvertido', 'N') is not null
drop function dbo.fnNumInvertido
go
-- creamos la funcion fnNumInvertido
create function dbo.fnNumInvertido(@n int, @inv int)
returns int
AS
Begin
declare @contrario int
if @n=0
set @contrario=@inv
else
set @contrario=dbo.fnNumInvertido(@n/10, @n%10+@inv*10)
return @contrario
End
--Funcin para Verificar si un nmero es Capica
use master
go
if OBJECT_ID('dbo.fnCapicuas', 'FN') is not null
drop function dbo.fnCapicuas
go
--Esta funcion nos devolvera la lista de numeros capicuas
create function dbo.fnCapicuas(@inicio int, @fin int)
returns varchar(2000)
AS
Begin
declare @Result varchar(2000)=''
declare @cad varchar(2000)=''
if(@inicio = @fin+1)
set @Result = @cad
else
Begin
if(dbo.fnNumInvertido(@inicio,0)=@inicio)
set @cad += cast (@inicio as varchar(3)) + CHAR(13)
+dbo.fnCapicuas(@inicio+1,@fin)
else
set @cad += dbo.fnCapicuas(@inicio+1,@fin)
End
return @Cad
End
--Fin funcion
--Prueba de la funcin 120 y 140 es el rango para buscar los nmeros capicuas
print dbo.fnCapicuas(120,140)
Base de datos
2. NMEROS AMIGOS
Dos nmeros son amigos cuando la suma de los divisores de uno de ellos es igual al otro y
viceversa.
Implemente un proceso para determinar si dos nmeros ingresados por teclado son amigos.
FORMA 1: SIN RECURSIVIDAD
Base de datos
Base de datos
Base de datos
Base de datos
Base de datos
Base de datos
Base de datos
Base de datos
Base de datos
use master
go
-- verificamos si la funcion que vamos a crear existe
if OBJECT_ID('dbo.fnDigitoImpar', 'FN') is not null
drop function dbo.fnDigitoImpar
go
-- creamos la funcion fnDigitoImpar
create function dbo.fnDigitoImpar(@inicio int, @fin int)
returns varchar(4000)
AS
Begin
declare @Result varchar(4000)= ''
declare @cad varchar(4000)= ''
if(@inicio=@fin+1)
set @Result = @cad
else
Begin
if((@inicio/10)%10)%2=1 and ((@inicio/100)%10)%2=1
set @cad += cast (@inicio as varchar(4))
+char(13)+dbo.fnDigitoImpar(@inicio+1,@fin)
else
set @cad += dbo.fnDigitoImpar(@inicio+1,@fin)
End
return @cad
End
go
print dbo.fnDigitoImpar(1110,1140)
Base de datos