Рисование X с помощью C ТОЛЬКО в то время как циклы и операторы If - PullRequest
0 голосов
/ 07 октября 2019

Нам было дано задание - нарисовать X в C, используя только циклы while и операторы if (допускаются математические выражения и выражения).

Я выполнил только первую половину X в коде,вторая половина - как раз наоборот.

Сложной частью являются средние черты (-), так как я изо всех сил пытаюсь найти способ заставить их считать в обратном направлении на 2 через циклы while.

Я слишком много думаю об этом? Если да, то как лучше подходить к этой проблеме?

Я впервые изучаю C, и нам не разрешено проходить циклы или делать что-то еще, кроме базового уровня.

Спасибо за чтение!

    int size, fLine, rowCounter, tempSize;

    printf("Enter size: ");
    scanf("%d", &size);

    // The split will half the size of the X to run 2 seperate while loops
    // One loop for the top half and another for the lower half.
    int split = ((size - 1) / 2);
    int row = 1;

    // Top half of the X
    while (row <= split) {
        // Condition to print out the top and bottom line of the X
        if ((row == 1) || (row == size)) {
            printf("*");
            // tempSize will allow for the counter to decrease without 
            // affecting the size variable
            tempSize = size;

            // Will add the middle dashes on the top line
            while ((tempSize - 2) > 0) {
                printf("-");
                tempSize--;
            }
            printf("*\n");
            row++;
        } else {
            // The dashes before the first asterisks
            // rowCounter allows the row number to be decreased in the 
            // while loop
            rowCounter = row - 1;
            while (rowCounter > 0) {
                printf("-");
                rowCounter--;
            }
            printf("*");

            // Will add size + (row * -2) dashes into the middle
            // **This section is the subject of the question!**
            rowCounter = row * 2;
            tempSize = rowCounter - size; // 2 - 5 = -3
            while (tempSize < (size - 1)) {
                printf("-");
                tempSize++;
            }
            printf("*");
            // Will add the final dashes. Exactly the same as the first 
            // while loop
            rowCounter = row - 1;
            while (rowCounter > 1) {
                printf("-");
                rowCounter--;
            }
            printf("-\n");
            row++;
        } //Yet to add the middle line and the bottom half!
    }
    return 0;
}

Ожидаемый результат:

Enter Size: 5  
*---*  
-*-*-
--*--
-*-*-
*---*

Фактический результат:

Enter Size: 5
*---*
-*-----*-

Я хочу, чтобы средние значения подсчитывались НАЗАД, чтобы 9, 7, 5, 3,1 и т. Д. Вместо вверх на 2.

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

У меня есть намного более простое решение

#include <stdio.h>
int size, i=0, j=0;
printf("Please Enter a Odd Size: \n")
scanf(%d, &size);
while(size%2==0)
{
    printf("Only Odd size is ok \n");
    printf("Please Enter a Odd Size: \n")
    scanf(%d, &size);
}

while(i<size)
{
    j=0;
    while(j<size)
    {
        if(j == i || i == (size-1)-j)
        {
            printf("!");
        }
        else
        {
            printf("-");
        }
        j++;
    }
    printf("\n\n");
    i++;
}

вывод:

! ---!

-! -! -

-! -

-! -! -

! ---!

0 голосов
/ 07 октября 2019

Я немного повозился:

#include <stdio.h>

 int main()
 {

    int size = 5;

   if( size % 2 == 1 )
   {
      fprintf( stdout, "now drawing\n");

      int lineCount = 0;

      int lastPost = size - 1;

      while( lineCount < size )
      {
          int rowCount = 0;

          while( rowCount < size )
          {
              if( ( rowCount == lineCount ) 
                  || ( rowCount == lastPost ) )
              {
                  fprintf( stdout, "X");
              }
              else
              {
                  fprintf( stdout, ".");
              }

              ++rowCount;
          }

          fprintf( stdout, "\n");

          --lastPost;            
          ++lineCount;
      }
  }
  else
  {
      fprintf( stderr, "size must be odd!\n");
  }

  return 0;

}

...