русс | укр

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

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

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

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


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

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


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


Задачи такого рода являются весьма распространёнными в вы­числительной практике, и программировать их можно с использованием любого из трёх описанных выше операторов цикла. Но наилучшим для этой цели часто является оператор 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.Подпрограммы



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


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


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

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

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


 


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

 
 

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

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