Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

hỏi về for trong c#

10:08 11-02-2019 420 lượt xem 6 bình luận 11:53 10-06-2021
 int n1, n, p = 1;
            int dec = 0, i = 1, j, d;

            Console.Write("\n");
            Console.Write("Chuyen doi nhi phan thanh thap phan trong C#:\n");
            Console.Write("--------------------------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap mot so bat ky trong he nhi phan: ");
            n = Convert.ToInt32(Console.ReadLine());
            n1 = n;
            for (j = n; j > 0; j = j / 10)
            {
                d = j % 10;
                if (i == 1)
                    p = p * 1;
                else
                    p = p * 2;

                dec = dec + (d * p);
                i++;
            }
            Console.Write("\nSo trong he nhi phan: {0}\nSo thap phan tuong duong la: {1} \n\n", n1, dec);

            Console.ReadKey();

Cho mình hỏi nhiều vấn đề

  1. đầu tiên là không phải đầu chương trình khai báo gán i=1 rồi vì sao xuống dưới lại có else trường hợp i không phải bằng 1???
  2. với vì sao nếu i=1 thì lại nhân với 1 , còn không bằng lại nhân với 2 
  3. phần vòng lặp ở for ,, j=j/10 ,, vậy j lấy từ đâu ??

mình mới học nên k hiểu rõ lắm

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Quang NV đã bình luận 19:49 16-02-2019

Hài mấy ông cứ thần thành hóa làm người ta sợ. Cái của bạn vòng lặp đầu thì i=1 thỏa mãn if còn những vòng lặp tiếp theo i++ lên thì sẽ là 2,3,...thì nó thực hiện trong else vậy thôi.

Anonymous đã bình luận 21:41 13-02-2019

Cho số rồi ghi ra giấy step by step nhé!!!

Cậu Vàng Quý 's Tộc đã bình luận 11:19 12-02-2019

Ok bạn,nếu bạn có học qua khoa học máy tính thì bạn sẽ biết cách đổi từ hệ nhị phân sang hệ thập phân,nếu chưa thì bạn xem ví dụ sau(hơi dài,nhớ đọc kĩ):

bản chất của hệ thập phân là gì?
ví dụ 01101101 = 00000000+1000000+100000+00000+1000+100+00+1
suy ra 01101101 = ((10^7)*0)+((10^6)*1)+((10^5)*1)+((10^4)*0)+((10^3)*1)+
((10^2)*1)+((10^1)*0)+((10^0)*1)
                =((10^6)*1)+((10^5)*1)+((10^3)*1)+((10^2)*1)+((10^0)*1)
vậy thì hệ nhị phân cũng tương tự như vậy,chỉ khác
là cơ số là 2 chứ không phải là 10:
01101101=((2^7)*0)+((2^6)*1)+((2^5)*1)+((2^4)*0)+((2^3)*1)+
((2^2)*1)+((2^1)*0)+((2^0)*1)
        =((2^6)*1)+((2^5)*1)+((2^3)*1)+((2^2)*1)+((2^0)*1)
        =64+32+8+4+1 = 109
hoặc là ta cũng có thể làm như sau:
01101101 lấy số 1 còn 0110110
số 1 này đứng vị trí thứ 1(từ phải sang) trong dãy số 01101101
1*2^(1-1) = 1
0110110 lấy số 0 còn 011011
số 0 này đứng vị trí thứ 2 trong dãy số 01101101
1+1*2^(2-1) = 1
011011 lấy số 1 còn 01101
số 1 này đứng vị trí thứ 3 trong dãy số 01101101
1+1*2^(3-1) = 5
và cứ thế đến hết dãy số...

và đây là ngôn ngữ thuật toán của đoạn chương trình bạn đưa ra:

p = 1
dec = 0
i = 1
xuống dòng
viết("Chuyen doi nhi phan thanh thap phan trong C#:")
xuống dòng
viết("--------------------------------------------")
xuống 2 dòng
viết("Nhap mot so bat ky trong he nhi phan: ")
n = một số được nhập vào từ bàn phím
n1 = n
j = n
lặp trong khi j>0
    d = j chia lấy dư 10;
    nếu i = 1 thì
    p = p 
    còn không thì:
    p = p nhân 2;
    dec = dec cộng (d nhân p);
    i tăng 1
    j chia lấy nguyên 10
xuống dòng
viết("So trong he nhi phan:",n1)
xuống dòng
viết("So trong he thap phan tuong duong la:",dec)
xuống dòng
chờ cho đến khi một phím được nhấn

giải đáp:

----bạn thấy ở dòng thứ 20 thì có i++(i tăng lên 1)

----ở lần lặp đầu tiên i = 2^0=1,lần thứ 2 i = 2^1= 2 và cứ tiếp tục nhân 2...,còn tại sao i lại bằng 2^0 rồi lại là 2^1

thì mời bạn xem lại ví dụ đổi nhị phân sang thập phân

----ở dòng 11 bạn sẽ thấy ở phần khởi tạo vòng lặp for sẽ có j = n

Câu hỏi mới nhất