СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 25 № 6790

Дан массив, содержащий 2014 положительных целых чисел. Напишите на одном из языков программирования программу, которая находит в этом массиве количество элементов, значение которых более чем в два раза превосходит значение предшествующего элемента. Например, для массива из 6 элементов, содержащего числа 2, 5, 10, 15, 40, 100, программа должна выдать ответ 3 (условию соответствуют элементы со значениями 5, 40 и 100). Программа должна вывести общее количество подходящих элементов, значения элементов выводить не нужно. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

 

БейсикПаскаль

N=2014

DIM A(N) AS INTEGER

DIM I, J, K AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=2014;

var

a: array [1..N] of integer;

i, j, k: integer;

begin

for i:=1 to N do

readln(a[i]);

end.

Си++Алгоритмический язык

#include <iostream>

using namespace std;

#define N 2014

int main(){

int a[N];

int i, j, k;

for (i=0; i<N; i++)

cin >> a[i];

}

алг

нач

цел N=2014

целтаб a[1:N]

цел i, j, k

нц для i от 1 до N

ввод a[i]

кц

кон

Python

# допускается также

# использовать две

# целочисленные переменные j, k

a = []

n = 2014

for i in range(0, n):

a.append(int(input()))

...

 

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Решение.

Содержание верного ответа: программа просматривает все пары соседних чисел в массиве и подсчитывает количество таких пар, в которых второй элемент более чем вдвое превышает первый.

 

Пример фрагмента программы на Паскале

 

k:=0;

for i:=2 to N do begin

if a[i] > 2*a[i-1] then k:=k+1;

end;

writeln(k);

 

При сравнении элементов можно вместо умножения использовать деление, но при этом следует позаботиться о том, чтобы при делении получался вещественный результат, а не округлённое целое значение. Можно, например, записать условие проверки так: if a[i] / a[i-1] > 2.

Следующая запись недопустима, так как при таком делении происходит округление до меньшего целого, в результате, например, пара (2, 5) не будет определена как допустимая: if a[i] div a[i-1] > 2.

Если проверка выполняется с помощью деления, следует быть особенно внимательным при использовании языка Си: в этом языке нет специальной операции целочисленного деления, деление целых чисел с помощью операции/по умолчанию выполняется как целочисленное.

Замена в предыдущем неверном решении строгого сравнения на нестрогое не делает программу правильной, так как в этом случае будет, например, ошибочно учтена не соответствующая условиям пара (5, 10).

Ещё один пример неверного решения (приводится только тело цикла):

 

j := a[i] / a[i-1]

if j > 2 then k:=k+1;

 

Здесь целому числу присваивается вещественное значение. Такое присваивание либо (в зависимости от языка программирования) приведёт к ошибке трансляции, либо даст неверный результат при выполнении, как при целочисленном делении.