Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети


Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»


Download 1.52 Mb.
Pdf ko'rish
bet48/77
Sana03.02.2023
Hajmi1.52 Mb.
#1152062
TuriРешение
1   ...   44   45   46   47   48   49   50   51   ...   77
Bog'liq
Задачи на Pascal

Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 
43 
Теперь покажем то, что если мы возьмем остаток от деления числа 22 на 2, затем разделим его 
на 2, отбросив остаток, и будем повторять эти действия до обнуления числа, то в итоге получим все 
его разряды в порядке справа налево. Возьмем его запись 1 * 2
4
+ 0 * 2
3
+ 1 * 2
2
+ 1 * 2
1
+ 0 * 2
0
и 
разделим ее на 2. Из алгебры известно, что если мы делим сумму чисел на некоторое число, то на 
него делятся все слагаемые этой суммы. 1 * 2
4
, 0 * 2
3
, 1 * 2
2
и 1 * 2
1
делятся на 2, так как в них 
присутствует множитель 2. 0 * 2
0
= 0 * 1 = 0 не делится на 2, соответственно, это число будет остат-
ком от деления на 2, и при этом по формуле оно является крайним справа разрядом. Затем мы делим 
всю эту запись на 2 и отбрасываем остаток, получаем: 1 * 2
3
+ 0 * 2
2
+ 1 * 2
1
+ 1 * 2
0

Очевидно, что 
при следующем взятии остатка мы получим цифру из крайнего справа слагаемого. Повторяя эту 
цепочку, мы постепенно получим все цифры числа 22 в системе счисления с основанием 2.
Обобщая вышесказанное, приходим к выводу, что для формирования записи числа нам необ-
ходимо получить все остатки от деления x на основание n, при этом деля x на n после каждого 
взятия остатка. 
Каким образом мы запишем остатки справа налево? Очень просто: умножаем очередной оста-
ток на некоторый множитель z, добавляющий необходимое количество нулей, чтобы цифра оказа-
лась в необходимой позиции, и прибавляем к результату r. Поначалу z будет равен 1, так как мы 
прибавляем цифру к разряду единиц, затем z в каждой итерации будет умножаться на 10. 
В итоге мы прибавляем к результату r первый остаток, умноженный на 1, второй остаток, 
умноженный на 10, третий остаток, умноженный на 100 и так далее, пока не будет сформировано 
искомое число: 
r := 0; 
z := 1; 
while x <> 0 do begin 
r := r + z * (x mod n); 
x := x div n; 
z := z * 10 
end; 
Код: 
1.
program ConvertNotation; 
2.
3.
var 
4.
c, z, r: integer; 
5.
x, z: word; 
6.
7.
begin 
8.
readln(x, n); 
9.
r := 0; 
10.
z := 1; 
11.
while x <> 0 do begin 
12.
r := r + z * (x mod n); 
13.
x := x div n; 
14.
z := z * 10 
15.
end; 
16.
writeln(r) 
17.
end. 

Download 1.52 Mb.

Do'stlaringiz bilan baham:
1   ...   44   45   46   47   48   49   50   51   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling