Sencillos
      Series      
      Listas      
Lista de listas
      Tuplas      
      Otros      
 
Códigos
Haskell
Videos
Diseño web
Suma diagonal principal
Dada una lista de listas o matriz de números enteros, realiza la suma de la diagonal principal

Código fuente

dph::Int->[Int]->Int
dph b as=as!!b

dip::Int->[[Int]]->Int
dip _ []=0
dip k (x:xs)=dph k (x)+dip (k+1) xs

dp::[[Int]]->Int
dp (xs)=dip 0 (xs)

 
Vocales y consonantes
Este programa selecciona las consonantes y vocales de una lista para mostrarlas en dos listas de una lista de listas.

Código fuente

cst::String->String
cst ""=""
cst n|k=="a"||k=="e"||k=="i"||k=="o"||k=="u"=""++(cst (tail n))
     |otherwise=k++(cst (tail n))
     where k=take 1 n

voc::String->String
voc ""=""
voc n|k=="a"||k=="e"||k=="i"||k=="o"||k=="u"=k++(voc (tail n))
     |otherwise=""++(voc (tail n))
     where k=take 1 n

vc::[String]->[String]
vc []=[]
vc (x:xs)=(voc x):(vc xs)

cs::[String]->[String]
cs []=[]
cs (x:xs)=(cst x):(cs xs)

vc_cs::[String]->[[String]]
vc_cs (ns)=(cs ns):(vc ns):[]

 
Suma dos columnas
Este programa realiza la suma de los elemendos de dos columnas de una matriz.

Código fuente

se::Int->Int->Int->[Int]->Int
se _ _ _ []=0
se c d e (a:as)|c==e=a+(se c d (e+1) (as))
     |d==e=a+(se c d (e+1) (as))
     |True=se c d (e+1) (as)

sc::Int->Int->[[Int]]->[Int]
sc _ _ []=[]
sc h i (x:xs)=(se h i 0 (x)):sc h i (xs)

 
Suma de matrices
Sencillo programa que realiza la suma de dos matrices de números enteros.

Código fuente

smt::[Int]->[Int]->[Int]
smt [] []=[]
smt (a:as) (b:bs)=(a+b):(smt as bs)

sm::[[Int]]->[[Int]]->[[Int]]
sm [] []=[]
sm (x:xs) (y:ys)=(smt (x)(y)) :(sm (xs) (ys))

 
Ordenar Lista de listas
Este sencillo programa ordena una lista de listas.

Código fuente

men::[Int]->Int->Int
men [] m=m
men (x:xs) m|x < m=men xs x
     |otherwise=men xs m

elirep::Int->[Int]->[Int]
elirep _ []=[]
elirep a (x:xs)|a==x=xs
     |otherwise=x:elirep a xs

ord::[Int]->[Int]
ord []=[]
ord (x:xs)=k:ord m
     where k=men (x:xs) x
     m=elirep k (x:xs)

prin::[[Int]]->[Int]->[[Int]]
prin [] _=[]
prin (x:xss) (yss)=k:(prin xss (drop d yss))
     where d=length x
     k=take d (yss)

ordenar::[[Int]]->[[Int]]
ordenar xss=prin xss p
     where d=concat xss
     p=ord d

 
Tramos ordenados
Dada una lista de número enteros, muestra en una lista de listas los tramos ordenados.

Código fuente

or1::Int->[Int]->[Int]
or1 a []=[a]
or1 a (x:xs)|a < x=a:or1 x xs
     |otherwise=[a]

tord::[Int]->[[Int]]
tord []=[]
tord (x:xs)=k:tord (drop p (x:xs))
     where k=or1 x xs
     p=length k

 
Suma de fila columna, diagonal principal, diagonal secundaria
Dada una matriz de números enteros además de la fila y la columna, este programa realiza la suma de los elementos de la fila,columna,diagonal principal y diagonal secundaria.

Código fuente

smf::[[Int]]->Int->Int
smf xss f=sum (xss!!(f-1) )

smc::[[Int]]->Int->Int
smc [] _=0
smc (x:xss) c=(x!!(c-1))+smc xss c

smdp::[[Int]]->Int->Int
smdp [] c=0
smdp (x:xss) c|c>0&&(c<=length x)=(x!!(c-1))+smdp (xss) (c+1)
     |True= smdp (xss) (c+1)

smds::[[Int]]->Int->Int
smds [] c=0
smds (x:xss) c|length (x)>=c&&c>0=(x!!(c-1))+smds xss (c-1)
     |True=smds xss (c-1)

sprin::[[Int]]->Int->Int->Int
sprin (xss) f c=fi+co+dp+ds-3*r
     where fi=smf xss f
           co=smc xss c
           dp=smdp xss (1+c-f)
           ds=smds xss (c+f-1)
           r=(xss!!(f-1))!!(c-1)

 
Multiplicación de matrices
Dadas dos matrices de n x n, devuelve en una lista de listas la multiplicación de ambas matrices.

Código fuente

md::[Int]->[Int]->Int
md [] []=0
md (x:xs) (y:ys)|k==m=x*y+md xs ys
     |otherwise=0
     where k=length (x:xs)
     m=length (y:ys)

sep::[[Int]]->Int->[Int]
sep [] _=[]
sep (a:ass) e=(a!!(e-1)):sep ass e

mul::[Int]->[[Int]]->Int->[Int]
mul [] _ _=[]
mul (xs) (y:yss) a|a<=length y=d:mul (xs) (y:yss) (a+1)
     |otherwise=[]
     where k=sep (y:yss) a
     d=md xs k

mulmat::[[Int]]->[[Int]]->[[Int]]
mulmat [] qss=[]
mulmat (p:pss) qss|length p==length qss=m:mulmat pss qss
     |otherwise=error "el numero de columnas debe ser igual al numero de filas"
     where m=mul p (qss) 1

 
Nuevo
Publicado el:
22 - Agosto - 2009
Códigos Pascal
Triangulo
Este programa determina si los catetos e hipotenusa introducidos, forman o no un triángulo, si es asi muestra que tipo de triángulo es, ya sea triángulo equilátero, isóceles, rectángulo o escaleno.
 
Nuevo
Publicado el:
22 - Agosto - 2009
Haskell
Serie Fibonacci
Lista de la serie de fibonacci Programa que dada una lista de números enteros, devuelve solo aquellos numeros que pertenecen a la serie de fibonacci.
 
Nuevo
Publicado el:
21 - Agosto - 2009
Haskell
Suma diagonal principal
Dada una lista de listas o matriz de números enteros, realiza la suma de la diagonal principal.