Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Занятие 2. Нелинейные алгоритмы с разветвлением



Цель занятия -изучение основ построения алгоритмов и программ нелинейной структуры с использованием выбора по условию.

Объем занятия – 2 часа.

1. Общие сведения

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

Структура ветвление существует в четырех основных вариантах:

· если-то;

· если-то-иначе;

· выбор;

· выбор-иначе.

Содержание работы

Работа предполагает базовые знания школьного курса языка программирования Turbo Pascal. Запустить программу Pascal ABC. Ознакомиться с работой программы, строкой меню, окном редактора кода и ввода-вывода команд. Воспроизвести примеры, приведенные ниже, используя, где необходимо, преобразование команд «школьного алгоритмического языка» в операторы паскаля. По указанию преподавателя выбрать вариант из Приложения В. По завершении работы результаты сохранить в файл.

Структура ветвления Блок-схема
1. если-то
если условие то действия все
Пример 1.Для положительных х вычислить значение функции sin(x) если x > 0то y:= sin(x)все
2. если-то-иначе
если условие то действия 1 иначе действия 2 все
Пример 2.Даны два числа, если первое из них больше второго, то его необходимо удвоить, а второе число приравнять единице, в противном случае первое число оставить без изменения, а второе – удвоить. если a > bто a:= 2*a; b:= 1иначе b:= 2*bвсе
3. выбор
Выборпри условие 1: действия 1при условие 2: действия 2............при условие N: действия Nвсе
Пример 3.В зависимости от значения натурального числа n, могущего принимать значения 1, 2 или 3, присвоить функции y значения sin x, cos x или нуля. выборпри n = 1: y:= sin(x)при n = 2: y:= cos(x)при n = 3: y:= 0все
4. выбор-иначе
Выборпри условие 1: действия 1 при условие 2: действия 2............при условие N: действия N иначе действия N+1 все
Пример 4. выборпри a > 5: i:= i+1при a = 0: j:= j+1иначе i:= 10; j:=0все

Пример 5. Дано натуральное число n. Если число нечётное и его удвоение не приведет к выходу за 32767 (двухбайтовое целое число со знаком), удвоить его, иначе – оставить без изменения.

Чтобы удовлетворить условию удвоения, число n должно быть нечетным и меньше 16384.

1. Ввести число n 2. Если число n нечетное и меньше 16384, то n:= n * 2 3. Вывод n 4. Конец

Пример 6. Даны три точки на плоскости. Определить, какая из них ближе к началу координат.

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.'); ReadLnEND.

Пример 7. Найти произведение цифр заданного целого четырехзначного числа.

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); ReadLnEND.

Пример 8. Решить квадратное уравнение 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 elseIf (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 beginDiscr:= 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) endelse WriteLn('Действительных корней нет.'); {проверка 3-го случая} end; WriteLn end; ReadLnEND.

Пример 9. Контроль корректности данных. Составить программу расчета площади треугольника 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.

Пример 10. Программа случайного предсказания одного из десяти вариантов ближайшего будущего с вероятностью 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.





Дата публикования: 2014-10-20; Прочитано: 1167 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...