domingo, 19 de mayo de 2013

Pirámide invertida en lenguaje C (reprogramado)

Tal  como indicaba en el post anterior (http://pai-torneiros.blogspot.com.es/2013/05/piramide-de-asteriscos-invertida-en.html) también es posible enfrentarse a la problemática de la pirámide invertida, intentando resolver el problema de la pirámide invertida, en lugar de apañar el de la pirámide normal.


Para resolver este problema, es preciso analizar como varían el número de espacios y asteriscos a imprimir con respecto al número de línea que se está imprimiendo.

Analizando la situación para un caso sencillo, se puede obtener la relación entre el número de espacios y asteriscos a imprimir y la línea que se está imprimiendo.



En este caso la relación del número de espacios parece evidente, es igual al número de línea menos uno.

En cuanto al número de asteriscos se puede calcular mediante la siguiente fórmula:
(Total de lineas X 2) - (número de espacios X 2) - 1

Para el caso del ejemplo resultará:
línea 1 - (3 X 2) - (0 X 2) - 1 = 6 - 0 - 1 = 5
línea 2 - (3 X 2) - (1 X 2) - 1 = 6 - 2 - 1 = 3
línea 3 - (3 X 2) - (2 X 2) - 1 = 6 - 4 - 1 = 1

Aplicando estos conocimientos se obtiene el código que se puede ver a continuación.

Enlace a compilador web Codepad
http://codepad.org/fYOsqpfe


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

int main()
{
    int total_lineas = 10, nlinea = 1, 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 < (nlinea - 1))
            {
                printf(" ");
                nesp++;
            }

            while (nast < ((total_lineas * 2) - (nesp * 2) - 1))
            {
                printf("*");
                nast++;
            }

    nesp = 0;
    nast = 0;
    nlinea++;
    printf("\n");
    }
    return 0;
}

2 comentarios:

  1. disculpa, si lo quiero imprimir solo a la izquiera, ¿como le hago?

    ResponderEliminar
  2. Buenas tardes lo que entiendo es que deseas hacer una especie de triángulo rectángulo pegado al lado izquierdo de la pantalla.

    Algo como esto:
    *****
    ****
    ***
    **
    *

    Si volvemos a hacer la tabla veremos que el número de asteriscos siempre será igual al número de líneas expresado de forma decreciente y no existen espacios.

    Por lo tanto es suficiente eliminar todas las referencias en el código que tienen que ver con los espacios.

    También es preciso modificar la condición del bucle que controla la cantidad de asteriscos que se escriben en cada línea, ya que esa cantidad ahora se calculará con la fórmula nast < (total_lineas - nlinea + 1) de la siguiente manera.

    #include
    #include

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

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

    while (nlinea <= total_lineas)
    {
    while (nast < (total_lineas - nlinea + 1))
    {
    printf("*");
    nast++;
    }

    nast = 0;
    nlinea++;
    printf("\n");
    }
    return 0;
    }

    Siendo el resultado en la consola para indicar 5 líneas el mostrado a continuación:

    Triangulo de asteriscos:
    Indique cuantos pisos desea que tenga el triangulo (Maximo 40 pisos): 5
    *****
    ****
    ***
    **
    *

    Press any key to continue.


    Espero que te sirva.


    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...