4.2.3. Обработка массива

Часто требуется вычислить сумму элементов массива, их среднее арифметическое значение или найти значения и номера максимального и минимального элементов, а также изменить значения элементов массива и т. д. При этом для одномерного и двумерного массивов используются аналогичные алгоритмы, но в случае двумерного массива требуются вложенные циклы.

Действия с одномерными массивами

Условимся, что в векторе а содержится n элементов.

• Вычисление суммы элементов:

 s:=0;
   for i:=1 to n do s:=s+a[i]; { обычное накопление суммы в s }

• Вычисление произведения элементов:

 s: =1;
   for i:=l to n do s:=s*a[i]; { накопление произведения в s }

• Подсчет количества элементов, удовлетворяющих какому-либо условию. Например, подсчет количества четных чисел в целочисленном массиве:

 k:=0;
      for i:=l to n do
        if a[i] mod 2=0 then k:=k+l; { увеличиваем на 1 счетчик четных чисел, если число делится на 2 }

• Поиск элемента с заданным значением. Найти элемент — это значит выяснить его номер в массиве (см. листинг 4.1).

i:=0; { номер элементов массива }
    repeat
   i:=i+l;   until(a[i]=0) { нашли } or (i=n) { массив кончился };
    if a[i]=0 then writeln('Номер первого нулевого элемента = ',i)
        else writeln('Таких элементов нет');

• Поиск максимального элемента и его номера (см. листинг 4.2).

Переменная max хранит значение максимума, k — его номер в массиве:

max:=а[1]; к:=1; { поиск начинаем с первого элемента }
   for i:=2 to n do { перебираем элементы, начиная со второго }
    if a[i]>max then
      begin
        max:=a[i]; k:=i; { запоминаем значение и номер элемента, который больше всех предыдущих}
      end;

Аналогично, при смене знака min>a[i] находится минимальный элемент min.

• Изменение значений элементов.

Например, пусть в массиве а хранятся зарплаты n сотрудников. Тем сотрудникам, у которых зарплата меньше минимально возможной суммы, поднимем зарплату до этого минимального значения minzp.

minzp:=3000;
   for i:=l to n do
        if minzp>a[i] then a[i]:=minzp;

Листинг 4.1 содержит программу, которая находит в массиве элементы, равные числу, заданному пользователем, подсчитывает их количество и выводит номер первого найденного элемента. Массив задается при помощи ввода с клавиатуры.

Листинг 4.1. Программа поиска заданного числа, i количества вхождений и номера

const count=10;
var n, { число для поиска }
    a, { номер первого элемента }
    b, { количество элементов }
    i: integer;
    m : array [1..count] of integer;
begin
    writeln('Ввод исходного массива:');
    for i:=l to count do
      begin
            write('элемент #',i,': ') ;
            readln(m[i]);
      end;
    a:=0; b:=0;
    write ('Введите число для поиска — > '); readln(n);
    for i:=l to count do { поиск элемента, равного n }
      if m[i]=n then
          begin
            if b=0 then a:=i;{ запомним номер 1-го элемента,равного n }
            b:=b+l; { увеличить число найденных элементов на 1 }
          end;
    if b=0 then writeln('HeT таких элементов в массиве')
        else
            begin
              writeln('Количество элементов массива, имеющих значение V,n,' =', b:3);
              writeln('Первый элемент имеет номер', а:3);
            end;
end.

Листинг 4.2 содержит программу, которая формирует одномерный массив случайных чисел, выполняет поиск максимального элемента массива, а затем выводит на экран его значение и порядковый номер в массиве.

Листинг 4.2. Программа поиска максимального элемента массива и его номера

const count=10;
var m: array [1..count] of byte;
  max, i, numer_max: byte;
begin
 { формирование массива случайной функцией random(count*2) }
 { и вывод массива на экран }
 randomize; { инициализация датчика случайных чисел }
 for i:=l to count do
    begin
      m[i]:= random(count*2)+1;
      write(m[i],' ');
    end;
  writeln;
  max:= m [ 1]; { начинаем с первого элемента }
  numer_max:=1;
  { проверить все элементы, начиная со второго }
  for i:=2 to count do
    begin
      { если очередной элемент массива больше мах }
      if m[i]>max then
        begin
          { то присвоить его значение max }
          max:=m [ i];
          { и запомнить его порядковый номер }
          numer_max:=i;
        end;
      end;
  write('Максимальный элемент ', max);
 writeln(' расположен на ', numer_max,' месте');
end.

 предыдущая         меню        вверх         следующая

Hosted by uCoz