Язык Си: рисуем пирамидку из Mario


Любопытная задачка для новичков из CS50 (Гарвард).

Задача: нарисовать пирамидку из игры Марио (mario-less.c) при помощи символов # (решетка или хэш). Пользователя спрашивают: «Из скольких блоков сделать пирамиду?», он вводит число и пирамидка рисуется, с выравниванием по правому краю, вот так:

       #
      ##
     ###
    ####
   #####
  ######
 #######

Решение Игроглаза:

#include <stdio.h>

int main(void)
{

    int height = 0;
    int newline;
    int hash;
    int dot;

    printf("Enter height of pyramid. ");

    do
    {
        printf("It must be a positive integer:\n");
        scanf("%d", &height);
        while (getchar() != '\n') ; // clear buffer (in case of 'a')
    }
    while (height <= 0);

    for (newline = 1; newline <= height; newline++)
    {
        for (dot = 0; height - newline > dot; dot++)
            printf(" ");

        for (hash = 1; hash <= newline; hash++)
            printf("#");

        printf("\n");
    }

    getchar();
    getchar();
    return 0;
}

Всем привет, это еще одно решение (Штукенция):

#include <cs50.h>
#include <stdio.h>

int main(void)

{
    int n;
    do
    {
        n = get_int("Type number from 1 to 8\n");
    }
    while (n < 1 || n > 8);
    printf("Your number is:%i\n",n);
    int i;
    int r;
    int p;
    for (i=0; i<n; i++)
    {
        for (p=0; p<=(n-i); p++)
            {
                printf(" ");

            }
        for (r=0; r<=i; r++)
        {
            printf("#");
        }

    printf("\n");
    }

}

Так выглядит запуск программы:

Второй, более сложный (на взгляд создателей CS50) вариант — сделать пирамиду зеркальной (mario-more.c):

       #  #
      ##  ##
     ###  ###
    ####  ####
   #####  #####
  ######  ######
 #######  #######
########  ########

Его уже сделать сильно проще: перестановкой порядка кода из первой пирамиды:

#include <stdio.h>

int main(void)
{

    int height = 0;
    int newline;
    int hash;
    int dot;

    printf("Enter height of pyramid. ");

    do
    {
        printf("It must be a positive integer:\n");
        scanf("%d", &height);
        while (getchar() != '\n') ; // clear buffer (in case of 'a')
    }
    while (height <= 0);

    for (newline = 1; newline <= height; newline++)
    {
        for (dot = 0; height - newline > dot; dot++)
            printf(" ");

        for (hash = 1; hash <= newline; hash++)
            printf("#");

        printf("  ");

        for (hash = 1; hash <= newline; hash++)
            printf("#");

        printf("\n");
    }

    getchar();
    getchar();
    return 0;
}

Еще одно решение второго более сложного задания «зеркальная пирамидка» (Штукенция):

#include <cs50.h>
#include <stdio.h>

int main(void)

{
    int n;
    do
    {
        n = get_int("Type number from 1 to 8\n");
    }
    while (n < 1 || n > 8);
    printf("Your number is: %i\n",n);
    int i;
    int r;
    int p;
    for (i=0; i<n; i++)
    {
        for (p=0; p<=(n-i); p++)
        {
            printf(" ");
        }
        for (r=0; r<=i; r++)
        {
            printf("#");
        }
        printf("  ");
        for (r=0; r<=i; r++)
        {
            printf("#");
        }

    printf("\n");
    }

}

Так выглядит запуск программы:

После проверки багов я обновила свой код простой пирамидки:

#include <cs50.h>
#include <stdio.h>

// Draw pyramid with hashtags

int main(void)
{
    int n; // how big is pyramid

    do
    {
        n = get_int("Type number from 1 to 8\n"); // get number of # from 1 to 8
    }
    while (n < 1 || n > 8);

// Drawing pyramid

    int i;
    int r;
    int p;
    for (i = 0; i < n; i++)
    {
        for (p = 1; p < (n - i); p++)
        {
            printf(" ");
        }

        for (r = 0; r <= i; r++)
        {
            printf("#");
        }
        printf("\n");
    }
}

И обновленный код двойной пирамидки:

#include <cs50.h>
#include <stdio.h>

// Draw double pyramid with hashtags

int main(void)
{
    int n;
    do
    {
        n = get_int("Type number from 1 to 8\n"); // Ask user to type the size 1-8
    }
    while (n < 1 || n > 8);

// Start to draw the pyramid

    int i;
    int r;
    int p;
    for (i = 0; i < n; i++)
    {
        for (p = 1; p < (n - i); p++)
        {
            printf(" ");
        }
        for (r = 0; r <= i; r++)
        {
            printf("#");
        }
        printf("  "); // prints the middle of pyramid
        for (r = 0; r <= i; r++)
        {
            printf("#");
        }
        printf("\n");
    }
}

Запись опубликована в рубрике С (Си). Добавьте в закладки постоянную ссылку.

Добавить комментарий

🇬🇧 Attention! Comments with URLs are not allowed.
🇷🇺 Комментарии со ссылками удаляются автоматически.