Формально перевод десятичного числа D в двоичное B делается так: Исходное число делится с остатком на 2 при этом частное запоминаем для дальнейших операций, а остаток записываем в младший бит двоичного числа. Затем частное снова делится на 2 и остаток записывается в следующий разряд И так до тех пор, пока не получится такой результат - частное равно 0 а остаток равен 1. Разберем пример с десятичным числом 2001 2001/2=1000 ост 1 (1й остаток младший разряд (крайний справа)) 1000/2=500 ост 0 500/2=250 ост 0 250/2=125 ост 0 125/2=62 ост 1 62/2=31 ост 0 31/2=15 ост 1 15/2=7 ост 1 7/2=3 ост 1 3/2=1 ост 1 1/2=0 ост 1 (Старший разряд (крайний слева))
Теперь "Вписываем" остатки, в разряды двоичного числа, начиная с 1-го младшего: 11111010001
procedure oddDec(var a,b:integer); //подпрограмме переданы аргументы a и b //процедура для вычитания в нечётном элементе begin; a:=a-b; end;
procedure NotoddInc(var a,b:integer); //подпрограмме переданы аргументы a и b //процедура для сложения в чётном элементе begin; a:=a+b; end;
begin randomize; readln(a); //ввод a readln(b); //ввод b writeln('Array:'); for i:=1 to 10 do //весь массив begin; ar[i]:=random(-20,80); //случайные числа от -20 до 80 включительно write(ar[i]:4); //вывод if odd(i) then oddDec(ar[i],b) else NotoddInc(ar[i],a); {если нечётное, то первая процедура, иначе вторая. Обращаю внимания на то, что элементы меняются сразу после вывода} end; writeln; writeln('Final array:'); //вывод получившегося массива for i:=1 to 10 do write(ar[i]:4); end.
Пример ввода: 20 10 Пример вывода: Array: 10 16 0 60 23 4 22 -20 4 55 Final array: 0 36 -10 80 13 24 12 0 -6 75
Исходное число делится с остатком на 2 при этом частное запоминаем для дальнейших операций, а остаток записываем в младший бит двоичного числа. Затем частное снова делится на 2 и остаток записывается в следующий разряд И так до тех пор, пока не получится такой результат - частное равно 0 а остаток равен 1.
Разберем пример с десятичным числом 2001
2001/2=1000 ост 1 (1й остаток младший разряд (крайний справа))
1000/2=500 ост 0
500/2=250 ост 0
250/2=125 ост 0
125/2=62 ост 1
62/2=31 ост 0
31/2=15 ост 1
15/2=7 ост 1
7/2=3 ост 1
3/2=1 ост 1
1/2=0 ост 1 (Старший разряд (крайний слева))
Теперь "Вписываем" остатки, в разряды двоичного числа, начиная с 1-го младшего:
11111010001
Т.е.
Аналогично переводим десятичное 10
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
И 21 десятичное
21/2=10 ост 1
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
ИТОГО Получится этакое ЧУДО, когда все соберем
P.S. Можно проверить калькулятором. Стандарный WINDOWS калькулятор может переводить из одной системы счисления в другую.
var
i,a,b:integer;
ar:array[1..10] of integer;
procedure oddDec(var a,b:integer); //подпрограмме переданы аргументы a и b
//процедура для вычитания в нечётном элементе
begin;
a:=a-b;
end;
procedure NotoddInc(var a,b:integer); //подпрограмме переданы аргументы a и b
//процедура для сложения в чётном элементе
begin;
a:=a+b;
end;
begin
randomize;
readln(a); //ввод a
readln(b); //ввод b
writeln('Array:');
for i:=1 to 10 do //весь массив
begin;
ar[i]:=random(-20,80); //случайные числа от -20 до 80 включительно
write(ar[i]:4); //вывод
if odd(i) then oddDec(ar[i],b) else NotoddInc(ar[i],a);
{если нечётное, то первая процедура, иначе вторая. Обращаю внимания на то, что элементы меняются сразу после вывода}
end;
writeln;
writeln('Final array:'); //вывод получившегося массива
for i:=1 to 10 do
write(ar[i]:4);
end.
Пример ввода:
20
10
Пример вывода:
Array:
10 16 0 60 23 4 22 -20 4 55
Final array:
0 36 -10 80 13 24 12 0 -6 75