Está en la página 1de 15

EJERCICIOS DE FUNCIONES ESCALARES

1. LISTA DE NMEROS CAPICAS


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

use Northwind
go
--FUNCIN QUE PERMITE INVERTIR UN NUMERO
if OBJECT_ID('dbo.fnNumInvertido','N') IS NOT NULL
drop function dbo.fnNumInvertido
go
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
-- PROCEDIMIENTO ALMACENADO PARA MOSTRAR LA LISTA
-- DE LOS 10 PRIMEROS NMEROS CAPICAS
create procedure dbo.Listar10PrimerosCapicuas
AS
BEGIN
DECLARE @num int, @cont int
set @num=10
SET @cont=0
while @cont<10
BEGIN
if dbo.fnNumInvertido(@num, 0) = @num
BEGIN
SELECT @num as 'Nmero Capicua'
set @cont=@cont+1
set @num=@num+1
END
else
set @num=@num+1
END

END
--CONSULTA T-SQL PARA EJECUTAR EL SP
-- QUE MUESTRA LOS 10 PRIMEROS NMERO CAPICUAS.
exec dbo.Listar10PrimerosCapicuas
-- EL RESULTADO DE EJECUTAR ESTE SP, ES EL SIGUIENTE

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.

use Northwind
go
--Funcin que calcula la Suma de Divisores de un nmero.
if OBJECT_ID('dbo.fnSumaDivisores','N') 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
--FUNCIONifPARA
@div=0VERIFICAR SI 2 NUMEROS SON AMIGOS
set @Suma=@SumaDivisor
if OBJECT_ID('dbo.fnSonLos2NumerosAmigos','N') IS NOT NULL
else
DROP FUNCTION dbo.fnSonLos2NumerosAmigos
go begin
if @n%@div=0
CREATE FUNCTION dbo.fnSonLos2NumerosAmigos(@n1 int, @n2 int)
set @Suma=dbo.fnSumaDivisores(@n,@div-1, @SumaDivisor+@div)
returns CHAR(50)
else
AS set @Suma=dbo.fnSumaDivisores(@n,@div-1,@SumaDivisor)
BEGIN end
DECLARE
return @Suma@resultado char(50)
End if dbo.fnSumaDivisores(@n1,@n1/2,0) =
dbo.fnSumaDivisores(@n2,@n2/2,0)
set @resultado='Los Numeros Si son Amigos'
else
set @resultado='Los Numeros No son Amigos'
return @resultado
END
--CONSULTA T-SQL QUE EJECUTA LA FUNCION dbo.fnSonLos2NumerosAmigos(@n1 int, @n2
int)
-- QUE VERIFICA SI LOS NUMEROS SON AMIGOS
SELECT 20 AS [Num 1],40 as [Num 2],dbo.fnSonLos2NumerosAmigos(20, 40) as 'Ver si son
Amigos'
-- El resultado de esta sentencia ejecutada es el siguiente.

3. NMERO CUBO PERFECTO


Un nmero es Cubo Perfecto cuando dicho nmero es igual a la suma del cubo
de sus dgitos.
Ejemplo:
153 = 1^3+ 5^3+ 3^3

-- FUNCION QUE CALCULA EL CUBO DE UN NUMERO


IF OBJECT_ID('dbo.fnNumeroACubo','N') is not null
drop function dbo.fnNumeroACubo
go
create function dbo.fnNumeroACubo(@n float)
ELECT 5 AS NUMERO, dbo.fnNumeroACubo(5)
returns float as 'Elevado al cubo'
AS
--FUNCION PARA CALCULAR
BEGIN LA SUMA DEL CUBO DE SUS CIFRAS DE UN NUMERO
IF OBJECT_ID('dbo.fnSumCuboCifras','N')
return (@n*@n*@n)is not null
drop function
ENDdbo.fnSumCuboCifras
go go
create function dbo.fnSumCuboCifras (@num int)
returns float
AS
BEGIN
DECLARE @suma float
if @num=0
set @suma=@num
else
set @suma=dbo.fnNumeroACubo(@num
%10)+dbo.fnSumCuboCifras(@num/10)
return @suma
END
go
--FUNCION PARA VERIFICAR SI UN NUMERO ES CUBO PERFECTO
if OBJECT_ID('dbo.fnEsCuboPerfecto','N') is not null
drop function dbo.fnEsCuboPerfecto
go
create function dbo.fnEsCuboPerfecto(@n int)
returns char(30)
AS
BEGIN
DECLARE @resultado char(30)
if dbo.fnSumCuboCifras(@n)= @n
set @resultado='Es un Cubo Perfecto'
else
set @resultado='No es un Cubo Perfecto'
return @resultado
END
GO

--CONSULTA T-SQL QUE EJECUTA LA FUNCION dbo.fnEsCuboPerfecto(@n int)


SELECT 153 AS Numero, dbo.fnEsCuboPerfecto(153) as 'Ver si Es cubo Perfecto'
-- El resultado de esta sentencia ejecutada es la siguiente

4. LISTA DE NMEROS FIBONACCI


Un nmero es de la serie de Fibonacci cuando es igual a la suma de los dos
--Funcion que calcula los Numeros de Fibonacci
dgitos inmediatamente anteriores. Tenga
if OBJECT_ID('dbo.fnNumerosFibonacci','N') is noten cuenta que los dos primeros
null
drop function dbo.fnNumerosFibonacci
nmeros de la serie, son: 2 y 3. Implemente un script para mostrar la lista de
go
los n primeros
create function nmeros de la serie de Fibonacci;
dbo.fnNumerosFibonacci(@n int) n ingresar por teclado.
returns int
AS
BEGIN
if @n=1
return 2
if @n=2
return 3
return (dbo.fnNumerosFibonacci(@n-1)+dbo.fnNumerosFibonacci(@n-
2))
End
go
--SP para listar los "n" primeros nmeros de Fibonacci
create procedure dbo.ListaNumerosFibonacci
@numero int
AS
BEGIN
DECLARE @numFibonacc int
while @numero>=1
BEGIN
SET @numFibonacc=dbo.fnNumerosFibonacci(@numero)
SELECT @numFibonacc AS [Numero Fibonacci]
SET @numero=@numero-1
END
END
go

--CONSULTA T-SQL PARA EJECUTAR EL SP dbo.ListaNumerosFibonacci @numero int


-- QUE MUESTRA LOS "n" PRIMEROS NMEROS DE LA SERIE DE FIBONACCI
exec dbo.ListaNumerosFibonacci 3
--Los Resultados de ejecutrar este SP, son los siguientes
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.

use Northwind
go
-- FUNCION QUE CUENTA CUANTOS DE LOS DIGITOS INTERMEDIOS SON
IMPARES
if OBJECT_ID('dbo.fnCuentaDigImpar','N') is not null
drop function dbo.fnCuentaDigImpar
go
create function dbo.fnCuentaDigImpar(@n int, @bandera int)
returns int
AS
BEGIN
if @bandera=0
--PROCEDIMIENTO ALAMACENADO
return 0 QUE MUESTRA LOS NUMEROS EN TRE
1000 1500 if (@n%10)%2 <>0
-- CUYOS DIGITOS INTERMEDIOS SON IMPARES
return 1+dbo.fnCuentaDigImpar(@n/10,@bandera-1)
create procedure
returnSP_IdentificaImpares
0+dbo.fnCuentaDigImpar(@n/10,@bandera-1)
As
begin end
go
declare @numero int
set @numero=1000
while(@numero<1501)
begin
if(dbo.fnCuentaDigImpar(@numero/10,2)=2)
begin
select @numero as 'Numero con las Cifras Medias Impares'
set @numero=@numero + 1
end
else
set @numero=@numero + 1
end

end
--CONSULTA T-SQL PARA EJECUTAR EL SP LOS NUMEROS EN TRE 1000 1500
-- CUYOS DIGITOS INTERMEDIOS SON IMPARES

exec SP_IdentificaImpares
-- EL RESULTADO DE EJECUTAR ESTE SP, ES EL SIGUIENTE

También podría gustarte