Вот интересная и относительно не сложная задача по программированию. Задачкой с нами поделился пользователь — NaikoN. Собственно, условие задачи короткое и очень простое.
Требуется вывести в консоль от 1-го до 6-ти равнобедренных треугольников, в зависимости от того какое число введет пользователь. Например, если на вход в программу будет отправлено число 3, то необходимо напечатать 3 треугольника, если пользователь введет 6, то напечатать 6-ть треугольников. Треугольники нужно выводить не в столбик, а в строчку. При этом размер треугольников также формируется по введенному пользователем числу. Как я и говорил, если пользователь введет число 3, то должно напечататься три равнобедренных треугольника, высота которых равна — 3-м. Для печати треугольников можно выбрать любой символ, как вам удобно, в существующем решении используется символ звездочки — *
.
Enter number of triangles: 7 * * * * * * * *** *** *** *** *** *** *** ***** ***** ***** ***** ***** ***** ***** ******* ******* ******* ******* ******* ******* ******* ********* ********* ********* ********* ********* ********* ********* *********** *********** *********** *********** *********** *********** *********** ************* ************* ************* ************* ************* ************* *************
Решение также предоставил — NaikoN. Кстати говоря, это не первая версия исходного кода. Первый исходник, который прислал NaikoN был не очень красивый, так как там использовались метки, что достаточно сильно усложняло понимание кода. Кроме того, старый код неправильно работал в линуксе, а точнее — была проблема с отступами между треугольниками. Скорее всего это связано с тем, что пробелы явно не были указаны. Теперь все это исправлено, код на порядок стал дружелюбнее, чем в старой версии программы. Еще раз поблагодарим пользователя — NaikoN, интересную задачку и предоставленное решение. Исходник смотрим ниже:
#include <iostream> using namespace std; int main() { cout<<"Enter number of triangles: "; int number; cin>>number; for(int y=1;y<=number;++y)///высота треугольника расходящаяся к низу { for(int i=1;i<=number;++i)///кол-во треугольников { for(int x=1;x<=number-y;++x)///пробелы слева { cout<<" "; } if(y==1) { cout<<"*"; } else { for(int x=(-1)*y;x<y-1;++x)///выводим треугольник { cout<<"*"; } } for(int x=1;x<=number-y;++x)///пробелы справа { cout<<" "; } cout<<" ";///пробел между треугольниками } cout<<endl; } return 0; }
А вот и результат работы программы, смотрим и обязательно комментируем:
Enter number of triangles: 7 * * * * * * * *** *** *** *** *** *** *** ***** ***** ***** ***** ***** ***** ***** ******* ******* ******* ******* ******* ******* ******* ********* ********* ********* ********* ********* ********* ********* *********** *********** *********** *********** *********** *********** *********** ************* ************* ************* ************* ************* ************* *************
У меня получилось напечатать 7 треугольников, собственно можно и больше, но если они не влезут в окно консоли, тогда треугольники сломаются. Например, в линуксе я нормально смог распечатать 10 треугольников. Задачка очень интересная как и сама программа, рекомендую разобраться с этим кодом.
Комментарии
Роман Максимов
AndreiST
sancta
Splatt_I
спустя 6 часов раздумий
colt
KeeN
Сократил код из решения. В циклах переменные задал = 0 по привычке.