program raf105;
var
a,b: array of integer;
i,x: integer;
procedure Divide7(x:integer; arr:array of integer);
begin
arr[0]:= x div 1000000;
arr[1]:= (x div 100000) mod 10;
arr[2]:= (x div 10000) mod 10;
arr[3]:= (x div 1000) mod 10;
arr[4]:= (x div 100) mod 10;
arr[5]:= (x div 10) mod 10;
arr[6]:= x mod 10;
end;
begin
SetLength(a,7);
SetLength(b,7);
writeln('Добро в игру "Лотерея"!');
write('Введите семизначное число: ');
readln(x);
writeln;
Divide7(x,a);
x:= random(1000000,9999999);
Divide7(x,b);
write('Введённые числа: ');
for i:=0 to 6 do
write(a[i],' ');
writeln;
write('Сгенерированные числа: ');
for i:=0 to 6 do
write(b[i],' ');
end.
2 Вариант (без процедуры)program raf105;
var
a,b: array[1..7] of integer;
i,x: integer;
begin
writeln('Добро в игру "Лотерея"!');
write('Введите семизначное число: ');
readln(x);
writeln;
a[1]:= x div 1000000;
a[2]:= (x div 100000) mod 10;
a[3]:= (x div 10000) mod 10;
a[4]:= (x div 1000) mod 10;
a[5]:= (x div 100) mod 10;
a[6]:= (x div 10) mod 10;
a[7]:= x mod 10;
x:= random(1000000,9999999);
b[1]:= x div 1000000;
b[2]:= (x div 100000) mod 10;
b[3]:= (x div 10000) mod 10;
b[4]:= (x div 1000) mod 10;
b[5]:= (x div 100) mod 10;
b[6]:= (x div 10) mod 10;
write('Введённые числа: ');
for i:=1 to 7 do
write(a[i],' ');
writeln;
write('Сгенерированные числа: ');
for i:=1 to 7 do
write(b[i],' ');
end.
PascalABC 3.4.2
125/16=7, остаток 13.
7 меньше 16, деление прекращаем. Записываем частное, а за ним остатки в обратном порядке (это общее правило, а в нашем случае остаток единственный). Получаем 7 13. Заменяем полученные десятичные числа шестнадцатиричными и получаем 7D.
Теперь переводим дробную часть. Тут надо производить последовательное умножение на основание системы и отбрасывать целые части, записывая их в качестве получаемых цифр числа. Повторяем до получения нулевой дробной части или прекращаем, если получено необходимое число цифр.
0.68х16=10.88, записываем 10, в 16й системе счисления это А
0.88х16=14.08, 14 ⇒ E
0.08x16=1.28, 1 ⇒ 1
0.28x16=4.48, 4 ⇒ 4
0.48x16=7.68, 7 ⇒ 7
0.68x16=10.88, 10 ⇒ E и все пошло по кругу.
Следовательно, дробная часть не может быть точно представлена в шестнадцатиричной системе счисления. Ограничимся двумя цифрами после запятой.
Результат перевода запишется так: 125.68(10)=7D.AE(16)
Переход к двоичной системе очень прост, поскольку шестнадцать - это два в четвертой степени. Поэтому каждую шестнадцатиричную цифру заменяем четырьмя двоичными цифрами (так называемой тетрАдой).
Получаем 7D.AE(16)=0111 1101.1010 1110(2)
Перевод из двоичной системы в восьмеричную тоже прост, поскольку восемь - это два в кубе. Разбиваем двоичное число на триАды (по три разряда) влево и вправо от десятичной точки и каждую триаду заменяем восьмеричной цифрой (они по написанию совпадают с десятичными). Если разрядов для триады не хватает, дополняем их нулями слева для целой части и справа для дробной.
001 111 101.101 011 100(2)=175.534(8)
Перейти от двоичной к девятиричной системе счисления мы подобный образом сделать не можем, поскольку девять не является степенью двойки. Придется поступать как при переходе к шестнадцатиричной системе: делить десятичное число на основание системы (9).
Снова отдельно переводим целую часть, отдельно - дробную.
125/9=13, остаток 8.
13/9=1, остаток 4
1 меньше 9, деление прекращаем. Записываем частное, а за ним остатки в обратном порядке: 148.
Теперь переводим дробную часть. Тут надо производить последовательное умножение на основание системы и отбрасывать целые части, записывая их в качестве получаемых цифр числа. Повторяем до получения нулевой дробной части или прекращаем, если получено необходимое число цифр.
0.68х9=6.12, записываем 6
0.12х9=1.08, записываем 1
0.08x9=0.72, записываем 0
0.72x9=6.48, записываем 6
0.48x9=4.32, записываем 4
0.32x9=2.88, записываем 2 и так далее...
В нашем случае дробная часть не может быть точно представлена в девятиричной системе счисления, ограничимся четырьмя цифрами после запятой.
Результат перевода запишется так: 125.68(10)=148.6106(9)
2. Перевод из двоичного представления в восьмеричное мы уже делали, поэтому объяснения тут не нужны. Разбиваем число на триады и получаем результат.
111 011.001 101(2) = 73.15(8)
В шестнадцатиричную систему перевод делается так же, только двоичное число надо разбивать не на триады, а на тетрады. С дополнением нулями, как и для восьмеричной системы.
0011 1011.0011 0100(2) = 3В.34(16)
Осталось сделать перевод в десятичную систему счисления. Конечно, его можно выполнять для любого основания, но лучше брать такое, где меньше всего ненулевых цифр. В двоичном представлении 8 единиц, в восьмеричном и шестнадцатиричном - по 4. Следовательно можно брать или восьмеричное число, или шестнадцатиричное. Допустим, выбрано шестнадцатиричное число. Записываем его в расширенной форме по степеням основания (т.е. 16 в нашем случае):