Увеличение и уменьшение трех предметов по нажатию клавиши - C (СИ)

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

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

Помогите пожалуйста написать программу увеличения и уменьшения трех предметов (окружность, квадрат и заполненный прямоугольник) по нажатию на клавиши 1, 2, 3, 4, 5 и 6 соответственно.

Решение задачи: «Увеличение и уменьшение трех предметов по нажатию клавиши»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdlib.h>
#include "graphics.h"
#define M  28
#define x0 300
#define y0 240
float pod(float);
void ris(int(*)(float),int(*)(float),float(*)(float));
int scrx(float);
int scry(float);
void osi(int (*)(float),int (*)(float));
int main (void)
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    osi(scrx,scry);
    ris(scrx,scry,pod);
    system("pause");
    return 0;
}
 
float pod(float x)
{   if (x>=0)
     { return x*x;
     }
     else 
     { return -(x*x)/10;
     }
     
      
}
 
void ris(int(*asd)(float),int(*zxc)(float),float(*qwe)(float))
{
     int xo,yo;
     float step,x,xmin,xmax;
     xmin=-10;
     xmax=10;
     setcolor(YELLOW);
     step=1.0/(10*M);
     for(x=xmin;x<xmax;x+=step)
     {
       xo=asd(x);
       yo=zxc(qwe(x));
       if (xo>0 && xo<640 && yo>0 && yo<480)
       putpixel(xo,yo,YELLOW);
     }
}
void osi(int (*asd)(float),int (*zxc)(float))
{
int xo,i;
char a[5];
line(x0,0,x0,480);
line(0,y0,640,y0);
for(i=0;i<=(640-x0)/M;i++)
{
  xo=asd(i);
  line(xo,y0+2,xo,y0-2);
  sprintf(a,"%d",i);
  outtextxy(xo-8,y0+4,a);
}
for(i=-(600-x0)/M;i<0;i++)
{
  xo=asd(i);
  line(xo,y0+2,xo,y0-2);
  sprintf(a,"%d",i);
  outtextxy(xo-8,y0+4,a);
}
for(i=(y0)/M;i>0;i--)
{
  xo=zxc(i);
  line(x0-2,xo,x0+2,xo);
  sprintf(a,"%d",i);
  outtextxy(x0+8,xo-8,a);
}
for(i=-(480-y0)/M;i<0;i++)
{
  xo=zxc(i);
  line(x0-2,xo,x0+2,xo);
  sprintf(a,"%d",i);
  outtextxy(x0+8,xo-8,a);
}
}
int scrx(float x)
{
  return x0+M*x;
}
 
int scry(float y)
{
  return y0-M*y;
}

Объяснение кода листинга программы

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

  1. Определение функций:
    • pod(float x): функция, которая вычисляет квадрат числа x. Если x больше или равно нулю, возвращается его квадрат. Если x меньше нуля, возвращается отрицательный квадрат x (то есть x*x/10).
    • scrx(float x): функция, которая преобразует значение x в пиксели по горизонтали на экране. Она просто возвращает x0 + M * x, где M - это масштабный коэффициент, а x0 - это начальная координата по горизонтали.
    • scry(float y): функция, аналогичная scrx, но преобразующая значение y в пиксели по вертикали.
    • ris(int(*asd)(float),int(*zxc)(float),float(*qwe)(float)): функция, которая рисует сетку на графике. Она принимает три функции: asd, zxc и qwe, которые соответствуют функциям scrx, scry и pod. Функция перебирает все значения от xmin до xmax с шагом step и рисует пиксели на графике в соответствии с результатами функций asd и zxc.
    • osi(int (*asd)(float),int (*zxc)(float)): функция, которая рисует оси на графике. Она принимает две функции: asd и zxc, которые соответствуют функциям scrx и scry. Функция рисует две оси: вертикальную и горизонтальную, а также подписывает их значениями.
    • main(void): функция, которая является точкой входа в программу. Она инициализирует графический драйвер, вызывает функцию osi для рисования осей, затем функцию ris для рисования сетки, и, наконец, ожидает нажатия клавиши.
  2. Использование функций:
    • Функция ris используется для рисования сетки на графике.
    • Функция osi используется для рисования осей на графике.
  3. Графический экран:
    • Значения x0 и y0 определяют начальную точку по горизонтали и вертикали соответственно.
    • Значение M определяет масштабный коэффициент.
  4. Масштабирование:
    • При нажатии клавиши, значения x0 и y0 изменяются, что приводит к масштабированию графического экрана.
  5. Управление осями:
    • Функция osi позволяет управлять положением осей на графике. При нажатии клавиши, она перерисовывает оси с новыми координатами.
  6. Ограничения:
    • Функция pod ограничивает значения x до неотрицательных чисел.
    • Функции scrx и scry ограничивают значения x и y соответственно до значений, которые могут быть представлены на экране.

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

7   голосов , оценка 4.143 из 5
Похожие ответы