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

Đề tài: mảng kiểu float và bài toán dãy số

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Ho Chi Minh city
    Bài viết
    7

    Wink mảng kiểu float và bài toán dãy số

    minh làm một bài tập trong phần mảng nhưng có vấn đề. Chạy chương trình mà nó cứ báo lỗi. Nó chỉ đơn giản là: khai báo một mảng data kiểu double 100 element. tạo vòng lặp để thực hiện việc gán biểu thức: 1/2.3.4,1/4.5.6,1/6.7.8,...,1/200.201.202 cho tưng phần tử của data.
    Tiep đó, viết vòng lặp khác,
    tính data[0]-data[1]+data[2]-data[3]+..+data[98]-data[99]. bạn đọc rồi hiểu ý nghĩa ngay . khi chạy thì hiện kết quả là -NAN. Có nghĩa là gì hả các bác. Giúp em với. chắc có lẽ số nhỏ quá máy nó NẢN không giải quyết được.

    C Code:
    1. #include "stdio.h"
    2. #include "conio.h"
    3. /*MAIN function*/
    4. int main()
    5. {
    6.     float data[100];
    7.     float Result=0;
    8.     float FinalResult=0;
    9.     float dtemp=0;
    10.     for(int i=0;i<100;i++)
    11.     {
    12.         dtemp=1.0/(2*i+2)*(2*i+3)*(2*i+4);
    13.         data[i]=dtemp;
    14.     }
    15.     for(int k=0;k<100;k++)
    16.         Result=data[2*k]-data[2*k+1]+ Result;
    17.     FinalResult=Result*4.0 + 3.0;
    18.     printf("The final result is: %f\n",FinalResult);
    19.     getch();
    20.     return(0);
    21. }
    Đã được chỉnh sửa lần cuối bởi mindmap2008 : 27-05-2008 lúc 08:56 AM.

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    240

    1.0/(2*i+2)*(2*i+3)*(2*i+4);

    nó bị tràn số đó mà bạn
    Time

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Ho Chi Minh city
    Bài viết
    7

    Thế giải quyết thế nào bây giờ bạn ???

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    447

    Trích dẫn Nguyên bản được gửi bởi mindmap2008 Xem bài viết
    minh làm một bài tập trong phần mảng nhưng có vấn đề. Chạy chương trình mà nó cứ báo lỗi. Nó chỉ đơn giản là: khai báo một mảng data kiểu double 100 element. tạo vòng lặp để thực hiện việc gán biểu thức: 1/2.3.4,1/4.5.6,1/6.7.8,...,1/200.201.202 cho tưng phần tử của data.
    Tiep đó, viết vòng lặp khác,
    tính data[0]-data[1]+data[2]-data[3]+..+data[98]-data[99]. bạn đọc rồi hiểu ý nghĩa ngay . khi chạy thì hiện kết quả là -NAN. Có nghĩa là gì hả các bác. Giúp em với. chắc có lẽ số nhỏ quá máy nó NẢN không giải quyết được.

    Code:
    #include "stdio.h"
    #include "conio.h"
    /*MAIN function*/
    int main()
    {
    	float data[100];
    	float Result=0;
    	float FinalResult=0; 
    	float dtemp=0;
    	for(int i=0;i<100;i++)
    	{
    		dtemp=1.0/(2*i+2)*(2*i+3)*(2*i+4);
    		data[i]=dtemp;
    	}
    	for(int k=0;k<100;k++)
    	    Result=data[2*k]-data[2*k+1]+ Result;
    	FinalResult=Result*4.0 + 3.0;
    	printf("The final result is: %f\n",FinalResult);
    	getch();
        return(0);
    }
    Sai ở chỗ màu đỏ ấy.

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    data[2*k]-data[2*k+1]
    Sai chỗ này là theo tinh thần thuật toán.

    Còn nếu theo ada thì phải là k<100 -> k < 49
    Đã được chỉnh sửa lần cuối bởi kidkid : 27-05-2008 lúc 01:31 PM.

  6. #6
    Ngày gia nhập
    04 2008
    Nơi ở
    Ho Chi Minh city
    Bài viết
    7

    Mặc định mảng kiểu float và bài toán dãy số

    em đã đổi kiểu dữ liệu sang double, để lưu trữ chính xác các số nhỏ trong dãy số. Em phát hiện ra 2 lỗi:
    1)
    C Code:
    1. dtemp=1.0/(2*i+2)*(2*i+3)*(2*i+4);
    2. /*được sửa thành */
    3. dtemp=1.0/((2*i+2)*(2*i+3)*(2*i+4));
    2)
    C Code:
    1. for(int k=0;k<100;k++)
    2.      Result=data[2*k]-data[2*k+1]+ Result;
    3. /*được sửa thành :*/
    4. for(int k=0;k<50;k++)
    5.      Result=data[2*k]-data[2*k+1]+ Result;
    Cảm ơn mấy anh pro nha. Giỏi ghê!!
    À mà kết quả là hằng số pi đó mấy bác. em cũng chả hiểu sao mà nó ra được. chắc là trong toán cao cấp
    Đã được chỉnh sửa lần cuối bởi mindmap2008 : 27-05-2008 lúc 09:40 PM.

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi mindmap2008 Xem bài viết
    em đã đổi kiểu dữ liệu sang double, để lưu trữ chính xác các số nhỏ trong dãy số. Em phát hiện ra 2 lỗi:
    1)
    C Code:
    1. dtemp=1.0/(2*i+2)*(2*i+3)*(2*i+4);
    2. /*được sửa thành */
    3. dtemp=1.0/((2*i+2)*(2*i+3)*(2*i+4));
    2)
    C Code:
    1. for(int k=0;k<100;k++)
    2.      Result=data[2*k]-data[2*k+1]+ Result;
    3. /*được sửa thành :*/
    4. for(int k=0;k<50;k++)
    5.      Result=data[2*k]-data[2*k+1]+ Result;
    Cảm ơn mấy anh pro nha. Giỏi ghê!!
    À mà kết quả là hằng số pi đó mấy bác. em cũng chả hiểu sao mà nó ra được. chắc là trong toán cao cấp
    công thức tính pi thì chả ra pi. Không hiểu hỏi thầy giáo dạy toán ây





    muốn tham khảo các cách tính PI thì xem tại đây :
    http://vi.wikipedia.org/wiki/Pi#Ch.E...c.E1.BB.A7a_Pi
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Double chỉ có thể lưu số lớn hơn thôi. Chứ ko phải là lưu chính xác số nhỏ hơn float đâu.

    Cậu thấy đấy, tự cậu cũng làm ra được, nhưng lại ko cố gắng suy nghĩ . Hãy thử thế với những bài khác, cậu sẽ làm ra thôi

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    447

    Kiểu double có khoảng số mũ rộng hơn kiểu float về cả chiều dương lẫn chiều âm nên có thể chứa được cả những số rất nhỏ mà float không chứa được.

    Kiểu double còn có nhiều chữ số có nghĩa hơn kiểu float nên còn có thể chứa số chính xác hơn.

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

  1. Code stack bằng danh sách liên kết viết bằng C. Sửa lỗi "cannot convert 'float' to 'float'... "
    Gửi bởi giangcoi92 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 11
    Bài viết cuối: 28-11-2011, 10:29 PM
  2. giải thích giùm mình lỗi cannot convert from 'float' to 'float*'
    Gửi bởi hoanghiep9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 06-05-2011, 08:20 PM
  3. 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
  4. cannot convert float(*)[] to float* for argument '1' to void
    Gửi bởi vanphamvn 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: 10-12-2008, 05:12 PM
  5. Tạo một số float ngẫu nhiên | Tạo Random số float
    Gửi bởi md_vn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 20
    Bài viết cuối: 06-06-2008, 11:00 AM

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