• Sábado 14 de Diciembre de 2024, 19:26

Autor Tema:  triangulo de pascal  (Leído 2722 veces)

punkpelao

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
triangulo de pascal
« en: Domingo 28 de Septiembre de 2008, 14:00 »
0
Hola    :hola:  desde hace dias que llevo programando el triangulo :hitcomp:  pero no me sale con funciones  nesecito que el usuario ingrese la altura  y nada mas lo que tengo es esto:

      
Código: Text
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6.  
  7. int main(){
  8.  
  9.     int n, x;
  10.     int i, j;
  11.     int **matrix;
  12.     int activo;
  13.  
  14.         clrscr();
  15.     printf(" Numero de escalones del triangulo: ");
  16.     scanf("%d", &n);
  17.  
  18.     printf("nEl numero de iteraciones es: %dn", n);
  19.  
  20.     matrix = (int **) malloc(n*sizeof(int*));
  21.  
  22.     for(i=0; i<n; i++){
  23.         matrix[i] = (int *)malloc((i+1)*sizeof(int));
  24.     }
  25.  
  26.    
  27.     for(i=0; i<n; i++){
  28.         for(j=0; j<=i; j++){
  29.             matrix[i][j]=0;
  30.         }
  31.     }
  32.  
  33.     for(i=0; i<n; i++){
  34.         for(j=0; j<=i; j++){
  35.             if(j==0 || j==i){
  36.                 matrix[i][j]=1;
  37.             }else{
  38.                 matrix[i][j]=matrix[i-1][j-1]+matrix[i-1][j];
  39.             }
  40.         }
  41.     }
  42.  
  43.  
  44.     printf("n");
  45.     for(i=0; i<n; i++){
  46.         for(j=0; j<=i; j++){
  47.             if(activo){
  48.                 for(x=0; x<n-i+1; x++){
  49.                     printf("  ");
  50.                 }
  51.             }
  52.             activo=0;
  53.             printf(" %d  ", matrix[i][j]);
  54.         }
  55.         activo=1;
  56.         printf("n");
  57.     }
  58.  
  59.     getch();
  60.     return(0);
  61. }
  62.  
  63.  
  64.  
  65.  

espero que me ayuden a crear las funciones ya que recien estoy aprendiendo a implementarlas  :ouch: bye

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: triangulo de pascal
« Respuesta #1 en: Lunes 29 de Septiembre de 2008, 01:26 »
0
hola amigo!

buen trabajo!

mira... te lo pase a funciones para que veas como funcionan:


Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int altura(void){
  5.     int n;
  6.    
  7.     printf(" Numero de escalones del triangulo: ");
  8.     scanf("%d", &n);
  9.     return n;
  10. }
  11.  
  12. int **allocaMat(int n){
  13.     int i;
  14.     int **matrix;
  15.    
  16.     matrix = (int **) malloc(n*sizeof(int*));
  17.     for(i=0; i<n; i++)
  18.         matrix[i] = (int *)malloc((i+1)*sizeof(int));
  19.     return matrix;
  20. }
  21.  
  22. void creaTrianguloEnMatriz(int **matrix,int n){
  23.     int i,j;
  24.    
  25.     for(i=0; i<n; i++)
  26.         for(j=0; j<=i; j++)
  27.             matrix[i][j]=0;
  28.  
  29.     for(i=0; i<n; i++)
  30.         for(j=0; j<=i; j++)
  31.             if(j==0 || j==i)
  32.                 matrix[i][j]=1;
  33.             else
  34.                 matrix[i][j]=matrix[i-1][j-1]+matrix[i-1][j];   
  35. }
  36.  
  37. void imprimeMat(int **matrix, int n){
  38.     int i, j, activo, x;
  39.    
  40.     for(i=0; i<n; i++){
  41.         for(j=0; j<=i; j++){
  42.             if(activo)
  43.                 for(x=0; x<n-i+1; x++)
  44.                     printf("  ");
  45.             activo=0;
  46.             printf(" %d  ", matrix[i][j]);
  47.         }
  48.         activo=1;
  49.         printf("n");
  50.     }   
  51. }
  52.  
  53. int main(){
  54.     int **matrix, n;
  55.    
  56.    
  57.     n = altura();
  58.     matrix = allocaMat(n);
  59.     
  60.     printf("nEl numero de iteraciones es: %dn", n);
  61.     
  62.     creaTrianguloEnMatriz(matrix,n);
  63.     
  64.     printf("n");
  65.  
  66.     imprimeMat(matrix,n);
  67.    
  68.     return(0);
  69. }
  70.  
  71.  


saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: triangulo de pascal
« Respuesta #2 en: Lunes 29 de Septiembre de 2008, 12:31 »
0
Una preguntita Rombus...

Código: C
  1.  
  2. matrix = (int **) malloc(n*sizeof(int*));
  3.     for(i=0; i<n; i++)
  4.         matrix[i] = (int *)malloc((i+1)*sizeof(int));
  5.  
  6.  

¿Por qué el primer malloc? Con int **matrix[n]; ya reservas el espacio sin necesidad de malloc().

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: triangulo de pascal
« Respuesta #3 en: Lunes 29 de Septiembre de 2008, 15:31 »
0
pero si lo hago con int **matrix[n] dentro de la funcion no podria hacer el return matrix...
o si?


ahora hago un programa de prueba para sacarme esa duda ;)



jaja, sabia que no lo habia hecho por inercia... ese problema lo tube hasta artarme el año pasado  :lol:

dentro de una funcion que devuelve una matriz, la matriz debe ser dinamica para que viva mas que la propia funcion, de lo contrario estaria retornando una matriz local, y el programa no andaria como lo esperado. :beer:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: triangulo de pascal
« Respuesta #4 en: Lunes 29 de Septiembre de 2008, 15:42 »
0
Sí sí, cierto, pero si lo que pretendes es devolver la matriz, entonces hay que pasarla por parámetro. Eso de crearla dentro de una función y sacarla de su contexto es considerado mala programación.

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: triangulo de pascal
« Respuesta #5 en: Lunes 29 de Septiembre de 2008, 15:45 »
0
Cita de: "m0skit0"
Sí sí, cierto, pero si lo que pretendes es devolver la matriz, entonces hay que pasarla por parámetro. Eso de crearla dentro de una función y sacarla de su contexto es considerado mala programación.

:O no lo sabia, buen dato

m0skit0, si tienes tiempo, me puedes dar una mano con este problema?  viewtopic.php?f=18&t=36910