Necesito ayuda con un programa en c

Iniciado por jorgito19998, 20 Febrero 2018, 21:39 PM

0 Miembros y 1 Visitante están viendo este tema.

jorgito19998

Tengo que hacer un programa en c que imprima el triángulo de pascal pero no se como hacerlo. Lo he hecho con funciones pero me han dicho que lo más fácil es sin funciones y con matrices. Que alguien me pase el código con esas características, lo agradecería muchísimo. Este es el triángulo de Pascal: https://es.wikipedia.org/wiki/Tri%C3%A1ngulo_de_Pascal

-Esto es lo que he hecho:

#include <stdio.h>

int factorial(int n)
{
   if(n<2)
       return 1;
   else
       return n * factorial(n-1);
}

int combinacion(int n, int r)
{
   if(r==1)
       return n;
   else
   {
       if(n==r)
           return 1;
       else
           return factorial(n) / (factorial(r) * factorial(n - r));
   }
}

int main()
{
   for(int i=0; i<=6; i++)
   {
       for(int ii=0; ii<=i; ii++){
           printf("%d  ", combinacion(i, ii));
}
int x=1;
int y=1;
if (x==y){
         printf("\n");
       y=y+2;
       x=1;
} else x++;
   }

   return 0;
}



· Los códigos deben ir en etiquetas GeSHi
-Engel Lex

dijsktra

#1
Primero va una muestra del cálculo del trangulo de Pascal de base N=10

10

    1     1     1     1     1     1     1     1     1     1
    1     2     3     4     5     6     7     8     9
    1     3     6    10    15    21    28    36
    1     4    10    20    35    56    84
    1     5    15    35    70   126
    1     6    21    56   126
    1     7    28    84
    1     8    36
    1     9
    1


Y ahora uno de N=20. Quizás puedas no apreciarla dependiendo de la distorsión que pueda ocasionar la resolución de carcateres.

20
    1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1
    1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19
    1     3     6    10    15    21    28    36    45    55    66    78    91   105   120   136   153   171
    1     4    10    20    35    56    84   120   165   220   286   364   455   560   680   816   969
    1     5    15    35    70   126   210   330   495   715  1001  1365  1820  2380  3060  3876
    1     6    21    56   126   252   462   792  1287  2002  3003  4368  6188  8568 11628
    1     7    28    84   210   462   924  1716  3003  5005  8008 12376 18564 27132
    1     8    36   120   330   792  1716  3432  6435 11440 19448 31824 50388
    1     9    45   165   495  1287  3003  6435 12870 24310 43758 75582
    1    10    55   220   715  2002  5005 11440 24310 48620 92378
    1    11    66   286  1001  3003  8008 19448 43758 92378
    1    12    78   364  1365  4368 12376 31824 75582
    1    13    91   455  1820  6188 18564 50388
    1    14   105   560  2380  8568 27132
    1    15   120   680  3060 11628
    1    16   136   816  3876
    1    17   153   969
    1    18   171
    1    19
    1


Puedes computar tritangulos de base hasta N=30, pero a no ser que tengas una resolucion suficiente en el terminal de caracteres por pantalla, las figuras saldran sin formatear, y el efecto del trangulo se puede perder... Cuidado también con N altos porque los enteros se pueden salir de rango y acabar en negativos... usar unsigned long....


Y este es el código que lo resuelve... Ah!, empecé a hacerlo en C++, pero con pocos cambios puedes pasarlo a C.

#include <iostream>  // cin, cout
#include <iomanip>  // setw

using namespace std;

#define MAX 1000

// P : N > 0
// Q : \forall ii,jj : 0 <= ii,jj < N : M[ii][jj]=C(ii+1,jj+1)
// I : i > 0 -> \forall jj : 0 <= jj < N : M[i-1][jj]=C(i-1,jj)

// Inner loop
// I2 : \forall jj : 0 <= jj < j : M[i][jj]=C(i+1,jj+1)
// and
// acum = i>0 -> acum= \sum k:0<=k<j: M(i-1,k)

// where C(i,j) is combinatory number
//  C(1,j) = 1
//  C(i+1,j) = \sum k:1<=k<=j: C(i,k)

void pascal(int M[][MAX], const int N)
{
 int acum;
 int i,j;
 for ( i=0; i<N ; i++)
   for ( j=acum=0; j< N-i ; j++)
     if (i==0)
M[i][j]= 1;
     else
{
 acum += M[i-1][j];
 M[i][j] = acum;
}
 return;
}

int main(int argc, char **args)
{
 int N;
 int M[MAX][MAX];
 cin >> N ;
 pascal(M,N);
 for (int i=0; i < N ; i++)
   {
     for (int j=0; j < N-i ; j++)
cout << setw(5) << M[i][j] << " " ;
     cout << endl;
   }
 return 0;
}

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)