knightL

sorts.h

Mar 11th, 2011
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.02 KB | None | 0 0
  1. #ifndef COURSEWORK_H
  2. #define COURSEWORK_H
  3.  
  4. #include <gtk/gtk.h>
  5.  
  6. // координаты левого верхнего угла прямоугольника,в котором будет нарисовано дерево
  7. #define TREEOFFSETX 10
  8. #define TREEOFFSETY 70
  9.  
  10. // координаты левого верхнего угла прямоугольника, в котором будет нарисован массив
  11. #define LINEOFFSETX 20
  12. #define LINEOFFSETY 300
  13. // на сколько вверх и вниз будут выдвигаться элементы массива при обменах
  14. #define RISE 30
  15.  
  16. // сколько должно быть точек в пути при горизонтальном и вертикальном перемещении объекта
  17. #define VCOUNT 10
  18. #define HCOUNT 20
  19.  
  20. // отступ относительно верха окна для текста о текущем действии
  21. #define CENTERTEXTOFFSETY 20
  22. #define CENTERTEXTHEADER "Текущее действие:"
  23. // на каком расстоянии от текста нужно рисовать тень
  24. #define SHADOWOFFSET -1
  25.  
  26. // настройки для рисования легенды:
  27. // отступ, на котором будет рисоватся легенда, относительно правого края
  28. #define LEGENDOFFSETX 5
  29. // положение легенды относительно верха окна
  30. #define LEGENDY 60
  31. // координаты левого верхнего угла прямоугольника, в котором будет рисоваться легенда
  32. #define LEGENDINNEROFFSETX 10
  33. #define LEGENDINNEROFFSETY 10
  34. // ширина легенды
  35. #define LEGENDWIDTH 290
  36. // высота, которая отводится под заголовок в легенде
  37. #define LEGENDHEADERHEIGHT 20
  38. #define LEGENDHEADER "Легенда"
  39.  
  40. // радиус окружности / половина ширины прямоугольника элемента массива и дерева
  41. #define RAD 14
  42. // расстояние между элементами в массиве и на последнем уровне дерева
  43. #define GAP 0
  44.  
  45. // количество элементов в массивах
  46. #define N 26
  47. // массив будет заполнятся случайными значениями из диапазона 0..MOD-1
  48. #define MOD 100
  49.  
  50. // количество состояний, в которых может находится каждый элемент
  51. #define STATECNT 9
  52.  
  53. // задержки между событиями:
  54. // между перемещениями элементов
  55. #define MOVEDELAY 10
  56. // после отрисовки объектов
  57. #define REDRAWDELAY 300
  58. // промежутки между вызовом визуализатора и некоторыми фазами сортировки
  59. #define SORTDELAY 400
  60.  
  61. // ширина и высота окна
  62. #define WIDTH 800
  63. #define HEIGHT 360
  64.  
  65. typedef struct elpath elpath;
  66. typedef struct element element;
  67. typedef struct action action;
  68. typedef enum elstate elstate;
  69. typedef enum actiontype actiontype;
  70. typedef union actionparameter actionparameter;
  71.  
  72. // возможные состояния вершин
  73. enum elstate
  74. {
  75. normal,
  76. inplace,
  77. inheap,
  78. processed,
  79. active,
  80. activeinplace,
  81. activeinheap,
  82. activeproc,
  83. activeinterval
  84. };
  85.  
  86. // варианты действий для визуализатора: подождать, обменять два элемента, поменять состояние элемента и сменить название фазы сортировки
  87. enum actiontype
  88. {
  89. acsleep,
  90. acswap,
  91. acchangestate,
  92. acchangephase
  93. };
  94.  
  95. // параметры для каждого из действий: сколько ждать, какие элементы менять, какое состояние какому элементу установить и номер фазы
  96. union actionparameter
  97. {
  98. int time;
  99. struct
  100. {
  101. int id1,id2;
  102. } swap;
  103. struct
  104. {
  105. int id;
  106. elstate state;
  107. } chgst;
  108. int phase;
  109. };
  110.  
  111. // структура, содержащая информацию о номере элемента, который нужно перемещать и по какой траектории двигать его в массиве и в дереве
  112. struct elpath
  113. {
  114. GList *linecurve,*treecurve;
  115. int elnum;
  116. };
  117.  
  118. // элемент это совокупность точки в дереве и массиве, значения, по которому идёт сортировка и состояния, в котором он находится
  119. struct element
  120. {
  121. GdkPoint linecoord,treecoord;
  122. int value;
  123. elstate state;
  124. };
  125.  
  126. // структура, описывающая действия для визуализатора
  127. struct action
  128. {
  129. actiontype type;
  130. actionparameter param;
  131. };
  132.  
  133. void init_gc();
  134. void init_sort();
  135. void init_legend();
  136. void draw_element(GtkWidget *w,GdkDrawable *d, element *e);
  137. void draw_text_in_center(gchar * text, GtkWidget *w, GdkDrawable *d, GdkGC *gc, gint xc, gint yc);
  138. void draw_text_in_center_y(gchar * text, GtkWidget *w, GdkDrawable *d, GdkGC *gc, gint x, gint yc);
  139. void draw_legend();
  140. void startmoving(elpath *p1,elpath *p2);
  141. void swap(int idx1,int idx2);
  142. void swapvis(int idx1,int idx2);
  143. void displayphasetxt();
  144. void genline(GdkPoint s, GdkPoint t,int cnt,GList ** l);
  145. void insertswap(int idx1,int idx2);
  146. void insertchangestate(int idx,elstate newstate);
  147. void insertsleep(int t);
  148. void insertchangephase(int np);
  149. void sort(int *array);
  150. void quicksort(int n,int *a,int offset);
  151. GdkPoint getlinecoord(int n);
  152. GdkPoint gettreecoord(int n,int maxh);
  153. elpath makepath(gint idx,GdkPoint listb,GdkPoint liste, gint dy, gint listc1, gint listc2,gint listc3,GdkPoint treep1,GdkPoint treep2, gint treec);
  154. gboolean move(elpath* p);
  155. gboolean expose_event(GtkWidget *w,GdkEvent *e, gpointer data);
  156. gboolean delete_event(GtkWidget *w,GdkEvent *e, gpointer data);
  157. gboolean visualize(gpointer data);
  158.  
  159.  
  160. #endif
Advertisement
Add Comment
Please, Sign In to add comment