Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи 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.