Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите с кодом, как можно нарисовать 2 треугольника, один внутри другого что бы они образовывали рисунок - звезду давида. треугольники равносторонние. Кто справится с задачей, обещаю вознаграждение! Это один треугольник, надо ещё один внутри него, доработать алгоритм...
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. void main()
  5. {
  6. int a,i,j,k,f,t;
  7. do
  8. {
  9. do
  10. {
  11. printf("Enter number\n");
  12. scanf("%d",&a);
  13. }
  14. while((!a%2)||(a>50)||(a<0));
  15. for(i=0,k=1;i<a;i+=2,k+=2)
  16. {
  17. for(j=i;j<a;j+=2)
  18. {
  19. printf(" ");
  20. }
  21. for(j=0;j<k;j++)
  22. {
  23. if((j==0)||(k-j==1)||(a-i==2)||(a-i==1))
  24. printf("*");
  25. else printf(" ");
  26. }
  27. printf("\n");
  28. }
  29. }
  30. while(getch()!=27);
  31. }

Решение задачи: «Нарисовать 2 треугольника, один внутри другого, чтобы они образовывали рисунок — звезду давида»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #include <windows.h>
  5.  
  6. const double PI = 3.14;
  7.  
  8. // отступы
  9. const int xOffset = 5;
  10. const int yOffset = 20;
  11.  
  12. struct Point
  13. {
  14.     double x, y;
  15. };
  16.  
  17. // целевая точка
  18. size_t targetPoint(size_t idx, size_t limit);
  19. // рисуем
  20. void paintFigure(struct Point * points, size_t size);
  21. // ввод стороны
  22. int inputSide();
  23.  
  24. int main()
  25. {
  26.     const size_t numPoints = 6;
  27.     // углы
  28.     double alpha = 120 * PI / 180;
  29.     double beta  = 30  * PI / 180;
  30.  
  31.     size_t i;
  32.     int    side   = inputSide();
  33.     // радиус описанной откружности
  34.     double radius = side * sin(alpha) / sin(beta);
  35.     // приблизительное количество строк
  36.     size_t lines  = (size_t)floor(radius / 4.9);
  37.     // координаты центра
  38.     const double centerX = radius + xOffset;
  39.     const double centerY = radius + yOffset;
  40.  
  41.     // посчитаем координаты точек
  42.     double angle = 2 * PI / numPoints;
  43.     struct Point points[numPoints];
  44.     for(i = 0; i < numPoints; ++i)
  45.     {
  46.         points[i].x = centerX + radius * sin(i * angle);
  47.         points[i].y = centerY + radius * cos(i * angle);
  48.     }
  49.     //рисуем
  50.     paintFigure(points, numPoints);
  51.  
  52.     for(i = 0; i < lines; ++i)
  53.     {
  54.         printf("\n");
  55.     }
  56.     return 0;
  57. }
  58.  
  59. size_t targetPoint(size_t idx, size_t limit)
  60. {
  61.     return (idx += 2) >= limit ? idx - limit : idx;
  62. }
  63.  
  64. void paintFigure(struct Point * points, size_t size)
  65. {
  66.     size_t idx;
  67.  
  68.     HDC hDC  = GetDC(GetConsoleWindow());
  69.     HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
  70.     SelectObject(hDC, Pen);
  71.     for(idx = 0; idx < size; ++idx)
  72.     {
  73.         size_t toIdx = targetPoint(idx, size);
  74.  
  75.         MoveToEx(hDC, points[idx].x, points[idx].y, NULL);
  76.         LineTo(hDC, points[toIdx].x, points[toIdx].y);
  77.     }
  78.     DeleteObject(Pen);
  79. }
  80.  
  81. int inputSide()
  82. {
  83.     int side;
  84.     printf("Enter side of hexagram: ");
  85.     scanf("%d", &side);
  86.     return side;
  87. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы