Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Lỗi trong thuật toán tìm kiếm vị trí của 1 phần tử

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    23

    Wink Lỗi trong thuật toán tìm kiếm vị trí của 1 phần tử

    Dưới đây là đoạn code mình thử viết về tìm kiếm vị trí 1 phần tử trong dãy số, nhưng mà ko chạy đc , mình ngồi xem mãi mà chả hiểu vì sao chạy được nhưng kq ko đc chuẩn xác lắm do 2 dòng cuối. Mọi người vào xem, sửa lỗi và giải thích cho mình vì sao sai nhé, kiến thức còn nông cạn, mong mọi người vào giúp đỡ

    Code:
    #include <iostream.h>
    #include <stdlib.h>
    int main()
    {
    	int a[100];
    	int i,n,x;
    	cout<<"\n So phan tu cua day la: ";
    	cin >> n;
    	for(i=0;i<n;i++)
    	a[i]= rand(100);
    	cout<<" Day da cho la: ";
    	for(i=0;i<n;i++)
    	cout<<" "<<a[i];
    	cout<<" Nhap so can tim: ";
    	cin >> x;
    	for(i=0;i<n;i++)
    	{
    		if(x==a[i])
    		cout<<"\n Vi tri so can tim trong day tren la "<< i;
    		else
    		cout<<"\n Khong co so can tim trong day";
    	}
    }

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

    Một test đơn giản cho bạn , bạn test thử là hiểu code của bạn thôi:


    Code:
     input a[i] = 2 4 2 5 2 7 9 3 
    TH 1  x= 4;
    TH 2  x= 3;
    BẠN run chương trình của mình thì bạn sẻ biết lỗi ở đâu.

    1 cái nữa là do IDE của bạn thôi.
    Đã được chỉnh sửa lần cuối bởi ghost.love : 03-09-2011 lúc 11:19 AM.

  3. #3
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    do cái vòng lặp của bạn
    I'll come back

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

    Mặc định Chào Bạn,

    Trích dẫn Nguyên bản được gửi bởi thangsoncp Xem bài viết
    Dưới đây là đoạn code mình thử viết về tìm kiếm vị trí 1 phần tử trong dãy số, nhưng mà ko chạy đc , mình ngồi xem mãi mà chả hiểu vì sao chạy được nhưng kq ko đc chuẩn xác lắm do 2 dòng cuối. Mọi người vào xem, sửa lỗi và giải thích cho mình vì sao sai nhé, kiến thức còn nông cạn, mong mọi người vào giúp đỡ

    Code:
    #include <iostream.h>
    #include <stdlib.h>
    int main()
    {
    	int a[100];
    	int i,n,x;
    	cout<<"\n So phan tu cua day la: ";
    	cin >> n;
    	for(i=0;i<n;i++)
    	a[i]= rand(100);
    	cout<<" Day da cho la: ";
    	for(i=0;i<n;i++)
    	cout<<" "<<a[i];
    	cout<<" Nhap so can tim: ";
    	cin >> x;
    	for(i=0;i<n;i++)
    	{
    		if(x==a[i])
    		cout<<"\n Vi tri so can tim trong day tren la "<< i;
    		else
    		cout<<"\n Khong co so can tim trong day";
    	}
    }
    Nếu ý bạn là hỏi tìm tất cả các vị trí mà x xuất hiện trong dãy thì bạn có thể viết phần xử lý như sau:
    Code:
           int i,j;       
           i = 0;
           while(i<n && a[i]!=x)i++;
           if(i==n)cout<<"x khong xuat hien trong day a vua cho."<<endl;
           else
           {
                     cout<<"Cac vi tri ma x xuat hien trong day: ";
                     for(j=i;j<n;j++)
                     {
                          if(a[j]==x)cout<<j<<" ";
                     }
           }
    Còn nếu ý bạn tìm vị trí đầu tiên mà x xuất hiện trong dãy:
    Code:
    int i,j;       
           i = 0;
           while(i<n && a[i]!=x)i++;
           if(i==n)cout<<"x khong xuat hien trong day a vua cho."<<endl;
           else
           {
                     cout<<"Vi tri xuat hien dau tien cua x la: ";
                     cout<<i<<endl;
           }
    Hy vọng bạn hiểu được ý mình.

  5. #5
    Ngày gia nhập
    07 2011
    Nơi ở
    SG
    Bài viết
    3

    hình như code đâu sai.

    có khi nào cout<<"\n ..." nó sai ko nhỉ ?

    ~.~
    I love you all my life !!

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Chào bạn,

    Nếu theo đoạn code của bạn trên thì giả sử như x không xuất hiện trong dãy thì "Không có mặt trong dãy" lặp đi lặp lại n lần.

  7. #7
    Ngày gia nhập
    12 2010
    Bài viết
    23

    Trích dẫn Nguyên bản được gửi bởi phuchaontu Xem bài viết
    Nếu ý bạn là hỏi tìm tất cả các vị trí mà x xuất hiện trong dãy thì bạn có thể viết phần xử lý như sau:
    Code:
           int i,j;       
           i = 0;
           while(i<n && a[i]!=x)i++;
           if(i==n)cout<<"x khong xuat hien trong day a vua cho."<<endl;
           else
           {
                     cout<<"Cac vi tri ma x xuat hien trong day: ";
                     for(j=i;j<n;j++)
                     {
                          if(a[j]==x)cout<<j<<" ";
                     }
           }
    Còn nếu ý bạn tìm vị trí đầu tiên mà x xuất hiện trong dãy:
    Code:
    int i,j;       
           i = 0;
           while(i<n && a[i]!=x)i++;
           if(i==n)cout<<"x khong xuat hien trong day a vua cho."<<endl;
           else
           {
                     cout<<"Vi tri xuat hien dau tien cua x la: ";
                     cout<<i<<endl;
           }
    Hy vọng bạn hiểu được ý mình.
    Thank mọi người và đặc biệt là bạn phuchaontu,mình hiểu ý bạn rồi, nhưng mà mình hỏi là giải thích cho mình vì sao bị lỗi do 2 dòng cuối cơ, và sửa bằng vòng lặp for :d

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    11

    C Code:
    1. for(i=0;i<n;i++) //vòng lặp for chạy từ i(giá trị ban đầu i=0) tới n.
    2. {
    3.         if(x==a[i])
    4.         cout<<"\n Vi tri so can tim trong day tren la "<< i;
    5.         else
    6.         cout<<"\n Khong co so can tim trong day";
    7. } // xét các trường hợp i tăng dần(i++) trường hợp trùng thì xuất ra là có,ko trùng thì xuất ra là không-> như vậy sẽ có n lần xuất ra.
    8. }



    nếu vẫn muốn xài vòng lặp for thì
    C Code:
    1. int m,k=0; // thêm 2 biến k,m
    2. for(int i=0;i<n;i++)  
    3. if(x==a[i]) //nếu trùng với số trong mảng thì tăng k lên 1 đơn vị và gán giá trị m tại vị trí của i
    4. {
    5.     k++;
    6.     m=i;
    7. }
    8.    
    9. if(k==1)
    10. cout<<"\n Vi tri so can tim trong day tren la "<<m;
    11. else
    12. cout<<"\n Khong co so can tim trong day";

  9. #9
    Ngày gia nhập
    05 2008
    Nơi ở
    CN07B
    Bài viết
    8

    Các pác chỉ thế thì tội cho em nó quá.
    Thế này nhé:

    Thay đoạn:
    Code:
    else
    		cout<<"\n Khong co so can tim trong day";
    bằng:
    Code:
    return;
    Sau dòng for thì thêm:
    Code:
    cout<<"\n Khong co so can tim trong day"
    Ok? Code chay chưa test!!!

Các đề tài tương tự

  1. Lỗi giá trị trả về trong thuật toán tkiếm ttính &tìm kiếm nhị phân
    Gửi bởi virut35 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 21-09-2011, 06:57 PM
  2. Thuật toán tìm kiếm nhánh cận trong lập trình C#?
    Gửi bởi nmt021089 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 23-12-2010, 10:12 PM
  3. Kỹ thuật tìm kiếm tối ưu trong chuỗi
    Gửi bởi nothing1010 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-10-2010, 02:55 PM
  4. Tìm kiếm trong mảng bằng thuật toán tìm nhị phân
    Gửi bởi acumen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 12-07-2010, 08:30 PM
  5. Thuật toán tìm kiếm dữ liệu trong datatable bằng C#?
    Gửi bởi congchinhqn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 15-01-2010, 06:02 PM

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