lamuria Posted November 15, 2009 at 03:26 PM Report Share #296310 Posted November 15, 2009 at 03:26 PM alguém me sabe dizer uma maneira de fazer um triângulo de pascal sem ser com arrays bidimensionais? obrigado pelas respostas Link to comment Share on other sites More sharing options...
KarlMTC Posted November 15, 2009 at 03:32 PM Report Share #296313 Posted November 15, 2009 at 03:32 PM Com do...while por exemplo... Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 15, 2009 at 03:54 PM Report Share #296315 Posted November 15, 2009 at 03:54 PM Qual é o objectivo? Armazenar os valor? Imprimir no ecrã? Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
lamuria Posted November 15, 2009 at 04:18 PM Author Report Share #296322 Posted November 15, 2009 at 04:18 PM imprimir no ecrã Link to comment Share on other sites More sharing options...
KarlMTC Posted November 15, 2009 at 04:27 PM Report Share #296325 Posted November 15, 2009 at 04:27 PM 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 More sharing options...
Rui Carlos Posted November 15, 2009 at 04:54 PM Report Share #296330 Posted November 15, 2009 at 04:54 PM 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 ]. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
jarsantos Posted November 19, 2009 at 01:10 AM Report Share #296851 Posted November 19, 2009 at 01:10 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now