
Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи Array18-23.
Одномерные массивы: анализ элементов
Задачи Array18-23
Для выполнения некоторых заданий, связанных с анализом элементов массива, не требуется одновременно хранить в памяти все исходные данные, поэтому использовать при их выполнении массивы, строго говоря, не нужно. Однако применение массивов позволяет сделать алгоритмы решения этих заданий более простыми и наглядными. Задания из данного пункта можно дополнить заданиями из групп «Последовательности» и «Минимумы и максимумы», рассматривая их как задания на обработку массивов. С другой стороны, для тех заданий данной группы, которые можно выполнить, не используя массивы, полезно реализовать и такие алгоритмы решения.
Array18. Дан массив A ненулевых целых чисел размера 10. Вывести значение первого из тех его элементов AK, которые удовлетворяют неравенству AK < A10. Если таких элементов нет, то вывести 0.
program array18;
var
A: array[1..10] of integer;
i, K: integer;
begin
for i := 1 to 10 do
read(A[i]);
{Здесь также можно использовать циклы
while или repeat, заведя логическую
переменную-флаг, но я решил воспользоваться
циклом for и оператором break,
который прерывает цикл.}
for i := 1 to 9 do
if A[i] > A[10] then
begin
K := i;
break;
end;
writeln(A[K]);
end.Array19. Дан целочисленный массив A размера 10. Вывести порядковый номер последнего из тех его элементов AK, которые удовлетворяют двойному неравенству A1 < AK < A10. Если таких элементов нет, то вывести 0.
program array19;
var
A: array[1..10] of integer;
i, K: integer;
begin
for i := 1 to 10 do
read(A[i]);
K := 0; {Если не найдётся такого элемента,
который удовлетворял бы нашему условию,
то K не изменится, а значит программа выведет 0.
Именно это от нас и требуется.}
for i := 2 to 9 do {нет смысла проходить массив с 1 по 10 элемент}
if (A[1] < A[i]) and (A[i] < A[10]) then K := i;
writeln(K);
end.Array20. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти сумму элементов массива с номерами от K до L включительно.
program array21;
var
A: array[1..10] of integer;
i, K, L, N, sum: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
write('Введите K, L: ');
readln(K, L);
{просто выполняем то, что от нас требуется, —
складываем все элементы массива с номерами от
K до L.}
for i := K to L do
sum := sum + A[i];
writeln(sum);
end.Array21. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти среднее арифметическое элементов массива с номерами от K до L включительно.
Среднее арифметическое — это: Aср = (A1 + A2 + A3 + … + AN) / N
program array21;
var
A: array[1..10] of integer;
i, K, L, N, sum: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
write('Введите K, L: ');
readln(K, L);
for i := K to L do
sum := sum + A[i];
writeln(sum/(L - k + 1));
end.Array22. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти сумму всех элементов массива, кроме элементов с номерами от K до L включительно.
program array22;
var
A: array[1..10] of integer;
i, K, L, N, sum: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
write('Введите K, L: ');
readln(K, L);
for i := 1 to N do
if (i < K) or (i > L) then
sum := sum + A[i];
writeln(sum);
end.Array23. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.
program array23;
var
A: array[1..10] of integer;
i, K, L, N, sum: integer;
begin
write('Введите N: ');
readln(N);
write('Введите элементы массива: ');
for i := 1 to N do
read(A[i]);
write('Введите K, L: ');
readln(K, L);
for i := 1 to N do
if (i < K) or (i > L) then
sum := sum + A[i];
writeln(sum / (N - (L - K + 1)));
end.На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям!
В array18 вы допустили ошибку в строке 17: знак неравенства не соответствует условию задачи. А также, вывод нуля будет невозможен, так как в массиве нет элемента с индексом 0. Нужно добавить в массив a[0] и задать ему значение 0. Вот так:
program array18;
var
A: array[0..10] of integer;
i, K: integer;
begin
a[0] := 0;
for i := 1 to 10 do
read(A[i]);
for i := 1 to 9 do
if A[i] < A[10] then
begin
K := i;
break;
end;
writeln(A[K]);
end.
Но вопрос: соответствует ли это условию задачи "Дан массив A ненулевых целых чисел размера 10"?
Массив размера 10 — это же A1, A2, …, A10; а не A0, A1, …, A10, ведь так?
Не пойму, почему удалили мой комментарий? Я указал на ошибку и написал, как её можно исправить. Даже если бы я был не прав, то и в том случае нужно было ответить, а не удалить комментарий.
Задача 18.
Решение частично верное, если не находится элемента, большего, чем десятый, то ноль не выводится, а генерируется исключение о выходе индекса за границы массива, естественно, нулевого индекса у вашего массива нет.
Вот решение (пример):
var a: array [1..10] of integer;
begin
for var t := 1 to 10 do
read (a[t]);
for var q := 1 to 9 do
if a[q] > a[10] then
begin
write (a[q]);
exit
end;
write (0)
end.
Извиняюсь, там меньше 10 эл. в условии, а я думал — больше.
Так стоп, а у вас то в решении знак »>». Даже если исправить его на »<'', всё равно решение неверное, см. мой первый комментарий в этой теме.
Я конечно могу ошибаться, но в задаче Array 18 можно использовать exit.