Bom, galera... eu tava usando o Triângulo de Pascal pra coisas que não vem ao caso agora, e resolvi criar funções relacionadas ao bendito (ou maldito) triângulo. Eis aqui meu trabalho:
// Retorna o triangulo dentro de uma array contendo várias arrays (linhas) com elementos (colunas)
function pascal( $lineEnd )
{
$index = array();
$index[ 0 ][ 0 ] = 1;
$line = 1;
while( $line <= $lineEnd )
{
$index[ $line ] = array();
$coluna = 0;
while( $coluna <= $line )
{
$index[ $line ][ $coluna ] = $index[ $line - 1][ $coluna - 1] + $index[ $line - 1][ $coluna ];
$coluna ++;
}
$line ++;
}
return( $index );
}
// Retorna uma linha do triangulo dentro de uma array. $columnStart e $columnEnd identificam o intervalo de colunas a ser utilizado.
// Caso sejam NULL, todos os elementos da linha estarão disponíveis
function pascalLine( $lineNumber, $columnStart = NULL, $columnEnd = NULL )
{
$pascal = pascal( $lineNumber );
$result = array_slice( $pascal[ $lineNumber ], $columnStart, $columnEnd, true );
return( $result );
}
// Retorna uma coluna do triangulo dentro de uma array. $lineEnd e $lineStart definem o intervalo de linhas a ser utilizado.
// $lineEnd é obrigatório.
function pascalColumn( $columnNumber, $lineEnd, $lineStart = 0 )
{
$pascal = pascal( $lineEnd );
$result = array();
$count = $lineStart;
while( $count <= $lineEnd )
{
if( $count < $columnNumber )
{
$result[] = NULL;
}
else
{
$result[$count] = $pascal[ $count ][ $columnNumber ];
}
$count ++;
}
return( $result );
}
// Retorna um período do Triangulo de Pascal dentro de uma array contendo varias arrays (linhas) que contém elementos (colunas)
function pascalIntersection( $lineStart, $lineEnd, $columnStart, $columnEnd )
{
$pascal = pascal( $lineEnd );
$countLine = $lineStart;
while( $countLine <= $lineEnd)
{
$countColumn = $columnStart;
while( $countColumn <= $columnEnd )
{
$result[ $countLine ][ $countColumn ] = $pascal[ $countLine ][ $countColumn ];
$countColumn ++;
}
$countLine ++;
}
return ( $result );
}
// Retorna o elmento encontrado na intersecção da linha " $line " pela coluna " $column "
function pascalElement( $line, $column )
{
$pascal = pascal( $line );
return( $pascal[ $line ][ $column] );
}
// Retorna a soma dos elementos de uma linha " $lineNumber ", durante o intervalo de colunas $columnStart e $columnEnd
// Se ( $columnStart e $columnEnd ) = NULL, a linha inteira é somada
function pascalLineSum( $lineNumber, $columnStart = NULL, $columnEnd = NULL )
{
$pascalLine = pascalLine( $lineNumber, $columnStart, $columnEnd );
$result = array_sum( $pascalLine );
return( $result );
}
// Retorna a soma dos elementos de uma coluna $columnNumber, durante o intervalo de linhas $lineStart e $lineEnd
// $lineEnd é obrigado
// o padrão de $lineStart é "0"("zero")
function pascalColumnSum( $columnNumber, $lineEnd, $lineStart = 0 )
{
$pascalColumn = pascalColumn( $columnNumber, $lineEnd, $lineStart );
$result = array_sum( $pascalColumn );
return( $result );
}
// Retorna uma tabela HTML mostrnado o triangulo de pascal na intersecção dos intervalos ( $lineStart, $lineEnd ) e ($columnStart, $columnEnd)
// $lineEnd é obrigatório
function pascalDraw( $lineEnd, $lineStart = 0, $columnStart = 0, $columnEnd = NULL )
{
if( !$columnEnd )
{
$columnEnd = $lineEnd;
}
$pascal = pascal( $lineEnd );
echo "<table border='1'><tr><td align='center' style='font-family:Verdana; font-size:10px;'>PASCAL</td>";
// Cria a coluna de localização
$coluna = $columnStart;
while( $coluna <= $columnEnd )
{
echo "<td align='center' style='background-color:#999; color:#FFF;'>" . $coluna . "</td>";
$coluna ++;
}
echo "</tr>";
$linha = $lineStart;
while( $linha <= $lineEnd )
{
// Cria a linha de localização
echo "<tr><td align='center' style='background-color:#999; color:#FFF; padding-right:15px; padding-left:15px;'>" . $linha . "</td>";
$color = ($linha%2) ? '#CCC' : '#FFF';
// Cria as coordenadas
$coluna = $columnStart;
while( $coluna <= $columnEnd && $coluna <= $linha )
{
echo "<td align='center' style='background-color:" . $color . "; padding-right:10px; padding-left:10px;'>";
echo $pascal[ $linha ][ $coluna ];
$coluna ++;
echo "</td>";
}
// Cria as coordenadas vazias
while( $coluna <= $columnEnd )
{
echo "<td align='center' style='background-color:#000; color:#fff;'>0</td>";
$coluna ++;
}
echo "</tr>";
$linha ++;
}
echo "</table>";
}
Bom, é isso aí... espero que seja de uso pra alguém por ai, nem que seja pra verificar o triangulo de vez em quando :)
Pergunta
LucasConstantino
Bom, galera... eu tava usando o Triângulo de Pascal pra coisas que não vem ao caso agora, e resolvi criar funções relacionadas ao bendito (ou maldito) triângulo. Eis aqui meu trabalho:
Bom, é isso aí... espero que seja de uso pra alguém por ai, nem que seja pra verificar o triangulo de vez em quando :)
Vlw!
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.