Задание 3. Тип заданий 25: обработка массивов.
  • Задание:

    Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива, значение которых трёхзначно, и восьмеричная запись которого заканчивается на 4.
    Например, для массива из пяти элементов: 156 12 784 636 346 — ответ: 2, так как десятичные числа 156 и 636 в восьмеричной системе счисления заканчиваются на 4.
    Исходные данные объявлены так, как показано ниже на примере для языка Pascal. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Pascal:
    const
        n=20;
    var
        a: array[1..n] of integer;
        i, j, k: integer;
    begin
        for i:=1 to n do
            readln(a[i]);
    ...

    end.

     

  • Решение:

    Для определения количества подходящих элементов проверим каждый элемент массива с помощью цикла for.

    Нам требуется найти количество трёхзначных элементов массива. То есть если элемент массива будет больше 99 и меньше 1000, то этот элемент трёхзначный.

    Также нам необходимо, чтобы восьмеричная запись числа заканчивалась на 4. Это легко проверить, разделив число на 8 и получив остаток: он должен быть равен четырём.

    Нам даны переменные i, j, k. Переменную i зарезервируем как счетчик цикла, переменную k — для количества нужных элементов. Переменную j использовать не будем (по условию разрешается).

    Каждый повтор цикла переменная i будет увеличиваться на 1, и если элемент массива с индексом i будет подходить под условие, переменная k также будет увеличиваться на 1.

    1. Для проверки трёхзначности условие будет выглядеть так:

    (a[i]>99) and (a[i]<1000).

    2. Если число в восьмеричной системе счисления заканчивается на 4, значит остаток от деления на 8 этого числа равен четырем. То есть условие будет таким: 

    (a[i] mod 8 = 4).

    Составим программу:

    //обнулим переменную k

    k := 0;

    //проверим каждый элемент массива

    for i:=1 to n do

      if (a[i] > 99) and (a[i] < 1000) and (a[i] mod 8 = 4) then

        inc(k); //процедура inc() в данном случае увеличивает значение k на 1

    //выведем результат на экран

    writeln(k);

Поделиться:
 
Комментарии (2)
Руслан Эрикенов # 10 апреля 2017 в 16:59 +1
Можно ли в данном случае использовать k:= k+1; вместо inc(k);?
Тимур Лихоманов # 21 апреля 2017 в 23:03 0
Да, конечно можно.
Перевести число из в Результат: 510 = 1012