Está en la página 1de 13

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

EJERCICIOS
FUNCIONES ESCALARES
1. LISTA DE NMEROS CAPICAS

Implemente un procedimiento para Mostrar la lista de los primeros 10 nmeros


capicas.
FORMA 1: SIN RECURSIVIDAD
--Encontrar los numeros capicuas
use master
go
if OBJECT_ID('dbo.fnNumCapicua', 'FN') is not null
drop function dbo.fnNumCapicua
go
--Esta funcion nos devolvera el numero en el caso cumpla la condicion o nada
create function dbo.fnNumCapicua(@n int)
returns varchar(3)
AS
Begin
declare @Result varchar(3)=''
if ( dbo.fnNumInvertido(@n,0)=@n )
set @Result=CAST(@n as char(3))
return @Result
End
--Fin funcin
use master
go
if OBJECT_ID('dbo.fnMostrarCapicua', 'FN') is not null
drop function dbo.fnMostrarCapicua
go
--Esta funcion nos devolvera la lista de numeros capicuas
create function dbo.fnMostrarCapicua(@inicio int)
returns varchar(2000)
AS
Begin
declare @Result varchar(2000) = ''
declare @Veces int = 0
while( @Veces < 10 )
Begin
if(dbo.fnNumCapicua(@inicio)!='')
Begin
set @Veces +=1
set @Result += dbo.fnNumCapicua(@inicio)+ char(13)
End
else
set @Result += dbo.fnNumCapicua(@inicio)
set @inicio += 1
End
return @Result
End
--Fin funcion
--Prueba de la funcion
print dbo.fnMostrarCapicua(100)

UNIVERSIDAD NACIONAL DE TRUJILLO

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)

UNIVERSIDAD NACIONAL DE TRUJILLO

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

--funcion que retorna el divisor


use master
go
if OBJECT_ID('dbo.fnDivisores', 'FN') is not null
drop function dbo.fnDivisores
go
create function dbo.fnDivisores(@n int,@div int)
returns int
AS
Begin
declare @Numero int = 0
if @n%@div=0
set @Numero=@div
return @Numero
End
--funcion que retorna la suma de divisores
use master
go
if OBJECT_ID('dbo.fnSumDivisor', 'FN') is not null
drop function dbo.fnSumDivisor
go
create function dbo.fnSumDivisor(@n int,@div int)
returns int
AS
Begin
declare @Suma int = 0
while(@div<@n)
Begin
set @Suma += dbo.fnDivisores(@n,@div)
set @div+=1
End
return @Suma
End
--Calculando si dos numeros son amigos o no
use master
go
if OBJECT_ID('dbo.fnNumerosAmigos', 'FN') is not null
drop function dbo.fnNumerosAmigos
go
create function dbo.fnNumerosAmigos(@n int, @m int)
returns char(30)
AS
Begin
declare @Resultado char(30)
if ( dbo.fnSumDivisor(@n, 1)=@m and dbo.fnSumDivisor(@m, 1)=@n )
set @Resultado='Son Amigos'
else
set @Resultado='No son Amigos'
return @Resultado
End
go
-- Utilizando la funcion
declare @num1 int = 220
declare @num2 int = 284
select @num1 as Nmero1,
@num2 as Nmero2,
dbo.fnNumerosAmigos(@num1,@num2) as 'Ver si son AMIGOS'

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

FORMA 2: CON RECURSIVIDAD


--Calculando la Suma de Divisores de un nmero
use master
go
if OBJECT_ID('dbo.fnSumaDivisores', 'FN') is not null
drop function dbo.fnSumaDivisores
go
create function dbo.fnSumaDivisores(@n int, @div int, @SumaDivisor int)
returns int
AS
Begin
declare @Suma int
if @div=0
set @Suma=@SumaDivisor
else
begin
if @n%@div=0
set @Suma=dbo.fnSumaDivisores(@n, @div-1, @SumaDivisor+@div)
else
set @Suma=dbo.fnSumaDivisores(@n, @div-1, @SumaDivisor)
end
return @Suma
End
--Calculando si dos numeros son amigos o no
use master
go
if OBJECT_ID('dbo.fnAmigosRecursivo', 'FN') is not null
drop function dbo.fnAmigosRecursivo
go
create function dbo.fnAmigosRecursivo(@n int, @m int)
returns char(30)
AS
Begin
declare @Resultado char(30)
if (dbo.fnSumaDivisores(@n,@n-1,0)=@m and
dbo.fnSumaDivisores(@m,@m-1,0)=@n )
set @Resultado='Son Amigos'
else
set @Resultado='No son Amigos'
return @Resultado
End
go
-- Utilizando la funcion
declare @num1 int = 6
declare @num2 int = 6
select @num1 as Nmero1,
@num2 as Nmero2,
dbo. fnAmigosRecursivo (@num1,@num2) as 'Ver si son AMIGOS'

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

3. NMERO CUBO PERFECTO


Un nmero es Cubo Perfecto cuando dicho nmero es igual a la suma del cubo de
sus dgitos.
Ejemplo: 153 = 13 + 53 + 33
FORMA RECURSIVA
-- Funcin para calcular un nmero elevado al cubo
USE master
go
if OBJECT_ID ('dbo.fnCubo', 'FN') is not null
drop function fnCubo
go
create function dbo.fnCubo(@Numero float)
returns float
AS
Begin
return (@Numero * @Numero * @Numero)
End
go
--Funcion que nos devuelve la suma de cda digito elevado al cubo
USE master
go
if OBJECT_ID ('dbo.fnCuboPerfecto', 'FN') is not null
drop function fnCuboPerfecto
go
create function dbo.fnCuboPerfecto(@n int)
returns int
AS
Begin
declare @suma int
if @n<10
set @Suma=dbo.fnCubo(@n)
else
set @Suma=dbo.fnCubo(@n%10)+dbo.fnCuboPerfecto(@n/10)
return @Suma
end
go
--Funcion que nos devuelve si es cubo perfecto o no
USE master
go
if OBJECT_ID ('dbo.VerCuboPerfecto', 'FN') is not null
drop function VerCuboPerfecto
go
create function dbo.VerCuboPerfecto(@n int)
returns char(30)
AS
Begin
declare @res char(30)
if dbo.fnCuboPerfecto(@n)=@n
set @res='Si es cubo perfecto.'
else
set @res='No es cubo perfecto.'
return @res
end
go
--Probamos
select 153 as Nmero,
dbo.VerCuboPerfecto(153) as 'Ver si es CUBO PERFECTO'
select 36 as Nmero,
dbo.VerCuboPerfecto(36) as 'Ver si es COMPLETO'

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

4. LISTA DE NMEROS FIBONACCI


Un nmero es de la serie de Fibonacci cuando es igual a la suma de los dos dgitos
inmediatamente anteriores. Tenga en cuenta que los dos primeros nmeros de la
serie, son: 2 y 3.
Implemente un script para mostrar la lista de los n primeros nmeros de la serie de
Fibonacci; n ingresar por teclado.
FORMA RECURSIVA
-- LISTAR LOS n PRIMEROS NUMEROS FIBONACCI
use master
go
-- verificamos si la funcion que vamos a crear existe
if OBJECT_ID('dbo.fnNumerosFibonacci', 'FN') is not null
drop function dbo.fnNumerosFibonacci
go
-- creamos la funcion fnNumerosFibonacci
create function dbo.fnNumerosFibonacci(@a int, @b int, @n int)
returns varchar(200)
AS
Begin
declare @Resultado varchar(200)= ''
declare @fibn int
if (@n = 2)
set @Resultado = @Resultado+' .'
else
Begin
set @fibn = @a + @b
set @a = @b
set @b = @fibn
set @Resultado = '; '+@Resultado+CAST(@b as char(3))
+dbo.fnNumerosFibonacci(@a,@b,@n-1)
End
return @Resultado
End
go
-- LISTAR LOS n PRIMEROS NUMEROS FIBONACCI
use master
go
-- verificamos si la funcion que vamos a crear existe
if OBJECT_ID('dbo.fnVerNumerosFibonacci', 'FN') is not null
drop function dbo.fnVerNumerosFibonacci
go
-- creamos la funcion fnVerNumerosFibonacci
create function dbo.fnVerNumerosFibonacci(@a int, @b int, @n int)
returns varchar(200)
AS
Begin
declare @Result varchar(200)= ''
set @Result = CAST(@a as char(1))+'; '+CAST(@b as char(3))
+dbo.fnNumerosFibonacci(@a,@b,@n)
return @Result
End
go
-- Utilizando la funcion fnVerNumerosFibonacci
select 15 as Cantidad,
dbo.fnVerNumerosFibonacci(2,3,15) as 'Serie Fibonacci'

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

5. LISTA DE NMEROS CON DGITOS IMPARES


Implemente un script en T-SQL para mostrar la lista de nmeros entre 1000 y
1500; cuyos dgitos intermedios sean IMPARES.
FORMA 1: SIN RECURSIVIDAD

--Funcion que devuelve el numero o nada


use master
go
if OBJECT_ID('dbo.fnDigImpar', 'FN') is not null
drop function dbo.fnDigImpar
go
--Esta funcion nos devolvera el numero en el caso cumpla la condicion o nada
create function dbo.fnDigImpar(@n int)
returns char(4)
AS
Begin
declare @Result char(4)=''
if ( ((@n/10)%10)%2=1 and ((@n/100)%10)%2=1 )
set @Result=CAST(@n as char(4))
return @Result
End
--Fin funcion
--Listar los numero con digitos impares en su interior
use master
go
if OBJECT_ID('dbo.fnMostrarDigImpar', 'FN') is not null
drop function dbo.fnMostrarDigImpar
go
--Esta funcion nos devolvera la lista de numeros
create function dbo.fnMostrarDigImpar(@inicio int, @fin int)
returns varchar(2000)
AS
Begin
declare @Result varchar(2000) = ''
while( @inicio <= @fin )
Begin
if(dbo.fnDigImpar(@inicio)!='')
set @Result += dbo.fnDigImpar(@inicio)+ char(13)
else
set @Result += dbo.fnDigImpar(@inicio)
set @inicio += 1
End
return @Result
End
--Fin funcion
--Prueba de la funcion
print dbo.fnMostrarDigImpar(1110,1500)

UNIVERSIDAD NACIONAL DE TRUJILLO

FORMA 2: CON RECURSIVIDAD


-- LISTA DE NMEROS CON DGITOS IMPARES

Base de datos

UNIVERSIDAD NACIONAL DE TRUJILLO

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)

UNIVERSIDAD NACIONAL DE TRUJILLO

Base de datos

También podría gustarte