Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
106
Добавлен:
10.05.2014
Размер:
1.51 Mб
Скачать

Алгоритмы линейной структуры

Линейный алгоритм - это такой, в котором все операции выполняются последовательно одна за другой

ПРИМЕР:

Зная длины трех сторон треугольника, вычислить площадь и периметр треугольника.

Пусть a, b, c - длины сторон треугольника. Необходимо найти S - площадь треугольника, P - периметр. Для нахождения площади можно воспользоваться формулой Герона:

, где r - полупериметр.

Входные данные: a, b, cВыходные данные: S, P.

Внимание!!! В этих блоках знак "=" означает не математическое равенство, а операцию присваивания. Переменной, стоящей слева от оператора, присваивается значение, указанное справа. Причем это значение может быть уже определено или его необходимо вычислить с помощью выражения. Например, операция r = (a+b+c)/2 - имеет смысл (переменной r присвоить значение r=(a+b+c)/2), а выражение (a+b+c)/2=r - бессмыслица.

Алгоритмы разветвленной структуры

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

ПРИМЕР:

Составить программу нахождения действительных и комплексных корней квадратного уравнения. Можно выделить следующие этапы решения задачи:

  1. Ввод коэффициентов квадратного уравнения a, b и c.

  2. Вычисление дискриминанта d по формуле d = b2 - 4ас.

  3. Проверка знака дискриминанта. Если d >= 0, то вычисление действительных корней по формуле 1.1 и вывод их на экран.

  4. При отрицательном дискриминанте выводится сообщение о том, что действительных корней нет, и вычисляются комплексные корни.Комплексные числа записываются в виде a + ib (формула 1.2):

  5. a - действительная часть комплексного числа, b - мнимая часть комплексного числа.У обоих комплексных корней действительные части одинаковые, а мнимые отличаются знаком. Поэтому можно в переменной x1 хранить действительную часть числа -b/2a, в переменной x2- модуль мнимой части , а в качестве корней вывести x1+ix2 и x1-ix2.

Блок 1 предназначен для ввода коэффициентов квадратного уравнения. В блоке 2 осуществляется вычисление дискриминанта. Блок 3 осуществляет проверку знака дискриминанта, если дискриминант отрицателен, то корни комплексные, их расчет происходит в блоке 4 (действительная часть корня записывается в переменную x1, модуль мнимой - в переменную x2), а вывод - в блоке 5 (первый корень x1 + i x2, второй - x1- i x2). Если дискриминант положителен, то вычисляются действительные корни уравнения (блок 6) и выводятся на экран (блок 7).

Алгоритмы циклической структуры

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

  • в цикле с предусловием условие проверяется до тела цикла, в цикле с постусловием - после тела цикла;

  • в цикле с постусловием тело цикла выполняется хотя бы один раз, в цикле с предусловием тело цикла может не выполниться ни разу;

  • в цикле с предусловием проверяется условие продолжения цикла, в цикле с постусловием - условие выхода из цикла.

Алгоритм циклической структуры с предусловием

Алгоритм циклической структуры с постусловием

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

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

Алгоритм циклической структуры без условия

Выполнение безусловного циклического алгоритма начинается с присвоения переменной i стартового значения in. Затем следует проверка, не превосходит ли переменная i конечное значение . Если превосходит, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. В противном случае выполняется тело цикла, и переменная i меняет свое значение в соответствии с указанным шагомdi. Далее, снова производится проверка значения переменной i и алгоритм повторяется. Понятно, что безусловный циклический алгоритм можно заменить любым условным.

Условный циклический алгоритм с известным числом повторений

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

ПРИМЕР:

Найти наибольший общий делитель (НОД) двух натуральных чисел А и В.

Входные данные: А и В. Выходные данные: А - НОД.

Для решения поставленной задачи воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными.

Поиск НОД для чисел А=25 и В=15.

Исходные данные

Первый шаг

Второй шаг

Третий шаг

НОД(А,В)=5

А=25

А=10

А=10

А=5

 

В=15

В=15

В=5

В=5

 

Поиск наибольшего общего делителя двух чисел

  1. Алгоритмы поиска элементов из массивов данных.

Списки данных могут быть двух типов – отсортированными или неотсортированными по какому-либо признаку (ключу).

Элемент списка являющийся предметом поиска называется целевым элементом.

Поиск обычно проводится не для того, чтобы убедиться в наличии того или иного элемента, а с целью получит какие-либо данные соответствующие данному ключу.

Последовательный поиск:

Поиск проводится в неотсортированномсписке.

Последовательно просматривается список элементов, начиная с первого.

Элементов списка, соответствующих ключу, может быть несколько.

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

Spisokсписок элементов

Kluch - целевой элемент

i – индекс элемента исходного массива

j – индекс элемента массива M(j) , соответствующего ключу.

j:=1;

for i:=1 to N do

if Spisok(i)=Kluch then

begin

M(j):=i;

j:=j+1;

end

Двоичный поиск:

Поиск проводится в отсортированномсписке. Алгоритм поиска :

Выбираем средний элемент списка и сравниваем его с ключом. Возможны три случая:

  1. Средний элемент списка меньше ключа;

  2. Средний элемент списка равен ключу;

  3. Средний элемент списка больше ключа.

В соответствии с результатом сравнения ведутся последующие действия:

  1. Исключается из рассмотрения левая (меньше ключа) половина списка.;

  2. Поиск завершен;

  3. Исключается из рассмотрения правая (больше ключа) половина списка.

Sportyсписок элементов

Kluch - целевой элемент

i – индекс элемента исходного массива

nl:=1; - левая граница списка

nr:=n; - правая граница списка

k:=0; - признак завершения поиска

repeat

nsr := (nl+nr) div 2;- середина списка

if SpSort(nsr) < Kluch then

nl:=nsr;

else

begin

if SpSort(nsr) = Kluch then

begin

k:=1;

j:=i;

end;

else

nr:=nsr;

end;

until k<>1;