Занятие 4. Разветвляющийся алгоритм

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

Для задания условий используется логический тип данных.

Логический тип данных

К логическому типу данных относятся данные, которые могут иметь одно из двух значений – true (истина) и false (ложь). True и false это константы, значение первой равно 1, значение второй - 0. На множестве логических данных опреде­лены следующие основные операции:

NOT - логическое отрицание

AND - логическое умножение (и)

OR - логическое сложение (или)

XOR - логическое сложение ( исключающее или)

Результаты выполнения логических операций приведены в таблице:

Операция: Операнд 1 Операнд 2 Результат
NOT true false   false true
AND true false true false true false false true true false false true
OR true false true false true false false true true false true true
XOR true false true false true true false false false true true false

Из этой таблицы следует, что:

- операция NOT определена для одного операнда

- для операции AND результат будет истиной только в том случае, если оба операнда истина

- для операции OR результат будет истиной только в том случае, если хотя бы один из операндов истина.

- для операции XOR результат будет истиной, если операнды имеют разные значения.

Описание данных логического типа

Выполняется с помощью ключевого слова BOOLEAN. Например:

Var

Pr: BOOLEAN;

Begin

Pr:=true;

Логические выражения

Для задания условий используются логические выражения. Логическое выражение может принимать два значения: true(истина) или false(ложь). Для составления логических выра­жений используются логические операции (NOT, AND, OR, XOR) и операции сравнения:

Операция Описание
= равно
<> не равно
> больше
< меньше
>= больше или равно
<= меньше или равно

Например:

1. a>b – выражение оценивается как истина, если a=3 и b=5

2. a>b and b>c – выражение оценивается как истина, если a=15, b=10, c=3.

3. b>99 and b<1000 - выражение оценивается как истина, если b – трехзначное число.

4. c<99 or c>1000 - выражение оценивается как истина, если c – не трехзначное число.

Разветвляющийся алгоритм

Разветвляющийся алгоритм позволяет организовать ветвления в программе. Блок-схема разветвляющего алгоритма выглядит следующим образом:

Занятие 4. Разветвляющийся алгоритм - student2.ru

Проверяется условие, в случае, если оно равно истине выполняется Ветка 1(набор операторов), иначе выполняется Ветка 2(другой набор операторов).

Для реализации такой схемы действий в языке Pascal имеется оператор if.

Оператор if

Синтаксис:

IF<условие> THEN<оператор1> [ ELSE<оператор2>];

Где

If, then, else - зарезервированные слова; (if – если, then – тогда, else – иначе ). Если перевести на русский, звучит примерно так:

Если условие=истина тогда оператор 1 иначе оператор 2;

<условие> - произвольное выражение логического типа;

<оператор1> - операторы языка Pascal, реализующие ветвь1.

<оператор2> - операторы языка Pascal, реализующие ветвь2.

В квадратных скобках – часть оператора, которая может отсутствовать, необязательная часть.

Если оператор1 или оператор2 – это несколько операторов, тогда их нужно заключать в операторные скобки begin..end. Например,

Begin

Оператор 1;

Оператор 2;

end

Пример 1. Контроль ввода трехзначного числа

Разработаем форму, подобную той, что изображена на рисунке.

Занятие 4. Разветвляющийся алгоритм - student2.ru

На кнопку «Ввод» пишем обработчик:

procedure TForm1.Button1Click(Sender: TObject);

var x:integer;

begin

x:=StrToInt(Edit1.Text);

if (x<100) or (x>999) then

begin

ShowMessage(' это не 3-х значное число');

exit;

end

else

ShowMessage(' это 3-х значное число');

end;

Пример 2. Введите три числа. Выведите минимальное

Разработаем форму, подобную той, что изображена на рисунке:

Занятие 4. Разветвляющийся алгоритм - student2.ru

На кнопку «Найти минимальное» напишем обработчик:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,min:real;

begin

a:=StrToFloat(Edit1.text);

b:=StrToFloat(Edit2.text);

c:=StrToFloat(Edit3.text);

min:=a;

if min>b then min:=b;

if min>c then min:=c;

ShowMessage('минимальное ='+FloatToStr(min));

