Funciones de conjuntos.
Funciones
Set SetFirstN(Set setInp, Real numEle)Set SetLastN(Set setInp, Real numEle)Anything SetGetRand(Set setInp)Set SetSubCicle(Set setInp, Real iniPos, Real lenRet)//////////////////////////////////////////////////////////////////////////////
Set SetFirstN(Set setInp, // Set de entrada
Real numEle) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
If(LE(numEle, 0), Empty,
For(1, Min(Card(setInp), numEle), Anything(Real setPos)
{ setInp[setPos] }))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los primeros numEle elementos.
Si el conjunto tiene menos de numEle elementos los retorna todos.
Si numEle es 0 o negativo retorna el conjunto vacio.",
SetFirstN);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SetLastN(Set setInp, // Set de entrada
Real numEle) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
If(LE(numEle, 0), Empty,
For(Max(1, 1+Card(setInp)-numEle), Card(setInp), Anything(Real setPos)
{ setInp[setPos] }))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los ultimos numEle elementos.
Si el conjunto tiene menos de numEle elementos los retorna todos.",
SetLastN);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Anything SetGetRand(Set setInp)
//////////////////////////////////////////////////////////////////////////////
{
Real setCrd = Card(setInp);
If(LE(setCrd, 0), FALSE,
{
Real rndPos = Min(setCrd, Max(1, Round(Rand(0, setCrd)+0.5)));
Anything rndVal = setInp[rndPos];
rndVal
})
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un elemento al azar del conjunto de entrada setInp.
Si setInp es Empty retorna FALSE.",
SetGetRand);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SetSubCicle(Set setInp, // Conjunto de elementos
Real iniPos, // Posicion inicial
Real lenRet) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
Real modCic(Real setPos, Real crdSet)
{
Real modPos = setPos % crdSet;
If(LE(modPos, 0), crdSet, modPos)
};
Real crdSet = Card(setInp);
For(0, lenRet-1, Anything(Real setPos)
{
Real posCic = modCic(iniPos + setPos, crdSet);
setInp[posCic]
})
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los primeros numEle elementos.
Si el conjunto tiene menos de numEle elementos los extrae por el principio.
Por ejemplo: SetSubCicle([a,b,c,d],3,8) -> [c,d,a,b,c,d,a,b]",
SetSubCicle);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FILE : set.tol
// AUTHOR : http://www.asolver.com
// PURPOSE : Funciones de conjuntos.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SetFirstN(Set setInp, // Set de entrada
Real numEle) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
If(LE(numEle, 0), Empty,
For(1, Min(Card(setInp), numEle), Anything(Real setPos)
{ setInp[setPos] }))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los primeros numEle elementos.
Si el conjunto tiene menos de numEle elementos los retorna todos.
Si numEle es 0 o negativo retorna el conjunto vacio.",
SetFirstN);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SetLastN(Set setInp, // Set de entrada
Real numEle) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
If(LE(numEle, 0), Empty,
For(Max(1, 1+Card(setInp)-numEle), Card(setInp), Anything(Real setPos)
{ setInp[setPos] }))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los ultimos numEle elementos.
Si el conjunto tiene menos de numEle elementos los retorna todos.",
SetLastN);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Anything SetGetRand(Set setInp)
//////////////////////////////////////////////////////////////////////////////
{
Real setCrd = Card(setInp);
If(LE(setCrd, 0), FALSE,
{
Real rndPos = Min(setCrd, Max(1, Round(Rand(0, setCrd)+0.5)));
Anything rndVal = setInp[rndPos];
rndVal
})
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un elemento al azar del conjunto de entrada setInp.
Si setInp es Empty retorna FALSE.",
SetGetRand);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SetSubCicle(Set setInp, // Conjunto de elementos
Real iniPos, // Posicion inicial
Real lenRet) // Numero de elementos a retornar
//////////////////////////////////////////////////////////////////////////////
{
Real modCic(Real setPos, Real crdSet)
{
Real modPos = setPos % crdSet;
If(LE(modPos, 0), crdSet, modPos)
};
Real crdSet = Card(setInp);
For(0, lenRet-1, Anything(Real setPos)
{
Real posCic = modCic(iniPos + setPos, crdSet);
setInp[posCic]
})
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un subconjunto de un conjunto con los primeros numEle elementos.
Si el conjunto tiene menos de numEle elementos los extrae por el principio.
Por ejemplo: SetSubCicle([a,b,c,d],3,8) -> [c,d,a,b,c,d,a,b]",
SetSubCicle);
//////////////////////////////////////////////////////////////////////////////
Omr.Forms construye las páginas web Html del sitio web omrforms.es
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio