Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 18
  1. #1
    Tham gia
    02-10-2009
    Bài viết
    39
    Like
    1
    Thanked 0 Times in 0 Posts

    Giúp em tạo lập thuật toán này bằng C

    Thuật toán tìm kiếm tuần tự

    Xác định bài toán
    -Input: dãy A gồm N số nguyên khác nhau a1. a2....an và số nguyên k;
    -Output: chỉ số i mà ai=k hoặc thông báo không có số hạng nào của dãy A có giá trị bằng k.

    Ý tưởng: Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần lượt từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi hoặc gặp một số hạng bằng khóa k hoặc dãy đã được xét hết và không có giá trị nào bằng khóa. Trong trường hợp thứ hai dãy A không có số hạng nào bằng khóa.

    Thuật toán:

    Bước 1: Nhập N, các số hạng a1, a2, ... và khóa k
    Bước 2: i <- 1
    Bước 3: Nếu ai = k thì thông báo dãy A ko có số hạng nào có giá trị bằng k rồi kết thúc.
    Bước 4: i <- i +1
    Bước 5: Nếu i > N thì thông báo dãy A ko có số hạng nào có giá trị bằng k rồi kết thúc.
    Bước 6; Quay lại bước 3


    Cho em hỏi thêm là ví dụ như ở bước 6. Muốn bài toán tự động quay lại bước trước thì làm thế nào?
    Quote Quote

  2. #2
    Tham gia
    01-01-2008
    Location
    Thiên đường hạnh phúc
    Bài viết
    1,299
    Like
    9
    Thanked 127 Times in 67 Posts
    Quote Được gửi bởi thientn View Post
    Thuật toán tìm kiếm tuần tự

    Xác định bài toán
    -Input: dãy A gồm N số nguyên khác nhau a1. a2....an và số nguyên k;
    -Output: chỉ số i mà ai=k hoặc thông báo không có số hạng nào của dãy A có giá trị bằng k.

    Ý tưởng: Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần lượt từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi hoặc gặp một số hạng bằng khóa k hoặc dãy đã được xét hết và không có giá trị nào bằng khóa. Trong trường hợp thứ hai dãy A không có số hạng nào bằng khóa.

    Thuật toán:

    Bước 1: Nhập N, các số hạng a1, a2, ... và khóa k
    Bước 2: i <- 1
    Bước 3: Nếu ai = k thì thông báo dãy A ko có số hạng nào có giá trị bằng k rồi kết thúc.
    Bước 4: i <- i +1
    Bước 5: Nếu i > N thì thông báo dãy A ko có số hạng nào có giá trị bằng k rồi kết thúc.
    Bước 6; Quay lại bước 3


    Cho em hỏi thêm là ví dụ như ở bước 6. Muốn bài toán tự động quay lại bước trước thì làm thế nào?
    Bước 3 phải như ri hỉ?
    "Nếu ai = k thì thông báo dãy A có số hạng thứ i giá trị bằng k rồi kết thúc."
    Bước 6 là Vòng lặp đó bạn

    Bạn hãy viết code nhập cho được mảng a với n phần tử và nhập cả giá trị k, thì nó như ri
    Code:
    int found=0;
    int i=0;
    while(i<n && !found){
    	found = (a[i++]==k)?1:0;
    }
    Căn cứ vào foundi-1 để xác định

  3. #3
    Tham gia
    05-03-2011
    Bài viết
    12
    Like
    0
    Thanked 0 Times in 0 Posts
    int found=0;

    while(i<n && !found){
    found = (a[i++]==k)?1:0;
    }
    Để giảm 1 bước so sánh gán a[n+1]=k
    Code:
    int i=0;
    while(a[i]!=a[n+1])
    i++;
    if(i==n+1)// duyệt hết dãy không tìm thấy, i vượt ra ngoài.
    return 0;
    else
    return i;

  4. #4
    Tham gia
    02-10-2009
    Bài viết
    39
    Like
    1
    Thanked 0 Times in 0 Posts
    Mọi người giúp em tao toàn bộ thuật toán đi. Đừng chỉ gợi ý thế thôi. Em vẫn chưa thể hiệu được!!

  5. #5
    Tham gia
    27-01-2009
    Location
    Lâm Thao - Phú Thọ
    Bài viết
    150
    Like
    0
    Thanked 4 Times in 4 Posts
    bó tay luôn
    chả hiểu gì cả

  6. #6
    Tham gia
    05-03-2011
    Bài viết
    12
    Like
    0
    Thanked 0 Times in 0 Posts
    Thuật toán tìm kiếm tuần tự là căn bản tìm kiếm mà. Tư tưởng là duyệt hết dãy, so sánh từng phần tử với giá trị cần tìm.
    So sánh từng phần tử với giá trị cần tìm --> muốn duyệt từng phần tử phải làm thế nào ?
    Nếu tìm thấy thì dừng lại.
    Nếu hết dãy mà không thấy thì thông báo:... ?
    Tư tưởng là vậy, còn lại là ngôn ngữ của bạn. cái này căn bản nên phải làm được, goodluck!

  7. #7
    Tham gia
    05-03-2010
    Bài viết
    129
    Like
    2
    Thanked 16 Times in 16 Posts
    Hơ...chủ topic đưa ra giải thuật rồi còn hỏi code làm gì nhỉ??? Bạn tự code đi chứ, mọi người gần như là làm hết cho bạn rồi còn gì nữa.

  8. #8
    Tham gia
    17-03-2011
    Bài viết
    19
    Like
    0
    Thanked 4 Times in 4 Posts
    mình code thử ko biết được không. cái bước 6 đó thực ra là 1 vòng lặp thôi mà bạn. dùng break để thoát khỏi vòng lặp nếu nhận được giá trị thỏa mãn . nếu không tăng thêm 1 giá trị là quay về bước 3.
    Code:
    #include<iostream.h>
    #include<conio.h>
    #define MAX 100
    main()
    {
    	int A[MAX],N,i,k;
    	cout<<"Hay nhap vao so N la so cac so nguyen khac nhau N=";
    	cin>>N;	
    	cout<<"Hay nhap vao khoa k=";
    	cin>>k;
    	//Nhap vao cac gia tri cua day
    	for (i=0;i<N;i++)
    	{
    		cout<<"Hay nhap vao gia tri cua A["<<i<<"]=";
    		cin>>A[i];
    	}
    	//So sanh cac so cua mang voi k
    	for (i=0;i<N;i++)
    	{
    		if (A[i]==k)
    			break;
    	}
    	//Neu co gia tri a[i]=k se thoat khoi vong lap va tra ve gia tri i
    	if (i<N)
    		cout<<"Day ban vua nhap co gia tri A["<<i+1<<"]bang k"<<endl; //i+1 vi vong lap bat dau tu 0 khong phai 1
    	else 
    		cout<<"Day ban vua nhap khong co gia tri nao bang "<<k;
    	getch();
    	return 0;	
    }
    [/QUOTE]

  9. #9
    Tham gia
    02-10-2009
    Bài viết
    39
    Like
    1
    Thanked 0 Times in 0 Posts
    Anh "gacutcut". Sao ngôn ngữ C của anh có nhiều cái lạ lạ. tại sao lại là cout thay vì printf? và hàm cin thay vì scant để nhập dữ liệu vào? Xin trân thành cảm ơn anh !

  10. #10
    Tham gia
    05-12-2010
    Bài viết
    780
    Like
    37
    Thanked 59 Times in 43 Posts
    Quote Được gửi bởi thientn View Post
    Anh "gacutcut". Sao ngôn ngữ C của anh có nhiều cái lạ lạ. tại sao lại là cout thay vì printf? và hàm cin thay vì scant để nhập dữ liệu vào? Xin trân thành cảm ơn anh !
    hình như cậu ấy code C++ , mà trong C++ vẫn printf đc mà !

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

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