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

Đề tài: chuyển đổi nhị phân sang thập phân

  1. #1
    Ngày gia nhập
    04 2012
    Bài viết
    16

    Mặc định chuyển đổi nhị phân sang thập phân

    Chào các anh chị trên diễn đàn.
    Hôm nay, em gửi chủ đề này lên thật sự nó rất cũ, vì trình độ hạn hẹp nên em không biết làm cho ra trò được.Nếu Mod thấy bài này là spam thì cứ spam thoải mái nhưng xin hãy gửi lại địa chỉ web để tìm câu trả lời thỏa đáng. Trên diễn đàn cũng có những bài tương tự nhưng chưa có bài nào giải đáp được thắc mắc của em, mong các anh chị chỉ giáo.
    Tình hình là em có đoạn code như sau:
    C Code:
    1. #include<iostream>
    2. #include<conio.h>
    3. #include<math.h>
    4.  
    5. using namespace std;
    6.  
    7. void Nhap(int *a)
    8. {
    9.     int n,m,x=0;
    10.     a=new int;
    11.     cout<<"\nso nhi phan co bao nhieu chu so: ";
    12.     cin>>m;
    13.     for(int i=0;i<m;i++)
    14.     {
    15.             cout<<"phan tu thu "<<i<<": ";
    16.             cin>>a[i];
    17.             if(a[i]<0 || a[i]>1) {cout<<"\nvui long nhap lai!!!\n";
    18.             cout<<"phan tu thu "<<i<<": ";
    19.             cin>>a[i];}
    20.     }
    21.     for(int i=0;i<m;++i)
    22.     {
    23.            cout<<a[i];
    24.     }
    25. //}
    26. //void ChuyenDoi(int *a)
    27. //{
    28. //     int n,m,x=0;  
    29.      for (int i=0;i<m;++i)
    30.          {      
    31.                  x+=pow(2,m-1-i)*a[i];
    32.          }
    33.      cout<<"\nso da chuyen doi: "<<x;
    34. }
    35.  
    36. int main ()
    37. {
    38.     int *a;
    39.     Nhap(a);
    40.  //   ChuyenDoi(a);
    41.     getch ();
    42.     return 0;
    43. }
    Nếu như trên thì code chạy ổn thỏa nhưng khi tách hàm nhập ra thêm hàm chuyển đổi thì lại chạy sai, em thường mắc lỗi này khi lâp trình mà không ai giúp hết T.T
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

  2. #2
    Ngày gia nhập
    04 2012
    Bài viết
    42

    Mình không biết ổn thỏa chỗ nào hết:

    C Code:
    1.  a=new int;
    Bạn cấp phát con trỏ a có 1 ô nhớ. Nhưng lại nhập vào tới m số. Nếu như bạn cấp phát nội bộ trong hàm nhập biến a truyền vào phải là con trỏ cấp 2 hoặc là tham chiếu.
    protype của hàm nhập:

    C Code:
    1. void Nhap(int** a)
    2. hoặc
    3. void Nhap(int* &a)
    C Code:
    1. while (!silly)
    2.     cout<<"Study everything !";

  3. #3
    Ngày gia nhập
    04 2012
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi kimlama Xem bài viết
    Mình không biết ổn thỏa chỗ nào hết:



    Bạn cấp phát con trỏ a có 1 ô nhớ. Nhưng lại nhập vào tới m số. Nếu như bạn cấp phát nội bộ trong hàm nhập biến a truyền vào phải là con trỏ cấp 2 hoặc là tham chiếu.
    protype của hàm nhập:

    C Code:
    1. void Nhap(int** a)
    2. hoặc
    3. void Nhap(int* &a)
    tại sao phải là con trỏ cấp 2 vậy.
    nếu ở tên mình sửa lại như thế thì sao
    C Code:
    1.     cout<<"\nso nhi phan co bao nhieu chu so: ";
    2.     cin>>m;
    3. a=new int[m];
    với lại anh chị xem lại giùm, nếu tách hàm nhập ra thêm hàm chuyendoi() thì phải làm thế nào.vui lòng chỉ rõ giùm em.em là trứng gà mà.hjx
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

  4. #4
    Ngày gia nhập
    04 2012
    Bài viết
    16

    @kimlama: cảm ơn bạn nhiều nha, nhưng bạn đã giúp thì hãy chỉ cách sửa với, chi tiết nữa, mới học lập trình nên kiến thức kém cỏi lắm.
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

  5. #5
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Ở đây mình cũng chỉ chỉnh theo bạn limlama nói thôi nói chung bạn nên xem lại cái phần cấp phát động qua hàm, chỗ đấy là dễ nhầm nhất đó, vấn đề đã được nói ở đây http://diendan.congdongcviet.com/showthread.php?t=36221
    Code:
    void Nhap(int** a)//dùng con trỏ cấp cao hơn khi đó khi xin cấp phát là thế này *a = new int[m];
    hoặc
    void Nhap(int* &a)//tham chiếu tới một con trỏ cấp phát sẽ thao tác tự nhiên hơn chỉ là a = new int[m];
    code mình sửa qua, loại bỏ những biến không cần thiết và hàm pow http://www.cplusplus.com/reference/cmath/pow/ bạn cũng để ý khi mà dùng m ở trong mà không lấy ra bạn sẽ không thể có giá trị m để dùng cho việc chuyển đổi số vì m bạn khai báo chỉ là biến local variable, do vậy bạn cần khai báo nó trong main hoặc là để là global variable
    C++ Code:
    1. #include<iostream>
    2. #include<conio.h>
    3. #include<math.h>
    4.  
    5. using namespace std;
    6.  
    7. void Nhap(int *&a, int &m)
    8. {
    9.     cout<<"\nso nhi phan co bao nhieu chu so: ";
    10.     cin>>m;
    11.     a=new int[m];
    12.     if(a!=NULL)
    13.     {
    14.        for(int i=0;i<m;i++)
    15.        {
    16.             cout<<"phan tu thu "<<i<<": ";
    17.             cin>>a[i];
    18.             if(a[i]<0 || a[i]>1)
    19.             {
    20.               cout<<"\nvui long nhap lai!!!\n";
    21.               cout<<"phan tu thu "<<i<<": ";
    22.               cin>>a[i];
    23.             }
    24.        }
    25.        for(int i=0;i<m;++i)
    26.            cout<<a[i];
    27.     }
    28.     return;
    29. }
    30.  
    31. float ChuyenDoi(int *a, int m)
    32. {
    33.     float x=0.0;
    34.     for (int i=0;i<m;++i)
    35.      {      
    36.                  x+=pow((float)2,(m-1-i))*a[i];
    37.      }
    38.      return x;
    39. }
    40.  
    41. int main ()
    42. {
    43.    
    44.     int *a = NULL,  m;
    45.     Nhap(a, m);
    46.     cout<<"\nso sau khi chuyen "<< ChuyenDoi(a, m);
    47.     _getch ();
    48.     return 0;
    49. }
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  6. #6
    Ngày gia nhập
    04 2012
    Bài viết
    16

    Mặc định chuyển đổi nhị phân sang thập phân

    @kimcy1992: cảm ơn nha, cái này mình cần phải học lại nhiều nữa.Bài của bạn chi tiết thật, dễ hiểu, trả lời đúng phần mình muốn hỏi luôn ^^
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

  7. #7
    Ngày gia nhập
    04 2012
    Bài viết
    42

    Nếu như bạn tính 2^n thì dùng phép dịch bit sẽ nhanh hơn và hay hơn dùng hàm pow.

    Và câu lệnh này không có tác dụng gì hết :

    C++ Code:
    1. if(a!=NULL)
    Toán tử new trả về bad_alloc chứ không phải là con trỏ NULL. Dùng nothrow để ép nó trả về kiểu NULL.

    http://en.cppreference.com/w/cpp/memory/new/nothrow

    C++ Code:
    1. int *a = new (nothrow) int [m];
    Đã được chỉnh sửa lần cuối bởi kimlama : 19-12-2012 lúc 01:34 PM.
    C Code:
    1. while (!silly)
    2.     cout<<"Study everything !";

  8. #8
    Ngày gia nhập
    04 2012
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    Ở đây mình cũng chỉ chỉnh theo bạn limlama nói thôi nói chung bạn nên xem lại cái phần cấp phát động qua hàm, chỗ đấy là dễ nhầm nhất đó, vấn đề đã được nói ở đây http://diendan.congdongcviet.com/showthread.php?t=36221
    Code:
    void Nhap(int** a)//dùng con trỏ cấp cao hơn khi đó khi xin cấp phát là thế này *a = new int[m];
    hoặc
    void Nhap(int* &a)//tham chiếu tới một con trỏ cấp phát sẽ thao tác tự nhiên hơn chỉ là a = new int[m];
    code mình sửa qua, loại bỏ những biến không cần thiết và hàm pow http://www.cplusplus.com/reference/cmath/pow/ bạn cũng để ý khi mà dùng m ở trong mà không lấy ra bạn sẽ không thể có giá trị m để dùng cho việc chuyển đổi số vì m bạn khai báo chỉ là biến local variable, do vậy bạn cần khai báo nó trong main hoặc là để là global variable
    C++ Code:
    1. #include<iostream>
    2. #include<conio.h>
    3. #include<math.h>
    4.  
    5. using namespace std;
    6.  
    7. void Nhap(int *&a, int &m)
    8. {
    9.     cout<<"\nso nhi phan co bao nhieu chu so: ";
    10.     cin>>m;
    11.     a=new int[m];
    12.     if(a!=NULL)
    13.     {
    14.        for(int i=0;i<m;i++)
    15.        {
    16.             cout<<"phan tu thu "<<i<<": ";
    17.             cin>>a[i];
    18.             if(a[i]<0 || a[i]>1)
    19.             {
    20.               cout<<"\nvui long nhap lai!!!\n";
    21.               cout<<"phan tu thu "<<i<<": ";
    22.               cin>>a[i];
    23.             }
    24.        }
    25.        for(int i=0;i<m;++i)
    26.            cout<<a[i];
    27.     }
    28.     return;
    29. }
    30.  
    31. float ChuyenDoi(int *a, int m)
    32. {
    33.     float x=0.0;
    34.     for (int i=0;i<m;++i)
    35.      {      
    36.                  x+=pow((float)2,(m-1-i))*a[i];
    37.      }
    38.      return x;
    39. }
    40.  
    41. int main ()
    42. {
    43.    
    44.     int *a = NULL,  m;
    45.     Nhap(a, m);
    46.     cout<<"\nso sau khi chuyen "<< ChuyenDoi(a, m);
    47.     _getch ();
    48.     return 0;
    49. }
    bạn ơi cho mình hỏi cái, mình đánh nguyên bản của bạn về chạy thì bị lỗi, còn copy thì ko là sao, hjx
    bài đánh của mình đây huhu
    C++ Code:
    1. #include <iostream>
    2. #include <conio.h>
    3. #include <math.h>
    4.  using namespace std;
    5.  
    6.  void Nhap(int *a, int &m)
    7.  {
    8.       cout<<"\nSo nhi phan co bao nhieu chu so: ";
    9.       cin>>m;
    10.       a=new int[m];
    11.       if(a!=NULL)
    12.       {
    13.                  for(int i=0; i<m; i++)
    14.                  {
    15.                          cout<<"\nPhan tu thu "<<i<<":";
    16.                          cin>>a[i];
    17.                          if(a[i]<0 || a[i]>1)
    18.                          {
    19.                                    cout<<"\nPhan tu thu "<<i<<":";
    20.                                    cin>>a[i];
    21.                          }
    22.                  }
    23.                  for(int i =0;i<m;i++)
    24.                  {
    25.                          cout<<a[i];
    26.                  }
    27.       }
    28.       return;
    29. }
    30. float ChuyenDoi(int *a, int m)
    31. {
    32.       float x=0.0;
    33.       for(int i=0; i<m; i++)
    34.       {
    35.               x+=pow((float)2,(m-1-i))*a[i];
    36.       }
    37.       return x;
    38. }
    39. int main()
    40. {
    41.     int *a=NULL, m;
    42.     Nhap(a, m);
    43.     cout<<"\nSo da chuyen: "<<ChuyenDoi(a, m);
    44.     getch();
    45.     return 0;
    46. }
    lỗi như thế này
    Attached Thumbnails Attached Thumbnails error.png  
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

  9. #9
    Ngày gia nhập
    04 2012
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi kimlama Xem bài viết
    Nếu như bạn tính 2^n thì dùng phép dịch bit sẽ nhanh hơn và hay hơn dùng hàm pow.
    nếu dùn phép dịch bit thì giải thuật và code như thế nào hả bạn.
    Nếu mình hỏi quá nhiều xin bạn đừng trách nha, người ta nói muốn biết phải hỏi muốn giỏi phải học mà

    Và câu lệnh này không có tác dụng gì hết :

    C++ Code:
    1. if(a!=NULL)
    Toán tử new trả về bad_alloc chứ không phải là con trỏ NULL. Dùng nothrow để ép nó trả về kiểu NULL.

    http://en.cppreference.com/w/cpp/memory/new/nothrow

    C++ Code:
    1. int *a = new (nothrow) int [m];
    Nếu dùng
    C++ Code:
    1. int *a = new (nothrow) int [m];
    thì có gì khác với không có nothorow, nó vẫn chạy khi ko có mà. hji một câu hỏi ngớ ngẩng, bạn đừng cười nha.
    nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đó than phiền

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

  1. Chuyển đổi hệ thập phân sang nhị phân
    Gửi bởi phonghieu45 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 11-10-2012, 08:42 PM
  2. Lập trình C++ Chuyển từ chuyển từ trung tố sang hậu tố và tính biểu thức hậu tố N chữ số như thế nào?
    Gửi bởi Chopper trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-08-2012, 09:48 PM
  3. Mã nguồn C++ Lớp phân số và Hàm chuyển đổi số thập phân sang phân số.
    Gửi bởi doicanhden trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 04-06-2012, 03:39 PM
  4. chuyển sang hệ thập lục phân
    Gửi bởi tungtaynguyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 29-12-2008, 10:57 AM
  5. bác nào có thể hướng dẫn em bài toán chuyển từ hệ nhị phân sang hệ thập phân
    Gửi bởi leanh2 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-11-2008, 08:56 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