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

Đề tài: Bài tâp về mảng double!

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    0

    Mặc định Bài tâp về mảng double!

    Nói tóm lại là em cũng đã hình dung đc là nó như thế nào rồi. Cảm ơn các bác nhìu, hum nay em lại có 1 vấn đề thắc mắc nữa mà ko giải quyết nổi. Em kém về phần mảng + con trỏ quá.
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. void main()
    5. {
    6.     int chon;
    7.     double M[100];
    8.     int N,i;
    9.       do
    10.       {
    11.     clrscr();
    12.  
    13.     printf("+----------------------MENU----------------------------+");
    14.     printf("\n| 1.Input N and array of double                        |");
    15.     printf("\n| 2.Find the minimum positive event number value       |");
    16.     printf("\n| 3.Sumary total of odd number                         |");
    17.     printf("\n| 4.Sort all element by ascending and display them     |");
    18.     printf("\n| 5.Exit                                               |");
    19.     printf("\n+------------------------------------------------------+");
    20.  
    21.     printf("\nXin moi chon (1-5) :");
    22.     scanf("%d",&chon);
    23.  
    24.     switch(chon)
    25.     {
    26.         case 1:
    27.             nhap(&M,N);
    28.             break;
    29.         case 2:
    30.             printf("\nThe minimum number is:%d",find(M,N));
    31.             break;
    32.         case 3:
    33.             printf("");
    34.             break;
    35.         case 4:
    36.             printf("");
    37.             break;
    38.         case 5:
    39.             printf("\nGood bye 4ever ^^!");
    40.             break;
    41.         default:
    42.             printf("\nDa~bao la chi dc chon 1-5 thoi ma");
    43.             break;
    44.     }
    45.     getch();
    46.       }while(chon!=5);
    47. }
    48.  
    49. /* Input N and array of double */
    50.  
    51. int nhap(double *M,int N)
    52. {
    53.     int i;
    54.         printf("\nAccept N:");
    55.         scanf("%d",&N);
    56.  
    57.             for(i=0;i<N;i++)
    58.             {
    59.                 printf("\nPhan tu thu %d :",i+1);
    60.                 scanf("%d",&M[i]);
    61.             }
    62. }
    63.  
    64. /* Find the minimum and array of double */
    65.  
    66. int find(double *M,int N)
    67. {
    68.     int i,temp=M[0];
    69.  
    70.     for(i=0;i<N;i++)
    71.     {
    72.         if(temp>M[i])
    73.         temp=M[i];
    74.     }
    75. return temp;
    76. }

    Tạm thời em mới chỉ code có 2 modules thui mà đã sai rùi.Chắc là sai ở phần truyền tham số trong hàm main dẫn đến việc nó xử lý hàm find sai. Các bác xem giúp em với.

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mình sẽ sửa 2 hàm cho bạn, bạn xem kĩ rùi hoàn thành bài này nhé
    C Code:
    1. /* Input N and array of double */
    2.  
    3. void nhap(double *M,int *N)
    4. {
    5.     int i;
    6.         printf("\nAccept N:");
    7.         scanf("%d",N);
    8.  
    9.             for(i=0;i<*N;i++)
    10.             {
    11.                 printf("\nPhan tu thu %d :",i+1);
    12.                 scanf("%lf",&M[i]);
    13.             }
    14. }
    15.  
    16. /* Find the minimum and array of double */
    17.  
    18. double find(double *M,int N)
    19. {
    20.     int i;
    21.     double temp=M[0];
    22.  
    23.     for(i=0;i<N;i++)
    24.     {
    25.         if(temp>M[i])
    26.         temp=M[i];
    27.     }
    28. return temp;
    29. }

    Cách gọi 2 hàm trên đối với bài của bạn.
    nhap(M,&N);
    find(M,N);

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    0

    Cám ơn mod,bạn thật nhiệt tình. Nhưng mình muốn hỏi mod là ở 2 hàm mà bạn code, nếu để kiểu hàm như bạn thì sẽ báo lỗi Type mismatch in redeclaration of 'tên hàm' nhưng nếu đổi hết về kiểu Int thì ko sao. Tại sao lại thế ạ ? Với cả phiền mod nói rõ cho mình cách hiểu của mod về phần truyền tham số cho hàm đc ko?kiểu như truyền đạt kinh nghiệm ấy ạ.Mình có hiểu nhưng lại ko cặn kẽ.

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn chú ý:
    Mình sẽ sửa 2 hàm cho bạn, bạn xem kĩ rùi hoàn thành bài này nhé
    Mình chỉ sửa 2 hàm, để bạn xem và lấy kiến thức từ đó, điều đó không có nghĩa làm hàm main() không lỗi, nhưng nếu hiểu 2 hàm đó thì bạn có thể tự sửa đc (mình nghĩ vậy). Còn lỗi là do bạn không định nghĩa hàm trước hàm main(). Nếu bạn viết hàm ở dưới hàm main() bạn cần định nghĩa nó ở trước đã.
    Phần tham biến, tham trị xem thêm

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. void nhap(double *M,int *N);
    5. double find(double *M,int N);
    6.  
    7. void main()
    8. {
    9.     int chon;
    10.     double M[100];
    11.     int N,i;
    12.       do
    13.       {
    14.     clrscr();
    15.  
    16.     printf("+----------------------MENU----------------------------+");
    17.     printf("\n| 1.Input N and array of double                        |");
    18.     printf("\n| 2.Find the minimum positive event number value       |");
    19.     printf("\n| 3.Sumary total of odd number                         |");
    20.     printf("\n| 4.Sort all element by ascending and display them     |");
    21.     printf("\n| 5.Exit                                               |");
    22.     printf("\n+------------------------------------------------------+");
    23.  
    24.     printf("\nXin moi chon (1-5) :");
    25.     scanf("%d",&chon);
    26.  
    27.     switch(chon)
    28.     {
    29.         case 1:
    30.             nhap(M,&N);
    31.             break;
    32.         case 2:
    33.             printf("\nThe minimum number is:%lf",find(M,N));
    34.             break;
    35.         case 3:
    36.             printf("");
    37.             break;
    38.         case 4:
    39.             printf("");
    40.             break;
    41.         case 5:
    42.             printf("\nGood bye 4ever ^^!");
    43.             break;
    44.         default:
    45.             printf("\nDa~bao la chi dc chon 1-5 thoi ma");
    46.             break;
    47.     }
    48.     getch();
    49.       }while(chon!=5);
    50. }
    51.  
    52. /* Input N and array of double */
    53.  
    54. void nhap(double *M,int *N)
    55. {
    56.     int i;
    57.         printf("\nAccept N:");
    58.         scanf("%d",N);
    59.  
    60.             for(i=0;i<*N;i++)
    61.             {
    62.                 printf("\nPhan tu thu %d :",i+1);
    63.                 scanf("%lf",&M[i]);
    64.             }
    65. }
    66.  
    67. /* Find the minimum and array of double */
    68.  
    69. double find(double *M,int N)
    70. {
    71.     int i;
    72.     double temp=M[0];
    73.  
    74.     for(i=0;i<N;i++)
    75.     {
    76.         if(temp>M[i])
    77.         temp=M[i];
    78.     }
    79. return temp;
    80. }

    Hãy kiểm chứng những gì mình nói.

    Good luck!

    @edit: Sửa lại hàm find cho đúng đầu bài:
    2.Find the minimum positive event number value
    C Code:
    1. int find(double *M,int N)
    2. {
    3.     int i;
    4.     double temp=M[0];
    5.    
    6.     for(i=0;i<N;i++)
    7.     {
    8.         if(temp>M[i])
    9.         temp=M[i];
    10.     }
    11.    
    12.     for(i=0;i<N;i++)
    13.         if (temp==M[i]) return i;
    14. }
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 10-02-2009 lúc 02:14 PM.

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    0

    Mặc định Bài tâp về mảng double!

    Mình hiểu thế này bạn xem có đúng ko nhé. Ở hàm nhap mình truyền vào là tham chiếu *N sau đó ở hàm main khai báo 1 biến N và gọi &N tức là N ở hàm main có giá trị bằng với giá trị của *N nhập ở hàm nhap. Đến hàm find thì mình chỉ cần truyền vào tham trị NN trong main đã có giá trị rùi. Và thực chất trong hàm main mình có thể khai báo biến khác N nhưng gọi hàm vẫn truyền &biến thì kết quả vẫn tương tương tự. Đúng ko ạ ?

  7. #7
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Để dễ hiểu bạn có thể nhập luôn n ở case1
    PHP Code:
     case 1:
         
    printf("\nNhap vao gioi han cua mang);
         scanf("
    %d",&N);
         nhap(M);//sua lai ham nhap thanh nhu vay la ok.O ham nhap thi khong nhap n nua nha. 
    Tại sao bài của bạn sai?
    Ta bắt đầu phân tích từ hàm main.
    Khi bạn khai báo biến N(Giới hạn của mảng).
    Sau đó ở case 1: Bạn sử dụng hàm nhap(m,n)//lúc này nó sẽ chuyền giá trị của n cho hàm nhập, Mà thực tế bạn đã nhập giá trị n đâu. do đó bị lỗi là điều tất yếu. Nhưng nếu sửa lại là Nhap(m,&n) Thì lúc này cái mà bạn truyền cho hàm nhập là Địa chỉ của biến n trong bộ nhớ(cái này thì có từ khi ta khai báo biến n, ok).
    -Sau đó đến hàm nhập. Chúng ta đã chuyền địa chỉ n, nên ở đây ta chỉ cần nhập giá trị cho n là ok.
    Lưu ý: Bạn cần phân biệt địa chỉ của một biến, và giá trị của một biến
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Ở hàm nhap mình truyền vào là tham chiếu *N sau đó ở hàm main khai báo 1 biến N và gọi &N tức là N ở hàm main có giá trị bằng với giá trị của *N nhập ở hàm nhap. Đến hàm find thì mình chỉ cần truyền vào tham trị N vì N trong main đã có giá trị rùi. Và thực chất trong hàm main mình có thể khai báo biến khác N nhưng gọi hàm vẫn truyền &biến thì kết quả vẫn tương tương tự.
    Như này cho dễ hiểu nhé.
    Hàm nhap() bạn sẽ thay đổi giá trị kích thước của mảng, và để lưu giữ sự thay đổi này bạn cần truyền vào là một tham biến, OK.

    Với C chuẩn truyền tham biến ta dùng con trỏ (điều đó giải thích tại sao phải là *N) và khi gọi hàm nhập tại hàm main, ta thấy biên N ở hàm main là biến nguyên không phải là giá trị địa chỉ nên không truyền trực tiếp vào hàm nhập được, nên ta phải lấy địa chỉ của nó &N truyền vào hàm nhập.

    Hàm find() ta không có cùng mục đích, tức không cần sự thay đổi của kích thước mảng, nên truyền vào một giá trị bình thường, truyền tham trị.

  9. #9
    Ngày gia nhập
    02 2009
    Bài viết
    0

    Cám ơn các bạn,mình hiểu rùi, và h mình thấy C thật thú vị.

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

  1. Lập trình C++ Lỗi declaration is incompatible with "double fmax(double, double)" sửa thế nào?
    Gửi bởi hikaru1505 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 20-01-2013, 05:03 PM
  2. Lập trình C++ hàm double: cách sử dụng và công dụng??
    Gửi bởi hacphieu 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: 02-04-2011, 12:04 PM
  3. Hiển thị kiểu dữ liệu double ra màn hình
    Gửi bởi small_ant trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 01-11-2010, 06:33 AM
  4. float và double trong C++: warning C4244: conversion from 'double' to 'float'
    Gửi bởi dungtimtoinua2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 18-03-2010, 11:25 PM
  5. Nỗi: cannot convert `double' to `double*' for argument `1' to `double
    Gửi bởi hohohaha 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: 30-09-2009, 10:31 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