Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




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

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

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

Var

I: integer;

S: real;

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

Begin

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)

End.

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

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

var max: real;

I: integer;

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

Begin

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)

End.

 

Пример 4.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;

Begin

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

Begin

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

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

End

until kP = 0;

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

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

End.

Тема 5. Подпрограммы

Вводные понятия

Программа, написанная на языке PASCAL, как правило, не является монолитной, а состоит из нескольких логически связанных между собой программных единиц. Каждая программная единица в свою очередь может состоять из единиц более низкого уровня. В таких случаях говорят, что программа имеет иерархическую (соподчинённую) структуру.

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

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

Пример 5.1. Нужно вычислить значение выражения

.

Несложно заметить, что все три части в этой формуле имеют схожее строение вида . В первом выражении вместо t надо подставить х, во втором – 1/ х, а в третьем – sin(x). Значит, для экономии места можно не программировать три разных формулы, а запрограммировать только одну, и использовать её три раза, подставляя разные исходные данные.

Подпрограммы в основном используются в трёх случаях.

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

Во-вторых, если одну и ту же совокупность математических операций, предназначенную, например, для вычисления определённого интеграла, решения системы линейных уравнений и т.п., нужно выполнить в нескольких точках программы с разными исходными данными.

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

Одну и ту же подпрограмму можно использовать в одной или нескольких точках главной программы или другой подпрограммы, поместив в эти точки операторы вызова подпрограммы, которые обеспечивают ее выполнение (активизацию). Каждый такой оператор должен содержать

- имя вызываемой подпрограммы,

- исходные данные.

Эти данные передаются подпрограмме в момент её вызова, затем выполняются действия, заданные операторами подпрограммы, после чего управление передается вместе с результатами счёта в место вызова подпрограммы (рис.6.1).

 

 
 

 

 


Рис.5.1. Взаимодействие вызывающей (главной) программы и подпрограммы

 

Представление программы в виде совокупности относительно самостоятельных единиц делают её более ясной и легко проверяемой, что позволяет выполнить её отладку, а в случае необходимости и модификацию с наименьшими затратами времени и средств. Это, в конечном счете, приводит к повышению качества и эффективности программ.

В языке PASCAL имеется две разновидности подпрограмм - процедуры (procedure) и функции (function).

Описание подпрограмм. Так же, как описание программы в целом, описание подпрограммы состоит из заголовка, раздела описания объектов подпрограммы и раздела операторов, который заканчивается символом ’; ’ (рис.6.2):

 

Заголовок;

const < описание констант >

type < описание типов >

var < описание переменных >

Begin






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных