Kteam Q&A Community

Cộng đồng hỏi đáp về các vấn đề trong lập trình, công nghệ thông tin.

1

hỏi về for trong c#

 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 đề ,, đầ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???

--- 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 

--- 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

3 câu trả lời Thêm câu trả lời

0
Cậu Vàng Quý 's Tộc đã trả lời 2019-02-12 11:19:40

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

0
Anonymous đã trả lời 2019-02-13 21:41:33

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

0
Quang NV đã trả lời 2019-02-16 19:49:26

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.

Câu trả lời của bạn

Bạn có thể trả lời câu hỏi này? Hãy chia sẻ nó cho mọi người.

Hủy bỏ hoặc

Chiến dịch

Kteam - Howkteam Free Education