Top.Mail.Ru
Ответы

Нужен гуру в информатике, очень нужна помощь.

1.Ниже представлен фрагмент программы, в которой описан одномерный целочисленный массив A и обрабатываются элементы массива с индексами от 1 до 10.

n:=10;

for i:=1 to n do begin

A[n+1-i]:=2*A[i];

end;

Перед началом выполнения фрагмента элементы массива имеют значения соответственно 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, т. е. A[1] = 1; A[2] = 2 и т. д.

Укажите наибольшее значение, которое после выполнения указанного фрагмента программы имеют рассмотренных в этом фрагменте элемента массива. Если таких чисел несколько, укажите наибольшее из них

2.Программист написал программу суммирования элементов массива, но допустил в ней ошибку.

Program summa;

const n=10;

var a: array [1..n] of integer;

s, i: integer;

begin s:=0;

for i:=1 to n do

begin

readln(a[i]);

s:=s+i

end;

writeln('s=', s)

end.

Чему будет равно s в результате выполнения этой программы, если в качестве элементов массива ввести числа: 1, –2, 3, –4, 5 , –6, 7, –8, 9, –10?

3.Дан рекурсивный алгоритм:

procedure F(n: integer);

begin

writeln('*');

if n>0 then begin

F(n-2);

F(n div 2);

end

end;

Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(5)?

4.Дан рекурсивный алгоритм:

function F(n: integer): integer;

begin

if n>2

then F:=F(n-1)+F(n-2)

else F:=n;

end;

Чему будет равно значение, вычисленное алгоритмом при выполнении вызова F(3)?

5.Задан массив X[1..N]. Какое условие надо поставить вместо многоточия, чтобы в результате в переменную i был записан номер элемента, равного R? Вводите ответ без лишних пробелов и скобок.

i:=1;

while (i<=N) and ( ... ) do

i:=i+1;

По дате
По рейтингу
Аватар пользователя
Профи

Посмотрим, как изменяются элементы массива A при выполнении указанного фрагмента программы:

A[10+1-1] = A[10] = 2 * A[1] = 2 * 1 = 2

A[10+1-2] = A[9] = 2 * A[2] = 2 * 2 = 4

A[10+1-3] = A[8] = 2 * A[3] = 2 * 3 = 6

...

A[10+1-10] = A[1] = 2 * A[10] = 2 * 10 = 20
Таким образом, наибольшее значение, которое получит элемент массива, это 20.
В программе происходит ошибка в суммировании. Вместо суммирования значений элементов массива переменная s суммирует индексы элементов. Правильный вариант программы должен выглядеть так:
Program summa;
const n = 10;
var a: array [1..n] of integer; s, i: integer;
begin
s := 0;
for i := 1 to n do
begin
readln(a[i]);
s := s + a[i]; // Исправлено суммирование значений элементов массива
end;
writeln('s=', s)

end.



После исправления программа будет суммировать значения элементов массива, введенных пользователем, и выведет результат.

Вызов F(5) приведет к следующим выводам звездочек:

F(5) вызывает F(3) и F(2)

F(3) вызывает F(1) и F(1)

F(1) и F(2) выводят по одной звездочке каждая

Итого, будет напечатано 3 звездочки.



Вызов F(3) приведет к вычислениям следующим образом:

F(3) = F(2) + F(1)

F(2) = F(1) + F(0) = 1 + 0 = 1

F(1) = 1 (по определению)

Итак, F(3) = 1 + 1 = 2.
Чтобы найти номер элемента, равного R, вместо многоточия нужно поставить условие, проверяющее равенство текущего элемента массива R:
i := 1;
while (i <= N) and (X[i] <> R) do // Добавлено условие равенства текущего элемента массива R
i := i + 1;



Таким образом, когда встретится элемент массива, равный R, цикл завершится, и в переменную i будет записан его номер.