Triângulo de Pascal e a linguagem C

Quando meu professor de matemática (professor, doutor Pedro Grosso) mostrou a sala sobre o triângulo de pascal (que, segundo algumas pesquisas que fiz, não é exatamente de pascal) achei muito legal e interessante.

Tá, na verdade achei legal não o triângulo, mas o fato de um desocupado fiadamãe ter ficado fazendo números em forma de pirâmide e no final ser reconhecido mundialmente.

omg!

Podemos fazê-lo de duas maneiras. Ou você vai alegremente colocando 1 no topo e nas laterais, realizando a soma se tiver números acima, ou fazendo a formula da combinatória.

Detalhe que a primeira linha não é 1, é 0. A primeira coluna também é 0.

Muito bonito, é intimamente ligado ao binómio de newton, MAS E DAÍ?

Pô, bate o olho no esquema, manow. Tem uma sequencia lógica, podemos criar um programinha pra printar automaticamente as linhas do triângulo =D. E foi isso que o professor pediu.

Acho que devo muito ao professor por ter pedido isso, pois me fez parar para pensar antes de sair programando. Foi nisso também que percebi ser muitas vezes necessário jogar o que temos num papel, analisar, e só depois programar.

A maior parte é fácil e até já temos outros códigos prontos na web. Quando lidamos com linhas e colunas, basicamente usamos dois laços de repetição. Um gera as linhas, e o outro as colunas nessas linhas.

O numero correto das linhas é mais fácil de se encontrar usando a combinatório, já que ensinar o computador a “olhar as linhas anteriores” e fazer uma soma entre os dois numeros seria bem complexo (precisaríamos salvar todos os resultados anteriores em vetores, além de varre-los e somá-los, por ex).

Até ai belezinha. Mas e pra alinhar a desgraça?

What?!

What?!

Joguei o triangulo num papelzinho de loto antigo e fui colocando quadrados para cada espaço do triangulo. Notei que na ultima linha não tinha nenhum. Na penultima um. Na ante-penultima dois, e assim por diante.

Perceba que a primeira linha tem, de espaços, a quantidade de linhas!

A segunda tem a quantidade de linhas, menos um. O decremento ocorre em função da linha que estamos, portanto, o alinhamento do triangulo é dado por total de linhas – numero da linha atual.

Simples né? Demorou um bocado para eu entender isso. Mas pelo menos aprendi a importância de esboços e anotações, elas clarificam o pensamento.

Por fim, o código da versão 2.0 (que tive de fazer de novo, no segundo semestre xD por questão de orgulho, não olhei no fonte e fiz do zero XDD ficou mais organizado dessa vez)

#include
#include

int fatorial(int n);
int comb(int a, int b);
void tab(int n);

int main(int argc, char *argv[])
{
//para deixar genérico, precisaríamos perguntar o user
//o valor de num
int i=0,i2=0,num=8;

for(i = 0; i <= num; i++) { //inicio de linha //tabulamos nela, é o numero total de linhas - o num da linha atual tab(num-i); for(i2 = 0; i2 <= i; i2++) { //usamos 2 pois só vamos até 2 digitos printf("%2d  ",comb(i,i2)); } //fim da linha printf("\n"); } getch(); return 0; } void tab(int n) { int i=0; for(i=0; i <= n; i++) printf("  "); } int fatorial(int n) { if(n == 0) return 1; return (n*fatorial(n-1)); } int comb(int a, int b) { //s2 return complexos //C(a,b) //fat(a) / (fat(b) * fat(a-b)) return (fatorial(a) / (fatorial(b) * fatorial(a-b))); } [/sourcecode] Cya! Que seja útil aos próximos sistemeiros da informática e programadores desafiados.

Anúncios