Обработка массива — Анализ

Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
  • Заполнение
    • Заполнение случайными числами.
    • Использование в формуле заполнения индекса элемента.
    • Использование рекуррентного соотношения.
  • Анализ
    • Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
    • Нахождение минимального или максимального среди элементов массива.
    • Задачи, в которых требуется найти какие-то характеристики массива.
  • Поиск
  • Перестановка
    • Задачи, в которых требуется поменять местами элементы массива.
    • Задачи циклической перестановки.
    • Задачи сортировки элементов массива.
ЗаполнениеАнализПоискПерестановка
         В задачах анализа массив уже задан, и требуется найти какие-то его характеристики. Наиболее типичные базовые задачи анализа — нахождение суммы элементов массива, подсчет количества элементов, обладающих заданным свойством, определение минимального и максимального элементов.
         В предлагаемой классификации определение максимума и минимума, относятся к задачам анализа, так как максимальный элемент является характеристикой массива в целом. Поиск здесь ведется по относительному признаку (больше других), и опознать элемент как максимальный можно только просмотрев весь массив.

Задачи подсчёта
         К основным задачам подсчёта относятся задачи на нахождение суммы, произведения элементов массива, а также, задачи на нахождение количества элементов, удовлетворяющих определенным условиям.  При решении данных задач необходимо использовать следующие действия:
Название
Действие до цикла
Действие в циклеДействия после цикла
суммаs: = 0;s: = s + a [ i ]write ('s=',s);
произведениеp:= 1 ;p: = p * a [ i ]write ('p=',p);
количествоk: = 0;if условие then k: = k + 1write ('k=',k);

Задача 1. Составить программу нахождения суммы и произведения всех элементов одномерного массива.(.pas)
Исходные данные: массив x, содержащий n вещественных чисел.
Результат: сумма s и произведение p всех элементов массива.
Метод решения: 
- начиная с нулевого значения суммы, добавляем поочередно новый элемент ряда и находим значение искомой суммы;
- начиная с начального, единичного произведения, находим искомое произведение, умножая текущее значение произведения на очередной элемент ряда.


program SPMas;
         var  x: array [1..100] of  real;
         n, i: integer;
         s, p: real;
begin
         cls;
         writeln ('Введите размерность массива :');
         readln (n);
         {инициализируем s}
         s:=0;
         {инициализируем p}
         p:=1;
         writeln ('Введите элементы массива:');
           for i:=1 to n do
                                 begin
                                             write ('x[',i,']=');
                                             readln (x[i]);
                                             {вычисляем сумму}
                                             s:=s+x[i];
                                             {вычисляем произведение}
                                             p:=p*x[i];
                                 end;
         writeln ('Полученная сумма равна ', s);
         writeln ('Полученное произведение равно ', p);
end. 

Задача 2. Составить программу нахождения количества элементов целочисленного массива с нечетными индексами, запись которых оканчивается на 5. (.pas)
Исходные данные: массив a, содержащий n целых чисел.
Результат: k - количество элементов массива, запись которых оканчивается на 5 и имеющих нечетные индексы.
Метод решения: 
- в цикле: вводим элемент массива, если он удовлетворяют условию задачи, то значение переменной k увеличиваем на 1, затем вводим следующий элемент.
- выводим k.
program kol;
         const n=30;
         {Описываем массив}
         var a: array [1..n] of integer;
                 k,i: integer;
begin
         cls;
         {инициализируем k}
         k:=0;
         for i:=1 to n do begin 
                  {Вводим элемент массива}
                  read (a[i]);
                  {Проверяем}
                  if (a[i] mod 10=5) and (i mod 2<>0)
                                     then k:=k+1;
                end;
         writeln(k);
end.

