русс | укр

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

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

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

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


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

Пример: Найти max и min элементы одномерного массива целых чисел и их индексы


Дата добавления: 2013-12-23; просмотров: 1806; Нарушение авторских прав


Program Poisk;

Uses crt;

Var A:array[1..10] of integer;

i,q,max,min,imin,imax:integer;

begin

clrscr;

write ('q='); readln(q) ; {загрузка одномерного массива целых чисел}

randomize;

for i:=l to 10 do begin

A[i]:=Random(q); {от 0 до q}

writeln('A[' , i , ']=', A[i]); end;

max:=-1000; min:=1000; {max:=-1.0e38;min:=1.0e38}

for i:=l to 10 do begin

if (A[i]>max) then begin max:=A[i]; imax:=i; end;

if (A[i]<min) then begin min:=A[i]; imin:=i; end; end;

writeln('max - A[', imax, ']=',max);

writeln ('min - A[', imin, ']=',min);

readkey

end.

 

Глобальная обработка массива

Глобальной обработкой массива называют обработку, при которой используются все его элементы. Например, нахождение среднего квадратичного из всех элементов массива. Выделяют несколько наиболее часто встречающихся процедур такой обработки. Рассмотрим их далее.

 

ИНВЕРСИЯ

При инверсии массив как бы выворачивается наизнанку, отражаясь зеркально от своей середины. Например, массив

 

-6 -5 -1

после инверсии превратиться в массив

-1 -5 -6

Таким образом, 1-ый элемент меняется местами с N-ым, 2-ой – с (N-1)-ым, и т.д. Можно убедиться в том, что некоторый i-ый элемент поменяется с (N+1-i)-ым. Тонкость заключается в том, что при организации цикла по всему массиву от 1 до N элементы будут дважды переставлены, то есть вернуться на свои места. Дважды инвертированный массив совпадает с исходным. Из этого следует, что цикл придется заводить до середины массива.

Если вычислять эту середину как N div 2(целая часть от деления), то возможны две ситуации: четное и нечетное количество элементов. Но выясняется, что принципиальной разницы между ними нет, так как при нечетном числе элементов (например, 9) средний элемент (с номером 5) хоть и не попадает в цикл, заведенный от 1 до 4, он просто не имеет пары для перестановки. Будучи симметричным самому себе.



Если константа n, тип Massive и процедура Swap заложены в программе, то процедура инверсии может иметь вид:

Имя файла: Inversia.pas

Procedure Inversia (Var aa:Massive);

Var ii: byte;

Begin

For ii:=1 to n div 2 do Swap (aa[ii],aa[n+1-ii]);

End;

Обратите внимание на то, что, в отличие от печати массива, процедура инверсии изменяет исходный массив, и поэтому входной параметр “aa” описан как переменная.

 

ЦИКЛИЧЕСКИЙ СДВИГ

При Циклическом Сдвиге Влево каждый элемент в массиве становится на место своего соседа слева. Первый же элемент, которому двигаться некуда, займет место в хвосте массива, то есть из массива.

-6 -5 -1

 

получится массив

-6 -5 -1

Для реализации этого алгоритма нужно в первую очередь спасти первый элемент массива, записав его во вспомогательную ячейку через r:=a[1], потом переставить элементы

For i:=1 to N-1 Do a[i]:=a[i+1]

ИЛИ

For i:=2 to N Do a[i-1]:=a[i]

и, наконец, спасенное значение записать на место последнего элемента a[N]:= r. Тогда текст процедуры:

Имя файла: Sdvig_Lt.pas

 

Procedure Sdvig_Lt (Var aa:Massive);

Var ii: byte; rr: real;

Begin

rr:=aa[1];

For ii:=1 to n-1 do a[ii]:=aa[ii+1];

aa[n]:=rr;

End;

Если нужно несколько раз циклически сдвинуть массив, то эту процедуру ставят в цикл. Так, после выполнения оператора

For i:=1 to 3 do Sdvig_Lt (a);

из исходного массива будет получен массив

-5 -1 -6

При Циклическом Сдвиге Вправо массив

-6 -5 -1

получается из исходного чуть иным путем. Убедитесь самостоятельно, что алгоритм

r:=a[N];

For i:=2 to N do a[i]:=a[i-1];

a[N]:=r;

Не приводит к цели, а текст процедур должен иметь вид:

 

Имя файла: Sdvig_Rt.pas

Procedure Sdvig_Rt (Var aa:Massive);

Var ii: byte; rr: real;

Begin

rr:=aa[n];

For ii:=n downto 2 do a[ii]:=aa[ii-1];

aa[1]:=rr;

End;

 

Вычисление среднее арифметическое, среднее геометрическое, среднее квадратичное среднее гармоническое

Иногда в задачах требуется вычислить некоторые характеристики массива. Пусть b[i] – некоторыq массив данных произвольного (но числового!) типа. Тогда для набора b[1],b[2],…,b[k] определены:

 

среднее арифметическое:

 

среднее геометрическое:

 

среднее квадратичное:

 

среднее гармоническое:

 

 

Замечание 1.Для вычисления среднего гармонического потребуется выполнение условия b[i]<>0.

Замечание 2. Для вычисления среднего геометрического необходимо, чтобы произведение, которое должно возводиться в степень 1/k, было положительно.

 

Сортировка массива

Сортировкой массива называется его упорядочивание по какому-либо принципу. Существуют разные способы сортировки: по убыванию, по возрастанию, по убыванию модулей, по возрастанию моделей, по уменьшению количества делителей (для целых чисел) и т.д.

Пример:

При сортировке исходный массив

 

-7 -5 -1

 

по возрастанию превратится в

 

-7 -5 -1

 

по убыванию превратится в

-1 -5 -7

 

Сортировка одномерного массива методом пузырька

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

На занятии по физкультуре присутствовала 1 группа, состоящая из 5 студентов. Преподаватель по физкультуре в начале занятия должен их расставить по росту (т.е. – по его убыванию). Определим следующий алгоритм:

 

1. Преподаватель двигается вдоль шеренги слева направо.

2. Если левый студент в паре, ниже правого, преподаватель меняет их местами и переходит к следующей паре.

 

Рассмотрим в качестве примера массив

 

 

И разработаем алгоритм для обработки такого массива, тем более он подойдет и для массива, где ряд элементов уже стоит на своих местах

 

Массив перед сортировкой
      1-ый проход вдоль шеренги преподавателя (k=1)
       
      Номер левого элемента в паре меняется
      от 1-го до 4-го (i=1..4)
Массив после 1-го прохода. Один элемент занял свое место
       
      2-ой проход вдоль шеренги преподавателя физкультуры
      k=2, i=1..3
Массив после второго прохода. Два элемента заняли свои места
       
      3-ий проход (k=3, i=1..2)
Массив после 3-го прохода.
      4-ый проход (k=4, i=1)
Сортировка массива завершена.

Для 5-ти элементов массива понадобилось четыре прохода (т.е. N-1). При этом номер левого элемента в пара от прохода к проходу менялся от 1 до N-K (где К –номер прохода). Исходя, из этого напишем текст процедуры сортировки массива по убыванию элементов:

(Имя файлa: Sort_Dec.pas)

Procedure Sort_Dec(Var aa:Massive);

Var ii,kk:byte;

Begin

For kk:=1 to n-1 Do Begin

For ii:=1 to n-kk Do Begin

If (aa[ii]<aa[ii+1]) Then Begin

Swap (aa[ii],a[ii+1]);

End;

End;

End;

End;

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



<== предыдущая лекция | следующая лекция ==>
Пример 1.Найти min из трех вещественных чисел. | Имя фала: Sort_Inc.pas


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


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

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

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


 


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

 
 

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

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