Anuncios Google

Sample | C | Pirámide de números

hola a todos. me dedicaré este puente ha practicar un poco con C para luego retomar C++ con una base más firme. a lo largo de este puente iré colgando en el foro de programación una serie de samples sobre algunos programas de C que sé que pueden ayudar a muchos principiantes.

debeís de tener en cuenta que estos programas solo compilarán tal cual si los compilais en un sistema linux (yo utilizo backtrack 5 r2 pero os servirá cualquiera). de todos modos es sencillísimo portarlos a winx así que no hay ningún problema.

bueno, sin más charla empiezo con el primer sample de la serie:

 

pirámide de números

el objetivo del este programa es que el usuario introduzca una cantidad de filas que debe tener la pirámide. la pirámide debe ser del tipo:

1

1 2

1 2 3

1 2 3 4

...

además, tras dibujar la pirámide se debe preguntar al usuario si desea pintar otra pirámide. en caso negativo salir del programa y en caso afirmativo volber a dibujar otra pirámide.

/*
* Pirámide de números
* 
* Autor: tooxic00
* 
* Fecha: 27 de Abril de 2012
*/
 
#include <stdio.h>
 
int main()
{
  int k, i, j;
  char opcion;
 
  printf("Introduce el número de filas que tendrá la pirámide: ");
  scanf("%i",&k);
  getchar();
 
  printf("\n");
  for(i=1;i<=k;i++)
  {
    for(j=1;j<=i;j++)
    {
      printf("%i ",j);
    }
    printf("\n");
  }
 
  printf("\n");
  printf("¿Quieres construir otra pirámide?(S/n): ");
  scanf("%c",&opcion);
  getchar();
  if(opcion=='s' || opcion=='S')
  {
    main();
  }
 
  return 0;
}

os adjunto una imágen del programa ejecutandose:

salu2


Editado: El límite del ancho de las imágenes es de 500 pixeles, sobrepasar este límite puede descolocar la web e incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| AORV



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de User170294

Os recomiendo que os paseís por aquí:

Si quiereis ver un ejemplo un poco más desarrollado y avanzado pero que se base en el mismo concepto programado en C++ visitar esto: http://www.scenebeta.com/node/21313

Saludos ^-^


Imagen de joserc87

Uff

El código está muy bien por ser breve y tal, pero eso de llamar a la función main recursivamente está MUY FEO. Por lo general usar la recursividad conlleva una pérdida de eficiencia. En este caso, si usases el programa muchas veces (dandole muchas veces a que quieres construir otra pirámide) acabará petando la pila, mientras que si usases un simple while no pasaría nada.

Como regla general la función main NUNCA debe ser recursiva ya que ahí es donde ván las inicializaciones y demás. Si vas a hacer recursividad, crea otra función.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Almamu

No está mal para estar

No está mal para estar empezando, de todas formas te dejo un código un poco más organizado y facil de leer.

/*
 *    Pirámide de números
 *    Revisión 2 ByAlmamu ;)
 */
#include <stdio.h>
 
void DibujarPiramide()
{
    int filas = 0;
    printf( "Introduce el número de filas que tendrá la pirámide: " );
    scanf( "%i", &filas );
	printf( "\n" );
 
    int i = 0, j = 0;
    for( i = 1; i <= filas; i ++ )
    {
        for( j = 1; j <= i; j ++ ) printf( "%i ", j );
        printf( "\n" );
    }
}
 
int DibujarDeNuevo()
{
    /* Paramos la ejecucion un poco ya que las pulsaciones se detectan muy rapido */
    getchar();
    char opcion = 'n';
 
    printf( "¿Quieres construir otra pirámide?(S/n): " );
    scanf( "%c", &opcion );
 
    /*
     * Se puede simplificar así: return tolower(opcion) == 's';
     * pero el C estandar parece no tenerlo
     */
    return (opcion == 'S') || (opcion == 's');
}
 
int main(int argc, char** argv)
{
    /*
     * Podemos usar argc y argv para cojer los comandos enviados en la línea de commandos al programa
     * Por ejemplo: piramide.exe --filas 5
     */
    while( 1 )
    {
        DibujarPiramide();
        if (DibujarDeNuevo() != 1)
        {
            break;
        }
    }
 
    return 1;
}

Compila perfectamente en windows, y si no me equivoco debería de hacerlo en Linux así, tal cual, lo he probado en Visual C++ con éxito. He tratado de usar sólo estándar de C, por lo que debería de compilar en casi cualquier compilador.

 


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.