Решение задач. Array18-23


array18-23

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

На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям!

  1. В 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, ведь так?

  2. Не пойму, почему удалили мой комментарий? Я указал на ошибку и написал, как её можно исправить. Даже если бы я был не прав, то и в том случае нужно было ответить, а не удалить комментарий.

  3. Задача 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.

  4. Так стоп, а у вас то в решении знак »>». Даже если исправить его на »<'', всё равно решение неверное, см. мой первый комментарий в этой теме.

  5. Я конечно могу ошибаться, но в задаче Array 18 можно использовать exit.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *