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

Đề tài: Bài tập về tìm kiếm trong mảng trên lập trình C?

  1. #1
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Mặc định Bài tập về tìm kiếm trong mảng trên lập trình C?

    mình có code này:
    C Code:
    1.  #include<stdio.h>
    2. #include<conio.h>
    3.   int linearsearch1(int a[],int n,int x); //tim kiem tuyen tinh
    4.   int linearsearch2(int a[],int n,int x); //tim kiem linh canh
    5.   void nhap_mang(int a[],int n);
    6.   void in_mang(int a[],int n);
    7.   main()
    8.   {
    9.     int a[50];
    10.     int n,x;
    11.     char lc;
    12.     printf("\nnhap n= ");scanf("%d",&n);
    13.     nhap_mang(a,n);
    14.     printf("\nmang vua nhap la: ");in_mang(a,n);
    15.     printf("\nnhap so can tim: x= ");scanf("%d",&x);
    16.     printf("\n ban muon tim kiem theo giai thuat nao? 1.tt \t 2.lc :");scµn("%s",&lc);
    17.     switch (lc)
    18.     {
    19.       case '1':
    20.       {
    21.     if (linearsearch1(a,n,x)==-1) printf("\nko tim thay %d",x);
    22.     else printf("\ntim thay %d tai %d",x,linearsearch1(a,n,x));
    23.     break;
    24.       }
    25.       case '2':
    26.       {
    27.     if (linearsearch2(a,n,x)==-1) printf("\nko tim thay %d",x);
    28.     else printf("\ntim thay %d tai %d",x,linearsearch2(a,n,x));
    29.       }
    30.       default: printf("\nnhap sai");
    31.     }
    32.     getch();
    33.   }
    34.  
    35.   void nhap_mang(int a[],int n)
    36.   {
    37.     printf("\nBan hay nhap cac gia tri cho mang:\n ");
    38.       for(int i=0;i<n;i++)
    39.     {
    40.       printf("\n phan tu thu %d: ",i+1);scanf("%d",&a[i]);
    41.     }
    42.   }
    43.  
    44.   void in_mang(int a[],int n)
    45.   {
    46.     for(int i=0;i<n;i++)  printf("%3d",a[i]);
    47.   }
    48.  
    49.   int linearsearch1(int a[],int n,int x)
    50.     {
    51.       int i=0;
    52.       while ((i<n) && (a[i]!=x)) i++;
    53.       if (i==n) return -1;
    54.       else return i++;
    55.     }
    56.  
    57.   int linearsearch2(int a[],int n,int x)
    58.     {
    59.       int i=0; a[n]=x;
    60.       while ((i<n) && (a[i]!=x)) i++;
    61.       if (i==n) return -1;
    62.       else return i++;
    63.     }
    Ko biết sai sao mà nó ko toan thông báo là " ko tìm thấy 0" cho dù mình nhập x là 1 số khác.
    2 cái hàm linearsearch cho chạy riêng thì vẫn ổn nhg cho vào code này thì xong luôn .
    Còn cái chỗ mình nhập lc ấy. Phải nhập là
    Code:
    scanf("%s",&lc);
    thì mới được. Chứ nhập là
    Code:
    lc=getchar();
    thì ko được. Đáng lẽ nhập 1 ký ự thì dùng getchar() là được đúng ko?
    Mọi người xem giùm mình với. Cảm ơn trước
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Hix hix mọi người đâu cả rùi? giúp mình với!
    Thật sự mình chẳng hiểu tại sao nó lại ko chạy cả? Help me!!!
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Bạn dùng dùng cái getchar mà không đề phòng cái vụ bị trôi hàm nên nó mới thế.bạn coi mấy chỗ mình đánh dấu là những chỗ cần lưu ý:
    C Code:
    1. #include"stdio.h"
    2. #include"conio.h"
    3.   int linearsearch1(int a[],int n,int x); //tim kiem tuyen tinh
    4.   int linearsearch2(int a[],int n,int x); //tim kiem linh canh
    5.   void nhap_mang(int a[],int n);
    6.   void in_mang(int a[],int n);
    7.  
    8.   void nhap_mang(int a[],int n)
    9.   {
    10.     printf("\nBan hay nhap cac gia tri cho mang:\n ");
    11.       for(int i=0;i<n;i++)
    12.     {
    13.       printf("\n phan tu thu %d: ",i+1);scanf("%d",&a[i]);
    14.     }
    15.   }
    16.  
    17.   void in_mang(int a[],int n)
    18.   {
    19.     for(int i=0;i<n;i++)  printf("%3d",a[i]);
    20.   }
    21.  
    22.   int linearsearch1(int a[],int n,int x)
    23.     {
    24.       int i=0;
    25.       while ((i<n) && (a[i]!=x)) i++;
    26.       if (i==n) return -1;
    27.       else return i++;
    28.     }
    29.  
    30.   int linearsearch2(int a[],int n,int x)
    31.     {
    32.       int i=0; a[n]=x;
    33.       while ((i<n) && (a[i]!=x)) i++;
    34.       if (i==n) return -1;
    35.       else return i++;
    36.     }
    37.  void main()
    38.   {
    39.     int a[50];
    40.     int n,x;
    41.     char lc;
    42.     printf("\nnhap n= ");scanf("%d",&n);
    43.     nhap_mang(a,n);
    44.     printf("\nmang vua nhap la: ");in_mang(a,n);
    45.     printf("\nnhap so can tim: x= ");scanf("%d",&x);
    46.     printf("\n ban muon tim kiem theo giai thuat nao? 1.tt \t 2.lc :");//scanf("%s",&lc);
    47.     fflush(stdin);//thêm cái này để chống trôi hàm
    48.     lc=getchar();
    49.     switch (lc)
    50.     {
    51.       case '1':
    52.       {
    53.             if (linearsearch1(a,n,x)==-1)
    54.                 printf("\nko tim thay %d",x);
    55.             else
    56.                 printf("\ntim thay %d tai %d",x,linearsearch1(a,n,x));
    57.             break;
    58.       }
    59.       case '2':
    60.       {
    61.             if (linearsearch2(a,n,x)==-1)
    62.                 printf("\nko tim thay %d",x);
    63.             else
    64.                 printf("\ntim thay %d tai %d",x,linearsearch2(a,n,x));
    65.             break;/* mới thêm cái này vô cho lúc chay theo điều kiện nhấn phím 2 nó còn in theo  dòng "nhap sai"*/
    66.       }
    67.       default: printf("\nnhap sai");
    68.     }
    69.     getch();
    70.   }
    giải thích một tí vè hàm fflush(stdin):dùng để khử ký tự '\n'
    tức là khi gán lc=getchar();nếu bấm 1 hoặc 2 rồi enter thì ký tự '\n' vẫn còn lại stdin(dòng vào chuẩn-bàn phím).cái này sẽ làm trôi hàm getchar() sau nó.
    @h_trang:Mình edit code cậu cho dễ nhìn.
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Cảm ơn bạn! mình cũng biết đến cái fflush(stdin) rùi nhưng ko bít dùng thế nào. Giờ thì mình biết rùi thanks!
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Mình chạy chương trình sau khi sửa (code của bạn lethanh ấy) rùi nhg vẫn gặp một vấn đề. Đó là 2 hàm linearsearch đều trả về giá trị là i chứ ko phài là i++. Mình đã "return i++" rùi mà?
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Mặc định Bài tập về tìm kiếm trong mảng trên lập trình C?

    Lúc sửa mà mình quên coi phần đó(tại debug thấy ổn),Bạn coi lại cái chỗ return i++;cái này nguy hiểm lắm đó.
    i++;giá trị sẽ i sẽ đựoc lấy trứoc khi cộng.nếu bạn muốn nó cộng 1 trước thì phải thêm 1 dòng lệnh trước hàm return hoặc return ++i;
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    ừm. đúng thiệt! Thế mà mình ko để ý.
    i++ thì nó return i rùi mới tăng
    conf ++i thì tăng rùi mới return
    Hi Hi thanks bạn nhiều nhiều
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

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

  1. Tìm kiếm trên Listview trong lập trình C#
    Gửi bởi mu00013 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 07-10-2016, 01:08 PM
  2. Cách hiển thị KQ tìm kiếm trên trang Tìm kiếm trong MVC
    Gửi bởi nobita2009hp trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 02-07-2012, 04:19 PM
  3. Algorithm tìm kiếm trên datagrid như tìm kiếm trên excel làm thế nào ?
    Gửi bởi lonelyeveningstar trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 07-06-2012, 10:22 AM
  4. Tìm kiếm dữ liệu trên Datagridview trong lập trình C#?
    Gửi bởi tonny_thanh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 26-04-2011, 02:39 PM
  5. Tìm kiếm trên C++ | Tìm kiếm sinh viên trên C++ | Cách xây dựng hàm tìm kiếm?
    Gửi bởi yentinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 24-05-2009, 05:11 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