Главные файлы рисунка в C

Я делаю упражнения перед экзаменом программирования и не могу сделать этот:

"Писать программу, которая получала бы натуральное число и покрасил приблизительно из-за экрана квадратную фигуру используя главный файл данного рисунка. Например, если читается номер 3, квадрат, который вырисуется, - следующий:

[patrón de dibujo[1]"

На данный момент у меня есть это:

    int patron(int n);

    int n;

    int main()
    {
        printf("Introduce el numero natural deseado:\n");
        scanf("%d",&n);

        patron(n);
    }

    int patron(int n)
    {
        int i, j;

        for(i=1; i<=n; i++)
        {
            for (j=1; j<=n; j++)
            {
                printf("+---");
            }
            printf("+\n");
        }
        printf("\n");
        return 0;
    }

Что это возвращает:

producto del programa actual

Как я делаю, чтобы делать пиленый сахар с восклицаниями? Добавив разрывы линии, все разрушается.

Спасибо заранее.

3
задан 03.01.2017, 19:01
0 ответов
 int patron(int n);

int n;

int main()
{
    printf("Introduce el numero natural deseado:\n");
    scanf("%d",&n);

    patron(n);
}

int patron(int n)
{
    int i, j;

    for(i=0; i<=n; i++)
    {
        for (j=1; j<=n; j++)
        {
            printf("+---");
        }
        printf("+\n");
        if(i<n){
           for (j=1; j<=n; j++)
            {
                printf("!   ");
            }
            printf("!\n");  
        }

    }
    printf("\n");
    return 0;
}
0
ответ дан 03.12.2019, 17:57

Благодаря всем из-за вкладов, я решил проблему, здесь - конечный код:

    int patron(int n);
    int n;

    int main()
    {
        printf("Introduce el numero natural deseado:\n");
        scanf("%d",&n);

        patron(n);
    }

   int patron(int n)
   {
       int i, j,k, f;

       for(i=1; i<=n; i++)
       {
            for (j=1; j<=n; j++)
            {
                printf("+---");
            }
            printf("+\n");



            for (k=1; k<=n; k++)
            {
                printf("!   ");
            }

            printf("!\n");
            if (i==n){

                for (f=1; f<=n; f++)
                {
                    printf("+---");
                }
                printf("+\n");
            }


        }

        printf("\n");
        return 0;
   }

Добавленный был этой зоной (не была изменена оставшаяся часть кода, просто добавился под укрытым for):

     for (k=1; k<=n; k++)
        {
            printf("!   ");
        }

        printf("!\n");
        if (i==n){

            for (f=1; f<=n; f++)
            {
                printf("+---");
            }
            printf("+\n");
        }
1
ответ дан 03.12.2019, 17:57

С этим упражнением, ты покрасишь рисунок линию из-за линии. В этом случае, нечетные линии всегда будут (+---) и линии ты рожаешь ты будешь (!). Проконтролируй это со счетчиком первого FOR, завися, если это пара, или нечетный ты красишь вещь или другую.

1
ответ дан 03.12.2019, 17:57

Я сделал бы это этой формой, изменил бы:

printf("+\n");

Из-за

if(i != n)
    printf("+\n!   !   !   !\n");
else
    printf("+\n");

Для того, чтобы осталось нечто похожее:

introducir la descripción de la imagen aquí

В этом примере, n он равен 3.

1
ответ дан 03.12.2019, 17:57
  • 1
    Вытекающие ячейки должны принадлежать nxn, войдя n, взамен эта 3x2. –  28.12.2016, 18:46

Я оставляю тебе альтернативу

void pintarCuadro(int n)
{

    for(int i=0; i<n+1; i++)
    {
   //    printf("pintar\n");
        for(int j=0; j<n; j++)
        {
            printf("+---");
        }
        printf("+\n");

        if(i<n)
        {
            for(int j=0; j<n; j++)
            {
                printf("!   ");
            }
            printf("!\n");

        }
    }
}

int main()
{

    pintarCuadro(7);


    return 0;
}
1
ответ дан 03.12.2019, 17:57
  • 1
    Гораздо работоспособнее, спасибо. –  28.12.2016, 19:08
  • 2
    И если ты лишаешь его каждого ненужного ключа, много má s читабельный ademá s (он читабельный как está но в có digos má s большие он ужасный). –  28.12.2016, 23:38

Я показываю тебе альтернативную форму, которая позволяет тебе выбирать ВЫСОТУ и внутреннюю ШИРИНУ каждой ячейки.

Кроме того, вместо того, чтобы реализовывать многообразные for укрытые, мы предвычисляем линии, которые нужно показывать, так что, вместо x * y повторения, мы реализуем только 3: предвычислять линии завершения, предвычислять внутренние линии, и конечный цикл, чтобы показывать их.

В for конец, мы подтверждаем, находимся ли мы в линии, предыдущей первой линии пересечения; если уже мы перемещаем ее, мы используем модуль (оставшуюся часть) деления, чтобы знать, должны показывать ли мы внутреннюю линию ячейки, или линию пересечения.

Как последняя точка, составь с C89 в дальнейшем.

#include <stdio.h>
#include <string.h>

#define ANCHO 2
#define ALTO 2

void showMatrix( int x ) {
  int realWidth = ( ANCHO * x ) + x + 1;
  char up[realWidth + 1];
  char inter[realWidth + 1];
  int idx;

  memset( up, '-', realWidth - 1 );
  up[realWidth] = 0;

  for( idx = 0; idx < realWidth; idx += ANCHO + 1 )
    up[idx] = '+';

  memset( inter, ' ', realWidth - 1 );
  inter[realWidth] = 0;

  inter[0] = '!';
  inter[realWidth - 1] = '!';
  for( idx = ANCHO + 1; idx < realWidth; idx += ANCHO + 1 )
    inter[idx] = '!';

  realWidth = ( ALTO * x ) + x + 1;

  printf( "%s\n", up );
  for( idx = 1; idx < realWidth ; ++idx )
    if( idx <  ALTO )
      printf( "%s\n", inter );
    else
      printf( "%s\n", idx % ( ALTO + 1 ) ? inter : up );
}

int main( void ) {
  showMatrix( 6 );

  return 0;
}
1
ответ дан 03.12.2019, 17:57
  • 1
    Он был ограничен есть реализовывать упражнение с функциями и структурами контроля. Спасибо так или иначе. –  28.12.2016, 20:32
  • 2
    Я надеюсь, что он стоит тебе по крайней мере как inspiración для будущих проблем ;-) –  28.12.2016, 20:32
  • 3
    Я tambié n!! Спасибо –  28.12.2016, 20:38