Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ju *-*

Triângulo de Pascal :)

Recommended Posts

Alguém pode me ajudar?

Tenho uma questão pra entregar, a lógica dá até pra entender, o problema é jogar no compilador ^^

 

-> Desenvolva um programa que imprima na saída 1 triângulo de Pascal de ordem n(n lido). O programa deve usar apenas um vetor e apenas um comando de repetição for;

 

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

 

http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mnemonic, não entregue respotas de mão beijada.

Não é costume do pessoal daqui fazer isso.

 

@on topic:

você sabe a definição de uma linha do triangulo de pascal?

 

linha n = C(0, n) ... C(n, n).

onde C(x, y) é o mesmo que "X combinações de Y"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mnemonic, não entregue respotas de mão beijada.

Não é costume do pessoal daqui fazer isso.

Eu entendo, e concordo totalmente com essa postura.

Mas no site que mandei tem toda explicação teórica por trás do algoritmo.

Tenho fé que o op vai precisar no mínimo ler a página antes de encontrar a resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao é só usar o fato de que cada linha é x11?

 

1:1

2:1x11=11

2:11x11=121

3:11x121=1331

4:11x1331=14641

...

 

só usar um for pra percorrer os vetores preenchendo os valores e imprimindo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

tuu

 

Muito legal essa, eu não conhecia!

Mas tem um problema...

 

enquanto os números da n-ésima linha do triangulo conterem apenas um algarismo, sabemos dividir...

 

linha 5 = 15101051

linha 6 = 1615201561

 

Não sabemos dividir os números

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra quê você acha que vai servir o vetor?

 

---------------------------------------

 

0: 1

1: 1 1

2: 1 2 1

3: 1 3 3 1

4: 1 4 6 4 1

5: 1 5 10 10 5 1

6: 1 6 15 20 15 6 1

7: 1 7 21 35 35 21 7 1

8: 1 8 28 56 70 56 28 8 1

9: 1 9 36 84 126 126 84 36 9 1

 

Isso daí não tem cara de ser potência de 11. 11^4=1 4 6 4 1, mas 11^5 = 1 6 10 5 1. Bem diferente dos valores reais.

 

Feito sem vetor:

 

#include <stdio.h>

int main() {
 int colunas,j;
 int anterior;

 int linha;
 do {
scanf("%d",&linha);
 } while (linha < 0);

 colunas = linha+1;
 anterior = 1;
 printf("%d ",anterior);

 for(j=1;j<colunas;j++) {
 anterior = anterior*(linha-j+1)/j;
 printf("%d ", anterior);
 }
 puts("");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tuu

 

Muito legal essa, eu não conhecia!

Mas tem um problema...

 

enquanto os números da n-ésima linha do triangulo conterem apenas um algarismo, sabemos dividir...

 

linha 5 = 15101051

linha 6 = 1615201561

 

Não sabemos dividir os números

=P você tem razao...

eu dei sorte e parei antes hehe...

mas eu lembrava que tinha alguma coisa haver...e tbm algo com binomios de newton XDD....apesar de nao lembrar o q....

Compartilhar este post


Link para o post
Compartilhar em outros sites

binomios de newton

Tem tudo a ver com o binómio de Newton, pela formula:

(a + B) ^n = C(0, n) * (a ^ n) * (b ^ 0) + C(1, n) * (a ^ (n-1)) * (b ^ 1) ... .... ...  C(n, n) * (a ^ 0) * (b ^ n)

E a n-ésima linha do triangulo de pascal pode ser obtida:

C(0, n)	C(1, n) ........  C(n ,n)

Encontrou alguma semelhança??

Vamos pegar por exemplo, o binómio (4+x)^4, e desenvolver, obteremos:

1*4^4 + 4*(4^3)*x + 6*(4^2)* (x^2) + 4*4*x^3 + 1*x^4

256 + 254x + 96(x^2) + 16(x^3) + x^4

E note que a linha 4 do triangulo é: "1 4 6 4 1"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu falei pro vitor que era enfiar uns ifs dentro do for, mas acho que não vão sacar como....

 

#include <stdio.h>

int main() {
 int colunas,j;
 int anterior;

 int linhas;
 do {
scanf("%d",&linhas);
 } while (linhas < 0);


 anterior = 1;
 printf("%d\n",anterior);

 if (linhas) {
int linha_atual = 1;
colunas = 2;

linha_atual = 1;
for(j=1;j<colunas && linha_atual <= linhas;) {

   if(j==1) printf("1 ");
   anterior = anterior*(linha_atual-j+1)/j;
   printf("%d ", anterior);
   j++;
   if (j == colunas) {
	 anterior = 1;
	 linha_atual++;
	 colunas = linha_atual+1;
	 j=1;
	 puts("");
   }
}

 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.