⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gw_hs_observer.c

📁 A Library of Efficient Data Types and Algorithms,封装了常用的ADT及其相关算法的软件包
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "gw_hs_observer.h"// public functions//void gw_hs_observer::on_start(alg_heapsort&) {    int gw_xmin;  int gw_xmax;  int gw_ymin;  int gw_ymax;  (gw.get_window()).frame_box(gw_xmin, gw_ymin, gw_xmax, gw_ymax);  AT_ptr_tree->extract_frame_label(LanguagePath + "win_and_panel_labels/W_tree.frame_label");  AT_ptr_tree->set_node_distance(2.2, 1.7);   AT_ptr_tree->create_tree((*ap));  AT_ptr_tree->set_display_position(gw_xmin, gw_ymax + 20);  int i;  for(i = A_node.low(); i <= ArraySize; i++)    gw.set_color(A_node[i], AT_ptr_tree->get_node_color(i));  TL_ptr_source->set_scrollbar(true);  TL_ptr_source->set_bg_color(blue);  TL_ptr_source->extract_frame_label(LanguagePath + "win_and_panel_labels/W_source.frame_label");  TL_ptr_source->load_text_with_display(LanguagePath + "heapsort.txt", gw_xmax + 20, gw_ymin);      TL_ptr_run->extract_frame_label(LanguagePath + "win_and_panel_labels/W_run.frame_label");  TL_ptr_run->set_button_space(30);  TL_ptr_run->set_scrollbar(true);  TL_ptr_run->create_menu(LanguagePath + "win_and_panel_labels/W_run.button_labels");  TL_ptr_run->set_display_position(gw_xmin, gw_ymin - TL_ptr_run->get_window_height() - 47);  goto_label = TL_ptr_run->get_button_label(1);  // dirty menu effects   //  goto_label = goto_label.del(goto_label.length() - 3);    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 8));  delay_label = TL_ptr_run->get_button_label(2);  // dirty menu effects   //  delay_label = delay_label.del(delay_label.length() - 3);    TL_ptr_run->set_button_label(2, delay_label + string("%d ", AnimationDelay));  VariableName.clear();                   VariableName.append("i");         VariableName.append("k");  VariableName.append("j");           VariableName.append("\\red A[k]");        VariableName.append("A[j]");      VariableName.append("A[j+1]");      VariableName.append("N");     VariableName.append("swaps");       VariableName.append("compares");   VariableValue.clear();  for(i = 0; i < VariableName.size(); i++)    VariableValue.append("");      VV_ptr_state->extract_frame_label(LanguagePath +  "win_and_panel_labels/W_state.frame_label");  VV_ptr_state->set_tupel_per_line(3);  VV_ptr_state->set_fontsize(18);  VV_ptr_state->create_table(VariableName, VariableValue);  VV_ptr_state->display(gw_xmax+ 20, gw_ymin -  AT_ptr_tree->get_window_height() - 27); }// function heapsort//void gw_hs_observer::on_1(alg_heapsort&, int N) {  if(Abort) return;    show_active_line(14);  TL_ptr_run->load_text_with_display(LanguagePath + "start.txt");  AT_ptr_tree->display();    actual_N = N;  update_status_window();    if(GotoLine == 8)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 9));    wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_2(alg_heapsort&, int i) {     if(Abort) return;    show_active_line(16);  TL_ptr_run->load_text_with_display(LanguagePath + "for.txt");    actual_i = i;  Compares++;  update_status_window();  if(GotoLine == 9)   {    GotoLine = actual_i >= 1 ? 10 : 11;     TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_3(alg_heapsort&, int, int) {  if(Abort) return;    show_active_line(17);  TL_ptr_run->load_text_with_display(LanguagePath + "heapify_call1.txt");  if(GotoLine == 10)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 1));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}// function heapify//void gw_hs_observer::on_4(alg_heapsort&, int k) {  if(Abort) return;    show_active_line(1);  TL_ptr_run->load_text_with_display(LanguagePath + "heapify_call2.txt");    actual_i = -1;  actual_k = k;  update_status_window();  col_k = AT_ptr_tree->set_node_color(actual_k, red);  gw.set_color(A_node[actual_k], red);  if(GotoLine == 1)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 2));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_5(alg_heapsort&, int, int) {  if(Abort) return;  show_active_line(3);  TL_ptr_run->load_text_with_display(LanguagePath + "while1.txt");    Compares++;  update_status_window();  if(GotoLine == 2)   {    if(actual_k * 2 > actual_N)      GotoLine = BuildHeap ? 9 : 11;    else       GotoLine = 3;     TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);  if(actual_k * 2 > actual_N)  {    if(isZoom)      zoom_to_interval(A_node[1], A_node[actual_N]);    if(GotoLine != -1 && !SemiAuto)      GotoLine = BuildHeap ? 9 : 11;    AT_ptr_tree->set_node_color(actual_k, col_k);    gw.set_color(A_node[actual_k], col_k);      actual_k = -1;    actual_j = -1;  }   else     if(GotoLine != -1 && !SemiAuto)      GotoLine = 3;}void gw_hs_observer::on_6(alg_heapsort&, int j) {  if(Abort) return;  show_active_line(5);  TL_ptr_run->load_text_with_display(LanguagePath + "new_j.txt");      actual_j = j;  update_status_window();  col_j = AT_ptr_tree->get_node_color(actual_j);  if(GotoLine == 3)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 4));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_7(alg_heapsort&, int N, int j) {      if(Abort) return;  if(isZoom)    if(actual_j < actual_N)      zoom_to_interval(A_node[actual_k], A_node[actual_j+1]);    else       zoom_to_interval(A_node[actual_k], A_node[actual_j+1]);    show_active_line(6);  TL_ptr_run->load_text_with_display(LanguagePath + "if1.txt");   actual_N = N;  actual_j = j;  if(actual_j < actual_N)  {     col_j = AT_ptr_tree->get_node_color(actual_j);        col_marked = col_j == green2 ? green : blue;        AT_ptr_tree->marked_edge(actual_j, actual_j + 1, ivory, 3);           TL_ptr_run->wait_with_timeout(AnimationDelay * 100);    AT_ptr_tree->demarked_edge(actual_j, actual_j + 1);           if(A_int[actual_j] < A_int[actual_j+1])      actual_j++;          AT_ptr_tree->set_node_color(actual_j, col_marked);      gw.set_color(A_node[actual_j], col_marked);  }    Compares++;  Compares++;  update_status_window();  if(GotoLine == 4)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 5));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_8(alg_heapsort&, int, int) {  if(Abort) return;  show_active_line(7);  TL_ptr_run->load_text_with_display(LanguagePath + "if2.txt");    if(A_int[actual_k] >= A_int[actual_j])        AT_ptr_tree->marked_edge(actual_k, actual_j, grey1, 3);         else    AT_ptr_tree->marked_edge(actual_k, actual_j, ivory, 3);         TL_ptr_run->wait_with_timeout(AnimationDelay * 100);  AT_ptr_tree->demarked_edge(actual_k, actual_j);           Compares++;  update_status_window();  if(GotoLine == 5)   {    if(A_int[actual_k] >= A_int[actual_j])      GotoLine = BuildHeap ? 9 : 11;    else      GotoLine = 6;    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);  if(A_int[actual_k] >= A_int[actual_j])  {    if(isZoom)      zoom_to_interval(A_node[1], A_node[actual_N]);    if(GotoLine != -1 && !SemiAuto)      GotoLine = BuildHeap ? 9 : 11;    AT_ptr_tree->set_node_color(actual_k, col_k);    AT_ptr_tree->set_node_color(actual_j, col_j);    gw.set_color(A_node[actual_k], col_k);    gw.set_color(A_node[actual_j], col_j);    actual_k = -1;    actual_j = -1;  }  else     if(GotoLine != -1 && !SemiAuto)      GotoLine = 6;}void gw_hs_observer::on_9(alg_heapsort&, int, int) {  if(Abort) return;  show_active_line(8);  TL_ptr_run->load_text_with_display(LanguagePath + "swap1.txt");  col_j = col_j == blue2 ? green2 : blue2;  col_k = col_k == blue2 ? green2 : blue2;  swap_nodes(actual_k,actual_j);  AT_ptr_tree->set_node_color(actual_k, col_j);  gw.set_color(A_node[actual_k], col_j);            Swaps++;  update_status_window();  if(GotoLine == 6)   {    TL_ptr_run->enable_all_buttons();    TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 7));        wait_of();  }   else     TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -