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:
// 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 :)
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.