Задачи на массивы

advertisement
Одномерные массивы (А12)
Часть А
1. Какой фрагмент содержит ошибку?
1)
Var
a : array[1..5] of integer;
2)
Var
b : array[-10..10] of real;
3)
Var
c : array[1: 5] of integer;
4)
Var
d: array[-1..5] of integer;
2. Дан массив a=(1,2,6,9,10). Какие значения будут иметь элементы этого массива после
выполнения следующего фрагмента программы?
c:=a[1]; a[1]:=a[3]; a[3]:=c;
a[2]:=a[5];
1)
6, 2, 1,9, 10
2)
6, 10, 1, 9, 2
3)
6, 10, 1, 9, 10
4)
нет верного
ответа
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Ниже
представлен фрагмент программы, записанный на разных языках программирования, в котором
значения элементов сначала задаются, а затем меняются.
for i:=0 to 9 do
A[i]:=9-i;
for i:=0 to 4 do begin
k:=A[i];
A[i]:=A[9-i];
A[9-i]:=k;
end;
Чему будут равны элементы этого массива после выполнения фрагмента программы?
1) 9 8 7 6 5 4 3 2 1 0
2) 0 1 2 3 4 5 6 7 8 9
3) 9 8 7 6 5 5 6 7 8 9
4) 0 1 2 3 4 4 3 2 1 0
Решение:
1) выясним, как заполняется массив в первом цикле
for i:=0 to 9 do
A[i]:=9-i;
здесь элемент A[0] равен 9, элемент A[1]=8 и т.д. до A[9]=0
2) рассмотрим второй цикл, в котором операторы
k:=A[i];
A[i]:=A[9-i];
A[9-i]:=k;
меняют местами элементы A[i] и A[9-i]
3) второй цикл выполняется всего 5 раз, то есть останавливается ровно на половине массива
for i:=0 to 4 do begin
...
end;
таким образом в нем меняются элементы A[0]A]9], A[1]A]8], A[2]A]7], A[3]A]6] и
A[4]A]5]
4) в результате массив оказывается «развернут» наоборот, элемент A[0] (он был равен 9) стал
последним, следующий (A[1]=8) – предпоследним и т.д., то есть получили
0123456789
5) Ответ: 2.
Задачи для самостоятельного решения:
1) В программе описан одномерный целочисленный массив с индексами от 0 до 10 и
целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала
заполняется, а потом изменяется:
for i:=0 to 10 do A[i]:=i;
for i:=0 to 4 do begin
k:=A[i];
A[i]:=A[10-i];
A[10-i]:=k;
end;
Чему будут равны элементы этого массива?
1) 10 9 8 7 6 5 4 3 2 1 0
2) 0 1 2 3 4 5 6 7 8 9 10
3) 0 1 2 3 4 5 4 3 2 1 0
4) 10 9 8 7 6 5 6 7 8 9 10
2) В программе описан одномерный целочисленный массив с индексами от 0 до 10 и
целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала
заполняется, а потом изменяется:
for i:=0 to 10 do A[i]:=i;
for i:=0 to 10 do begin
k:=A[i];
A[i]:=A[10-i];
k:=A[10-i];
end;
Чему будут равны элементы этого массива?
1) 10 9 8 7 6 5 4 3 2 1 0
2) 0 1 2 3 4 5 6 7 8 9 10
3) 0 1 2 3 4 5 4 3 2 1 0
4) 10 9 8 7 6 5 6 7 8 9 10
3) В программе описан одномерный целочисленный массив с индексами от 0 до 10 и
целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала
заполняется, а потом изменяется:
for i:=0 to 10 do A[i]:=i;
for i:=0 to 4 do begin
k:=A[10-i];
A[10-i]:=A[i];
k:=A[i];
end;
Чему будут равны элементы этого массива?
1) 10 9 8 7 6 5 4 3 2 1 0
2) 0 1 2 3 4 5 6 7 8 9 10
3) 0 1 2 3 4 5 4 3 2 1 0
4) 10 9 8 7 6 5 6 7 8 9 10
Часть С
6) Дан массив, содержащий 70 целых чисел. Опишите на одном из языков программирования
алгоритм, позволяющий найти и вывести наименьшее положительное нечетное число,
содержащееся в массиве. Гарантируется, что в массиве есть хотя бы одно положительное
нечетное число. Исходные данные объявлены так, как показано ниже. Запрещается
использовать переменные, не описанные ниже, но разрешается не использовать часть из
них.
Паскаль
Естественный язык
const N=70;
Объявляем массив A из 70 элементов.
var
Объявляем целочисленные переменные I,
a: array [1..N] of integer;
J, M. В цикле от 1 до 70 вводим элементы
i, j, m: integer;
массива A с 1-го по 70-й.
begin
for i:=1 to N do
...
readln(a[i]);
…
end.
7) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые
значения от 0 до 100. Опишите на русском языке или на одном из языков
программирования алгоритм, позволяющий найти и вывести произведение двузначных
элементов массива, которые не делятся на 6. Гарантируется, что в исходном массиве есть
хотя бы один такой элемент. Исходные данные объявлены так, как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается не
использовать часть из них. Исходные данные всегда подобраны так, что результат
произведения не выходит за пределы объявленных типов данных.
Паскаль
Естественный язык
const N=30;
Объявляем массив A из 30 элементов.
var a: array [1..N] of longint;
Объявляем целочисленные переменные I,
і, j, p: longint;
J, P. В цикле от 1 до 30 вводим элементы
begin
массива A с 1-го по 30-й.
for і := 1 to N do
readln(a[i]);
...
...
end.
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма
на естественном языке), который должен находиться на месте многоточия. Вы можете
записать решение также на другом языке программирования (укажите название и
используемую версию языка программирования, например, FreePascal 2.4) или в виде блоксхемы. В этом случае вы должны использовать те же самые исходные данные и
переменные, какие были предложены в условии (например, в образце, записанном на
естественном языке).
8) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые
значения от 0 до 1000. Опишите на русском языке или на одном из языков
программирования алгоритм, позволяющий найти минимальное трехзначное число,
записанное в этом массиве. Если такого числа нет, нужно вывести сообщение об этом.
Исходные данные объявлены так, как показано ниже. Запрещается использовать
переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
Естественный язык
const N=30;
Объявляем массив A из 30 элементов.
var a: array [l..N] of integer;
i,j,min: integer;
Объявляем целочисленные переменные I,
begin
J, MIN. В цикле от 1 до 30 вводим элементы
for i:=l to N do readln(a[i]);
массива A с 1-го по 30-й.
...
...
end.
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма
на естественном языке), который должен находиться на месте многоточия. Вы можете
записать решение также на другом языке программирования (укажите название и
используемую версию языка программирования, например, FreePascal 2.4) или в виде блоксхемы. В этом случае вы должны использовать те же самые исходные данные и
переменные, какие были предложены в условии (например, в образце, записанном на
естественном языке).
9) Дан целочисленный массив из 40 элементов, все элементы которого – целые числа в
интервале от -500 до 500. Опишите на русском языке или на одном из языков
программирования алгоритм, который находит среднее арифметическое всех
положительных элементов массива, которые кратны первому элементу (делятся нацело на
первый элемент). Гарантируется, что первый элемент массива положительный. Исходные
данные объявлены так, как показано ниже. Запрещается использовать переменные, не
описанные ниже, но разрешается не использовать часть из них
Паскаль
Естественный язык
const N=40;
Объявляем массив A из 40 элементов.
var a: array [l..N] of integer;
Объявляем целочисленные переменные i,
i,x,y: integer;
x, y и вещественная переменная s. В цикле
s: real;
от 1 до 40 вводим элементы массива A с 1begin
for i:=l to N do readln(a[i]);
го по 40-й.
...
...
end.
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма
на естественном языке), который должен находиться на месте многоточия. Вы можете
записать решение также на другом языке программирования (укажите название и
используемую версию языка программирования, например, Borland Pascal 7.0) или в виде
блок-схемы. В этом случае вы должны использовать те же самые исходные данные и
переменные, какие были предложены в условии (например, в образце, записанном на
естественном языке).
Download