Форум программистов, компьютерный форум CyberForum.ru

РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
MrAleksej
 Аватар для MrAleksej
20 / 15 / 8
Регистрация: 05.12.2010
Сообщений: 251
Записей в блоге: 1
28.06.2011, 12:31     РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ #1
Ребята, целый день решал никак не могу понять почему у меня график не правильно прорисовывается?

Написать программу которая строит графики функции y=f(x,a) на интервале -10<=x<=10 аргумента x при значениях параметра a, взятых из интервала 0<=a<=10 отрисовывает сетку и оси, обозначает и оцифровывает оси снабжает графики пояснениями (выражение для функции, значений параметра с указанием связи с соответствующей кривой) и удовлетворяет требованию наиболее полного использования экрана.

y = -ax^2-5x+a


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<math.h>
#include<graphics.h>
 
void init_graph()    //функция инициализации графического режима
{ int gr_driver,       //графический драйвер
      gr_mode,          //графический режим
      er_code;           //переменная для значения ошибки
  gr_driver=DETECT;   //автораспознавание драйвера
  initgraph(&gr_driver,&gr_mode,"c:\\BORLANDC\\BGI");
  er_code=graphresult();
  if(er_code!=grOk)   //.., то произошла ошибка
      {cout<<"Ошибка инициализации графики:"<<grapherrormsg(er_code);
       exit(1);}
}
 
void main()
{ int i,j,
      x0,y0,     //начало координат
      dx,dy;     //шаги для сетки и оцифровки по осям  X и Y
  double x,y,    //текущие значения аргумента и функции
    k=0.1;    //коэффициент в экспоненте функции
  clrscr();
  init_graph();
  x0=getmaxx()/2;
  y0=getmaxy()/2;    //инициализация начала координат
  setbkcolor(0);
  dx=(getmaxx()-40)/5;
  dy=(y0-40)/5;
  setcolor(15);
  for(i=0;i<=10;i++)    //отрисовка сетки
      {line(0,40+i*dy,getmaxx()-40,40+i*dy);
       line(20+i*dx/2,40,20+i*dx/2,getmaxy()-40);
       }
  setlinestyle(0,0,3);      //отрисовка осей,
// линия рисования – сплошная, в 3 пикселя толщиной
  setcolor(2);
  line(x0,40,x0,getmaxy()-40);
  line(0,y0,getmaxx()-40,y0);
  settextstyle(0,0,2);
  moveto(getmaxx()-30,y0-5);
  settextjustify(RIGHT_TEXT,BOTTOM_TEXT);
//обозначение оси X слева и выше от указанной выше точки
  outtext("x");
  moveto(x0+5,20);
  settextjustify(LEFT_TEXT,TOP_TEXT);
//обозначение оси Y справа и ниже от указанной выше точки
  outtext("y");
  settextjustify(CENTER_TEXT,TOP_TEXT);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  setcolor(15);
  for(i=-10;i<10;i++)
     {moveto(30+i*dx/2,dx+113);
//оцифровка оси X по центру и ниже указываемых точек
       switch(i)
    {case 0: {outtext("-10"); break;}
     case 1: {outtext("-8"); break;}
     case 2: {outtext("-6"); break;}
     case 3: {outtext("-4"); break;}
     case 4: {outtext("-2"); break;}
     case 5: {outtext("0"); break;}
     case 6: {outtext("2"); break;}
     case 7: {outtext("4"); break;}
     case 8: {outtext("6"); break;}
     case 9: {outtext("8"); break;}
     case 10: {outtext("10"); break;}}
     }
  settextjustify(RIGHT_TEXT,CENTER_TEXT);
//оцифровка оси Y слева по центру от указанных ниже точек
  settextstyle(DEFAULT_FONT,VERT_DIR,1);
  setcolor(15);
  for(i=-10;i<10;i++)
     {moveto(x0+5,40+i*dy);
       switch(i)
    {case 0: {outtext("10"); break;}
     case 1: {outtext("8"); break;}
     case 2: {outtext("6"); break;}
     case 3: {outtext("4"); break;}
     case 4: {outtext("2"); break;}
     case 5: {outtext("0"); break;}
     case 6: {outtext("-2"); break;}
     case 7: {outtext("-4"); break;}
     case 8: {outtext("-2"); break;}
     case 9: {outtext("-4"); break;}
     case 10: {outtext("-6"); break;}
     case 11: {outtext("-10"); break;}}
     }
  getch();
  setlinestyle(0,0,3);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);   
 for(j=0;j<=10;j++)   //отрисовка семейства кривых
     {  
     moveto(-x,getmaxy());//начальная точка кривых
      setcolor(15-j);    //установка цвета кривой
      for(i=0;i<getmaxx()-40;i++)  //отрисовка кривой
      {x=i*4*M_PI/(getmaxx()-40);
       //y=exp(-*j*x)*sin(x);
       y=(-j)*x*x-(5*x)+j;
       lineto(x0+i,y0-int(y*20));}
//вывод значения параметра функции на поле графиков
      moveto(x0,y0+20*(j+1));
      switch(j)
    {case 0: {outtext("a=0"); break;}
     case 1: {outtext("a=2"); break;}
     case 2: {outtext("a=4"); break;}
     case 3: {outtext("a=6"); break;}
     case 4: {outtext("a=8"); break;}
     case 5: {outtext("a=10"); break;}}
      getch();}
//вывод выражения функции на поле графиков
  moveto(x0+3*dx/2,20+dy/2);
  settextjustify(CENTER_TEXT,CENTER_TEXT);
  settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);
  outtext("y=-a*x*x-5*x+a;");
  getch();
  closegraph();  //графический режим закрыт
}
Добавлено через 14 часов 39 минут
Где я ошибся???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2011, 12:31     РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ
Посмотрите здесь:

Borland C 3.14 Работа в графическом режиме!!! C++
C++ Вивод в графическом режиме
C++ Работа с экраном в текстовом режиме
C++ Календарик у графическом режиме
Работа с клавиатурой в графическом режиме C++
C++ Работа с экраном в текстовом режиме
Работа в графическом режиме. Графические примитивы, движение объектов. C++
C++ Работа с экраном в текстовом режиме (вывод всех цветов фона, разделяя цвета паузой)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
28.06.2011, 14:08     РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ #2
Вроде все в норме, не знаю что вам там не нравится. Вот результат работы вашей проги:
Миниатюры
РАБОТА  С  ЭКРАНОМ  В  ГРАФИЧЕСКОМ  РЕЖИМЕ  
MrAleksej
 Аватар для MrAleksej
20 / 15 / 8
Регистрация: 05.12.2010
Сообщений: 251
Записей в блоге: 1
28.06.2011, 14:45  [ТС]     РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ #3
На график должна выводиться парабола, а не прямая с дугой.... Я знаю, что у меня такой график получается... Глядя на формулу должна парабола появиться...
Yandex
Объявления
28.06.2011, 14:45     РАБОТА С ЭКРАНОМ В ГРАФИЧЕСКОМ РЕЖИМЕ
Ответ Создать тему
Опции темы

Текущее время: 22:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru