Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида - C (СИ)
Формулировка задачи:
Помогите с кодом, как можно нарисовать 2 треугольника, один внутри другого что бы они образовывали рисунок - звезду давида. треугольники равносторонние. Кто справится с задачей, обещаю вознаграждение!
Это один треугольник, надо ещё один внутри него, доработать алгоритм...
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <math.h>
- void main()
- {
- int a,i,j,k,f,t;
- do
- {
- do
- {
- printf("Enter number\n");
- scanf("%d",&a);
- }
- while((!a%2)||(a>50)||(a<0));
- for(i=0,k=1;i<a;i+=2,k+=2)
- {
- for(j=i;j<a;j+=2)
- {
- printf(" ");
- }
- for(j=0;j<k;j++)
- {
- if((j==0)||(k-j==1)||(a-i==2)||(a-i==1))
- printf("*");
- else printf(" ");
- }
- printf("\n");
- }
- }
- while(getch()!=27);
- }
Решение задачи: «Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида»
textual
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- const double PI = 3.14;
- // отступы
- const int xOffset = 5;
- const int yOffset = 20;
- struct Point
- {
- double x, y;
- };
- // целевая точка
- size_t targetPoint(size_t idx, size_t limit);
- // рисуем
- void paintFigure(struct Point * points, size_t size);
- // ввод стороны
- int inputSide();
- int main()
- {
- const size_t numPoints = 6;
- // углы
- double alpha = 120 * PI / 180;
- double beta = 30 * PI / 180;
- size_t i;
- int side = inputSide();
- // радиус описанной откружности
- double radius = side * sin(alpha) / sin(beta);
- // приблизительное количество строк
- size_t lines = (size_t)floor(radius / 4.9);
- // координаты центра
- const double centerX = radius + xOffset;
- const double centerY = radius + yOffset;
- // посчитаем координаты точек
- double angle = 2 * PI / numPoints;
- struct Point points[numPoints];
- for(i = 0; i < numPoints; ++i)
- {
- points[i].x = centerX + radius * sin(i * angle);
- points[i].y = centerY + radius * cos(i * angle);
- }
- //рисуем
- paintFigure(points, numPoints);
- for(i = 0; i < lines; ++i)
- {
- printf("\n");
- }
- return 0;
- }
- size_t targetPoint(size_t idx, size_t limit)
- {
- return (idx += 2) >= limit ? idx - limit : idx;
- }
- void paintFigure(struct Point * points, size_t size)
- {
- size_t idx;
- HDC hDC = GetDC(GetConsoleWindow());
- HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
- SelectObject(hDC, Pen);
- for(idx = 0; idx < size; ++idx)
- {
- size_t toIdx = targetPoint(idx, size);
- MoveToEx(hDC, points[idx].x, points[idx].y, NULL);
- LineTo(hDC, points[toIdx].x, points[toIdx].y);
- }
- DeleteObject(Pen);
- }
- int inputSide()
- {
- int side;
- printf("Enter side of hexagram: ");
- scanf("%d", &side);
- return side;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д