Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Двумерные массивы

End.

End

Begin

Begin

End.

Begin

End.

Begin

Var

Организация циклов с использованием массивов

Begin

Var

Пример 5.4

Пример 5.3

Пример 5.1

a) var amper: array [0..30] of real;

Описан массив с именем amper, состоящий из 31 элемента типа real; индексация его элементов начинается с нуля и заканчивается целым числом 30.

б) var v, w: array [-1..15] of integer;

Описаны два эквивалентных массива v и w целого типа, содер­жащие по 17 элементов в каждом.

Описание массивов с помощью описания типов. Этот способ вклю­чает себя два этапа: сначала в разделе описания типов объявляется пользовательский тип, а затем в разделе описания переменных указывается имя массива, принадлежащего данному типу:

type имя типа = array [ тип индекса ] of тип элементов;

var имя массива: имя типа;

 

Пример 5.2.

type vec = array [-5..10] of integer;

var b: vec;

Обращение к элементу массива. Массивы не могут обрабатываться целиком. Для того, чтобы получить доступ к элементу массива, нужно записать обращение к нему, которое выглядит как

имя массива [ индекс ]

В качестве индекса можно использовать константу, переменную или выражение, соответствующие типу индексов, объявленному в опи­сании массива.

b[100], c[k], yes[j+2]

Приведены обращения к элементам массивов с именами b, c и yes. Значения переменных k и j должны быть определены заранее.

Ввод и вывод одномерных массивов. Для ввода и вывода всего массива или его части используют операторы цикла, как правило, оператор for.

z: array [10..100] of integer;

k: integer;

for k:= 10 to 100 do read (z [ k ]);

for k:= 21 to 30 do write (z [ k ]);

В приведенном фрагменте программы вводятся все элементы мас­сива z целого типа, а выводятся 10 его элементов – с 21-го по 30-й.

Отдельные элементы массивов вводятся так же, как и простые переменные.

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

Пример 5.5. Дан вектор a, содержащий 50 компонент. Вычислить сумму его элементов.

Вначале надо ввести массив в компьютер, затем – вычислить сумму элементов.Как и любая сумма нескольких чисел, данная сумма вычисляется методом накопления.

i: integer;

s: real;

a: array [1..50] of real;

write ('введите массив ');

for i:=1 to 50 do read(a[i]);

s:=0; { обнуление ячейки s, предназна­ченной

для накопления суммы }

for i:=1 to 50 do s:= s + a[i];

{ накопление суммы элементов массива }

writeln ('s=', s:10:3)

Пример 5.6. Дан вектор b, содержащий 100 компонент. Найти наибольший элемент этого вектора.

Суть алгоритма задачи в следующем. Используется переменная с именем мах, в которой в каждый момент выполнения программы содержится максимум из уже просмотренных элементов (текущий максимум). Вначале мах равна первому элементу b[1]. Перебираются все элементы массива, и если встречается элемент больше мах, то его значение присваивается мах.

var max: real;

i: integer;

b: array [1..100] of real;

write ('введите массив');

for i:=1 to 100 do read (b[i]);

readln;

max:=b[1]; { присваивание текущему максимуму

max его начального значения }

{ поиск элемента вектора с наибольшим значением }

for i:=2 to 100 do

if b[i] > max then max:= b[i];

writeln ('max=', max:10:3)

 

Пример 5.7. Дан массив вещественных чисел A(10). Упорядочить этот массив по возрастанию его элементов, т.е. сделать так, чтобы каждый следующий элемент массива оказался бы больше предыдущего.

Рассмотрим один из наиболее простых алгоритмов, разработанных для задач такого рода, так называемый “метод пузырька”. Идея этого алгоритма заключается в том, что сравниваются два соседних элемента исходного массива – сначала a1 c a2, потом a2 c a3, далее a3 с a4 и т.д. Если первый элемент в паре больше второго, то меняют их численные значения, в результате чего первый элемент получает значение второго, а второй – первого. В противном случае никаких замен в паре не производят, а переходят к сравнению элементов второй пары. Каждая перестановка элементов фиксируется, т.е. при перестановке увеличивается значение специальной переменной kP.

Как поменять местами содержимое a[i] и a[i+1]? Задача кажется достаточно простой – надо записать два оператора

a[i]:= a[i+1]; a[i+1]:= a[i];

Однако, предположим, что значение a[i] равно 1, а a[i+1] – 10. Тогда при выполнении первого присваивания a[i] станет равным 10, так же, как и a[i+1], а старое значение a[i] потеряется. Значит, это вариант выполнения не годится.

Вспомним известную головоломку о двух стаканах: один стакан наполнен водой, другой – вином. Как поменять местами их содержимое. Наверняка все знают, что для решения задачи нужен третий, пустой стакан. Сначала из стакана с вином выливают содержимое в третий стакан, освобождая первый стакан, затем воду из второго стакана выливают в свободный первый стакан, и, наконец, из третьего стакана выливают вино в освободившийся второй. Аналогично решается задача и с элементами массива. Роль «третьего стакана» сыграет вспомогательная переменная b, а решение сведется к следующей последовательности операторов:

b:= a[i]; { «освобождаем» первый элемент, сохраняя его

содержимое в «третьем стакане»}

a[i]:= a[i+1]; { переписываем значение 2-го элемента в 1-й }

a[i+1]:=b; { восстанавливаем сохраненное содержимое }

 

Вернёмся к алгоритму упорядочивания. В результате выполнения всего алгоритма происходит как бы постепенное «проталкивание» наибольшего элемента в конец массива (как пузырек воздуха в воде всплывает наверх – отсюда название метода), причем функцию «толкача» в алгоритме выполняет внутренний цикл. Как только наибольший элемент массива займет предназначенное ему последнее 10-е место, описанную процедуру повторяют с оставшимися неупорядоченными 9-ю элементами, в результате чего наибольший из оставшихся элемент займет последнее место в массиве и т.д.

Для получения нужного результата такую процедуру повторяют до тех пор, пока после очередного просмотра массива не получим число перестановок kP = 0. Это означает, что весь массив упорядочен, и надо заканчивать выполнение программы.

 

const n = 10;

var i, kP,j: integer;

b: real;

a: array [1..n] of real;

write (‘введите массив‘);

for i:=1 to n do read (a[i]);

writeln (' исходный массив:);

for i:=1 to n do write (a[i]:5:2);

writeln;

j:=n;

repeat kP:=0; j:=j–1;

for i:=1 to j do

if a[i] > a[i+1] then

b:= a[i]; a[i]:= a[i+1];

a[i+1]:= b; kP:=kP+1;

until kP = 0;

writeln(' упорядоченный массив ‘);

for i:=1 to 10 do write (a[i]:5:2)

Описание двумерного массива аналогично описанию одномерных массивов. Разница заключается в том, что в нем необходимо указать тип не одного, а двух индексов.

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


Дата добавления: 2014-01-06; Просмотров: 373; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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