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

Đề tài: Cách sử dụng hàm trong C như thế nào?

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

    Mặc định Cách sử dụng hàm trong C như thế nào?

    Mình mới học lập trình C,nên nhờ mọi người giúp đỡ. Khi mình viết chương trình dưới đây:

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. void nhapmang(int x[10],int n)
    5. {
    6.     int i;
    7.     for(i=1;i<=n;i++)
    8.     {
    9.     printf("x[%d] = ",i);
    10.     scanf("%d",&x[i]);
    11.     }
    12. }
    13.  
    14.  
    15.  
    16. void doicho(int x[10],int n)
    17. {
    18.     int i,tg;
    19.     for(i=1;i<=n;i++)
    20.     if(i==2)
    21.     {
    22.     tg=x[i];
    23.     x[i]=x[4];
    24.     x[4]=tg;
    25.     }
    26. for(i=1;i<=n;i++)
    27. printf("%d\t",x[i]);
    28. }
    29.  
    30. void xoa_sochan(int x[10],int n)
    31. {
    32. int i=1,j;
    33. while(i<=n)
    34. {
    35.     if(x[i]%2==0)
    36.     {
    37.         for(j=i;j<=n-1;j++)
    38.         x[j]=x[j+1];
    39.         n--;
    40.         }
    41.     else
    42.     i++;
    43. }
    44.     for(i=1;i<=n;i++)
    45.     printf("%d\t",x[i]);
    46. }
    47.  
    48. void xoa_vtchan(int x[10],int n)
    49. {
    50. int i;
    51. for(i=1;i<=n;i+=2)
    52. printf("%d\t",x[i]);
    53. }
    54.  
    55. void xuatmang(int x[10],int n)
    56. {
    57.     int i;
    58.     for(i=1;i<=n;i++)
    59.     printf("%d\t",x[i]);
    60.  
    61. }
    62.  
    63. void main()
    64. {
    65.     int i,n,a[10];
    66.     printf("nhap vao so phan tu cua mang N = ");
    67.     scanf("%d",&n);
    68.     nhapmang(a,n);
    69.     printf("Day vua nhap la :\n");
    70.     xuatmang(a,n);
    71.     printf("\nDay sau khi doi cho la :\n");
    72.     doicho(a,n);
    73.     printf("\nDay sau khi xoa so chan la :\n");
    74.     xoa_sochan(a,n);
    75.     printf("\nDay sau khi xoa so o vi tri chan la :\n");
    76.     xoa_vtchan(a,n);
    77.     getch();
    78. }


    Thì kết quả lại không như mong muốn:
    giả sử dãy nhập vào bao gồm 4 phần tử: 1 4 9 5 thì sẽ cho kết quả:
    dãy vừa nhập là: 1 4 9 5
    dãy sau khi dổi chỗ là : 1 5 9 4
    dãy sau khi xóa số chắn là: 1 5 9
    dãy sau khi xóa số ở vị trí chẵn là: 1 9
    Nhưng mình muốn kết quả ra là:
    dãy vừa nhập là: 1 4 9 5
    dãy sau khi dổi chỗ là : 1 5 9 4
    dãy sau khi xóa số chắn là: 1 9 5
    dãy sau khi xóa số ở vị trí chẵn là: 1 5
    có nghĩa lời gọi hàm độc lập với nhau và đều sử dụng dãy số ban đầu nhập vào từ bàn phím, chứ không sử dụng lại kết quả của hàm được gọi trước đó.
    thì làm thế nào? Mọi người giúp mình nhé!Cảm ơn nhiều!

  2. #2
    Ngày gia nhập
    12 2006
    Bài viết
    43

    mình cũng mới học C àh, mình xem hoài mà kô tìm đc chỗ sai của hàm xóa số chẵn, nhưng mình thấy được chỗ xóa vị trí chẵn.
    bạn nhập vào 1 4 9 5, thì vị trí chẵn chính là số 4 và số 5, thực hiện đúng ý đồ của bạn rùi mà, còn nếu bạn muốn in ra 1 5 thì xóa vị trí thứ 2 và thứ 3.
    còn nữa là khi sữ dụng mãng sao bạn kô, nhập từ phần tử thứ nhất x[0].
    ________________________________________

    Bác nào thấy mình post sai thì chỉ giùm nha !!!! :P
    ________________________________________

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    giả sử dãy nhập vào bao gồm 4 phần tử: 1 4 9 5 thì sẽ cho kết quả:
    dãy vừa nhập là: 1 4 9 5
    dãy sau khi dổi chỗ là : 1 5 9 4
    dãy sau khi xóa số chắn là: 1 5 9
    dãy sau khi xóa số ở vị trí chẵn là: 1 9
    Nhưng mình muốn kết quả ra là:
    dãy vừa nhập là: 1 4 9 5
    dãy sau khi dổi chỗ là : 1 5 9 4
    dãy sau khi xóa số chắn là: 1 9 5
    dãy sau khi xóa số ở vị trí chẵn là: 1 5
    có nghĩa lời gọi hàm độc lập với nhau và đều sử dụng dãy số ban đầu nhập vào từ bàn phím, chứ không sử dụng lại kết quả của hàm được gọi trước đó.
    thì làm thế nào? Mọi người giúp mình nhé!Cảm ơn nhiều!
    Dùng 2 mảng, 1 mảng gốc và 1 mảng copy, luôn luôn copy ra rồi mới xử lý.

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

    Cảm ơn HuyNguyen nhiều nhé! để mình thử làm theo cách đó xem thế nào!

  5. #5
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi huynguyen
    Dùng 2 mảng, 1 mảng gốc và 1 mảng copy, luôn luôn copy ra rồi mới xử lý.
    Ý tưởng của bạn huynguyen đúng lắm, mình cũng xin đóng góp 1 ý kiến:

    - Dùng mảng copy để ứng phó với hàm doicho, để việc đổi chỗ không tác động đến mảng gốc của bạn.
    - Sau đó dùng hàm xoa_sochan và xoa_vtchan thao tác trên mảng gốc.
    - Mách bạn: mình nghĩ bạn nên dùng con trỏ để tạo ra mảng copy, để có thể dễ dàng giải phóng vùng nhớ.

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

  1. Làm Chữ chạy trên form C# như thẻ <marquee> trong HTML thế nào?
    Gửi bởi magnet241 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 05-04-2012, 11:55 AM
  2. In thẻ,hóa đơn từ các textbox,combobox,datetimepicker trong form C# như thế nào?
    Gửi bởi snoit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 04-04-2012, 03:13 PM
  3. Game Tạo Form trong suốt trong C# tựa game Thần Võ như thế nào?
    Gửi bởi tocvang_pro trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 21-09-2011, 04:21 PM
  4. Sử lí như thế nào khi nhập rất chậm trong trình xoạn thảo trong devC
    Gửi bởi toansvcn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 23-05-2011, 10:04 PM
  5. Code tìm kiếm trong cây nhị phân trong C++. Lỗi chỉ tìm được từ đầu tiên trong file thôi sửa thế nào?
    Gửi bởi elvish trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 11-04-2010, 09:43 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