end;

Оператор выбора CASE

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

CASE <выражение> OF

<значение1>: <оператор1>;

<значение2>: <оператор2>;

<значение3>: <оператор3>;

...

[ ELSE <оператор> ] END;

Оператор выполняется следующим образом: вычисляется выражение. Если выражение равно значению1, тогда выполняется оператор1, если выражение равно значению2, тогда выполняется оператор2, если выражение не равно ни одному из значений, тогда выполняется оператор ELSE(иначе).

Значение выражения в операторе CASE не может быть вещественного или строкового типа.

Пример 1. Введите порядковый номер времени года, выведите название времени года

Разработаем форму, подобную той, что изображена на рисунке.

Занятие 4. Разветвляющийся алгоритм - student2.ru

На кнопку «Определить время года» напишем обработчик:

procedure TForm1.Button1Click(Sender: TObject);

var n:integer;

begin

n:=StrToInt(Edit1.Text);

case n of

1: ShowMessage('Это зима');

2: ShowMessage('Это весна');

3: ShowMessage('Это лето');

4: ShowMessage('Это осень');

else ShowMessage('Вы ошиблись')

end;

end;

Задания для самостоятельной работы

Используя материал предыдущих занятий решить следующие задачи. Каждую задачу оформлять в виде отдельного приложения. Рекомендуется каждое приложение сохранять в отдельной папке. Продумывать интерфейс с пользователем, чтобы пользо­вателю было удобно работать с вашим приложением. Для разработки интерфейса использовать интерфейсные компоненты Windows: Label, Edit, Bitton.

1. Hайти минимальное из 5-ти чисел. Вывести результат.

2. Введите четыре веществ числа. Определите можно ли построить четырехугольник с длинами сторон, равными этим числам.

3. Заданы тарифы на оплату электроэнергии. Если использовано от 1 до 100 киловатт-час (кВт. час), то плата А рублей за каждый кВт. час. Если использовано больше 100 кВт. час, то за каждый кВт. час от 101 до 200 - плата B руб. а за каждый кВт. час свыше 200 - плата C руб. Составьте алгоритм, вычисляющий, сколько надо заплатить за ис­пользование N кВт. часов электроэнергии.

4. Введите порядковый номер дня недели. Выдайте название дня недели.

5. Ввели 6-ти значное число. Является ли оно счастливым, т.е. равна ли сумма первых 3-х цифр сумме 3-х последних.

6. Ввели 6-ти значное число. Является ли оно перевертышем, т.е. одина­ково читается как справа налево, так и слева направо.

7. Заданы тарифы на перевозки грузов. За перевозку тонны груза на расстояние от 1 до 1000 километров (км) плата А рублей за каждый км. Если груз перевозится на расстояние больше 1000 км, то за каждый км от 1001 до 2001 перевозка тонны груза стоит B рублей за каждый км., а за каждый км свыше 2000 перевозка тонны груза стоит C руб. за км. Составьте алгоритм, вычисляющий, сколько надо заплатить за пере­возку одной тонны груза на N км.

8. Электронные часы показывают P часов, M минут, S секунд. Напишите программу, вычисляющую время в часах, минутах и секундах, которое будут показывать часы через 2 минуты 10 секунд.

9. Поле шахматной доски определяется парой (m, n) натуральных чисел (m от 1 до 8, n от 1 до 8). Первое число - номер строки (номер гори­зонтали), второе число - номер столбца (номер вертикали). Даны натураль­ные числа k, l, m, n, каждое из которых не больше 8. Определить:

а) являются ли поля (m,n) и (k,l) полями одного цвета;

б) угрожает ли полю (m,n) ферзь, находящийся на поле (k,l).

в) угрожает ли конь, стоящий на поле (k,l) полю (m,n).

10. В кассе имеются только 3-х и 5-ти рублевые купюры (как это было в 1980 году). Составить программу, которая бы "выплачивала" такими купю­рами любую сумму более 7 рублей.

11. Ввести коэффициенты квадратного трехчлена, вывести значения корней квадратного уравнения. В случае, если корни не существуют выдать сообщение.

Наши рекомендации