- •Б2.В.1 теория алгоритмов
- •Среда программирования Pascal abc. Алгоритмы линейной структуры
- •Общие сведения
- •Принцип работы
- •Содержание работы
- •Требования к отчету
- •Нелинейные алгоритмы с разветвлением
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Алгоритмы циклической структуры
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Алгоритмы обработки массивов и матриц
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Решение задач на эмуляторе машины Поста
- •Общие сведения
- •Принцип работы
- •Пример: вычитание натуральных чисел p – q
- •Описание программы-эмулятора машины Поста
- •Содержание работы
- •Требования к отчету
- •Изучение машины Тьюринга на программном эмуляторе
- •Общие сведения
- •Принцип работы
- •Пример: умножение чисел в унарной системе счисления
- •Описание программы-эмулятора машины Тьюринга
- •Содержание работы
- •Требования к отчету
- •Изучение нормальных алгоритмов Маркова
- •Общие сведения
- •Принцип работы
- •Пример 1: использование алгоритма Маркова для преобразований над строками
- •Пример 2: преобразование чисел
- •Описание программы-эмулятора алгоритмов Маркова
- •Содержание работы
- •Требования к отчету
- •Знакомство со средой программирования Delphi
- •Алгоритмы численных методов и сортировки
- •Библиографический список
- •Темы для рефератов
- •Портреты ученых, приведенных в тексте
Требования к отчету
Отчет должен содержать:
название работы, постановку задачи и сведения о последовательности её выполнения;
скриншот работающей программы (результаты работы);
ответы на контрольные вопросы из Приложения Б, указанные преподавателем.
Нелинейные алгоритмы с разветвлением
Цель занятия - изучение основ построения алгоритмов и программ нелинейной структуры с использованием выбора по условию.
Объем занятия – 2 часа.
Общие сведения
Базовая структура ветвление обеспечивает в зависимости от результата про верки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
Структура ветвление существует в четырех основных вариантах:
если-то;
если-то-иначе;
выбор;
выбор-иначе.
Содержание работы
Работа предполагает базовые знания школьного курса языка программирования Turbo Pascal. Запустить программуPascal ABC. Ознакомиться с работой программы, строкой меню, окном редактора кода и ввода-вывода команд. Воспроизвести примеры, приведенные ниже, используя, где необходимо, преобразование команд «школьного алгоритмического языка» в операторы паскаля. По указанию преподавателя выбрать вариант из Приложения В. По завершении работы результаты сохранить в файл.
Структура ветвления |
Блок-схема |
1. если-то | |
если условие то действия все |
|
если x > 0 то y := sin(x) все |
|
2. если-то-иначе | |
если условие то действия 1 иначе действия 2 все | |
если a > b то a := 2*a; b := 1 иначе b := 2*b все | |
3. выбор | |
Выбор при условие 1: действия 1 при условие 2: действия 2 . . . . . . . . . . . . при условие N: действия N все | |
выбор при n = 1: y := sin(x) при n = 2: y := cos(x) при n = 3: y := 0 все | |
4. выбор-иначе | |
Выбор при условие 1: действия 1 при условие 2: действия 2 . . . . . . . . . . . . при условие N: действия N иначе действия N+1 все | |
выбор при a > 5: i := i+1 при a = 0: j := j+1 иначе i := 10; j:=0 все |
Дано натуральное число n. Если число нечётное и его удвоение не приведет к выходу за 32767 (двухбайтовое целое число со знаком), удвоить его, иначе – оставить без изменения.
Чтобы удовлетворить условию удвоения, число n должно быть нечетным и меньше 16384.
1. Ввести число n 2. Если число n нечетное и меньше 16384, то n := n * 2 3. Вывод n 4. Конец |
Даны три точки на плоскости. Определить, какая из них ближе к началу координат.
Program Points;
Uses Crt;
Var xA, yA, xB, yB, xC, yC, DistA, DistB, DistC : Real;
BEGIN ClrScr;
WriteLn('Введите координаты точки А:');
Write('x = '); ReadLn(xA); Write('y = '); ReadLn(yA);
WriteLn('Введите координаты точки B:');
Write('x = '); ReadLn(xB); Write('y = '); ReadLn(yB);
WriteLn('Введите координаты точки C:');
Write('x = '); ReadLn(xC); Write('y = '); ReadLn(yC);
DistA := sqrt(sqr(xA) + sqr(yA)); {расстояние до точки А}
DistB := sqrt(sqr(xB) + sqr(yB)); {расстояние до точки B}
DistC := sqrt(sqr(xC) + sqr(yC)); {расстояние до точки C}
WriteLn; Write('Ответ : ');
If (DistA < DistB) and (DistA < DistC) {сравнение расстояний}
then WriteLn( 'Это точка А.')
else If (DistB < DistC) {сравнение расстояний}
then WriteLn('Это точка B.')
else WriteLn('Это точка C.');
ReadLn
END.
Найти произведение цифр заданного целого четырехзначного числа.
Program DigitsProduct;
Uses Crt;
Var Number,{заданное число}
i, j, k, l, {цифры числа}
P : Integer; {произведение цифр}
BEGIN ClrScr;
Write( 'Введите четырехзначное число : ' ); ReadLn(Number);
Number:=Abs(Number);
Write( 'Цифры числа ' , Number , ' : ' );
i := Number div 1000; Write(i:3); { выделение первой цифры}
j := Number div 100 mod 10; Write(j:3); { выделение второй цифры}
k := Number div 10 mod 10; Write(k:3); { выделение третьей цифры}
l := Number mod 10; WriteLn(l:3); { выделение четвертой цифры}
P := i * j * k * l ;
WriteLn( 'О т в е т : произведение цифр равно ' , P );
ReadLn
END.
Решить квадратное уравнение ax2 + bx + c = 0.
Program QuadraticEquation;
Uses Crt; { подключение библиотеки Crt }
Var a, b, c : Real;{a, b, c - коэффициенты уравнения}
Discr : Real;
x1, x2: Real;{x1, x2 - корни }
Test, NTest : Integer;{Ntest - количество тестов }
BEGIN
ClrScr;
Write('Введите количество тестов : ');
ReadLn(NTest);
For Test := 1 to NTest do {цикл по всем тестам задачи }
begin
Write('Тест ', Test, '. Введите коэффициенты a, b, c : ');
ReadLn(a, b, c);
If (a=0) and (b=0) and (c=0) {проверка 4-го случая}
then begin Write('Все коэффициенты равны нулю.');
WriteLn('x - любое число ')
end
else
If (a=0) and (b<>0) {проверка 6-го случая}
then WriteLn('Линейное уравнение. Oдин корень: x =', (-c/b):6:2)
else
If (a=0) and (b=0) and (c<>0) {проверка 5-го случая}
then WriteLn('Неправильное уравнение.')
else
begin
Discr := b*b - 4*a*c; {вычисление дискриминанта}
If Discr > 0 {проверка 1-го случая}
then begin {вычисление корней}
x1:=(-b + Sqrt(Discr)) / (2*a);
x2:=(-b - Sqrt(Discr)) / (2*a);
WriteLn('x1=' , x1:6:2 , '; x2=' , x2:6:2)
end
else
If Discr = 0 {проверка 2-го случая}
then begin
x1 := -b/(2*a);
WriteLn('Корни равны: x1=', x1:6:2, ' x2=', x1:6:2)
end
else WriteLn('Действительных корней нет.'); {проверка 3-го случая}
end;
WriteLn
end;
ReadLn
END.
Контроль корректности данных. Составить программу расчета площади треугольника S по трем сторонам a, b,c, значения которых запрашиваются с клавиатуры, по формуле Герона
, где .
Var a, b, c, p,S: real;
Begin
Write(‘Ввести сторону а=’);ReadLn(a);
Write(‘Ввести сторону b=’);ReadLn(b);
Write(‘Ввести сторону c=’);ReadLn(c);
IF (a>0) and (b>0) and (c>0){проверка положительности}
and (a+b>c) and (a+c>b) and (c+b>a) {каждая сторона должна быть меньше суммы двух других сторон}
THEN begin p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
WriteLn(‘Площадь:’, S:15:5)end
ELSE Writeln(“Неверные входные данные!’);
ReadLn
END.
Программа случайного предсказания одного из десяти вариантов ближайшего будущего с вероятностью 1/20, в остальных случаях – Вы «неудачник».
Var N:word;
Begin
WriteLn(‘Предсказание будущего!’);
Randomize;N:=Random(20)+1; {N-случайное число от 1 до 20}
WriteLn; Write(‘Вас ожидает_’);
Case N of
1: WriteLn(‘счастье’); 6: WriteLn(‘здоровье’);
2: WriteLn(‘пятерка’); 7: WriteLn(‘деньги’);
3: WriteLn(‘дорога’); 8: WriteLn(‘любовь’);
4: WriteLn(‘двойка’); 9: WriteLn(‘встреча’);
5: WriteLn(‘болезнь’); 10: WriteLn(‘мама’)
Else WriteLn(‘неудача’) end;
WriteLn(‘Нажми клавишу Enter’);
ReadLn
END.
Здесь функция Random(x) генерирует случайное число, с равномерной плотностью распределения на заданном интервале. Для инициализации распределения в начале программы необходимо вызвать процедуру Randomize.