Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
Заполнение | Анализ | Поиск | Перестановка |
В задачах анализа массив уже задан, и требуется найти какие-то его характеристики. Наиболее типичные базовые задачи анализа — нахождение суммы элементов массива, подсчет количества элементов, обладающих заданным свойством, определение минимального и максимального элементов.
В предлагаемой классификации определение максимума и минимума, относятся к задачам анализа, так как максимальный элемент является характеристикой массива в целом. Поиск здесь ведется по относительному признаку (больше других), и опознать элемент как максимальный можно только просмотрев весь массив.
В предлагаемой классификации определение максимума и минимума, относятся к задачам анализа, так как максимальный элемент является характеристикой массива в целом. Поиск здесь ведется по относительному признаку (больше других), и опознать элемент как максимальный можно только просмотрев весь массив.
К основным задачам подсчёта относятся задачи на нахождение суммы, произведения элементов массива, а также, задачи на нахождение количества элементов, удовлетворяющих определенным условиям. При решении данных задач необходимо использовать следующие действия:
Название |
Действие до цикла
| Действие в цикле | Действия после цикла |
сумма | s: = 0; | s: = s + a [ i ] | write ('s=',s); |
произведение | p:= 1 ; | p: = p * a [ i ] | write ('p=',p); |
количество | k: = 0; | if условие then k: = k + 1 | write ('k=',k); |
Задача 1. Составить программу нахождения суммы и произведения всех элементов одномерного массива.(.pas)
Исходные данные: массив x, содержащий n вещественных чисел.
Результат: сумма s и произведение p всех элементов массива.
Метод решения:
- начиная с нулевого значения суммы, добавляем поочередно новый элемент ряда и находим значение искомой суммы;
- начиная с начального, единичного произведения, находим искомое произведение, умножая текущее значение произведения на очередной элемент ряда.
Результат: сумма 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.
Результат: 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, добавляем поочередно новый элемент ряда и находим значение суммы всех элементов массива;
- среднее арифметическое 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.
Метод решения:
- в качестве начального значения максимума возьмем значение первого элемента массива;
- начиная со второго, переберем все элементы и проверим, есть ли элемент, который больше, чем этот выбранный максимум. Если такой нашелся - будем считать его максимальным и сравним с остальными.
Результат: максимальный элемент массива 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, происходит новое присваивание индекса.
Результат: 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. |
Комментариев нет:
Отправить комментарий