Вычисление обобщенных характеристик. Подсчет элементов, которые удовлетворяют заданному условию
ПОИСК МИНИМАЛЬНОГО И МАКСИМАЛЬНОГО ЭЛЕМЕНТОВ МАССИВА Решим следующую задачу. Дан массив из десяти целых элементов. Найти минимальный элемент массива.
program N5; Const n=10; Var a: array [1..n] of integer; i, m: byte; min: integer; begin //Вывод общего количества элементов массива writeln('Enter number of elements <=', n); readln(m); //Ввод текущего количества элементов массива writeln('Enter massiv '); For i:=1 to m do //Ввод элементов массива в столбик begin write('a', i,'='); read(a[i]); end; // Начальное значение переменной min min:=a[1]; //Поиск минимального значения For i:=2 to m do if a[i]<min then min:=a[i]; //Вывод минимального элемента writeln('min=',min); end. Результат работы программы:
ПОИСК В МАССИВЕ ЗАДАННОГО ЭЛЕМЕНТА Поиск в массиве по определенному образцу («ключу») состоит в определении местоположения элементов массива (номеров элементов) или их значений, для которых выполняется некоторое условие. Различают задачи поиска в упорядоченных массивах и неупорядоченных массивах. В неупорядоченных массивах поиск можно осуществить лишь с помощью последовательного просмотра всего массива – простого перебора. Такой поиск называется линейным. Если значение элементов повторяются, то путем последовательного сравнения элементов массива с образцом можно найти лишь первый из таких элементов, прервав дальнейший поиск, или найти все нужные элементы, пересмотрев весь массив. Пример. Найти первый элемент который равен значению введенному с клавиатуры.
program N6; Const n=10; Var a:array [1..n] of integer; i,m,Nom:byte; value:integer; flag:boolean; begin writeln('Enter number of elements <=', n); readln(m); writeln('Enter massiv '); //Элементы массива вводятся в строку через пробел For i:=1 to m do read(a[i]); writeln('Enter value for search'); readln(value); //Ввод ключа поиска
flag:=false; //Признак успешности поиска i:=1; //Начальное значение индекса массива nom:=0; //Местоположение элемента (номер) /Цикл выполняется пока мы находимся в массиве //или элемент найден while (i<=m) and not flag do begin if a[i]=value //Поиск первого элемента, then //который отвечает ключу поиска begin //Запоминаем номер найденного элемента Nom:=i; //Поиск считать успешным flag:=true; end; //Переход на следующую итерацию i:=i+1; end; if flag=false then writeln('Element =', value, ' not found') else writeln('a', nom, '=', a[nom]); end.
Метод бинарного поиска (метода половинного деления). (Самостоятельная работа - Ковалюк стр. 210-212)
ВЫЧИСЛЕНИЕ ОБОБЩЕННЫХ ХАРАКТЕРИСТИК. ПОДСЧЕТ ЭЛЕМЕНТОВ, КОТОРЫЕ УДОВЛЕТВОРЯЮТ ЗАДАННОМУ УСЛОВИЮ Рассмотрим вычисление обобщенных характеристик массива на примере расчета суммы элементов массива. Эта задача реализует безусловное вычисление суммы. Перебор элементов массива выполняется в цикле со счетчиком, в теле которого происходит накопление суммы (s = s+ai). Цикл завершается, если перебранны все элементы массива. Приведем фрагмент программы, которая решает следующую задачу. s:=0; //Начальное значение суммы For i:=1 to m do s:=s+a[i]; //Накопление суммы элементов массива
На примере задачи расчета произведения элементов массива, которые находятся в пределах value1<ai<value2, где value1 и value2 – значения, которые вводятся с клавиатуры рассмотрим вычисление произведения, по условию. Перебор элементов массива выполняется в цикле со счетчиком, в теле которого происходит сравнение текущего элемента с образцами. Если условие выполняется, то происходит накопление произведения (p = p*ai). Этот пример демонстрирует еще и задачу подсчета элементов, которые удовлетворяют заданному условию. В нашем случае это подсчет количества элементов (k = k+1), которые отвечают условию value1<ai<value2. Цикл завершается, если проверенные все элементы массива.
Блок-схема алгоритма: Программа: program N7; Const n=10; Var a:array [1..n] of integer; i,m,k:byte; value1,value2,p:integer; begin writeln('Enter number of elements <=', n); readln(m); writeln('Enter massiv '); For i:=1 to m do read(a[i]); writeln('Enter first value '); readln(value1); writeln('Enter second value '); readln(value2); P:=1; k:=0; For i:=1 to m do if (a[i]>value1)and (a[i]<value2) then begin p:=p*a[i]; k:=k+1 end; if k=0 then writeln('Element not found. Interval ',value1,' < a[i] <', value2) else writeln('p=',p,' Interval ',value1,'< a[i] <',value2); end.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|