3. Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Разделить на 2
2. Вычесть 1
Первая команда уменьшает число на экране в 2 раза, вторая — уменьшает его на 1. Программа для исполнителя — это последовательность команд.
Определите количество программ, которые число 64 преобразуют в чис
ло 14.
Первую цифру числа в шестнадцатеричной записи можно найти как N div 16, а вторую - N mod 16
Программа на языке Pascal:
const
N = 2017; // Количество элементов в массиве
var
a: array[1..N] of integer;
i, c: integer;
begin
// Генерация массива (можно изменить на ввод с клавиатуры)
for i := 1 to N do
a[i] := Random(10000) + 1;
// Подсчет количества элементов массива, удовлетворяющим
неравенству
c := 0;
for i := 1 to N do
if (a[i] > 15) and (a[i] < 256) and (a[i] div 16 > a[i] mod 16) then
c += 1;
write(c);
end.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
procedure MakeFile(path:string);
// не относится к заданию, создает файл Text со 100 числами
begin
WriteLines(path,SeqRandom(100,-99,99).Select(x->x.ToString))
end;
begin
MakeFile('MyFile1.txt');
// теперь у нас есть текстовый файл из 100 случайных чисел
// собственно, решение
var n:=ReadInteger('Укажите количество чисел:');
var a:=ReadLines('MyFile1.txt').Take(n).ToArray;
Writeln('Исходная последовательность'); a.Println;
Writeln('Результирующая последовательность');
a:=a.OrderBy(x->x.Last).ToArray; a.Println;
WriteAllLines('MyFile2.txt',a);
end.
Пример
Укажите количество чисел: 15
Исходная последовательность
51 -9 17 -12 7 -15 -20 50 98 19 56 67 -57 -42 64
Результирующая последовательность
-20 50 51 -12 -42 64 -15 56 17 7 67 -57 98 -9 19