Jump to content

triangulo de pascal


lamuria
 Share

Recommended Posts

Usa um do...while. Sabendo que um número do triangulo é representado por um número combinatorio (n sobre m) imprimes esse número combinatorio dando espaço entre cada impressão desses números. Dessa maneira consegues imprimir o triangulo. Exemplo de código:

    public void imprimirTriangulo()
    {
        int contadorFilas = 0;
        int cuantosEspaciosVacios = filas - 1;
        do
        {
            escribirTerminoVacio(cuantosEspaciosVacios);
            
            for(int contadorColumna = 0; contadorColumna <= contadorFilas; contadorColumna ++)
            {
                nc.setN(contadorFilas);
                nc.setM(contadorColumna);
                System.out.print(nc.obtenerCombinatorio() + "\t\t");
            }
            System.out.print("\n");
            
            //contadores
            cuantosEspaciosVacios --;
            contadorFilas ++;
        }
        while(contadorFilas <= (filas - 1));

private void escribirTerminoVacio(int cuantos)
    {
        for(int contador = 1; contador <= cuantos; contador ++)
        {
            System.out.print("\t");
        }
    }

PD: nc é uma clase que modela um número combinatorio.

Link to comment
Share on other sites

Uma possibilidade é calculares o valor de cada posição do triângulo, como o KarlMTC, e aí nem precisas de armazenar os valores. No entanto, esta solução é lenta, e depressas tens overflows.

Podes também ir calculando uma linha de cada vez, e nesse caso só precisas de um array de dimensão igual ao número de linhas que queres calcular. Tens é que ter o cuidado de começar a calcular os valores da nova linha a partir da parte do array onde tens posições livres. Por exemplos, se armazenares os valores da linha n nas n primeiras posições do array, deves começar a calcular os valores pelo fim do array. Na posição n vais colocar o elemento 1, na posição 0 vai ficar sempre o 1, e nas posição i entre 1 e n-1, vais fazer array[ i ]=array[ i ]+array[ i-1 ].

Link to comment
Share on other sites

import java.util.ArrayList;

public class TrianguloPascal {

public static void main(String[] args)
{		
	TrianguloPascal.criaTriangulo(10);
}

private static void criaTriangulo(int nivel)
{
	ArrayList<Integer> ultimaLinha = new ArrayList<Integer>();

	if(nivel>0)
	{
		System.out.println("1");
	}

	if(nivel>1)
	{
		System.out.println("1 1");
	}

	if(nivel>2)
	{
		ultimaLinha.add(1);
		ultimaLinha.add(1);

		for(int i=3; i<=nivel; i++)
		{
			ultimaLinha = preencheProximaLinha(ultimaLinha, i);
		}
	}
}

private static ArrayList<Integer> preencheProximaLinha(ArrayList<Integer> linha, double num_linha) {

	ArrayList<Integer> linhaActual = new ArrayList<Integer>();

	linhaActual.add(new Integer(1));
	System.out.print("1");

	int i;
	double limit = Math.ceil(num_linha/2);

	for(i=1; i<limit; i++) {
		linhaActual.add(linha.get(i-1)+linha.get(i));
		System.out.print(" " + (linha.get(i-1)+linha.get(i)));
	}

	i = linhaActual.size()-1;

	if(num_linha%2 != 0) {
		i = i-1;
	}

	for(;i>=0;i--)
	{
		linhaActual.add(linhaActual.get(i));
		System.out.print(" " + linhaActual.get(i));
	}

	System.out.println();

	return linhaActual;
}

}

output:

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

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

1 9 36 84 126 126 84 36 9 1

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.