2016-10-09 2 views
0

У меня возникают трудности с созданием программы шаблонов для одного из моих назначений. Инструктор хочет, чтобы мы создали программу, которая просит пользователя ввести ширину и высоту, а затем распечатать образец «*» на основе введенного. Я могу напечатать весь прямоугольник, но она хочет, чтобы он был определенным шаблоном. Первые два и последние строки должны быть заполнены звездами, а линии между ними должны быть похожи на приведенный ниже пример. Правила, которые должны следовать ширина должна быть кратной 6, а высота должна быть большеВложенные петли и создание шаблона

Пример шаблона:

111111111111111111111111111111111111 
111111111111111111111111111111111111 
111 111 111 111 111 111 
    111 111 111 111 111 111 
111 111 111 111 111 111 
111111111111111111111111111111111111 
111111111111111111111111111111111111 

Мой код:

int width, height, i, j, space; 
//Program asks user to enter width of their fabric 
printf("What is the width of your fabric?\n"); 
scanf("%d", &width); 
while(width % 6 !=0){ 
    printf("Please enter a width that is a multiple of 6\n"); 
    scanf("%d", &width); 
} 

//Program asks user to enter height of their fabric 
printf("What is the height of your fabric?\n"); 
scanf("%d", &height); 
while(height <= 6 || height % 2 == 0){ 
    printf("Please enter an odd height which is at least 7\n"); 
    scanf("%d", &height); 
    } 

for(i=1; i<=height; i++) 
{ 
    for(j=1; j<=width; j++) 
    { 
    printf("*"); 
    } 
    printf("\n");  
} 
+0

Должны ли только средние ряды быть короче? Поясните, как выглядит шаблон при использовании 9 строк и т. Д. – zapstar

+0

Пожалуйста, опубликуйте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), который показывает проблему. Скажите, каковы именно «трудности», расскажите нам, какой вклад вы дадите, и покажите нам, какой должен быть полный вывод для этого ввода, и что происходит неправильно. –

+0

Извините. Внутренний шаблон должен быть *** ___ *** ___ *** и т. Д. ___ представляет пробелы. но это должно быть 3 "*", за которым следует 3 "_" до конца строки. – RickSanchez

ответ

0

Вам нужен If- внутри цикла и адаптировать ширину, в зависимости от того, какая строка (переменная i) печатается. Возможно, вы захотите переименовать i в currentRow и j в currentColumn.

0

Вы можете попробовать это. Переменная flip сбрасывает «xxx» шаблон на «xxx» на альтернативных строках.

 int flip = 1; 
     for (int i = 1; i <= height; i++) 
     { 
      if (i <= 2 || i >= height - 1) 
      { 
       // the top two & bottom two lines are solid '*' 
       for (int j = 1; j <= width; j++) 
       { 
        printf("*"); 
       } 
      } 
      else 
      { 
       flip = 1 - flip; 
       for (int j = 1; j <= width; j++) 
       { 
        // repeating pattern: three '*' followed by three ' ' 
        // Divide column by 3 (no remainder) and see whether the result is odd or even 
        // subtract 1 so each group of 3 has same result when divided by 3 
        if (((j-1)/3) % 2 == flip) 
         printf("*"); 
        else 
         printf(" "); 
       } 
      } 
      printf("\n"); 
     } 
+0

Джон благодарит вас за вашу помощь. Кажется, это почти все. Вместо средней выкладки они должны чередовать 3 "*" 3 "_", и следующая строка начнет 3 "_" 3 "*" – RickSanchez

+0

Я добавил переменную 'flip', которая чередует шаблон в средних строках. .. –

-1

Ха-ха смешно. Вы думаете, что это шаблон ткани. По моему опыту, вы берете ascii и вытаскиваете шаблон бит-бита из массива таблицы ROM. Я предполагаю, что это не то, что есть, и это скалярный рисунок с высотой и шириной. Вы должны использовать плавающие точки и просто брать высоту и ширину и масштабировать шаблон до размера. Это не так сложно, если вы не думаете о математике с фиксированной точкой, которая связана с игровым программированием. Чтобы было легко думать, как скалярная матрица данных. Вот какой код может помочь.

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
int index=90; 
float mynumber[index]; 
float scalar=2.25; 
mynumber[abs(scalar)]=1; 
printf("%f\n",mynumber[abs(scalar)]); 
return 0; 
} 
Смежные вопросы