Trang ChínhTrang Chính  CalendarCalendar  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Hãy sử dụng FireFox để web hiển thị tốt hơn!


Share | 
 

 Thập phân sang nhị phân-(Đệ quy)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 25
Đến từ : TPHCM

Bài gửiTiêu đề: Thập phân sang nhị phân-(Đệ quy)   Fri Jan 21, 2011 2:03 am

Fri Jan 21, 2011 2:03 am » Thập phân sang nhị phân-(Đệ quy)
Code có dùng con trỏ:

Code:

//Doi sang nhi phan
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
#define Max 100
void Nhiphan(int N,int *P,int &I);
void main()
{
   int n,*p,i=0;
   p=(int*)malloc(Max*sizeof(int));
   do
   {
      printf("Nhap vao so thap phan N: ");
      scanf("%d",&n);
   }while(n<0);
   Nhiphan(n,p,i);
   printf("Doi sang nhi phan: ");
   for(int j=i;j>=0;j--)
      printf("%d",*(p+j));
   free(p);
   printf("\n");
   getch();
}
void Nhiphan(int N,int *P,int &I)
{
   if(N==1)
   {
      *(P+I)=1;
      return;
   }
   else if(N==0)
      {
         *(P+I)=0;
         return;
      }
      else *(P+I)=N%2;
   I++;
   return Nhiphan(N/2,P,I);
}

Code không dùng con trỏ

Code:
//Doi sang nhi phan
#include <stdio.h>
#include <conio.h>
#define Max 100
void Nhiphan(int N,int A[],int &I);
void main()
{
   int n,a[Max],i=0;
   do
   {
      printf("Nhap vao so thap phan N: ");
      scanf("%d",&n);
   }while(n<0);
   Nhiphan(n,a,i);
   printf("Doi sang nhi phan: ");
   for(int j=i;j>=0;j--)
      printf("%d",a[j]);
   printf("\n");
   getch();
}
void Nhiphan(int N,int A[],int &I)
{
   if(N==1)
   {
      A[I]=1;
      return;
   }
   else if(N==0)
      {
         A[I]=0;
         return;
      }
      else A[I]=N%2;
   I++;
   return Nhiphan(N/2,A,I);
}
Giải thích: Thuật toán để chuyển từ thập phân sang nhị phân là chia cho 2 và viết ngược lại số dư.Ở đây ý tưởng của mình là trong quá trình chia cho 2 sẽ lưu các số dư vào một mảng A(trong bài mình cho số phần tử tối đa của A là 100, nếu bạn muốn thêm có thể sửa lại), rồi sau đó in ra màn hình ngược lại dãy số đó, tức là với mảng A có n phần tử thì thực hiện in từ phần tử A[n-1] đến A[0].
Bạn có thể dễ dàng nhận ra tính đệ qui của bài toán là thực hiện chia số n bất kì cho 2, sau đó lại lấy kết quả là n/2 chia cho 2 tiếp...như vậy trong hàm Nhiphan(int N,int A[],int &I), ta sẽ gọi lại hàm đó với N/2, và trong thân hàm sẽ có lệnh cho phần tử mảng A bằng số dư tức là A[I]=N%2.Đó là bạn đã tìm được thành phần đệ qui.
Bây giờ bạn phải tìm thành phần dừng, xét số n, khi ta thực hiện chia tới tận cùng cho 2, thì được thương là 1, khi đó ta chia 1 cho 2 được kết quả thương là 0 và số dư 1, bài toán kết thúc, nên trong hàm, ta chọn khi n=1 thì cho số dư bằng 1 và thoát hàm; nhưng với trường hợp số 0 thì ta phải cho số dư là 0 rồi thoát hàm, để khi nhập số 0 sẽ in ra màn hình là 0, các số thập phân khác đều thuộc trường hợp đầu. Tất cả các số thập phân khác 0 khi chuyển sang nhị phân đều có chữ số đầu là 1 duy chỉ có số 0 vẫn là 0.


Tboy



Được sửa bởi Tboy ngày Tue Jan 25, 2011 7:05 pm; sửa lần 3.
Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
princeofwind_92
Trứng vịt
Trứng vịt
avatar


Tổng số bài gửi : 1
Cảm ơn : 1
Danh vọng : 0
Join date : 20/01/2011

Bài gửiTiêu đề: Giải thích!!!   Tue Jan 25, 2011 12:43 am

Tue Jan 25, 2011 12:43 am » Giải thích!!!
Giải thích đi tác giả ơi.


princeofwind_92

Về Đầu Trang Go down
Xem lý lịch thành viên
Tboy
Cá voi
Cá voi
avatar


Nam Tổng số bài gửi : 178
Cảm ơn : 413
Danh vọng : 4
Join date : 03/01/2011
Age : 25
Đến từ : TPHCM

Bài gửiTiêu đề: Re: Thập phân sang nhị phân-(Đệ quy)   Tue Jan 25, 2011 7:06 pm

Tue Jan 25, 2011 7:06 pm » Re: Thập phân sang nhị phân-(Đệ quy)
pro Giải thích rồi đó bạn


Tboy



Về Đầu Trang Go down
Xem lý lịch thành viên http://taplaptrinh.forumvi.com
Sponsored content




Bài gửiTiêu đề: Re: Thập phân sang nhị phân-(Đệ quy)   

» Re: Thập phân sang nhị phân-(Đệ quy)


Sponsored content

Về Đầu Trang Go down
 

Thập phân sang nhị phân-(Đệ quy)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
 :: Cơ sở lập trình 1 :: Bài tập thực hành-