Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методические_указания_Паскаль.doc
Скачиваний:
53
Добавлен:
15.02.2015
Размер:
1.35 Mб
Скачать

Программирование разветвляющегося вычислительного процесса

Цель работы: Формирование навыков структурного программирования на основе конструкции ветвления. Изучение принципов работы логических функций «НЕ», «И», «ИЛИ» и «Исключающее ИЛИ».

Краткие теоретические сведения

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

Рисунок 3 – Блок-схема алгоритма ветвящегося процесса

Условный оператор используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия и имеет следующую структуру

if <логическое выражение> then серия1 else серия2;

Данная запись читается как: если <логическое выражение> то … иначе … .

Если логическое выражение, выступающее в качестве условия, принимает значение true (истина), то выполняются операторы, расположенные после then (серия 1), если false (ложь) - операторы, следующие за else (серия2).

Примеры реализации конструкций ветвления на языке Паскаль приведены в таблице 4. Если каждая ветвь содержит только один оператор, то применяется вариант А. В случае если серия содержит более одного оператора, то она должна заключаться в операторные скобки begin … end. (вариант B). В качестве оператора следующего после then или после else может идти также условный оператор (вариант C).

При записи логического выражения следует избегать знака = (равно) для действительных (вещественных) переменных, так как они представляются с некоторой точностью (до определенного знака), а поэтому может не произойти совпадений значений выражений, стоящих слева и справа от знака равно. Для устранения указанного недостатка следует требовать выполнения условия с заданной точностью, т.е. вместо отношения x = y рекомендуется, например, использовать такой прием:

Abs(x - y) < 1E-8.

Абсолютная разница не превышает некоторой весьма малой величины.

Таблица 4 – Примеры реализации условных конструкций

Вариант A

Вариант B

Вариант C

if условие

then оператор 1

else оператор 2;

if условие

then

begin

оператор 1;

оператор 2;

оператор n;

end

else

begin

оператор 1;

оператор 2;

оператор m;

end;

if условие 1

then

if условие 2

then оператор 1

else оператор 2;

Поскольку развилка может быть неполной, т.е. требуется рассмотрение только одного варианта, то возможна и неполная форма записи условного оператора:

if <логическое выражение> then серия;

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

Во многих практических задачах логическое выражение формируется из некоторого набора простых условий, объединяемых друг с другом логическими функциями «НЕ» (инверсия), «И» (конъюнкция) и «ИЛИ» (дизъюнкция). Например, если x>0 и y>0, то точка находится в первом квадранте. Если вероятность события не менее 0 и не более 1, то она посчитана правильно.

Эти смысловые союзы образуют смысловую логическую связку двух или более условий в одно. В программировании они называются логическими функциями. Основных логических функций четыре:

AND (ЛОГИЧЕСКОЕ И);

OR (ЛОГИЧЕСКОЕ ИЛИ);

NOT (ЛОГИЧЕСКОЕ НЕ);

XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ).

Принцип работы логических функций поясняют так называемые таблицы истинности, которые позволяют увидеть, какое значение примет та или иная логическая функция при различных входных условиях (таблица 5).

Логические функции могут принимать только одной значение из двух - ИСТИНА или ЛОЖЬ (true - false). Часто истинность обозначают цифрой 1, а ложность - цифрой 0.

Таблица 5 – Таблица истинности основных логических функций

X

Y

NOT X

X AND Y

X OR Y

X XOR Y

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

Функция отрицания «НЕ» дает всегда противоположное исходному значение. Функция «И» истинна только в том случае, когда оба связанных условия истинны. Функция «ИЛИ» истинна, если хотя бы одно из связываемых условий истинно. Функция «Исключающее ИЛИ» истинна только когда истинно только одно из условий. При использовании логических функций в языке Паскаль требуется заключение связываемых условий в обычные скобки.

Поясним использование рассмотренных логических функций на следующем примере.

Пример. Даны действительные числа x, y. Если x и y отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2,0], то оба значения уменьшить в 10 раз; в остальных случаях x и y оставить без изменения.

Текст программы.

program example;

var x, y : real;

begin

write('введите два числа '); readln(x, y);

if (x<0) and (x<0)

then

begin x:=abs(x); y:=abs(y) end

else

if (x<0) or (y<0)

then

begin x:=x+0.5; y:=y+0.5 end

else

if not (((x>=0.5) and (x<=2)) or ((y>=0.5) and (y<=2)))

then begin x:=x/10; y:=y/10 end;

writeln('результат:');

writeln('x= ', x:6:3);

writeln('y= ', y:6:3)

end.

Задание на работу

  1. Выбрать задание и задачу с номерами, соответствующими последней цифре студенческого билета (таблицы 6, 7).

  2. Составить программу вычисления значения yзаданной кусочно-непрерывной функции для произвольных значений исходных данных (таблица 6).

  3. Подготовить исходные данные для контрольного расчета значения функции по каждой формуле. Выполнить контрольные расчеты и расчет для заданных исходных данных.

  4. Составить программу решения задачи из таблицы 7

Таблица 6 – Варианты заданий

Вариант

Исходные данные

Функция

0

y =

1

y=

2

y =

3

y =

4

y =

5

y =

6

y =

7

y =

8

y =

9

y =

Таблица 7 – Варианты задач

Номер варианта

Задача

0

Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее. Вывести новые значения переменных A и B.

1

Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

2

Даны три числа. Найти наименьшее из них.

3

Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).

4

Даны три числа. Найти сумму двух наибольших из них.

5

Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.

6

Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию или убыванию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное.

Вывести новые значения переменных A, B, C.

7

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

8

На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести эту точку и ее расстояние от точки A.

9

Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.

Лабораторная работа № 4