• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lamuria

triangulo de pascal

7 mensagens neste tópico

alguém me sabe dizer uma maneira de fazer um triângulo de pascal sem ser com arrays bidimensionais?

obrigado pelas respostas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ].

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora