
- •7. Типы данных в Паскале: порядковый, вещественный, структурированный. Совместимость и преобразование типов.
- •8. Файловая структура: каталоги, имена файлов.
- •9. Внешние файлы: инициализация и доступ к файлам.
- •10. Текстовые файлы, типизированные файлы, нетипизированные файлы.
- •12. Условный оператор в Паскале.
- •13. Оператор выбора в Паскале.
- •14. Операторы циклов с предусловием, постусловием и с параметром в Паскале.
- •15. Процедуры и функции в Паскале: локальные и глобальные переменные.
- •16. Процедуры и функции в Паскале: формальные и фактические параметры процедур и функций в Паскале.
- •Процедуры
- •Функции
- •Различие между процедурами и функциями
- •17. Процедуры и функции в Паскале: способы обмена данными между вызывающей программой и процедурой или функцией.
- •18. Понятие алгоритма и его свойства. Линейные, разветвляющиеся, циклические алгоритмы.
- •InitGraph(GraphDriver, GraphMode, ‘путь к драйверу’ );
- •19. Процедуры и функции в Паскале для работы в графическом режиме.
- •Алгоритмы линейной структуры
- •Алгоритмы разветвленной структуры
- •Алгоритмы циклической структуры
- •22. Алгоритмы выборки элементов из массивов данных.
- •23. Критерии эффективности работы алгоритма.
- •24. Алгоритмы сортировки данных: сортировка выбором.
- •25. Алгоритмы сортировки данных: сортировка пузырьком.
- •32. Решение алгебраических и трансцендентных уравнений: метод деления отрезка пополам.
- •33. Поиск минимума одномерной функции: сравнение алгоритмов дихотомии, деления отрезка пополам и золотого сечения.
- •34. Поиск глобального минимума одномерной функции: сравнение алгоритмов метода ломаных и метода покрытий.
- •35. Поиск минимума многомерной функции: метод покоординатного спуска.
- •36. Поиск минимума многомерной функции: симплекс-метод.
Алгоритмы линейной структуры
Линейный алгоритм - это такой, в котором все операции выполняются последовательно одна за другой
|
ПРИМЕР:
Зная длины трех сторон треугольника, вычислить площадь и периметр треугольника.
Пусть 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 - бессмыслица.
Алгоритмы разветвленной структуры
Алгоритмы разветвленной структуры применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.
|
|
ПРИМЕР:
Составить программу нахождения действительных и комплексных корней квадратного уравнения. Можно выделить следующие этапы решения задачи:
Ввод коэффициентов квадратного уравнения a, b и c.
Вычисление дискриминанта d по формуле d = b2 - 4ас.
Проверка знака дискриминанта. Если d >= 0, то вычисление действительных корней по формуле 1.1 и вывод их на экран.
При отрицательном дискриминанте выводится сообщение о том, что действительных корней нет, и вычисляются комплексные корни.Комплексные числа записываются в виде a + ib (формула 1.2):
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к. Если превосходит, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. В противном случае выполняется тело цикла, и переменная i меняет свое значение в соответствии с указанным шагомdi. Далее, снова производится проверка значения переменной i и алгоритм повторяется. Понятно, что безусловный циклический алгоритм можно заменить любым условным.
|
Условный циклический алгоритм с известным числом повторений |
Отметим, что переменную i называют параметром цикла, так как это переменная, которая изменяется внутри цикла по определенному закону и влияет на его окончание.
ПРИМЕР:
Найти наибольший общий делитель (НОД) двух натуральных чисел А и В.
Входные данные: А и В. Выходные данные: А - НОД.
Для решения поставленной задачи воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными.
Поиск НОД для чисел А=25 и В=15. | ||||
Исходные данные |
Первый шаг |
Второй шаг |
Третий шаг |
НОД(А,В)=5 |
А=25 |
А=10 |
А=10 |
А=5 |
|
В=15 |
В=15 |
В=5 |
В=5 |
|
|
Поиск наибольшего общего делителя двух чисел |
Алгоритмы поиска элементов из массивов данных.
Списки данных могут быть двух типов – отсортированными или неотсортированными по какому-либо признаку (ключу).
Элемент списка являющийся предметом поиска называется целевым элементом.
Поиск обычно проводится не для того, чтобы убедиться в наличии того или иного элемента, а с целью получит какие-либо данные соответствующие данному ключу.
Последовательный поиск:
Поиск проводится в неотсортированномсписке.
Последовательно просматривается список элементов, начиная с первого.
Элементов списка, соответствующих ключу, может быть несколько.
Самый простой анализ – запись порядкового номера элементов в исходном списке, соответствующих ключу.
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
Двоичный поиск:
Поиск проводится в отсортированномсписке. Алгоритм поиска :
Выбираем средний элемент списка и сравниваем его с ключом. Возможны три случая:
Средний элемент списка меньше ключа;
Средний элемент списка равен ключу;
Средний элемент списка больше ключа.
В соответствии с результатом сравнения ведутся последующие действия:
Исключается из рассмотрения левая (меньше ключа) половина списка.;
Поиск завершен;
Исключается из рассмотрения правая (больше ключа) половина списка.
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;