Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
Trang ChínhTrang Chính  Tìm kiếmTìm kiếm  Latest imagesLatest images  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

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
Tboy


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

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

Thập phân sang nhị phân-(Đệ quy) Titleb10 Fri Jan 21, 2011 2:03 am » Thập phân sang nhị phân-(Đệ quy) Thập phân sang nhị phân-(Đệ quy) Titleb13
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

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


Đượ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
https://taplaptrinh.forumvi.com
princeofwind_92
Trứng vịt
Trứng vịt
princeofwind_92


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

Thập phân sang nhị phân-(Đệ quy) Empty
Bài gửiTiêu đề: Giải thích!!!   Thập phân sang nhị phân-(Đệ quy) EmptyTue Jan 25, 2011 12:43 am

Thập phân sang nhị phân-(Đệ quy) Titleb10 Tue Jan 25, 2011 12:43 am » Giải thích!!! Thập phân sang nhị phân-(Đệ quy) Titleb13
Giải thích đi tác giả ơi.


princeofwind_92

Thập phân sang nhị phân-(Đệ quy) Border10 Thập phân sang nhị phân-(Đệ quy) Border14
Về Đầu Trang Go down
Tboy
Cá voi
Cá voi
Tboy


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

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

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


Tboy

Thập phân sang nhị phân-(Đệ quy) Border10 Thập phân sang nhị phân-(Đệ quy) Border14
Về Đầu Trang Go down
https://taplaptrinh.forumvi.com
Sponsored content




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

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


Sponsored content

Thập phân sang nhị phân-(Đệ quy) Border10 Thập phân sang nhị phân-(Đệ quy) Border14
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 

 Similar topics

-
» Tháp Hà Nội-(Đệ quy)
» Liệt kê dãy nhị phân có độ dài n - (Phương pháp sinh)
» Liệt kê các tập con k phần tử - (Phương pháp sinh)
» Xóa một phần tử khỏi mảng-(Mảng 1 chiều-Biến đổi trên mảng)
» Xóa một phần tử khỏi mảng-(Mảng 1 chiều-Biến đổi trên mảng)
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-