program sorting;
const
N = 10;
var
v: array[1..N] of integer;
d: integer;
i, t: integer;
k: boolean;
begin
randomize;
write('ДО сортировки: ');
for i := 1 to N do
begin
readln(v[i])
write(v[i]:6);
end;
}
d := N div 2;
while(d > 0) do
begin
k := true;
while k do
begin
k := false;
i := 1;
for i := 1 to N - d do
begin
if(v[i] > v[i + d]) then
begin
t := v[i];
v[i] := v[i + d];
v[i + d] := t;
k := true;
end;
end;
end;
d := d div 2;
end;
writeln;
write('ПОСЛЕ сортировки: ');
for i := 1 to N do
write(v[i]:6);
writeln;
end.
var
Numbers: array [1..6] of integer;
x, summ12, summ56, countN, r : integer;
begin
for var i := 100000 to 999999 do begin
// берем каждое число от 100000 до 999999
x := i;
for var j := 1 to 6 do begin
// mod - получаем остаток от деления X на 10
// например для 12345.6 остаток от деления - 6
Numbers[7 - j] := x mod 10;
//записываем цифры в обратном порядке (справа налево), поэтому [7 - j]
// div - получаем целую часть числа от деления X на 10
// например, для 1234.5 целая часть - 12345
x := x div 10;
// теперь X будет на 1 разряд меньше (например X = 12345)
// делим 6 раз X на 10
// например (1) 12345.[6] => (2) 1234.[5] => (3) 123.[4] => (4) 12.[3] => (5) 1.[2] = > 0.[1]
end;
// считаем суммы двух первых и последних
summ12 := Numbers[1] + Numbers[2];
summ56 := Numbers[5] + Numbers[6];
// и разницу между суммами
r := summ12 - summ56;
// разница может быть 5 или -5
// abs() - возвращает модуль числа
// приводим разницу в положительное число
// если разница не более 5, то число счастливое
if(abs(r) <= 5) then countN := countN + 1;
end;
writeln('Количество счастливых чисел: ', countN);
end.
Объяснение:
для PascalABC
это задача под номером 2
Получив цифры с
x mod y
x div y
можно (для других задач) изменить расчет суммы и условие счета количества
125/16=7 остаток 13.
7 меньше 13, деление прекращаем. Теперь записываем частное, а за ним остатки в обратном порядке (это общее правило, а в нашем случае остаток единственный). Получаем 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 и все пошло по кругу.
Следовательно, дробная часть не может быть точно представлена в 16й системе счисления.
Ограничимся двумя цифрами после запятой.
Тогда результат перевода запишется так: 125.68(10)=7D.AE(16)
Переход к двоичной системе очень простой, поскольку 16 - это 2 в четвертой степени. Поэтому каждую шестнадцатиричную цифру мы просто заменяем четырьмя двоичными цифрами (так называемой тетрАдой).
7D.AE(16)=0111 1101.1010 1110(2) - очень простая операция.
Перевод из двоичной системы в восьмеричную тоже прост, поскольку 8 - это 2 в кубе. Разбиваем двоичное число на триАды (по три разряда) влево и вправо от десятичной точки и каждую триаду заменяем восьмеричной цифрой (они по написанию совпадают с десятичными). Если разрядов для триады не хватает, дополняем их нулями слева для целой части и справа для дробной.
001 111 101.101 011 100(2)=175.534(8)
2. Перевод из двоичного представления в восьмеричное мы только что делали. Повторим его.
111 011.001 101(2) = 73.15(8)
В шестнадцатиричную систему перевод делается так же, только двоичное число надо разбивать не на триады, а на тетрады. С дополнением нулями, как и для восьмеричной системы.
0011 1011.0011 0100(2) = 3В.34(16)
Осталось сделать перевод в десятичную систему счисления. Конечно, его можно выполнять для любого основания, но лучше брать такое, где меньше всего ненулевых цифр. В двоичном представлении 8 единиц, в восьмеричном и шестнадцатиричном - по 4. Следовательно можно брать или восьмеричное число, или шестнадцатиричное. Допустим, выбрано шестнадцатиричное число. Записываем его в расширенной форме по степеням основания (т.е. 16 в нашем случае):