viernes, 5 de agosto de 2011

Pirámide de asteriscos

Código del ejemplo de la pirámide de asteriscos.

Enlace a compilador web CodePad
http://codepad.org/NAkAOpSM




#include <stdio.h>
#include <stdlib.h>

int main()
{

    int total_lineas = 10, nlinea = 0, nast = 0, nesp = 0;

    printf ("Piramide de asteriscos:\n");
    printf ("Indique cuantos pisos desea que tenga la piramide (Maximo 40 pisos): ");
    scanf("%d", &total_lineas);

    while (nlinea <= total_lineas)
    {
            while (nesp < total_lineas - nlinea)
            {
                printf(" ");
                nesp++;
            }
            while (nast < ((nlinea * 2) - 1))
            {
                printf("*");
                nast++;
            }
    nesp = 0;
    nast = 0;
    nlinea++;
    printf("\n");
    }
    return 0;
}

7 comentarios:

  1. Pero me podrias explicar esto porfavor

    ResponderEliminar
  2. Buenos días:

    Si te fijas un poco, existe una columna en la que en todas las filas aparece un asterisco.

    A partir de esta columna, para cada nueva fila se añaden dos asteriscos, uno a cada lado.

    De tal manera que la última fila, la base de la pirámide, tiene la cantidad de asteriscos necesarios para llegar hasta el inicio de la fila.

    Para conseguir este efecto, se escriben tantos espacios en blanco como sean necesarios, y tantos asteriscos como sea preciso.

    Supongamos un caso concreto, una pirámide de cuatro pisos (Como la que muestro a continuación).

    *
    ***
    *****
    *******

    Para que quede algo más claro representaré los espacios por guiones (-)

    ---*
    --***
    -*****
    *******

    En este caso para que la fila de la base sea completa, es preciso ir añadiendo dos asteriscos por cada piso.

    Para hacer el efecto de pirámide, en vez de escribir solo los asteriscos ( con lo que obtendríamos un triángulo rectángulo) vamos escribiendo un espacio menos por cada piso y dos asteriscos más.

    Primer piso (piso superior)
    3 espacios + 1 asterisco
    ---*

    Segundo piso (se resta un espacio y se añaden dos asteriscos)
    2 espacios + 3 asteriscos
    --***

    Tercer piso (se resta un espacio y se añaden dos asteriscos)
    1 espacio + 5 asteriscos
    -*****

    Cuarto piso - Base (se resta un espacio y se añaden dos asteriscos)
    0 espacios + 7 asteriscos

    *******

    Para generalizar el problema es preciso poder saber cuantos espacios y asteriscos es preciso escribir por cada fila.

    Para el caso de n filas, en la primera fila (fila superior) habrá que escribir n – 1 espacios, y 1 asteriscos.

    Por cada fila que se incremente habrá que escribir n – número de fila espacios, y (2*n) -1 asteriscos.

    Para el caso de 4 pisos queda así:

    Piso Espacios (total_lineas – numero fila) Asteriscos (2*numero fila) - 1
    1 4 – 1 = 3 (2 * 1) – 1 = 2 – 1 = 1
    2 4 – 2 = 2 (2 * 2) – 1 = 4 – 1 = 3
    3 4 – 3 = 1 (2 * 3) – 1 = 6 – 1 = 5
    4 4 – 4 = 0 (2 * 4) – 1 = 8 – 1 = 7

    En el código nesp representa el número de espacios a escribir en cada fila y nast el número de asteriscos.

    Se realiza un bucle tantas veces como líneas se indiquen por teclado
    while (nlinea <= total_lineas)

    Y en cada iteración del bucle, para cada línea se ejecuta un bucle, que escribe los espacios necesarios de uno en uno:
    while (nesp < total_lineas - nlinea)
    {
    printf(" ");
    nesp++;
    }

    Y otro bucle que hace lo mismo para los asteriscos:
    while (nast < ((nlinea * 2) - 1))
    {
    printf("*");
    nast++;
    }

    Espero que con esta explicación haya sido suficiente, en caso contrario, no dudes en pedirme que lo aclare más.

    Un saludo.

    ResponderEliminar
  3. Disculpa y como lo modificarias para que quedara solamente con dos "for"

    ResponderEliminar
  4. Una posible solución, sustituyendo los bucles while por for, sería la siguiente:

    int main()
    {
    int total_lineas = 10, nlinea = 0, nast = 0, nesp = 0;

    printf ("Piramide de asteriscos:\n");
    printf ("Indique cuantos pisos desea que tenga la piramide (Maximo 40 pisos): ");
    scanf("%d", &total_lineas);


    for (nlinea=0; nlinea <= total_lineas; nlinea++)
    {
    for (nesp = 0; nesp < total_lineas - nlinea; nesp++)
    {
    printf(" ");
    }

    for (nast = 0; nast < ((nlinea * 2) - 1); nast++)
    {
    printf("*");
    }

    printf("\n");
    }

    return 0;
    }

    ResponderEliminar
  5. Como se tendría que hacer el programa para voltear la pirámide hacia abajo?

    ResponderEliminar
  6. hola me ayudarías con este ejercicio.. Crear un programa en lenguaje C que muestre por pantalla una pirámide invertida de asteriscos. Ejemplo:

    *****

    ***

    *

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...