Dibujar Triángulo de Tartaglia extensible

Abel Naya

Este programa calcula el triangulo sumando los elementos de las filas,
no con factoriales. Con factoriales existe otro:
https://programacion1z.wordpress.com/2011/12/30/triangulo-de-pascaltartaglia/
/*

Programa que dibuja el triángulo de tartaglia.
Debido a la pequeñez de la pantalla se 'deforma' para filas mayores que 13

He intentado explicar cada paso, pero puede ser tedioso entenderlo bien.

*/

#include <iostream> //para cout y cin
#include <math.h> //para pow
#include <cstdlib> //para system

#define max 13 //para pantallas mas grandes, puedes cambiar el valor

using namespace std;


int numero = 1,filas=0; //variables globales


int main()
{

  int comp,comp2; //declaracion de variables

//si no te gusta usar goto, quitalo que funcionara igual
conunomas:

  comp2=pow(10,numero-1); //numero que sirve para el computo de cifras de un numero



  while(filas<=0 || filas>max) //Comprueba si la variable tiene valor y si este es correcto
    {
      cout<< "Cuantos niveles quieres?" << endl;
      cin>>filas;                                     //entrada de datos
      cout<<endl;
    }


  int nivel[max]= {1};                        //cadena que contendra los numeros





  for(int x=1; x<=filas; ++x) //para cada fila contando desde 1 para la primera
    {
      int espacios = (filas-x)*numero; //calculo de espacios necesarios al principio
      for(int v1=0; v1<espacios; ++v1){cout<<" ";}//escribe espacios delante para empezar a formar el triangulo

      for(int y=0; y<x; ++y) //en la fila x necesito colocar x numeros (la primera fila contiene uno: 1 )
        {
          comp = nivel[y]; //calculos con el numero
          if(comp>=comp2*10) //si algun numero se pasa de digitos, se reinicia el programa con 1 digito mas por numero
            {                //Se que no es el mejor metodo, pero me vale y es sencillo
              system("cls"); //borra la pantalla
              cout<<"Cuantos niveles quieres?"<<endl<<filas<<endl<<endl; //para que no se note el borrado de pantalla ;)
              ++numero;
              goto conunomas; //con goto; si lo quitas, lo que viene a continuación equivale a lo mismo
              main(); //recursividad
              return 0; // evita que el programa siga
            }
          while(comp<comp2){cout<<"0";comp = comp*10;}//Comprueba cuantos digitos tiene el numero y le coloca ceros delante para rellenar

          cout<< nivel[y] ;  //escribe el numero

          for(int v2=0; v2<numero; ++v2)cout<<" ";//escribe tantos espacios como digitos para formar triangulo

        }

      cout<< endl; //siguiente linea

      for(int z=x-1; z>0; --z) //crea la siguente linea en la variable nivel[]
        {
          nivel[z] = nivel[z]+nivel[z-1] ; //a cada valor le sumo el anterior (empezando por el final)
        }
      nivel[ x ] = 1 ; //valor que hay que añadir
    }




  system("PAUSE");


}

Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s