русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Поиск максимального элемента массива


Дата добавления: 2014-11-27; просмотров: 5249; Нарушение авторских прав


Довольно-таки типичная задача для большого количества данных — поиск максимума. Например, в списке успеваемости учеников класса найти самого прилежного. Иначе говоря, требуется выбрать наибольшее значение среднего балла и указать фамилию ученика.

Пример 8.3.
Программа поиска максимального элемента в массиве и его индекса (см. блок-схему, алгоритма на рис. 8.5)

Program Maximum;
const
N=10;
type
Mas=array [1..N] of integer;
var
A: Mas;
i: integer; { Счетчик.цикла }
Мах: integer; { Переменная для хранения величины максимального элемента }
Imax: integer; { Переменная для хранения индекса максимального элемента }
begin { Тело программы }
{ Заполним элементы массива значениями датчика случайных чисел и выведем весь получейный массив на экран в одном цикле }
Randomize;
for i:= 1 to N do
begin
A[i]:= -50+Random(101);
write(A[i]:5)
end;
writein:
{ V. Поиск максимального элемента и его индекса в массиве }
Imax:=l: { Сначала считаем, что первый элемент массива и есть максимальный }
Мах:=А[1]; { Его индекс и величину записываем соответственно в переменные Imax и Мах }
for i: = 2 to N do { Сравним нашего кандидата в максимумы со всеми остальными элементами массива (со второго до последнего) }
if Мах < A[i] then { Если наш кандидат в максимумы оказался меньше текущего элемента... }
begin
Max:=A[i]; { ... то будем считать теперь кандидатом в максимумы текущий элемент}
Imax:=i { Запомним его значение и индекс в переменных Мах и Imax }
end;
writeln ('Максимальный элемент в массиве=', Мах:5);
writeln('Его индекс=', Imах:5);
readln
end.

Рис. 8.5. Блок-схема алгоритма поиска максимального элемента массива и его индекса

Заметим, что в процессе поиска максимума не обязательно хранить обе величины — номер максимума и его значение. Достаточно хранить одну, в зависимости от поставленной задачи.



Если индекс максимума не нужно знать, достаточно будет переменной Мах. Если, наоборот, нужен только номер — достаточно Imax.
Тонкость состоит в том, что если нужно найти и то и другое, все равно достаточно найти только Imax, ведь значение максимума легко может быть получено по его индексу (A[Imax]).
Иными словами, нашу программу можно упростить следующим образом:

 

Пример 8.4.
Программа поиска максимума, не хранящая значение максимума, а запоминающая только его номер

Program Maximum2;
const
N=10;
type
Mas=array [1..N] of integer;
var
A: Mas;
i, imax: integer;
begin
Randomize;
for i:= 1 to N do
begin
A[i]:=-50+Random(101);
write(A[i]:5)
end;
writeln;
{ V. Поиск индекса максимального элемента в массиве }
imax:=l;
for i := 2 to N do
if A[imax] < A[i] then
imax:=i;
writeln ('Максимальный элемент в массиве=', A[imax]:5);
writeln('Его индекс=',imax:5);
readln
end.

Задание 8.5.
Выполните поиск максимальйого и минимального элемента в массиве за один цикл (блок-схема алгоритма показана на рис. 8.6).

Рис. 8.6. Блок-схема алгоритма поиска индексов максимального и минимального элементов массива за один цикл

 

Задание 8.6.
В одномерном массиве из 10 элементов определить местоположение минимального элемента. Обнулить элементы, стоящие до него, но не сам этот элемент. (Обнулить — значит записать 0 на место элемента, то есть выполнить A[i] := 0.) Измененный массив вывести на экран.

 

Задание 8.7.
В одномерном массиве из 10 элементов определить местоположение минимального и максимального элементов. Обнулить элементы, стоящие между ними, а также сами эти элементы.

Вычисление суммы и количества элементов массива с заданными свойствами

Еще одна задача — посчитать сумму элементов, которые удовлетворяют какому-то условию. Наверное, вы уже поняли общий принцип: перебираем все элементы массива (цикл for) и проверяем для каждого элемента выполнение условия (оператор if).
Если условие выполнено, добавим элемент к сумме (S := S+A[i]).

Пример 8.5.
Вычисление суммы положительных элементов массива

program PositivSumm;
const N=10; .
type Mas=array [1..N] of integer;
var a: Mas;
i: integer; { Счетчик цикла}
S: integer; { Копилка - переменная для суммирования , положительных элементов }
begin
{ Заполним массив случайными числами в диапазоне -100. .+100 }
randomize;
for i:=1 to N do
begin
a[i]:=-100+random(201);
write(a[i]:5)
end;
writeln;
{ Присвоим переменным начальные значения }
S:=0; { Переменная S - аккумулятор. Она будет накапливать фшу всех положительных элементов. Нужно присвоить ей такое начальное значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль }
for i:=l to N do { Перебираем все элементы массива }
if A[i]>0 then { Проверяем каждый элемент на положительность }
S:=S+A[i]; { Если элемент положительный, добавляем значение элемента к аккумулятору }
{ Выводим результат на экран: }
writeln('Сумма положительных элементов=',S);
readln
end.

 

Вот задача, очень похожая на предыдущую: посчитать количество элементов массива с указанными свойствами. Решается аналогично: переберем все элементы, проверим для каждого условие и, если оно выполнено, увеличим счетчик на единицу (к := к+1).

 

Пример 8.6.
Вычисление количества четных элементов массива (блок-схема алгоритма показана на рис. 8.7)

program EvenCount;
const N=10:
type Mas=array [1..N] of integer;
var a:Mas;
i:integer; { Счетчик цикла }
К:integer; { Копилка - переменная для подсчета количества четных элементов }
begin
{ Заполним массив случайными числами в диапазоне +10..+100 }
randomize;
for i:=1 to N do
begin
a[i]:=+10+random(91);
write(a[i]:5)
end;
writeln;
{ Присвоим переменным начальные значения }
К:=0; { Переменная К - счетчик. Она будет выполнять ту же функцию, что и пальцы на руке при счете: каждый раз, когда будет встречаться четное число, будем загибать один палец, то есть увеличивать переменную К на единицу. В начале нужно присвоить ей такое значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль }
for i:=l to N do { Перебираем все элементы массива }
if a[i] mod 2=0 then { Проверяем.каждый элемент на четность, то есть проверяем, что остаток от деления этого элемента массива на 2 равен нулю }
К:=К+1; { Если элемент четный, увеличиваем счетчик на единицу }
{ Выводим результат на экран: }
writeln ( 'Количество четных элементов=' ,K) ;
readln
end.

 



<== предыдущая лекция | следующая лекция ==>
Создание пользовательского типа данных | Поиск в массиве


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.