Как сделать треугольник в c

Обновлено: 07.07.2024

Я пытаюсь сделать треугольник Паскаля в C++. Но я не мог этого сделать! Что случилось с моим кодом?

Первое, что я хотел бы сделать, это не беспокоиться о фактическом расположении чисел при печати. Это аналогичная концепция во всех программах, вы хотите отделить заботу о том, как вещи отображаются, "вид" от того, как вещи находятся в данных, "модель". Теперь, когда у вас есть концептуальная основа для структурирования кода, я бы также использовал структуры классов и объекты, поскольку вы говорите, что C++ - это то, что вы пытаетесь практиковать, в основном ориентированное на объектно-ориентированное программирование (ООП) парадигма. Используя эти идеи, мы можем придумать, как мы хотим создать треугольник.

То, что мы хотим достичь, - это процедурное производство следующей структуры:

для достижения этого эффекта мы действительно хотим создать:

Если вы заметите из приведенных выше диаграмм, мы можем сделать вывод, что начиная с аксиомы (самая первая итерация/что-то предполагается там до того, как мы даже начнем), которая в этом случае является просто строкой, содержащей только число 1 , мы видим, что каждое производство (любая заданная итерация, которая имеет некоторое правило для ее создания, начиная с аксиомы 1 ), задается добавлением двух значений в строке над ней, имеющих тот же индекс и следующий индекс. Ради алгоритма мы предполагаем, что если производство не может найти число, мы будем говорить, что число существует, но не показано, и мы предположим, что оно равно 0. (если все путь с левой стороны, нет первого значения, и если все это на правой стороне нет второго значения)

Таким образом, если вы посмотрите на мою вторую диаграмму, у нас есть первая строка, которая равна 1 но мы будем делать вид, что она действительно 0,1,0 . Это дает нам пирамиду больше похоже:

Важнейшая часть - аксиома 1 которую мы будем считать равной 0,1,0 . Теперь давайте вычислим код для нашего "производства", то есть метод создания строки, учитывая строку перед ней. Мы хотим создать функцию, которая будет принимать список чисел из предыдущей строки и создать следующую строку, предполагая, что она дополняется нашим 0 с обеих сторон. Эта функция может выглядеть примерно так:

На самом деле это все, что нам нужно. Теперь вам просто нужно использовать трюк, чтобы помещать пробелы между ними и распечатывать их. Я не буду этого делать, но я покажу вам, как использовать эту функцию для создания нескольких строк треугольника:

Я оставил это в объекте класса, а также довольно печатаю его как фактический треугольник паскаля в качестве упражнений для вас, я думаю, вы должны попробовать его и потратить время на размышления о том, что происходит в методе produceNextRow .

Количество звёздочек по вертикали и по горизонтали известно. Осталось понять, сколько надо пихать в каждую строку. Давай прикинем.

Предположим, что прямой угол находится в (0,0). Тогда две другие известные точки — (0,y0) и (x0,0) (где x0 и y0 равны длинам горизонтального и вертикального катета). Тогда есть функция выглядит так: y = y0-x*y0/x0. Или, если поменять местами координаты, x = x0-y*x0/y0. Чтобы найти количество звёздочек в строке N, округляем x0-N*x0/y0 и всё.

Вроде как-то так.

Например. Хотим заполнить треугольник со сторонами 5*9:

Обрати внимание, звёздочек 6 и 10, но это потому, что это нулевые координаты.
Тут количество_точек(номер_столбца) = 9-номер_столбца*9/5.
0: 9
1: 7.2 ~ 7
2: 5.4 ~ 5
3: 3.6 ~ 4
4: 1.8 ~ 2
5: 0
Рисуем:

Я пытаюсь сделать треугольник Паскаля на С ++. Но я не мог этого сделать! Что не так с моим кодом?

И результат ниже:

2 ответа

Мы хотим добиться процедурного создания следующей структуры:

Для достижения этого эффекта мы действительно хотим создать:

Если вы заметили из приведенных выше диаграмм, мы можем сделать вывод, начиная с аксиомы (самая первая итерация / что-то, что должно быть там до того, как мы даже начнем), которая в данном случае представляет собой просто строку, содержащую только число 1 , мы можем видеть, что каждое производство (любая данная итерация, в которой есть какое-то правило для ее создания, начиная с аксиомы, 1 ) задается путем добавления двух значений в строке над ней, которые имеют одинаковый индекс, и следующий индекс. Ради алгоритма мы предположим, что если производство не может найти число, мы скажем, что число существует, но не отображается, и предположим, что это 0. (если это все на левой стороне нет первого значения, а если он полностью справа, второго значения нет)

Это означает, что если вы посмотрите на мою вторую диаграмму, у нас есть первая строка, которая представляет собой просто 1 , но мы собираемся сделать вид, что это действительно 0,1,0 . Это дает нам пирамиду, больше похожую на:

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

Я оставил помещать это в объект класса, а также довольно распечатать это как настоящий треугольник Паскаля в качестве упражнения для вас. Я думаю, вам стоит попробовать это и потратить время на то, чтобы серьезно подумать о том, что происходит в produceNextRow метод.

Одним из способов построения двухмерной графики в окне - это использование фигур. Фигуры фактически являются обычными элементами как например кнопка или текстовое поле. К фигурам относят такие элементы как Polygon (Многоугольник), Ellipse (овал), Rectangle (прямоугольник), Line (обычная линия), Polyline (несколько связанных линий). Все они наследуются от абстрактного базового класса System.Windows.Shapes.Shape :

Фигуры в WPF

От базового класса они наследуют ряд общих свойств:

Fill заполняет фон фигуры с помощью кисти - аналогичен свойству Background у прочих элементов

Stroke задает кисть, которая отрисовывает границу фигуры - аналогичен свойству BorderBrush у прочих элементов

StrokeThikness задает толщину границы фигуры - аналогичен свойству BorderThikness у прочих элементов

StrokeStartLineCap и StrokeEndLineCap задают для незамкнутых фигур (Line) контур в начале и в конце линии соответственно

StrokeDashArray задает границу фигуры в виде штриховки, создавая эффект пунктира

StrokeDashOffset задает расстояние до начала штриха

StrokeDashCap задает форму штрихов

Ellipse

Ellipse представляет овал:

При одинаковой ширине и высоту получается круг:

Ellipse в WPF

Rectangle

Rectangle представляет прямоугольник::

С помощью свойств RadiusX и RadiusY можно округлить углы прямоугольника:

Rectangle в WPF

Line представляет простую линию. Для создания линии надо указать координаты в ее свойствах X1, Y1, X2 и Y2. При этом надо учитывать, что началом координатной системы является верхний левый угол:

Line в WPF

Polygon

Polygon представляет многоугольник. С помощью коллекции Points элемент устанавливает набор точек - объектов типа Point, которые последовательно соединяются линиями, причем последня точка соединяется с первой:

Polygon в WPF

В данном случае у нас три точки (50, 150), (150, 50) и (250, 150), которые образуют треугольник.

Polyline

Polyline представляет набор точек, соединенных линиями. В этом плане данный элемент похож на Polygon за тем исключением, что первая и последняя точка не соединяются:

Polyline в WPF

Настройка контура

С помощью ряда свойств мы можем настроить отображение контура. Например:

Stroke в WPF

Цвет самого контура определяется с помощью свойства Stroke , а его толщина - с помощью StrokeThickness .

StrokeDashArray устанавливает длину штрихов вместе с отступами. Например, StrokeDashArray="4 2" устанавливает длину штриха в 4 единицы, а последующего отступа в 2 единицы. И эти значения будут повторяться по всему контуру. При другой установке, например, StrokeDashArray="1 2 3" уже задается два штриха. Первый штрих имеет длину в 1 единицу, а второй - в 3 единицы и между ними расстояие в 2 единицы. И так вы можем настроить количество штрихов и расстояний между ними.

StrokeDashCap задает форму на концах штрихов и может принимать следующие значения:

Flat : стандартные штрихи с плоскими окончаниями

Square : штрихи с прямоугольными окончаниями

Round : штрихи с округлыми окончаниями

Triangle : штрихи с окончаниями в виде треугольников

Программное рисование

Создание фигур программным образом осуществляется так же, как и создаются и добавляются все остальные элементы:

Читайте также: