Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: In ra hình các ngôi sao !

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Mặc định In ra hình các ngôi sao !

    các bác viết dùm iem bài nì với




    Mong các bác giúp!! thanks
    Đã được chỉnh sửa lần cuối bởi spirit1989 : 25-03-2008 lúc 10:26 AM.

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    4

    hjx!!! sao chả có sư huynh nào giúp đệ hết dzạ??

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Tại đệ đó . Muội sẽ ko giúp đâu nếu đệ hỏi kiểu đó . Đệ nên suy nghĩ và code thử , post code lên mọi người sẽ giúp .

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    4

    đệ đâu có nghĩ ra dc cái hướng làm đâu!:((. mụi có thể chỉ cái hướng để đệ làm thử hok???

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài này nếu dùng các thư viện hỗ trợ như openGL thì chỉ cần quay trục là làm cho nó chuyển động được rùi, nhưng quả thật làm trên console phải cần thuật toán. Suy nghĩ cả đêm qua mà vẫn chưa ra T_T. Đây là 1 cái dàn bài nhưng chưa có thuật toán gì hết, còn về các hàm đồ hoạ thì tui mù ( vì tui không bao h xài thằng graphics.h ). Nhưng tui nghĩ chỉ cần tạo cho nó move around rùi sau đó tô màu cũng chỉ còn là formula.
    C++ Code:
    1. #include <cstdio>
    2. #include <iostream>
    3. #include <climits>
    4. #include <ctime>
    5. #include <windows.h>
    6.  
    7. const int Rows = 20;
    8. const int Cols = 19;
    9. const int spanSize = 7;
    10. const int DX = 5;
    11. const int DY = 6;
    12.  
    13. void clrscr(void){
    14.   COORD                       coordScreen = { 0, 0 };
    15.   DWORD                       cCharsWritten;
    16.   CONSOLE_SCREEN_BUFFER_INFO  csbi;
    17.   DWORD                       dwConSize;
    18.   HANDLE                      hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    19.   GetConsoleScreenBufferInfo(hConsole, &csbi);
    20.   dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    21.   FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
    22.   GetConsoleScreenBufferInfo(hConsole, &csbi);
    23.   FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
    24.   SetConsoleCursorPosition(hConsole, coordScreen);
    25. }
    26.  
    27. void delay(long amount){
    28.   for(int x = 0; x < amount; ++x){
    29.     //do nothing;
    30.   }
    31. }
    32.  
    33. void print(const char span[][Cols]){
    34.   for(int x = 0; x < Rows; ++x){
    35.     for(int y = 0; y < Cols; ++y){
    36.       std::cout << span[x][y];
    37.     }
    38.     std::cout << '\n';
    39.   }
    40. }
    41.  
    42. void rotate(char span[][Cols]){
    43.   for(int x = 0; x < Rows; ++x){
    44.     for(int y = 0; y < Cols; ++y){
    45.       if(span[x][y] == ' '){
    46.         span[x][y] = '*';
    47.       }
    48.       else{
    49.         span[x][y] = ' ';
    50.       }
    51.     }
    52.   }
    53. }
    54.  
    55.  
    56. int main(){
    57.   char span[Rows][Cols] = {
    58.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    59.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    60.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    61.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    62.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    63.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    64.   {' ',' ',' ',' ',' ','*','*','*','*','*',' ',' ',' ','*',' ',' ',' ',' ',' '},
    65.   {' ',' ',' ',' ',' ',' ','*','*','*','*',' ',' ','*','*',' ',' ',' ',' ',' '},
    66.   {' ',' ',' ',' ',' ',' ',' ','*','*','*',' ','*','*','*',' ',' ',' ',' ',' '},
    67.   {' ',' ',' ',' ',' ',' ',' ',' ','*','*','*','*','*','*',' ',' ',' ',' ',' '},
    68.   {' ',' ',' ',' ',' ','*','*','*','*','*','*','*','*','*',' ',' ',' ',' ',' '},
    69.   {' ',' ',' ',' ',' ','*','*','*','*','*','*',' ',' ',' ',' ',' ',' ',' ',' '},
    70.   {' ',' ',' ',' ',' ','*','*','*',' ','*','*','*',' ',' ',' ',' ',' ',' ',' '},
    71.   {' ',' ',' ',' ',' ','*','*',' ',' ','*','*','*','*',' ',' ',' ',' ',' ',' '},
    72.   {' ',' ',' ',' ',' ','*',' ',' ',' ','*','*','*','*','*',' ',' ',' ',' ',' '},
    73.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    74.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    75.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    76.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    77.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
    78.   };
    79.                  
    80.  
    81.   print(span);
    82.   std::cout << '\n';
    83.   for(int x = 0; x < 100; ++x){
    84.     rotate(span);
    85.     print(span);
    86.     std::cout << '\n';
    87.     delay(10000);
    88.   }
    89.  
    90.   system("pause");
    91.   return 0;
    92. }
    Cậu có idea gì thì tui cùng thảo luận với cậu, còn hiện h thì vộ phương T_T !

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định In ra hình các ngôi sao !

    Đệ nè . Đệ có thể vẽ được hình như thế ko nào . Rất dễ dàng , nếu như đệ xem hình đó là 1 mảng 2 chiều với các phần tử trong mảng là * và khoảng trắng . Đệ cứ khai báo thiết lập trước như hình sau đó in ra như mảng 2 chiều bình thường là ra thôi mà . Còn về tạo cảm giác xoay : đệ thấy rằng hình như trên có 4 phần . Đệ cứ lần lượt tô màu từng phần ( dùng delay để dừng lại 1 ít thời gian để xem ở mỗi phần ) , sau đó lặp lại chu kỳ quay là ra thui á .

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Đệ nè . Đệ có thể vẽ được hình như thế ko nào . Rất dễ dàng , nếu như đệ xem hình đó là 1 mảng 2 chiều với các phần tử trong mảng là * và khoảng trắng . Đệ cứ khai báo thiết lập trước như hình sau đó in ra như mảng 2 chiều bình thường là ra thôi mà . Còn về tạo cảm giác xoay : đệ thấy rằng hình như trên có 4 phần . Đệ cứ lần lượt tô màu từng phần ( dùng delay để dừng lại 1 ít thời gian để xem ở mỗi phần ) , sau đó lặp lại chu kỳ quay là ra thui á .
    Sửa/Xóa bài viết
    Anh cũng không thấy dễ dàng chút nào T_T. Chỉ giáo đi em

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi sieuphuong Xem bài viết
    Đệ nè . Đệ có thể vẽ được hình như thế ko nào . Rất dễ dàng , nếu như đệ xem hình đó là 1 mảng 2 chiều với các phần tử trong mảng là * và khoảng trắng . Đệ cứ khai báo thiết lập trước như hình sau đó in ra như mảng 2 chiều bình thường là ra thôi mà . Còn về tạo cảm giác xoay : đệ thấy rằng hình như trên có 4 phần . Đệ cứ lần lượt tô màu từng phần ( dùng delay để dừng lại 1 ít thời gian để xem ở mỗi phần ) , sau đó lặp lại chu kỳ quay là ra thui á .
    Cái này là bài tập của phần cấu trúc điều khiển(tức là chỉ cho xài for,if,.... thoy) (trong lớp chưa có học tới phần mảng)

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    24

    Mình làm bài này như thế này, không biết có đạt yêu cầu hay không. Xin 1 lời nhận xét.

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <dos.h>
    4.  
    5.       // j = 0   1   2   3   4   5   6   7   8   //i
    6. char A[9][9] = {'*','*','*','*','*',' ',' ',' ','*', //0
    7.         ' ','*','*','*','*',' ',' ','*','*', //1
    8.         ' ',' ','*','*','*',' ','*','*','*', //2
    9.         ' ',' ',' ','*','*','*','*','*','*', //3
    10.         '*','*','*','*','*','*','*','*','*', //4
    11.         '*','*','*','*','*','*',' ',' ',' ', //5
    12.         '*','*','*',' ','*','*','*',' ',' ', //6
    13.         '*','*',' ',' ','*','*','*','*',' ', //7
    14.         '*',' ',' ',' ','*','*','*','*','*'};//8
    15.       // j = 0   1   2   3   4   5   6   7   8   //i
    16. char B[9][9] = {'*',' ',' ',' ','*','*','*','*','*', //0
    17.         '*','*',' ',' ','*','*','*','*',' ', //1
    18.         '*','*','*',' ','*','*','*',' ',' ', //2
    19.         '*','*','*','*','*','*',' ',' ',' ', //3
    20.         '*','*','*','*','*','*','*','*','*', //4
    21.         ' ',' ',' ','*','*','*','*','*','*', //5
    22.         ' ',' ','*','*','*',' ','*','*','*', //6
    23.         ' ','*','*','*','*',' ',' ','*','*', //7
    24.         '*','*','*','*','*',' ',' ',' ','*'};//8
    25. int i, j, m1 =10, m2 = 11, m;
    26. void main()
    27. {
    28. do
    29.  {
    30.  clrscr(); gotoxy(20, 3);
    31.   for (i = 0; i < 9; ++i)
    32.     {
    33.      printf("\n\n");gotoxy(20, wherey());
    34.      for (j = 0; j < 9; ++j)
    35.     {
    36.      if ((A[i][j] == '*')&&(i < 4)&&(j < 5))
    37.        {
    38.         textcolor(m1);
    39.         cprintf("  *");
    40.        }
    41.      if ((A[i][j] == '*')&&(i < 5)&&(j > 4))
    42.        {
    43.         textcolor(m2);
    44.         cprintf("  *");
    45.        }
    46.      if ((A[i][j] == '*')&&(i > 3)&&(j < 4))
    47.        {
    48.         textcolor(m2);
    49.         cprintf("  *");
    50.        }
    51.      if ((A[i][j] == '*')&&(i > 4)&&(j > 3))
    52.        {
    53.         textcolor(m1);
    54.         cprintf("  *");
    55.        }
    56.      if (A[i][j] == ' ') printf("   ");
    57.      if ((i == j)&&(j == 4))
    58.        {
    59.         textcolor(RED);cprintf("  *");
    60.        }
    61.     }
    62.     }
    63. delay(250);clrscr();gotoxy(20, 3);
    64. for (i = 0; i < 9; ++i)
    65.     {
    66.      printf("\n\n");gotoxy(20, wherey());
    67.      for (j = 0; j < 9; ++j)
    68.     {
    69.      if ((B[i][j] == '*')&&(i < 5)&&(j < 4))
    70.        {
    71.         textcolor(m1);
    72.         cprintf("  *");
    73.        }
    74.      if ((B[i][j] == '*')&&(i < 4)&&(j > 3))
    75.        {
    76.         textcolor(m2);
    77.         cprintf("  *");
    78.        }
    79.      if ((B[i][j] == '*')&&(i > 4)&&(j < 5))
    80.        {
    81.         textcolor(m2);
    82.         cprintf("  *");
    83.        }
    84.      if ((B[i][j] == '*')&&(i > 3)&&(j > 4))
    85.        {
    86.         textcolor(m1);
    87.         cprintf("  *");
    88.        }
    89.      if (B[i][j] == ' ') printf("   ");
    90.      if ((i == 4)&&(j == 4))
    91.        {
    92.         textcolor(RED);cprintf("  *");
    93.        }
    94.     }
    95.     }
    96.  delay(250);
    97.   m = m1; m1 = m2; m2 = m;
    98.  }
    99. while (!kbhit());
    100. }
    PASCAL Code:
    1.   (************************************************************************)
    2.   (* Nhom thuc hien   : Le Manh Linh   <code writer>                      *)
    3.   (*                    Nguyen Duc Hoang                                  *)
    4.   (*                    Nguyen Van Khoa                                   *)
    5.   (* Lop              : K5C - Khoa CNTT - DH Thai Nguyen                  *)
    6.   (*                                                                      *)
    7.   (*---------------------------- BAI TAP LON -----------------------------*)
    8.   (*------------------------ LY THUYET THUAT TOAN ------------------------*)
    9.   (*                               DE SO 07                               *)
    10.   (*                                                                      *)
    11.   (************************************************************************)
    12.  
    13.  
    14. (**************************************************************************)
    15. Program Merge_Sort;
    16. (**************************************************************************)
    17. Uses Crt, Graph, Dos;
    18. Type
    19.   Font = Array[1..256*16] of Byte;
    20.   Font2 = Array[128*16 + 1..256*16] of Byte;
    21.   StrArr = Array[1..200] of string[150];
    22. Const
    23. Fnt2 : Font2=
    24.              (0, 0, 108, 56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    25.              12, 24, 108,  56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    26.              96, 48, 108, 56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    27.              48, 16, 108, 56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    28.              20, 40, 108, 56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    29.              0, 0, 108, 56, 0, 120, 12, 124, 204, 204, 204, 118, 0, 48, 48, 0,
    30.              0, 0, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    31.              6, 12, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    32.              192, 96, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    33.              28, 4, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    34.              54, 108, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    35.              0, 0, 56, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 48, 48, 0,
    36.              0, 0, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    37.              6, 12, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    38.              192, 96, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    39.              28, 4, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    40.              54, 108, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    41.              0, 0, 56, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 48, 48, 0,
    42.              0, 0, 0, 6, 2, 126, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    43.              0, 12, 24, 6, 2, 126, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    44.              0, 96, 48, 6, 2, 126, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    45.              0, 56, 8, 22, 2, 126, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    46.              0, 54, 108, 6, 2, 126, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    47.              0, 0, 0, 6, 2, 126, 198, 198, 198, 198, 198, 124, 0, 48, 48, 0,
    48.              0, 0, 56, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    49.              6, 12, 56, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    50.              192, 96, 56, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    51.              14, 2, 60, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    52.              54, 108, 56, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    53.              0, 0, 56, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 48, 48, 0,
    54.              0, 0, 0, 6, 2, 206, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    55.              0, 12, 24, 6, 2, 206, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    56.              0, 96, 48, 6, 2, 206, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    57.              0, 56, 8, 22, 2, 206, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    58.              0, 54, 108, 6, 2, 206, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    59.              0, 0, 0, 6, 2, 206, 204, 204, 204, 204, 204, 118, 0, 48, 48, 0,
    60.              0, 0, 12, 24, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    61.              0, 0, 96, 48, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    62.              0, 56, 8, 16, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    63.              0, 0, 54, 108, 0, 120, 12, 124, 204, 204, 204, 118, 0, 0, 0, 0,
    64.              0, 0, 0, 0, 0, 120, 12, 124, 204, 204, 204, 118, 0, 48, 48, 0,
    65.              0, 0, 12, 24, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    66.              0, 0, 96, 48, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    67.              0, 56, 8, 16, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    68.              0, 0, 54, 108, 0, 124, 198, 254, 192, 192, 198, 124, 0, 0, 0, 0,
    69.              0, 0, 0, 0, 0, 124, 198, 254, 192, 192, 198, 124, 0, 48, 48, 0,
    70.              0, 0, 12, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
    71.              0, 0, 48, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
    72.              17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68,
    73.              85, 170, 85, 170, 85, 170, 85, 170, 85, 170, 85, 170, 85, 170, 85, 170,
    74.              221, 119, 221, 119, 221, 119, 221, 119, 221, 119, 221, 119, 221, 119, 221, 119,
    75.              24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
    76.              24, 24, 24, 24, 24, 24, 24, 248, 24, 24, 24, 24, 24, 24, 24, 24,
    77.              0, 56, 8, 16, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
    78.              0, 0, 54, 108, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
    79.              0, 0, 24, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 24, 24, 0,
    80.              0, 0, 12, 24, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    81.              54, 54, 54, 54, 54, 246, 6, 246, 54, 54, 54, 54, 54, 54, 54, 54,
    82.              54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
    83.              0, 0, 0, 0, 0, 254, 6, 246, 54, 54, 54, 54, 54, 54, 54, 54,
    84.              54, 54, 54, 54, 54, 246, 6, 254, 0, 0, 0, 0, 0, 0, 0, 0,
    85.              54, 54, 54, 54, 54, 54, 54, 254, 0, 0, 0, 0, 0, 0, 0, 0,
    86.              0, 0, 96, 48, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    87.              0, 0, 0, 0, 0, 0, 0, 248, 24, 24, 24, 24, 24, 24, 24, 24,
    88.              24, 24, 24, 24, 24, 24, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0,
    89.              24, 24, 24, 24, 24, 24, 24, 255, 0, 0, 0, 0, 0, 0, 0, 0,
    90.              0, 0, 0, 0, 0, 0, 0, 255, 24, 24, 24, 24, 24, 24, 24, 24,
    91.              24, 24, 24, 24, 24, 24, 24, 31, 24, 24, 24, 24, 24, 24, 24, 24,
    92.              0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
    93.              24, 24, 24, 24, 24, 24, 24, 255, 24, 24, 24, 24, 24, 24, 24, 24,
    94.              0, 56, 8, 16, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    95.              0, 0, 54, 108, 0, 124, 198, 198, 198, 198, 198, 124, 0, 0, 0, 0,
    96.              54, 54, 54, 54, 54, 55, 48, 63, 0, 0, 0, 0, 0, 0, 0, 0,
    97.              0, 0, 0, 0, 0, 63, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54,
    98.              54, 54, 54, 54, 54, 247, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
    99.              0, 0, 0, 0, 0, 255, 0, 247, 54, 54, 54, 54, 54, 54, 54, 54,
    100.              54, 54, 54, 54, 54, 55, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54,
    101.              0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
    102.              54, 54, 54, 54, 54, 247, 0, 247, 54, 54, 54, 54, 54, 54, 54, 54,
    103.              24, 24, 24, 24, 24, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
    104.              0, 0, 0, 0, 0, 124, 198, 198, 198, 198, 198, 124, 0, 48, 48, 0,
    105.              0, 0, 0, 0, 0, 255, 0, 255, 24, 24, 24, 24, 24, 24, 24, 24,
    106.              0, 0, 12, 24, 0, 204, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    107.              0, 0, 96, 48, 0, 204, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    108.              0, 56, 8, 16, 0, 204, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    109.              0, 0, 108, 216, 0, 204, 204, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    110.              0, 0, 0, 0, 0, 204, 204, 204, 204, 204, 204, 118, 0, 48, 48, 0,
    111.              0, 0, 12, 24, 0, 198, 198, 198, 198, 198, 198, 126, 6, 12, 248, 0,
    112.              0, 0, 96, 48, 0, 198, 198, 198, 198, 198, 198, 126, 6, 12, 248, 0,
    113.              24, 24, 24, 24, 24, 24, 24, 248, 0, 0, 0, 0, 0, 0, 0, 0,
    114.              0, 0, 0, 0, 0, 0, 0, 31, 24, 24, 24, 24, 24, 24, 24, 24,
    115.              255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
    116.              0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255,
    117.              0, 0, 56, 8, 16, 198, 198, 198, 198, 198, 198, 126, 6, 12, 248, 0,
    118.              0, 0, 54, 108, 0, 198, 198, 198, 198, 198, 198, 126, 6, 12, 248, 0,
    119.              255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    120.              0, 0, 0, 0, 0, 118, 220, 216, 216, 216, 220, 118, 0, 0, 0, 0,
    121.              0, 0, 0, 0, 120, 204, 216, 204, 198, 198, 198, 204, 192, 192, 0, 0,
    122.              0, 0, 0, 254, 198, 198, 192, 192, 192, 192, 192, 192, 0, 0, 0, 0,
    123.              0, 0, 0, 0, 128, 254, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0,
    124.              0, 0, 0, 254, 198, 96, 48, 24, 48, 96, 198, 254, 0, 0, 0, 0,
    125.              0, 0, 0, 0, 0, 126, 216, 216, 216, 216, 216, 112, 0, 0, 0, 0,
    126.              0, 0, 0, 0, 102, 102, 102, 102, 102, 124, 96, 96, 192, 0, 0, 0,
    127.              0, 0, 0, 0, 118, 220, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
    128.              0, 0, 0, 126, 24, 60, 102, 102, 102, 60, 24, 126, 0, 0, 0, 0,
    129.              0, 0, 0, 56, 108, 198, 198, 254, 198, 198, 108, 56, 0, 0, 0, 0,
    130.              0, 0, 56, 108, 198, 198, 198, 108, 108, 108, 108, 238, 0, 0, 0, 0,
    131.              0, 0, 30, 48, 24, 12, 62, 102, 102, 102, 102, 60, 0, 0, 0, 0,
    132.              0, 0, 0, 0, 0, 126, 219, 219, 219, 126, 0, 0, 0, 0, 0, 0,
    133.              0, 0, 0, 3, 6, 126, 207, 219, 243, 126, 96, 192, 0, 0, 0, 0,
    134.              0, 0, 28, 48, 96, 96, 124, 96, 96, 96, 48, 28, 0, 0, 0, 0,
    135.              0, 0, 0, 124, 198, 198, 198, 198, 198, 198, 198, 198, 0, 0, 0, 0,
    136.              0, 0, 0, 0, 254, 0, 0, 254, 0, 0, 254, 0, 0, 0, 0, 0,
    137.              0, 0, 0, 0, 24, 24, 126, 24, 24, 0, 0, 255, 0, 0, 0, 0,
    138.              0, 0, 0, 48, 24, 12, 6, 12, 24, 48, 0, 126, 0, 0, 0, 0,
    139.              0, 0, 0, 12, 24, 48, 96, 48, 24, 12, 0, 126, 0, 0, 0, 0,
    140.              0, 0, 14, 27, 27, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
    141.              24, 24, 24, 24, 24, 24, 24, 24, 216, 216, 216, 112, 0, 0, 0, 0,
    142.              0, 0, 0, 0, 24, 24, 0, 126, 0, 24, 24, 0, 0, 0, 0, 0,
    143.              0, 0, 0, 0, 0, 118, 220, 0, 118, 220, 0, 0, 0, 0, 0, 0,
    144.              0, 0, 0, 0, 0, 198, 198, 198, 198, 198, 198, 126, 6, 12, 248, 24,
    145.              0, 0, 12, 30, 12, 60, 108, 204, 204, 204, 204, 118, 0, 0, 0, 0,
    146.              0, 0, 248, 108, 102, 102, 246, 102, 102, 102, 108, 248, 0, 0, 0, 0,
    147.              0, 15, 12, 12, 12, 12, 12, 236, 108, 108, 60, 28, 0, 0, 0, 0,
    148.              0, 216, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    149.              0, 112, 152, 48, 96, 200, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    150.              0, 0, 0, 0, 124, 124, 124, 124, 124, 124, 124, 0, 0, 0, 0, 0,
    151.              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    152. (**************************************************************************)
    153. Var
    154.   R: Registers;
    155.   gd, gm, i: Integer;
    156.   st: String;
    157.   ch, ch1, ch2: Char;
    158.   Fnt : Font;
    159.   GT: StrArr;
    160. Type PhanTu = Record
    161.                 Val   : Integer;
    162.                 X     : Integer;
    163.                 Y     : Integer;
    164.               End;
    165.       Mang = Record
    166.                Arr : Array[1..20] of PhanTu;
    167.                n   : Integer;
    168.              End;
    169. Type Page = Record
    170.               Top: Byte;
    171.               Bom: Byte;
    172.             End;
    173.      _Page = Array[1..7] of Page;
    174. Type Item = Record
    175.               d: Integer;
    176.               x: Integer;
    177.             End;
    178.      _Item = Array[1..600] of Item;
    179. Var A, Temp: Mang; c: Char;
    180.     Delta, MH, d: Integer;
    181. (**************************************************************************)
    182. Function Vang: Integer;
    183. Begin
    184.   TextColor(14); Vang := 14;
    185. End;
    186. (**************************************************************************)
    187. Function Trang: Integer;
    188. Begin
    189.   TextColor(White); Trang := White;
    190. End;
    191. (**************************************************************************)
    192. Procedure Set_Color(Color: Byte);
    193. Begin
    194.   port[$3c4] := 2;
    195.   port[$3c5] := Color;
    196. End;
    197. (**************************************************************************)
    198. Procedure Out_Text(st: String);(*Conver xau st sang font VN va in ra man hinh*)
    199. Var
    200.   C16: Array[1..16] Of Byte;
    201.   x, y, n, i, ofset, l, j: Integer;
    202.   ch1: Char;
    203. Begin
    204.   Set_Color(GetColor);
    205.   l := Length(st);
    206.   For j := 1 to l do
    207.     Begin
    208.       ch1 := st[j];
    209.       n := Ord(ch1);
    210.       x := GetX;
    211.       y := GetY;
    212.       ofset := 80*y + (x div 8);
    213.       For i := 1 to 16 do
    214.         Begin
    215.           C16[i] := Fnt[16*n + i];
    216.           ofset := 80*(y + i - 1) + (x div 8);
    217.           Mem[$A000:ofset] := C16[i];
    218.         End;
    219.       x := x + 8;
    220.       If x > 632 then
    221.         Begin
    222.           x := 0;
    223.           y := y + 19;
    224.         End;
    225.       MoveTo(x, y);
    226.     End;
    227. End;
    228. (**************************************************************************)
    229. Procedure Sch_Repl(Var S : String; Sch, Repl : String);
    230. Var
    231.   i, j : Byte;
    232. Begin
    233.   j := 0;
    234.   Repeat
    235.     i := Pos(Sch, S);
    236.     If i > 0 then
    237.       Begin
    238.         Delete(S, i, Length(Sch));
    239.         Insert(Repl, S, i);
    240.         j := j + 1;
    241.       End;
    242.   Until (i = 0);
    243. End;
    244. (**************************************************************************)
    245. Procedure Read_Font;  (* Doc Font TV*)
    246. Var
    247.   sm, os, i : Word;
    248. Begin
    249.   R.AX := $1130;
    250.   R.BH := 6;
    251.   Intr($10, R);
    252.   sm := R.ES;
    253.   os := R.BP;
    254.   For i := 1 to 128*16 do Fnt[i] := Mem[sm:os + i - 1];
    255.     For i := 128*16 + 1 to 256*16 do Fnt[i] := Fnt2[i];
    256. End;
    257. (**************************************************************************)
    258. Procedure Load_Graph_Font;  (*Nap bo font TV*)
    259. Begin
    260.   R.AX := $1121;
    261.   R.CX := 16;
    262.   R.BL := 0;
    263.   R.DL := Round(480/R.CX);
    264.   R.ES := Seg(Fnt);
    265.   R.BP := Ofs(Fnt);
    266.   Intr($10, R);
    267. End;
    268. (**************************************************************************)
    269. Procedure UnLoadFont;
    270. Begin
    271.   R.AH := $11;
    272.   R.AL := $24;
    273.   R.BL := 30;
    274.   Intr($10, R);
    275. End;
    276. (**************************************************************************)
    277. Function VN(S : String) : String;  (*Chuyen 1 xau thanh xau TV co dau*)
    278. Begin
    279.   Sch_Repl(S, 'aw', chr(128));
    280.   Sch_Repl(S, chr(128) + 's', chr(129));
    281.   Sch_Repl(S, chr(128) + 'f', chr(130));
    282.   Sch_Repl(S, chr(128) + 'r', chr(131));
    283.   Sch_Repl(S, chr(128) + 'x', chr(132));
    284.   Sch_Repl(S, chr(128) + 'j', chr(133));
    285.   Sch_Repl(S, 'aa', chr(134));
    286.   Sch_Repl(S, chr(134) + 's', chr(135));
    287.   Sch_Repl(S, chr(134) + 'f', chr(136));
    288.   Sch_Repl(S, chr(134) + 'r', chr(137));
    289.   Sch_Repl(S, chr(134) + 'x', chr(138));
    290.   Sch_Repl(S, chr(134) + 'j', chr(139));
    291.   Sch_Repl(S, 'ee', chr(140));
    292.   Sch_Repl(S, chr(140) + 's', chr(141));
    293.   Sch_Repl(S, chr(140) + 'f', chr(142));
    294.   Sch_Repl(S, chr(140) + 'r', chr(143));
    295.   Sch_Repl(S, chr(140) + 'x', chr(144));
    296.   Sch_Repl(S, chr(140) + 'j', chr(145));
    297.   Sch_Repl(S, 'ow', chr(146));
    298.   Sch_Repl(S, chr(146) + 's', chr(147));
    299.   Sch_Repl(S, chr(146) + 'f', chr(148));
    300.   Sch_Repl(S, chr(146) + 'r', chr(149));
    301.   Sch_Repl(S, chr(146) + 'x', chr(150));
    302.   Sch_Repl(S, chr(146) + 'j', chr(151));
    303.   Sch_Repl(S, 'oo', chr(152));
    304.   Sch_Repl(S, chr(152) + 's', chr(153));
    305.   Sch_Repl(S, chr(152) + 'f', chr(154));
    306.   Sch_Repl(S, chr(152) + 'r', chr(155));
    307.   Sch_Repl(S, chr(152) + 'x', chr(156));
    308.   Sch_Repl(S, chr(152) + 'j', chr(157));
    309.   Sch_Repl(S, 'uw', chr(158));
    310.   Sch_Repl(S, 'w', chr(158));
    311.   Sch_Repl(S, chr(158) + 's', chr(159));
    312.   Sch_Repl(S, chr(158) + 'f', chr(160));
    313.   Sch_Repl(S, chr(158) + 'r', chr(161));
    314.   Sch_Repl(S, chr(158) + 'x', chr(162));
    315.   Sch_Repl(S, chr(158) + 'j', chr(163));
    316.   Sch_Repl(S, 'as', chr(164));
    317.   Sch_Repl(S, 'af', chr(165));
    318.   Sch_Repl(S, 'ar', chr(166));
    319.   Sch_Repl(S, 'ax', chr(167));
    320.   Sch_Repl(S, 'aj', chr(168));
    321.   Sch_Repl(S, 'es', chr(169));
    322.   Sch_Repl(S, 'ef', chr(170));
    323.   Sch_Repl(S, 'er', chr(171));
    324.   Sch_Repl(S, 'ex', chr(172));
    325.   Sch_Repl(S, 'ej', chr(173));
    326.   Sch_Repl(S, 'is', chr(174));
    327.   Sch_Repl(S, 'if', chr(175));
    328.   Sch_Repl(S, 'ir', chr(181));
    329.   Sch_Repl(S, 'ix', chr(182));
    330.   Sch_Repl(S, 'ij', chr(183));
    331.   Sch_Repl(S, 'os', chr(184));
    332.   Sch_Repl(S, 'of', chr(190));
    333.   Sch_Repl(S, 'or', chr(198));
    334.   Sch_Repl(S, 'ox', chr(199));
    335.   Sch_Repl(S, 'oj', chr(208));
    336.   Sch_Repl(S, 'us', chr(210));
    337.   Sch_Repl(S, 'uf', chr(211));
    338.   Sch_Repl(S, 'ur', chr(212));
    339.   Sch_Repl(S, 'ux', chr(213));
    340.   Sch_Repl(S, 'uj', chr(214));
    341.   Sch_Repl(S, 'ys', chr(215));
    342.   Sch_Repl(S, 'yf', chr(216));
    343.   Sch_Repl(S, 'yr', chr(221));
    344.   Sch_Repl(S, 'yx', chr(222));
    345.   Sch_Repl(S, 'yj', chr(248));
    346.   Sch_Repl(S, 'dd', chr(249));
    347.   Sch_Repl(S, 'DD', chr(250));
    348.   Sch_Repl(S, '~', '');
    349.   VN := S;
    350. End;
    351. (**************************************************************************)
    352. Procedure AutoDetect; FORWARD;
    353. (**************************************************************************)
    354. Procedure DrawNumber(x, y, Num, Color: Integer); FORWARD;
    355. (**************************************************************************)
    356. Procedure TrangTri; FORWARD;
    357. (**************************************************************************)
    358. Procedure Arrow(x, y: Integer); FORWARD;
    359. (**************************************************************************)
    360. Procedure GioiThieu; FORWARD;
    361. (**************************************************************************)
    362. Function Str(Num: Integer): string;  (* Chuyen so thanh xau*)
    363. Var i, Temp: Integer;
    364.     S, R: String;
    365. Begin
    366.   S := '';
    367.   Repeat
    368.     Temp := Num mod 10; Num := trunc((Num - Temp) / 10);
    369.     S := S + chr(48 + Temp);
    370.   Until Num = 0;
    371.   R := '';
    372.   For i := length(S) downto 1 do
    373.     R := R + S[i];
    374.   Str := R;
    375. End;
    376. (**************************************************************************)
    377. Function Value(S: String): Integer;(*Chuyen so duoi dang xau thanh danh so*)
    378. Var code: Integer;
    379.     Num : Integer;
    380. Begin
    381.   Val(S, Num, code);
    382.   If code = 0 then
    383.     Value := Trunc(Num);
    384. End;
    385. (**************************************************************************)
    386. Procedure GraphInput(Var n: Integer);(*Nhap so nguyen n trong man hinh do hoa*)
    387. Var x, y: Integer;
    388.     R: String;
    389.     c: Char;
    390. Begin
    391.   R := ''; x := GetX; y := GetY;
    392.   Repeat
    393.     MoveTo(x, y); Out_Text('           ');
    394.     MoveTo(x, y); Out_Text(R);
    395.     c := ReadKey;
    396.     If c in ['0'..'9'] then
    397.       Begin
    398.         If Length(R) < 4 then
    399.           Begin
    400.             Out_Text(c);
    401.             R := R + c;
    402.           End;
    403.       End;
    404.     If (c = #13)and((R = '')or(length(R) >= 5)) then
    405.       Begin
    406.         SetColor(2);
    407.         MoveTo(x, y); Out_Text(VN('Nhaajp sai !'));
    408.         c := '@'; R := '';
    409.         Repeat
    410.           c := ReadKey;
    411.           If c = #13 then
    412.             Begin
    413.               SetColor(2); MoveTo(x, y); Out_Text('           ');
    414.             End;
    415.         Until c = #13;
    416.         SetColor(2);
    417.         MoveTo(x, y); Out_Text('           ');
    418.         MoveTo(x, y);
    419.       End;
    420.     If c = #8 then
    421.       Begin
    422.         SetColor(2); MoveTo(x, y);
    423.         Delete(R, length(R), 1);
    424.         Out_Text(R + '      ');
    425.         MoveTo(x, y);
    426.       End;
    427.   Until (c = #13)and(R <> '')and(length(R) < 5);
    428.   n := Value(R);
    429. End;
    430. (**************************************************************************)
    431. Procedure Manual_Input;
    432. Var i, x, y: Integer;
    433.     c: Char;
    434. Begin
    435.   y := 140;
    436.   Repeat
    437.     MoveTo(24, y + 19); SetColor(2);
    438.     Out_Text(VN('Nhaajp soos luwowjng phaafn tuwr cuar daxy (2 < n < 15) : '));
    439.     x := GetX; Out_Text('       '); MoveTo(x, y + 19);
    440.     GraphInput(A.n);
    441.   Until (2 < A.n)and(A.n < 15);
    442.   y := GetY + 19;
    443.   For i := 1 to A.n do
    444.     Begin
    445.       MoveTo(25, y); Out_Text('A[' + Str(i) + '] = ');
    446.       GraphInput(A.Arr[i].Val); y := y + 19;
    447.     End;
    448.   Set_Color(4); Bar(12, 132, 628, 468); SetColor(2); Bar(12, 132, 628, 468);
    449.   MoveTo(24, 150);
    450.   Out_Text(VN('Soos luwowjng phaafn tuwr cuar daxy laf: '));
    451.   SetColor(6); Out_Text(Str(A.n)); Set_Color(10);
    452.   y := GetY + 50; x := (640 - A.n*40) div 2;
    453.   For i := 1 to A.n do
    454.     Begin
    455.       DrawNumber(x, y, A.Arr[i].Val, Black);
    456.       x := x + 40;
    457.     End;
    458. End;
    459. (**************************************************************************)
    460. Procedure Random_Input;
    461. Var i, x, y: Integer;
    462.     c: Char;
    463. Begin
    464.      Out_Text(VN('Chojn '));
    465.      SetColor(4); Out_Text('1 ');
    466.      SetColor(2); Out_Text(VN('hoawjc '));
    467.      SetColor(4); Out_Text('2 '); SetColor(2);
    468.      Out_Text(':                                                                 ');
    469.      Out_Text('                                                                                ');
    470.      SetColor(4); Out_Text('1. ');
    471.      SetColor(2);
    472.      Out_Text(VN('Nhaajp soos luwowjng phaafn tuwr cuar daxy vaf khowri tajo ngaaxu nhieen casc gias trij cuar daxy.    '));
    473.      SetColor(4); Out_Text('2. ');
    474.      SetColor(2);
    475.      Out_Text(VN('Khowri tajo ngaaxu nhieen soos luwowjng phaafn tuwr vaf casc gias trij cuar daxy.'));
    476.      Repeat
    477.        if KeyPressed then c:= ReadKey;
    478.      Until (c = '1')or(c = '2');
    479.      If c = '1' then
    480.        Repeat
    481.          Set_Color(4); SetFillStyle(1, 9); Bar(12, 132, 628, 468); Set_Color(2);
    482.          Bar(12, 132, 628, 648); SetColor(2);
    483.          MoveTo(25, 170);
    484.          Out_Text(VN(' Nhaajp soos luwowjng phaafn tuwr (2 < n < 15): ')); GraphInput(A.n);
    485.        Until (2 < A.n)and(A.n < 15)and(IOResult = 0);
    486.      If c = '2' then
    487.        Repeat
    488.          Randomize;
    489.          A.n := Random(15);
    490.        Until (2 < A.n)and(A.n < 15)and(IOResult = 0);
    491.      MoveTo(50, GetY + 38);
    492.      SetColor(2);
    493.      Out_Text(VN('Soos luwowjng phaafn tuwr cuar daxy laf: '));
    494.      SetColor(6); Out_Text(Str(A.n)); Set_Color(10);
    495.      Randomize;
    496.      x := (640 - 40*A.n) div 2; y := GetY + 60;
    497.      SetColor(Blue);
    498.      For i := 1 to A.n do
    499.        Begin
    500.          A.Arr[i].Val := Random(10000);
    501.          DrawNumber(x, y, A.Arr[i].Val, Black);
    502.          x := x + 40;
    503.        End;
    504. End;
    505. (**************************************************************************)
    506. Procedure Nhap;    (*Nhap du lieu*)
    507. Var c: Char;
    508. Begin
    509.   DirectVideo := False;
    510.   Read_Font;
    511.   Load_Graph_Font;
    512.   SetColor(2);
    513.   MoveTo(25, 150);
    514.   Out_Text(VN('Chojn')); SetColor(4); Out_Text(' 1 ');
    515.   SetColor(2); Out_Text(VN('hoawjc'));
    516.   SetColor(4); Out_Text(' 2 '); SetColor(2); Out_Text(':');
    517.   Out_Text('                                                                 ');
    518.   Out_Text('                                                                               ');
    519.   SetColor(4); Out_Text('1. '); SetColor(2);
    520.   Out_Text(VN('Nhaajp dawxy soos caafn sawsp xeesp tuwf bafn phism.'));
    521.   Out_Text('                                         ');
    522.   SetColor(4); Out_Text('2. '); SetColor(2);
    523.   Out_Text(VN('Khowri tajo ngaaxu nhieen 1 daxy soos.'));
    524.   Repeat
    525.     c := ReadKey;
    526.   Until (c = '1')or(c = '2');
    527.   Set_Color(4); Bar(12, 132, 628, 468); SetColor(2); Bar(12, 132, 628, 468);
    528.   SetColor(2);
    529.   If c = '1' then
    530.     Begin
    531.       Manual_Input;
    532.     End;
    533.   If c = '2' then
    534.     Begin
    535.       MoveTo(24, 150);
    536.       Random_Input;
    537.     End;
    538. End;
    539. (**************************************************************************)
    540. Procedure Move1(A: Mang; Left, Right: Integer);
    541. Var i, j, Mid: Integer;
    542.     c: Char;
    543. Begin
    544.   Mid := (Left + Right) div 2;
    545.   For i := Left to Mid do DrawNumber(A.Arr[i].X, A.Arr[i].Y, A.Arr[i].Val, 5);
    546.   For i := Mid + 1 to Right do DrawNumber(A.Arr[i].X, A.Arr[i].Y, A.Arr[i].Val, 6);
    547.   Delay(1200);
    548.   For i := 0 to 90 do
    549.     Begin
    550.       SetColor(9); SetFillStyle(1, 9);
    551.       Bar(A.Arr[Left].X - 2, A.Arr[Left].Y + i - 2, A.Arr[Right].X + 42, A.Arr[Right].Y + i + 30);
    552.       For j := Left to Right do
    553.         Begin
    554.           If j <= Mid then DrawNumber(A.Arr[j].X, A.Arr[j].Y + i, A.Arr[j].Val, 5)
    555.           Else DrawNumber(A.Arr[j].X, A.Arr[j].Y + i, A.Arr[j].Val, 6);
    556.         End;
    557.       If KeyPressed then
    558.         Begin
    559.           c := ReadKey;
    560.           If (c = #13)and(Right > 3) then d := 2;
    561.         End;
    562.       Delay(7);
    563.     End;
    564. End;
    565. (**************************************************************************)
    566. Procedure Move2(Num, x1, y1: Integer; Var x2: Integer; y2: Integer);
    567. Var i, j: Integer;
    568.     c: Char;
    569. Begin
    570.   i := 0; j := 0;
    571.   If (y1 < y2)or(x1 > x2) then
    572.     Begin
    573.       While j < 48 do
    574.       Begin
    575.         SetColor(9); SetFillStyle(1, 9); Bar(x1 - 2, y1 - 2, x1 + 42, y1 + 30);
    576.         y1 := y1 + 1;
    577.         DrawNumber(x1, y1, Num, Red); Delay(d);
    578.         j := j + 1;
    579.         If KeyPressed then
    580.           Begin
    581.             c := ReadKey;
    582.             If c = #13 then d := 2;
    583.           End;
    584.       End;
    585.       While x1 < x2 do
    586.        Begin
    587.           SetColor(9); SetFillStyle(1, 9); Bar(x1 - 2, y1 - 2, x1 + 42, y1 + 30);
    588.           x1 := x1 + 1;
    589.           DrawNumber(x1, y1, Num, Red); Delay(d);
    590.           If KeyPressed then
    591.             Begin
    592.               c := ReadKey;
    593.               If c = #13 then d := 2;
    594.             End;
    595.         End;
    596.     While y1 < y2 do
    597.       Begin
    598.         SetColor(9); SetFillStyle(1, 9); Bar(x1 - 2, y1 - 2, x1 + 42, y1 + 30);
    599.         y1 := y1 + 1;
    600.         DrawNumber(x1, y1, Num, Red); Delay(d);
    601.         If KeyPressed then
    602.           Begin
    603.             c := ReadKey;
    604.             If c = #13 then d := 2;
    605.           End;
    606.       End;
    607.     End;
    608.     While x1 > x2 do
    609.       Begin
    610.         SetColor(9); SetFillStyle(1, 9); Bar(x1 - 2, y1 - 2, x1 + 42, y1 + 30);
    611.         x1 := x1 - 1;
    612.         DrawNumber(x1, y1, Num, Red); Delay(d);
    613.         If KeyPressed then c := ReadKey;
    614.       End;
    615.     x2 := x2 + 44;
    616. End;
    617. (**************************************************************************)
    618. Procedure Move3(A: Mang; Left, Right: Integer; Var y: Integer);
    619. Var i: Integer;
    620.     c: Char;
    621. Begin
    622.   While y > A.Arr[Left].Y - 1 do
    623.     Begin
    624.       SetColor(9); SetFillStyle(1, 9); Bar(A.Arr[Left].X - 2, y - 2, A.Arr[Right].X + 42, y + 30);
    625.       For i := Left to Right do
    626.         DrawNumber(A.Arr[i].X, y, A.Arr[i].Val, Red);
    627.       If KeyPressed then
    628.         Begin
    629.           c := ReadKey;
    630.           If c = #13 then d :=2;
    631.         End;
    632.       y := y - 1; Delay(7);
    633.     End;
    634. End;
    635. (**************************************************************************)
    636. Procedure Merge1(Var A: Mang; Left, Mid, Right: Integer);
    637. Var Left1, Left2, Right1, Right2 : Integer;
    638.     i, d: Integer; T: Mang;
    639.     c: Char;
    640. Begin
    641.   Left1 := Left;
    642.   Right1 := Mid;
    643.   Left2 := Mid + 1;
    644.   Right2 := Right;
    645.   d := 1;
    646.   For i := Left to Right do
    647.     Begin
    648.       T.Arr[i].X := A.Arr[i].X;
    649.       T.Arr[i].Y := A.Arr[i].Y;
    650.     End;
    651.   For i := Left to Mid do
    652.     Begin
    653.       DrawNumber(A.Arr[i].X, A.Arr[i].Y, A.Arr[i].Val, 8);
    654.     End;
    655.   For i := Mid + 1 to Right do
    656.     Begin
    657.       DrawNumber(A.Arr[i].X, A.Arr[i].Y, A.Arr[i].Val, 10);
    658.     End;
    659.   SetColor(2); MoveTo(240, 440);
    660.   Out_Text(VN('Nhaasn') + ' Enter '+ VN('ddeer hoaf nhaajp'));
    661.   Repeat
    662.     c := ReadKey;
    663.   Until c = #13;
    664.   MoveTo(230, 440); SetFillStyle(1, Blue);
    665.   Bar(200, 435, 500, 465);
    666.   c := '@';
    667.   i := Left1;
    668.   While (Left1 <= Right1)and(Left2 <= Right2) do
    669.     Begin
    670.       If A.Arr[Left1].Val < A.Arr[Left2].Val then
    671.         Begin
    672.           T.Arr[i].Val := A.Arr[Left1].Val;
    673.           Left1 := Left1 + 1;
    674.         End
    675.       Else
    676.         Begin
    677.           T.Arr[i].Val := A.Arr[Left2].Val;
    678.           Left2 := Left2 + 1;
    679.         End;
    680.       i := i + 1;
    681.     End;
    682.   While Left1 <= Right1 do
    683.     Begin
    684.       T.Arr[i].Val := A.Arr[Left1].Val;
    685.       Left1 := Left1 + 1;
    686.       i := i + 1;
    687.     End;
    688.   While Left2 <= Right2 do
    689.     Begin
    690.       T.Arr[i].Val := A.Arr[Left2].Val;
    691.       Left2 := Left2 + 1;
    692.       i := i + 1;
    693.     End;
    694.   For i := Left to Right do A.Arr[i] := T.Arr[i];
    695. End;
    696. (**************************************************************************)
    697. Procedure Merge2(Var A: Mang; Left, Mid, Right: Integer);
    698. Var Left1, Left2, Right1, Right2 : Integer;
    699.     i, j, x, y: Integer; T: Mang;
    700. Begin
    701.   Left1 := Left;
    702.   Right1 := Mid;
    703.   Left2 := Mid + 1;
    704.   Right2 := Right;
    705.   i := Left1;
    706.   x := A.Arr[Left].X; y := A.Arr[Left].Y + 180;
    707.   Move1(A, Left, Right);
    708.   While (Left1 <= Right1)and(Left2 <= Right2) do
    709.     Begin
    710.       SetColor(9); SetFillStyle(1, 9);
    711.       Bar(13, A.Arr[Right].Y + 62, 628, A.Arr[Right].Y + 88);
    712.       SetFillStyle(1, Blue);
    713.       If Left1 <= Right1 then Arrow(A.Arr[Left1].X + 16, A.Arr[Left1].Y + 89);
    714.       If Left2 <= Right2 then Arrow(A.Arr[Left2].X + 16, A.Arr[Left2].Y + 89); Delay(500);
    715.       If A.Arr[Left1].Val < A.Arr[Left2].Val then
    716.         Begin
    717.           T.Arr[i].Val := A.Arr[Left1].Val;
    718.           Move2(A.Arr[Left1].Val, A.Arr[Left1].X, A.Arr[Left1].Y + 91, x, y);
    719.           Left1 := Left1 + 1;
    720.         End
    721.       Else
    722.         Begin
    723.           T.Arr[i].Val := A.Arr[Left2].Val;
    724.           Move2(A.Arr[Left2].Val, A.Arr[Left2].X, A.Arr[Left2].Y + 91, x, y);
    725.           Left2 := Left2 + 1;
    726.         End;
    727.       SetFillStyle(1, 9); Bar(13, A.Arr[Right].Y + 62, 628, A.Arr[Right].Y + 88);
    728.       i := i + 1;
    729.     End;
    730.   While Left1 <= Right1 do
    731.     Begin
    732.       T.Arr[i].Val := A.Arr[Left1].Val; SetFillStyle(1, Blue);
    733.       Move2(A.Arr[Left1].Val, A.Arr[Left1].X, A.Arr[Left1].Y + 91, x, y);
    734.       Left1 := Left1 + 1;
    735.       i := i + 1;
    736.     End;
    737.   While Left2 <= Right2 do
    738.     Begin
    739.       T.Arr[i].Val := A.Arr[Left2].Val; SetFillStyle(1, Blue);
    740.       Move2(A.Arr[Left2].Val, A.Arr[Left2].X, A.Arr[Left2].Y + 91, x, y);
    741.       Left2 := Left2 + 1;
    742.       i := i + 1;
    743.     End;
    744.   SetColor(9); SetFillStyle(1, 9);
    745.   Bar(13, y -2, 628, y + 30);
    746.   For i := Left to Right do A.Arr[i].Val := T.Arr[i].Val;
    747.   Move3(A, Left, Right, y);
    748. End;
    749. (**************************************************************************)
    750. Function DetectInit(path: string): Integer;
    751. Var gd, gm: Integer;
    752. Begin
    753.   gd := 0;
    754.   InitGraph(gd, gm, path);
    755.   DetectInit := GraphResult;
    756. End;
    757. (**************************************************************************)
    758. Procedure AutoDetect;
    759. Var Err: Integer;
    760.     Path: string;
    761. Begin
    762.   Err := DetectInit('C:\TP\BGI');
    763.   If Err <> 0 then Err := DetectInit('D:\TP\BGI');
    764.   If Err <> 0 then Err := DetectInit('E:\TP\BGI');
    765.   If Err <> 0 then Err := DetectInit('');
    766.   If Err = -3 then
    767.     Begin
    768.       Writeln; Write('  Khong tim thay file BGI'); Writeln;
    769.       Write('  Nhap duong dan den cac file BGI : '); HighVideo;
    770.       Readln(Path); Lowvideo;
    771.       Err := DetectInit(Path);
    772.       If Err <> 0 then
    773.         Begin
    774.           Writeln; Write('  Loi so '); HighVideo; Writeln(Err); LowVideo;
    775.           Write('  ');GraphErrorMsg(Err); Writeln;
    776.           Writeln('  Nhan phim bat ki de thoat !');
    777.           Repeat Until KeyPressed;
    778.           Halt(1);
    779.         End;
    780.     End;
    781.   If Err <> 0 then
    782.     Begin
    783.       Writeln; Writeln('  Xay ra loi khi khoi tao do hoa, ban vui long kiem tra lai'); Writeln;
    784.       Writeln('  Nhan phim bat ki de thoat !');
    785.       Repeat Until KeyPressed;
    786.       Halt(1);
    787.     End;
    788. End;
    789. (**************************************************************************)
    790. Procedure Arrow(x, y: integer);
    791. Begin
    792.   y := y - 21; MoveTo(x, y);
    793.   SetLineStyle(0, 0, 1);SetColor(White);
    794.   LineTo(x + 8, y);LineTo(x + 8, y + 8);
    795.   LineTo(x + 12, y + 8);LineTo(x + 4, y + 16);
    796.   LineTo(x - 4, y + 8);LineTo(x, y + 8);
    797.   LineTo(x, y);
    798.   FloodFill(x + 1, y + 1, White);
    799.   SetLineStyle(0, 0, 3);
    800.   MoveTo(x, y);
    801. End;
    802. (**************************************************************************)
    Khi xem nhớ đứng ra xa màn hình 1 chút để thấy rõ hơn cái chong chóng (phải không nhỉ?) đang quay nhé.
    À mà mình nghĩ thuật toán còn có thể cải tiến để "chong chóng" quay "luột" hơn.
    Đã được chỉnh sửa lần cuối bởi lelinhcntt : 31-05-2008 lúc 12:43 PM. Lý do: update lại code

  10. #10
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Mình có bài này mọi người tham khảo và góp ý nhé.

    Upgrade from rox_rook.

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <iostream>
    3. #include <math.h>
    4. #include <stdio.h>
    5. #include <stdlib.h>
    6. #include <vector>
    7. #include <complex>
    8.  
    9. using namespace std;
    10. const int Rows = 20;
    11. const int Cols = 19;
    12. const double pi = 3.14159265359;
    13. //Tọa độ tâm
    14. const int Y = 10;
    15. const int X = 9;
    16. //Độ chia nhỏ vòng.
    17. const int Round = 72;
    18. //Hình ban đầu.
    19. const char Root[Rows][Cols] = {
    20.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    21.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    22.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    23.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    24.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    25.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    26.   {' ',' ',' ',' ',' ','*','*','*','*','*',' ',' ',' ','*',' ',' ',' ',' ',' '},
    27.   {' ',' ',' ',' ',' ',' ','*','*','*','*',' ',' ','*','*',' ',' ',' ',' ',' '},
    28.   {' ',' ',' ',' ',' ',' ',' ','*','*','*',' ','*','*','*',' ',' ',' ',' ',' '},
    29.   {' ',' ',' ',' ',' ',' ',' ',' ','*','*','*','*','*','*',' ',' ',' ',' ',' '},
    30.   {' ',' ',' ',' ',' ','*','*','*','*','*','*','*','*','*',' ',' ',' ',' ',' '},
    31.   {' ',' ',' ',' ',' ','*','*','*','*','*','*',' ',' ',' ',' ',' ',' ',' ',' '},
    32.   {' ',' ',' ',' ',' ','*','*','*',' ','*','*','*',' ',' ',' ',' ',' ',' ',' '},
    33.   {' ',' ',' ',' ',' ','*','*',' ',' ','*','*','*','*',' ',' ',' ',' ',' ',' '},
    34.   {' ',' ',' ',' ',' ','*',' ',' ',' ','*','*','*','*','*',' ',' ',' ',' ',' '},
    35.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    36.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    37.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    38.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
    39.   {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
    40.   };
    41. char span[Rows][Cols];
    42. //Số lần dịch trong một vòng
    43. double can(int x)
    44. {
    45.     double dau=0,cuoi;
    46.     double tong;
    47.     double t;
    48.     if (abs(x)==1) return 1;
    49.     else
    50.         if (x==0) return 0;
    51.         else
    52.             if (abs(x)>1) cuoi=x;
    53.             else cuoi=1;
    54.     do
    55.     {
    56.         tong=(dau+cuoi)/2;
    57.         t=tong*tong;
    58.         if (t==x) return tong;
    59.         else
    60.             if (t > x) cuoi=tong;
    61.             else dau=tong;
    62.     } while ((dau+0.01) < cuoi);
    63.     return tong;
    64. }
    65. void clrscr(void){
    66.   COORD                       coordScreen = { 0, 0 };
    67.   DWORD                       cCharsWritten;
    68.   CONSOLE_SCREEN_BUFFER_INFO  csbi;
    69.   DWORD                       dwConSize;
    70.   HANDLE                      hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    71.   GetConsoleScreenBufferInfo(hConsole, &csbi);
    72.   dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    73.   FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
    74.   GetConsoleScreenBufferInfo(hConsole, &csbi);
    75.   FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
    76.   SetConsoleCursorPosition(hConsole, coordScreen);
    77. }
    78.  
    79. void delay(long amount)
    80. {
    81.   for(int x = 0; x < amount; ++x);
    82. }
    83.  
    84. void print(char span[][Cols])
    85. {
    86.     for(int x = 0; x < Rows; ++x)
    87.     {
    88.         for(int y = 0; y < Cols; ++y)
    89.         {
    90.             cout << span[x][y];
    91.             span[x][y]=' ';
    92.         }
    93.         cout << '\n';
    94.     }
    95. }
    96.  
    97. void quay(int n)
    98. {
    99.     int nX, nY;
    100.     double tmp, goc;
    101.     for(int x = 0; x < Rows; ++x)
    102.     {
    103.         for(int y = 0; y < Cols; ++y)
    104.         {
    105.             //
    106.             tmp = can((X-x)*(X-x)+(Y-y)*(Y-y));
    107.             goc = asin((X-x)/tmp);
    108.             if (y < (Cols-1)/2)
    109.             {
    110.                 if (x>(Rows-1)/2) goc-=(pi/2);
    111.                 if (x<(Rows-1)/2) goc+=(pi/2);
    112.             }
    113.             nX = X + int (sin(2*pi*n/Round+goc)*tmp);
    114.             nY = Y + int (cos(2*pi*n/Round+goc)*tmp);
    115.             if ((nX >= 0) && (nY >= 0) && (nX < Rows) && (nY < Cols))
    116.                 span[nX][nY]=Root[x][y];
    117.             //
    118.         }
    119.     }
    120. }
    121.  
    122. int main()
    123. {
    124.     int n=0;
    125.     cout << '\n';
    126.     for(int x = 0; x < 10000; ++x)
    127.     {
    128.         quay(n++);
    129.         if (n==Round) n=0;
    130.         print(span);
    131.         cout << '\n';
    132.         delay(50000000);
    133.     }
    134.     system("pause");
    135.     return 0;
    136. }

    Mỗi tội chế độ văn bản nên nó bị vỡ khá mạnh nhìn không giống lắm.
    Chắc phải dùng thư viện đồ họa đổ khối màu mới ổn được.

    Em sử dụng phép quay hình đó.

    Đã được chỉnh sửa lần cuối bởi mushu : 20-04-2008 lúc 05:18 PM. Lý do: Bổ sung thêm

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn