Более сложные формы с использованием вложенных циклов в Stack Overflow

Я видел некоторых, где они делают простые примеры X или треугольников или алмазов и т. Д. Я хотел бы знать, как сделать сложную форму, как это:

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

Я чрезвычайно новичок в программировании, не знаю основных функций самого кода.

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int spaces = 4;
int hashes = 1;
for(int row=0;row<10;row++)
{
for(int spaces=0;spaces<4;spaces++)
{
cout<<" ";
}
for(int hashes=0;hashes<1;hashes++)
{
cout<<"#";
}
cout<<endl;

if(row<5&&row>6)
{
spaces--;
hashes+=2;
}
else
{
spaces++;
hashes-=2;
}

}
return 0;
}

-3

Решение

Простой способ — использовать подход «трассировки лучей»; то есть

for (int y=0; y<rows; y++) {
for (int x=0; x<cols; x++) {
if (func(x, y)) {
std::cout << "#";
} else {
std::cout << " ";
}
}
std::cout << "\n";
}

например с rows = cols = 20 а также func определяется как

bool func(int x, int y) {
return (x-10)*(x-10) + (y-10)*(y-10) < 8*8;
}

вы бы получили круг

1

Другие решения

Многие задания для рисования форм, подобных вашей, основаны на симметрии как в горизонтальном, так и в вертикальном направлениях. Например, в горизонтальном направлении символы слева направо отражаются после центральной точки.

Старый способ рисования фигур — хранить их в двухмерном массиве, а затем распечатывать массив:

unsigned char letter_E[7][5] =
{
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
};

for (unsigned int row = 0; row < 7; ++row)
{
for (unsigned int column = 0; column < 5; ++column)
{
std::cout << letter_E[row][column];
}
std::cout << '\n';
}

Кроме того, поиск в Интернете для «ASCII art».

0

По вопросам рекламы [email protected]