![](/user_photo/2706_HbeT2.jpg)
- •«Комсомольский-на-Амуре государственный технический университет»
- •Основы программирования
- •Введение
- •1 Понятие алгоритма. Виды алгоритмов
- •2 Основы программирования
- •2.1 Обозначение переменных
- •2.2 Ввод данных
- •2.3 Вычисления
- •2.4 Вывод данных
- •2.5 Команда условия
- •2.6 Команды цикла
- •2.7 Процедуры и функции
- •2.8 Графические команды
- •2.9 Чтение-запись в текстовый файл
- •3. Примеры составления алгоритмов и программ
- •3.1 Линейный алгоритм
- •3.2 Разветвляющийся алгоритм
- •3.3 Циклический алгоритм
- •4 Лабораторный практикум
- •4.1 Программирование алгоритмов линейной структуры Лабораторная работа №1
- •Лабораторная работа №2
- •4.2 Программирование алгоритмов разветвляющейся структуры Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •4.4 Процедуры и функции Лабораторная работа №11
- •4.5 Графические построения Лабораторная работа №12
- •Лабораторная работа №13
- •4.6 Работа с файлами Лабораторная работа №14
3.2 Разветвляющийся алгоритм
Пример
2.Составить
блок-схему алгоритма вычисления угла
перекладки руля судна в произвольный
момент времени. Характер изменения угла
перекладки руля изображен на рис. 2.
Рисунок 2 – Характер изменения угла перекладки руля
Программа:
Program Primer2;
Uses Crt;
Var a1,t,t1,t2,t3:real;
Begin
Write(‘Введите параметр t1:’);
Readln(t1);
Write(‘Введите параметр t2:’);
Readln(t2);
Write(‘Введите параметр t3:’);
Readln(t3);
Write(‘Введите время t:’);
Readln(t);
Write(‘Введите значение угла alfa1, уз:’);
Readln(a1);
If t<t1 then a:=a1*t/t1 else
If t<t2 then a:=a1 else
If t<t3 then a:=a1*(t3-t)/(t3-t2) else a:=0;
Writeln(‘Угол перекладки руля alfa=’, a:1:3);
Readkey;
End.
Блок-схема
алгоритма вычисления угла перекладки
руля судна в произвольный момент времени
представлена на рис.3.
Рисунок 3 – Блок-схема разветвляющегося алгоритма
Дополнительно рассмотрим несколько вариантов написания команды условия в зависимости от вида блок-схемы (рис.4 – рис.6). В данных примерах показаны записи команд от самой краткой до самой полной.
Рисунок
4 – Условие с действиями на одной (а) и
двух ветках (б)
Команда (вариант а):
If x<0 then y:=2+x;
Команда (вариант б):
If x<0 then y:=2+x else y:=sqr(x);
Рисунок
5 – Взаимное расположение условий:
последовательное (а) и вложенное (б)
Команда (вариант а):
If x<0 then y:=2+x;
If x<=2 then y:=sqr(x);
Команда (вариант б):
If x<0 then y:=2+x else
If x<=2 then y:=sqr(x) else y:=x-1;
Рисунок
6 – Условие с двумя действиями на каждой
ветке
Команда:
If x<0 then
begin
y:=2+x;
z:=5-x;
end
else
begin
y:=sqr(x);
z:=x*x*x;
end;
Последняя запись представляет собой полный вариант написания команды условия (см. п.2.5). Парная команда begin-end в команде условия If применяется, когда на какой-либо ветке имеется два и более действия. При этом под действиями подразумеваются не только формулы, но и, например, ввод данных, вывод на экран, циклы, другие условия и т.д.
3.3 Циклический алгоритм
Пример 3. Составить алгоритм решения задачи извлечения квадратного корня из действительного положительного числа, основанный на построении монотонной последовательности, сходящейся к корню.
Для решения задачи используем рекуррентную формулу, т.е. формулу, позволяющую выразить (n+1)-й член последовательности через значение её предыдущего члена по формуле
,
Условием окончания
процесса является выполнение неравенства
,
где
-характеризует
требуемую точность вычислений.
Так как число членов последовательности заранее неизвестно, то в данном примере необходимо использовать цикл с неизвестным числом повторений (см. п.2.6). Блок-схема вычисления квадратного корня из действительного числа представлена на рис. 7.
Программа:
Program
Primer3;
Uses Crt;
Var a,e:real;
X:array [1..100] of real;
Begin
Write(‘Введите число, для которого вычисляется корень:’);
Readln(a);
Write(‘Введите значение первого члена последовательности:’);
Readln(X[1]);
Write(‘Введите величину погрешности:’);
Readln(e);
n:=1;
Repeat
X[n+1]:=0.5*(X[n]+a/X[n]);
Z:=abs(X[n+1]-X[n]);
n:=n+1;
Until Z<=e;
Writeln(’Значение корня заданного числа’,X[n+1]:2:3);
Readkey;
End.
Пример 4. Составить блок-схему алгоритма численного интегрирования определенного интеграла методом трапеций.
Как известно,
вычисление определенного интеграла
сводится к вычислению площади криволинейной
трапеции, ограниченной функцией f(x),
осью абсцисс и прямыми линиями
и
(рис. 8) по формуле
Приближенное значение этой площади легко вычисляется, если криволинейную трапецию заменить прямолинейной. Точность повышается, если отрезок a, b разбить на несколько участков, для каждого вычислить площади трапеций и просуммировать их. В конечном итоге получим
,
где n – число участков разбиения (чем больше n, тем точнее результат).
Рисунок 8 – Вычисление площади фигуры, ограниченной линиями
для нахождения определенного интеграла
Так
как число участковn
задаем мы сами, то число вычислений, и,
следовательно, повторений, известно.
Поэтому для решения данной задачи
используем цикл с известным числом
повторений. Блок-схема представлена на
рис. 9.
Рисунок 9 – Блок-схема с использованием цикла
с заданным числом повторений
Дополнительно представим еще два примера решения задач в виде блок-схем на сортировку одномерного массива (рис. 10-а) и поиск максимального элемента матрицы (рис. 10-б).
а) б)
Рисунок 10 – Блок-схемы решения задач с массивами:
а – сортировка одномерного массива; б – нахождение максимального элемента матрицы