заранее извините, если это грязно, я новичок в этом.
Короче говоря, я только начал программировать для школы, и один из первых вопросов, которые мне задали, был (переведен как можно лучше) следующим образом:
Алгоритм должен отображать четверть круга для данного радиуса (введенного пользователем), используя символ «*» (при условии, что эти символы имеют одинаковое горизонтальное и вертикальное выравнивание). Вот пример для радиуса 8:
Так что я извиняюсь, если это расстраивает, но мы сейчас делаем в основном только основы, так что это означает, что у меня очень строгие ограничения:
- Единственный вход, который мне разрешено использовать, это указанный радиус,
- Такие понятия, как числа с плавающей запятой, даже не упоминались в теоретическом курсе, поэтому я не могу их использовать,
- Мои единственные математические операторы +, -, *, / и по модулю,
- И самое главное (и разочарование), единственные циклы, которые я могу использовать, это циклы while и if, else.
Итак, подумав, я решил, что пойду так:
Поскольку это нижний правый квадрант, который мы рисуем, мы можем сделать следующее:
С радиусом мы можем проверить каждую отображаемую строку, мы можем сделать следующее:
Убедитесь, что текущая позиция на линии находится внутри круга. Это означает, что мы можем использовать соотношение x 2 + y 2 = r 2 , где x и y становятся (независимо от того, что именно) нашей линией и позицией в этой линии.
Когда я пишу это, оно оказалось гораздо более абстрактным и запутанным, чем я хотел, поэтому я просто собираюсь связать свой перевод на c ++:
int main()
{
int r, i, j;
cout << "Rayon ?\n";
cin >> r;
i = 0;
while (i < r) {
j = 0;
while (i*i + j*j < r*r) {
cout << "*";
j = j + 1;
}
cout << "\n";
i = i+1;
}
}
Так что этот код хорош, но у него есть недостатки. Пока я могу повторить пример результатов:
но когда я ввожу что-то вроде 2:
идёт банан.
Таким образом, фактический вопрос: я думал об этом, и я, похоже, не могу полностью решить проблему, при этом воспроизводя результаты примера. Мне было интересно, есть ли у меня с этими ограничениями лучшее решение, будь то совершенно другой математический подход или просто простое исправление кода, которое я мог упустить из виду.
Извините за долгое чтение, и мне очень жаль, если это не место для чего-то подобного. Все отзывы приветствуются!