Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 31 kết quả

Đề tài: Help !!!! ^_^

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

    Mặc định Help !!!! ^_^

    C++ Code:
    1. #include <iostream>
    2. #include <ctime>
    3. #include <iomanip>
    4. #include <cstdlib>
    5.  
    6. using namespace std;
    7.  
    8. const int MAX_NUMBER_LIST = 511;
    9. const int DEFAULT_SEED = 5000;
    10. const int MAX_TEST_VALUE = 50;
    11. const int SEED = 11013;
    12. const int DEFAULT_FILL_IN_NUMBERS = 43;
    13.  
    14. enum techsType{linear, binary};
    15.  
    16. void PrintTestValues(const int list[],
    17.                      const int test[],
    18.                      int numberOfElements,
    19.                      techsType method,
    20.                      int& comparision);
    21.  
    22. void FillMainList(int list[]);
    23.  
    24. void PrintNameHeader(ostream& oss);
    25.  
    26. void FillTestArray(const int list[], int test[]);
    27.  
    28. void PrintArray(const int ary[], int size);
    29.  
    30. void SelectionSort(int list[], int size);
    31.  
    32. int LinearSearch(const int list[], int value, int& comps);
    33.  
    34. int BinarySearch(const int list[], int value, int& comps);
    35.  
    36. int SearchForExistingElement(const int list[], int value, int range);
    37.  
    38. void GenerateRandomNumber(int list[], int numElems);
    39.  
    40. void SwapTwoItems(int& left, int& right);
    41.  
    42.  
    43.  
    44.  
    45. void FillMainList(int list[])
    46. {
    47.     bool existed;
    48.     int scan;
    49.     int value;
    50.     int index = 0;
    51.     while(index < MAX_NUMBER_LIST)
    52.     {
    53.         value = rand()%5000;
    54.         existed = false;
    55.         for(scan = 0; scan < index; ++scan)
    56.         {
    57.             if(value == list[scan])
    58.                 existed = true;
    59.         }
    60.         if(existed == false)
    61.         {
    62.             list[index] = value;
    63.             index++;
    64.         }
    65.     }
    66. }
    67.  
    68. void PrintTestValues(const int list[],
    69.                      const int test[],
    70.                      int numberOfElements,
    71.                      techsType method,
    72.                      int& comps)
    73. {
    74.     cout << "Test value" << setw(16)
    75.          << "Result" << setw(16)
    76.          << "Number of Comparisons" << endl;
    77.  
    78.     if(method == linear)
    79.     {
    80.         for(int x = 0; x < numberOfElements; ++x)
    81.         {
    82.             cout << setw(6);
    83.             cout << test[x] << setw(16);
    84.             if(LinearSearch(list, test[x], comps) == -1)
    85.                 cout << "NOT found";
    86.             else
    87.                 cout << "found";
    88.             cout << setw(16) << comps;
    89.             comps = 0;
    90.             cout << endl;
    91.         }
    92.     }
    93.     else
    94.     {
    95.         for(int x = 0; x < numberOfElements; ++x)
    96.         {
    97.             cout << setw(6);
    98.             cout << test[x] << setw(16);
    99.  
    100.             if(BinarySearch(list, test[x], comps) == -1)
    101.                 cout << "NOT found";
    102.             else
    103.                 cout << "found";
    104.  
    105.             cout << setw(16) << comps;
    106.             comps = 0;
    107.             cout << endl;
    108.         }
    109.     }
    110. }
    111.  
    112.  
    113. int BinarySearch(const int list[], int value, int& comps)
    114. {
    115.     int first = 0,
    116.           last =  MAX_NUMBER_LIST - 1,
    117.           middle,
    118.           position = -1;
    119.     bool found = false;
    120.  
    121.     while(!found && first <= last)
    122.     {
    123.         comps++; //increast the number times searching
    124.         middle = (first + last)/2;
    125.         if(list[middle] == value)
    126.         {
    127.             found = true;
    128.             position = middle;
    129.         }
    130.         else if(list[middle] > value)
    131.             last = middle - 1;
    132.         else
    133.             first = middle + 1;
    134.     }
    135.     return position;
    136. }
    137.  
    138. void PrintArray(const int ary[], int size)
    139. {
    140.     cout << right;
    141.     cout << setw(6) << ary[0];
    142.     for(int index = 1; index < size; index++)
    143.     {
    144.         if((index % 12) == 0)
    145.             cout << endl;
    146.         cout << setw(6) << ary[index];
    147.     }
    148. }
    149.  
    150. void FillTestArray(const int list[], int test[])
    151. {
    152.     int index;
    153.     int scan;
    154.     int value;
    155.     bool existed = false;
    156.     for(index = 0; index < DEFAULT_FILL_IN_NUMBERS; ++index)
    157.     {
    158.         test[index] = list[index * 12];
    159.     }
    160.     do
    161.     {
    162.         value = rand() % 5000;
    163.         for(scan = 0; scan < index; ++scan)
    164.         {
    165.             if(value == test[scan])
    166.                 existed = true;
    167.         }
    168.         if(existed == false)
    169.         {
    170.             test[index] = value;
    171.             index++;
    172.         }
    173.     }while(index < MAX_TEST_VALUE);
    174. }
    175.  
    176. int SearchForExistingElement(const int list[], int value, int range)
    177. {
    178.     int index = 0;
    179.     int position = -1;
    180.     bool found = false;
    181.     while(index < range && !found)
    182.     {
    183.         if(list[index] == value)
    184.         {
    185.             found = true;
    186.             position = index;
    187.         }
    188.         index++;
    189.     }
    190.     return position;
    191. }
    192.  
    193. int LinearSearch(const int list[], int value, int &comps)
    194. {
    195.     int index = 0;
    196.     int position = -1;
    197.     bool found = false;
    198.     while(index < MAX_NUMBER_LIST && !found)
    199.     {
    200.         comps++; //increast the number times searching
    201.         if(list[index] == value)
    202.         {
    203.             found = true;
    204.             position = index;
    205.         }
    206.         index++;
    207.     }
    208.     return position;
    209. }
    210.  
    211.  
    212.  
    213. void SelectionSort(int list[], int numElems)
    214. {
    215.     int minIndex, minValue;
    216.     for(int start = 0; start < numElems - 1; ++start)
    217.     {
    218.         minIndex = start;
    219.         minValue = list[start];
    220.         for(int index = start + 1; index < numElems; ++index)
    221.         {
    222.             if(list[index] < minValue)
    223.             {
    224.                 minValue = list[index];
    225.                 minIndex = index;
    226.             }
    227.         }
    228.         list[minIndex] = list[start];
    229.         list[start] = minValue;
    230.     }
    231. }
    232.  
    233.  
    234. void SwapTwoItems(int& left, int& right)
    235. {
    236.     int temp = left;
    237.     left = right;
    238.     right = temp;
    239. }
    240.  
    241.  
    242. int main()
    243. {
    244.     int list[MAX_NUMBER_LIST];
    245.     int test[MAX_TEST_VALUE];
    246.     char answer;
    247.     int numberTest;
    248.     int comparision = 0;
    249.    
    250.     cout << "Do you want to use random values (versus default values)? [y/n] ";
    251.     cin >> answer;
    252.  
    253.     if(answer == 'Y' || answer == 'y')
    254.     {
    255.         srand(static_cast<unsigned>(time(0)));
    256.     }
    257.     else
    258.     {    
    259.         srand(static_cast<unsigned>(SEED));
    260.     }
    261.  
    262.     FillMainList(list);
    263.  
    264.     cout << "How many values do you want to test ? [1-50] ";
    265.     cin >> numberTest;
    266.  
    267.     FillTestArray(list, test);
    268.    
    269.     cout << "\n\nOriginal array : " << endl;
    270.     PrintArray(list, MAX_NUMBER_LIST);
    271.    
    272.     cout << "\n\nOriginal test-arry : " << endl;
    273.     PrintArray(test, numberTest);
    274.  
    275.     //cout << "\n\nBefore sort linear search performance : " << endl;
    276.     //PrintTestValues(list, test, numberTest, linear, comparision);
    277.    
    278.  
    279.     cout << "\n\nBefore sort binary search performance : " << endl;
    280.     PrintTestValues(list, test, numberTest, binary, comparision);
    281.    
    282.  
    283.     /*
    284.     SelectionSort(list, MAX_NUMBER_LIST);
    285.  
    286.  
    287.     cout << "\n\nAfter sort linear search performance : " << endl;
    288.     PrintTestValues(list, test, numberTest, linear, comparision);
    289.    
    290.  
    291.     cout << "\n\nAfter sort binary search performance : " << endl;
    292.     PrintTestValues(list, test, numberTest, binary, comparision);
    293.     */
    294.  
    295.     return 0;
    296. }
    Bác nào nhìn ra tại sao cái Binary search nó in ra NOT FOUND thì chỉ giúp r2 với T_T, nhìn nãy h hoa cả mắt T_T ! không thể tin code trên sai !

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Lạy chúa ^^!
    Code dài thế này mà ko có compiler thì làm sao mà biết được ^^!
    Is the moon rising...

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

    Nãy h em debug mà không hiểu nó sai chỗ nào , potay ngu không chịu nổi haha T_T, test ra vài test thì đúng y bóc, để vào sai be bét, hàm Binarysearch cỡ nào nó cũng cho ra -1. Trong khi em đã test rất kĩ T_T, em mà tìm ra em hứa mua 3 chai Ken tự thưởng haha !

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

    tại sao cái Binary search nó in ra NOT FOUND
    Anh nhập cái mảng để tìm kiếm như thế nào vậy ?

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

    List gồm 511 phần tử, test[] gồm 50 phần tử để test coi nó có trong list[] không T_T, mới vừa về nhà, làm ko ra thì không ngủ T_T, nóng quá đi :(( !

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

    Mặc định Help !!!! ^_^

    C++ Code:
    1. int BinarySearch(const int list[], int value, int& comps)
    2. {
    3.     int first = 0,
    4.           last =  MAX_NUMBER_LIST - 1,
    5.           middle,
    6.           position = -1;
    7.     bool found = false;
    8.  
    9.     while(!found && first <= last)
    10.     {
    11.         comps++; //increast the number times searching
    12.         middle = (first + last)/2;
    13.         if(list[middle] == value)
    14.         {
    15.             found = true;
    16.             position = middle;
    17.         }
    18.         else if(list[middle] > value)
    19.             last = middle - 1;
    20.         else
    21.             first = middle + 1;
    22.     }
    23.     return position;
    24. }

    Em thấy nếu chỉ xét cái thuật toán này thì có gì sai đâu nhỉ . Hay anh sai ở chỗ nào đó trong hàm main .

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

    Anh cũng chịu, anh thử cả chục lần, không hiểu sao pass vào function nó lại ra quái lạ thế, T_T. !

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    C++ Code:
    1. int main()
    2. {
    3.     int list[MAX_NUMBER_LIST];
    4.     int test[MAX_TEST_VALUE];
    5.     char answer;
    6.     int numberTest;
    7.     int comparision = 0;
    8.    
    9.     cout << "Do you want to use random values (versus default values)? [y/n] ";
    10.     cin >> answer;
    11.  
    12.     if(answer == 'Y' || answer == 'y')
    13.     {
    14.         srand(static_cast<unsigned>(time(0)));
    15.     }
    16.     else
    17.     {    
    18.         srand(static_cast<unsigned>(SEED));
    19.     }
    20.  
    21.     FillMainList(list);
    22.  
    23.     cout << "How many values do you want to test ? [1-50] ";
    24.     cin >> numberTest;
    25.  
    26.     FillTestArray(list, test);
    27.    
    28.     cout << "\n\nOriginal array : " << endl;
    29.     PrintArray(list, MAX_NUMBER_LIST);
    30.    
    31.     cout << "\n\nOriginal test-arry : " << endl;
    32.     PrintArray(test, numberTest);
    33.  
    34.     //cout << "\n\nBefore sort linear search performance : " << endl;
    35.     //PrintTestValues(list, test, numberTest, linear, comparision);
    36.    
    37.  
    38.     cout << "\n\nBefore sort binary search performance : " << endl;
    39.     PrintTestValues(list, test, numberTest, binary, comparision);
    40. ...........

    anh này chơi kỳ quá
    Chưa sắp xếp mà đã tìm kiếm nhị phân thì tìm đến khi nào ra.
    Bó tay anh rook đó. hihi
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 11-04-2008 lúc 12:29 PM.
    Không biết ghi gì luôn ...

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

    T_T thanks em yêu :* KISSSSSS^_9 !

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    ý trời, nghe từ "em yêu" thấy sợ ông anh quá. Lại còn kiss nữa
    Hihi
    Không biết ghi gì luôn ...

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