Задача 3. Найти среднее арифметическое всех элементов массива.(.pas)
Исходные данные: массив x, содержащий n вещественных чисел.
Результат: sr - среднее арифметическое всех элементов массива.
Метод решения: 
- начиная с нулевого значения суммы sum, добавляем поочередно новый элемент ряда и находим значение суммы всех элементов массива;
- среднее арифметическое sr находим делением sum на n.
program SPMas;
var  x: array [1..100] of  real;
n, i: integer;
sum, sr: real;
begin
         writeln ('Введите размерность массива :');
         readln (n);
         {инициализируем s}
           sum:=0;
           {инициализируем sr}
           sr:=0;
           writeln ('Введите элементы массива:');
            for i:=1 to n do
                                      begin
                                                write ('x[',i,']=');
                                                readln (x[i]);
                                                {вычисляем сумму}
                                                sum:=sum+x[i];
                                      end;
                sr:=sum/n;
                writeln ('среднее арифметическое равно ', sr);
end. 

Нахождение минимального или максимального среди элементов массива.
         
При решении задач на нахождение максимального или минимального элемента необходимо использовать следующие действия:
НазваниеДействие до циклаЦиклДействия после цикла
Поиск максимального (минимального) элемента произвольного массива
максимумmax: = a [ 1 ];for i:=2 to n do
if
 a [ i ] > max then max:=a [ i ];
write ('max=',max) ;
максимумn_max:=1;
(номер максимального элемента)
for i:=2 to n do
if
 a [ i ] > a[n_max] then n_max:= i;
write ('max=',a [ n_max ]) ;
минимумmin : = a [ 1 ];for i:=2 to n do
if
 a [ i ] < max then min:=a [ i ];
write ('min =',min) ;
Поиск максимального (минимального) элемента массива, про значения элементов которого известно, что они принадлежат определенному диапазону [a; b].
максимумmax: = a;for i:=1 to n do
if
 a [ i ] > max then max:=a [ i ];
write ('max=',max) ;
минимумmin : = b;for i:=1 to n do
if
 a [ i ] < min then min:=a [ i ];
write ('min =',min) ;
Поиск номера максимального элемента произвольного массива
номер максимального
элемента массива
n_max:=1;for i:=2 to n do
if
 a [ i ] >a [ n_max] then n_max:= i ;
write ('n_max =',n_max) ;
Задача 4. Составить программу нахождения максимального элемента произвольного одномерного массива.(.pas)
Исходные данные: массив x, содержащий m вещественных чисел.
Результат: максимальный элемент массива max.
Метод решения: 
- в качестве начального значения максимума возьмем значение первого элемента массива;
- начиная со второго, переберем все элементы и проверим, есть ли элемент, который больше, чем этот выбранный максимум. Если такой нашелся - будем считать его максимальным и сравним с остальными.
program maximum;
const n = 7;
var x: array [1..n] of real;
         max: real;
         i: integer;
begin
         for i:=1 to n do read (x[i]);
         max:=x[1];
         for i:=2 to n do
                             if (x [i]>max) then
                                                      max:= x [ i ];
         writeln('max = ',max);
end.

Задача 5. Составить программу нахождения номера максимального элемента произвольного одномерного массива.(.pas)
Исходные данные: массив a, содержащий n вещественных чисел .
Результат: n_max - номер максимального элемента массива.
Метод решения: 

- в программе можно выделить две части: заполнение массива числами (первый цикл for) и непосредственно поиск индекса максимального элемента (второй цикл for);
- изначально делается предположение, что первый элемент массива и есть максимум. Поэтому переменной n_max присваивается значение 1 (т.е. указатель на первый элемент массива), а max[n_max] – непосредственно значение, хранящееся в первой ячейке массива;
- начиная со второго элемента, каждое очередное значение массива сравнивается со значением max[n_max]. В случае, если текущее значение массива больше, чем хранящиеся в n_max, происходит новое присваивание индекса.
program numer_max;
const n = 7;
var a: array[1..n] of real;
n_max, i: integer;
begin
                for i:=1 to n do read (a[i]);
                n_max:=1;
                for i:=2 to n do
                if a [ i ] >a [ n_max] then
                                                n_max:= i;
                writeln ( n_max);
end.

Комментариев нет:

Отправить комментарий