- •Содержание
- •Раздел 2.Программирование на процедурном языке turbo pascal 3
- •Раздел 2.Программирование на процедурном языке turbo pascal Лабораторная работа №1. Знакомство с интегрированной средой Turbo Pascal 7.0. Разработка первой программы.
- •Лабораторная работа № 2. Разработка программ, реализующих линейный процесс в среде Turbo Pascal 7.0.
- •Лабораторная работа № 3. Разработка программы, включающей различные форматы ввода/вывода данных средствами языка Pascal.
- •Лабораторная работа № 4. Вычисление алгебраических выражений с использованием стандартных процедур и функций языка Pascal.
- •Лабораторная работа № 5. Разработка программы для решения текстовой задачи в среде Turbo Pascal 7.0.
- •Лабораторная работа № 6. Вычисление заданного выражения при произвольных значениях переменных с использованием нескольких окон на одном экране. Работа с цветом в текстовом режиме.
- •Лабораторная работа № 7. Использование языка программирования для разработки программ вычисления математических выражений с использованием оператора if.
- •If выражение then оператор1
- •Лабораторная работа № 8. Разработка программы для решения текстовых задач, содержащих ветвление
- •Лабораторная работа № 9. Использование языка программирования для реализации разветвляющихся алгоритмов с использованием выражения – селектора в среде Turbo Pascal 7.0.
- •Лабораторная работа № 10. Разработка программ для реализации простых циклических алгоритмов средствами языка Pascal.
- •Лабораторная работа № 11. Разработка программ, включающих алгоритмы работы с числом
- •Лабораторная работа № 12. Реализация задачи табулирования функции на заданном отрезке в среде Turbo Pascal.
- •Лабораторная работа № 13. Вычисление суммы бесконечного ряда с заданной степенью точности в среде Turbo Pascal.
- •Лабораторная работа № 14. Разработка программ, включающих циклический процесс средствами языка Turbo Pascal.
- •Лабораторная работа № 15. Разработка программы реализации текстовой задачи, содержащей условия и циклы.
- •Лабораторная работа № 16. Разработка программы реализации задачи, содержащей одномерный массив данных.
- •Лабораторная работа № 17. Разработка программы реализации задачи, содержащей двумерный массив данных.
- •Лабораторная работа № 18. Методы сортировки массива в среде Turbo Pascal
- •Лабораторная работа № 19. Разработка программы работы со строками в среде Turbo Pascal
Лабораторная работа № 8. Разработка программы для решения текстовых задач, содержащих ветвление
Цель работы:
научиться по тексту задачи определять математическую модель процесса
закрепить практические навыки в использовании оператора If…Then…Else при решении задач
научиться составлять тесты для проверки каждого из возможных путей реализации исходной задачи
Оборудование:
программная часть – интегрированная среда Turbo Pascal 7.0
аппаратная часть - ПЭВМ IBM PC/XT
задание на выполнение работы в электронном варианте
Теоретическая часть
Условный оператор IF реализует разветвляющиеся процессы, т.е. изменяет порядок в зависимости от истинности или ложности некоторого условия:
Оператор (инструкцию) if можно записать двумя способами:
Вариант 1.
if Условие then
begin
{ Эти инструкции выполняются, если Условие истинно }
end
else
begin
{ Эти инструкции выполняются, если Условие ложно }
end;
Вариант 2.
if Условие then
begin
{ Эти инструкции выполняются, если Условие истинно}
end;
В последнем случае говорят о сокращенной форме условного оператора.
Ключевые слова if, then, else обозначают "если", "то", "иначе" соответственно. Выполнение условного оператора начинается с вычисления условия. Если оно истинно (true, "да", 1), то выполняется оператор, стоящий после служебного слова then. Если условие ложно (false, "нет", 0), то выполняется оператор, стоящий после служебного слова е1sе. Часть оператора, стоящая после служебного слова е1sе, может отсутствовать. В этом случае при ложности проверяемого условия просто выполняется следующая по порядку за оператором условия инструкция.
Пример:
If а>b then writeln (' а больше b')
else writeln ('а меньше или равно b');
или:
If (а>=0) аnd (а<10) then writeln ('однозначное число');
Один оператор if может входить в состав другого оператора if. В этом случае говорят о вложенности операторов.
Вариант 1.
IF условие 1 THEN
IF условие 2 THEN оператор 1
ELSE оператор 2
ELSE оператор 3;
Вариант 2.
IF условие 1 THEN оператор 1
ELSE IF условие 2 THEN оператор 2
ELSE оператор 3;
Вариант 3.
IF условие 1 THEN
IF условие 2 THEN оператор 1
ELSE оператор 2;
Если проверяемые Условие1, Условие2... не влияют друг на друга, т. е. последовательность их вычисления безразлична, в тексте программы их рекомендуется располагать в определенном порядке. Условие, с наибольшей вероятностью принимающее значение true, должно стоять на первом месте, с меньшей вероятностью — на втором и т. д. Это ускорит выполнение программы.
При вложенности операторов каждое е1sе соответствует тому then, которое непосредственно ему предшествует. Конструкций со степенью вложенности более 2—3 необходимо избегать из-за сложности их анализа при отладке программы. В условных операторах часто используют составной оператор begin … end. Если между begin и end находится только одна инструкция, слова begin и end лучше не писать.
В условных операторах точка с запятой не ставится после then и перед else.
Самое простое логическое выражение — одна переменная логического типа, которая играет роль целого выражения. Сложные логические выражения могут содержать несколько отношений и/или логических переменных, связанных операциями and, оr, nod (не забывайте заключать каждое отношение в скобки).
Практическая часть
Пример:
В блок-схемах ветвление начинается на выходах элемента "Решение", с помощью которого в алгоритме выполняется проверка какого-либо условия. Количество ветвей тем больше, чем больше проверяемых условий.
Для пояснения рассмотрим решение задачи нахождения значения функции z = y/x.
На первый взгляд представляется, что алгоритм решения этой задачи имеет линейную структуру. Однако, если учесть, что делить на нуль нельзя из-за переполнения ячейки, то, во-первых, нужно из вычислений исключить вариант х = 0 и, во-вторых, проинформировать пользователя алгоритма о возникшей ошибке. Если этого не сделать, то при вычислениях может возникнуть аварийный выход до получения результата. В профессиональной практике аварийные завершения крайне нежелательны. т. к. к этому моменту уже может быть накоплено определенное количество результатов, которые окажутся необработанными и попросту пропадут. Можно привести другие примеры, когда аварийный останов компьютера может повлечь куда более серьезные последствия.
Решение задачи представлено блок-схемой на рисунке.
Блок-схема разветвляющегося алгоритма
Блок-схема состоит из 7 блоков. После начала работы алгоритм в блоке 2 требует ввода аргументов X и Y. Затем в блоке 3 производится проверка условия X = 0. Здесь проверяется: равна ли нули константа, введенная в ячейку с адресом X. Результатом такой проверки является ответ "Да" или "Нет". В зависимости от этого ответа выполнение алгоритма пойдет по одной или другой ветви. Если результат проверки окажется отрицательным, то на х можно делить и управление передается блоку 4.
В блоке 4 будет получен результат Z, затем в блоке б значения всех трех переменных будут отпечатаны и в блоке 7 алгоритм закончит работу. Если же ответ окажется положительным, то управление будет передано блоку 4. Выполняя команду блока 4, выведется сообщение "Ошибка" и работа закончится в том же блоке 7.
Пример 1. Найдем Z - наибольшую из величин A, B и положительную их разность R.
Алгоритм решения этой задачи состоит в применении базовой конструкции ветвления. Операция развилки состоит в проверке условия A>B. При проверке условия выполняем операцию B1, в противном случае B2. Все это реализуется одним условным оператором:
if A > B then {B1}else{B2}
Уже эту частичную реализацию можно оформить как программу, откомпилировать ее и выполнить. Надо только описать имена A и B в виде переменных или констант:
Var A,B:real;
begin
if A > B then {B1}else{B2}
end.
или
Const A = 10.; B = 12.;
begin
if A > B then {B1}else{B2}
end.
Константы использовать удобнее, поскольку мы сразу задаем и некоторые тестовые значения.
Теперь необходимо раскрыть операции B1 и B2. Из условия задачи видно, что операцию B1 можно заменить следованием из двух операций:
{большая величина равна A}
{положительная разность равна A-B}
Аналогично раскрывается операция B2:
{большая величина равна B}
{положительная разность равна B-A}
Каждая из этих операций может быть реализована оператором присваивания, если для большего значения использовать переменную Z, а для положительной разности - переменную R:
Z := A; R := A - B
и
Z := B; R := B - A
Но прямо подставлять их в условный оператор вместо операций B1 и B2 нельзя, поскольку каждая из этих операций должна быть одним оператором. Поэтому каждую пару операторов присваивания представляем одним составным оператором. Таким образом, операция B1 заменяется оператором
begin
Z := A; R := A - B
end,
а операция B2 заменяется оператором
begin
Z := B; R := B - A
end
Подставим их в условный оператор и добавим имя программы. Тогда получим окончательный исходный текст программы:
Program Ex_2_1;
Const A = 10.; B = 12.;
Var R, Z: Real;
Begin
if A > B then begin
Z := A; R := A - B
end
else begin
Z := B; R := B - A
end
End.
Этот вариант алгоритма и программы не единственный. Если для вычисления большей разности применить функцию определения абсолютного значения, то ее можно выполнить вне условного оператора. Сам же условный оператор станет проще:
Program Ex_2_1a;
Const A = 10.; B = 12.;
Var R, Z: Real;
Begin
R := abs(A - B);
if A > B then
Z := A
else
Z := B
End.
Пример 2.
Найдем Z - максимальную величину из величин A, B, C.
Одним из возможных алгоритмов может быть последовательный попарный анализ заданных величин. Если A > B, то результат выяснится из сравнения A и C. Если неверно, что A > B, то результат выяснится из сравнения B и C. Тогда получаем условный оператор
if A > B then
{определить большее из A и C}
else
{определить большее из B и C}
Если для результата введем переменную max, то обе эти операции можно заменить условными операторами как в предыдущем примере:
if A > C then max := A else max := C
и
if B > C then max := B else max := C
После подстановки их в первый условный оператор получим окончательный вид текста программы:
Program Ex_2_2;
Const A = 10.; B = 12.; C = 14.;
Var max: Real;
Begin
if A > B then
if A > C then
max := A
else
max := C
else
if B > C then
max := B
else
max := C
End.
Такое расположение операторов (по одному в строке) более четко выделяет их вложенность и дает удобство при пошаговом отладочном выполнении программы. Можно проследить очередность их выполнения и проверить, какой из операторов присваивания определил результат.
Пример 3.
Вычислить частное двух целых чисел. В связи с тем, что делить на ноль нельзя, организуем контроль ввода данных. Для контроля вводимых значений делителя используем оператор условного перехода if.
Var
a,b: integer; { операнды — целые числа }
result: real; ( результат — вещественное число }
begin
write('Введите значение делимого а: '); read(a);
write('Введите значение делителя b: '); read(b);
if b=0 { контроль ввода }
then writeln('Неверные исходные данные: делитель — ноль')
else
{составной оператор нужен для объединения двух команд в единое целое }
begin { начало составного оператора }
result:=a/b;
writeln('Частное чисел ',а,' и ',Ь,' = ', result:7:3);
end; { конец составного оператора }
end.
Задания для самостоятельного выполнения
Изучить теоретические сведения по теме «Условный оператор IF».
Составить блок-схему решения задачи по своему варианту.
Разработать программу в среде Turbo Pascal 7.0.
Составить систему тестов и проверить работу программы на всех возможных значениях исходных данных.
Ответить на контрольные вопросы.
Результаты выполнения лабораторной работы оформить в виде отчета.
Индивидуальные задания:
Вариант 1
Найти max {min (a, b), min (c, d)}.
Вариант 2
Даны три числа m, n, p. Определить какое из них равно d. Если ни одно не рано d, то найти max(d-m, d-n, d-p).
Вариант 3
Даны два угла треугольника (в градусах ). Определить существует ли такой треугольник. Если да, то будет ли он прямоугольным.
Вариант 4
Даны действительные числа x и y, не равные друг другу. Меньшее из этих чисел заменить их полусуммой, а большее – их удвоенным произведением.
Вариант 5
Даны действительные числа a, b, c. Удвоить эти числа, если a>=b>=c и заменить их абсолютными значениями, если это не так.
Вариант 6
Даны целые числа m и n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
Вариант 7
Даны три положительных числа a, b, c. Проверить будут ли они сторонами треугольника? Если да, то вычислить площадь этого треугольника.
Вариант 8
Написать
программу решения уравнения
для произвольных a, b.
Вариант 9
Дан радиус круга R. Определить поместится ли правильный треугольник со стороной а в этом круге.
Вариант 10
Дано число х. Напечатать в порядке возрастания числа sin x, cos x, ln x. Если при каком-либо х некоторые из выражений не имеют смысла, вывести сообщение об этом и сравнивать значения только тех, которые имеют смысл.
Вариант 11
Определить, является ли треугольник со сторонами a, b, c равносторонним.
Вариант 12
Составить программу, осуществляющую перевод величин из радианной меры в градусную или наоборот. Программа должна запрашивать, какой перевод нужно осуществить, и выполнять указанное действие.
Вариант 13
Определить, имеется ли среди чисел a, b, c хотя бы одна пара взаимно противоположных чисел.
Вариант 14
Подсчитать количество отрицательных чисел среди чисел m, n, p.
Вариант 15
Написать программу, которая по заданным трем числам определяет, является ли сумма каких-либо двух из них положительной.
Вариант 16
Известно, что из четырех чисел а1, а2, а3, а4 одно отлично от трех других, равных между собой; присвоить номер этого числа переменной n.
Вариант 17
Подсчитать количество целых чисел среди чисел m, n, p.
Вариант 18
Перераспределить значения переменных х и у так, чтобы в х оказалось большее из этих значений, а в у – меньшее.
Вариант 19
Известно, что из четырех чисел а1, а2, а3 и а4 одно отлично от трех других, равных между собой; присвоить номер этого числа переменной n.
Вариант 20
Значения переменных а, Ь и с поменять местами так, чтобы оказалось а Ь с.
Вариант 21
Если уравнение ах2 + Ьх + с = 0 (а0) имеет вещественные корни, то логической переменной t присвоить значение true, а переменным х1 и х2 – сами корни, иначе же переменной t присвоить false, а значения переменных х1 и х2 не менять.
Вариант 22
Считая, что стандартные функции sin и cos применимы только к аргументам из отрезка [0, /2], вычислить y=sin х для произвольного числа х.
Вариант 23
Если значение переменной w не равно 0 и при этом котангенс от w меньше 0.5, тогда поменять знак у w, а если значение w равно 0, тогда присвоить w значение 1.
Вариант 24
Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц – от 1 до 12). Если введены некорректные данные, то сообщить об этом.
Вариант 25
Даны произвольные числа а, Ь и с. Если нельзя построить треугольник с такими длинами сторон, то напечатать 0, иначе напечатать 3, 2 или 1 в зависимости от того, равносторонний это треугольник, равнобедренный или какой-либо иной.
Вариант 26
Написать программу нахождения суммы большего и меньшего из 3 чисел.
Вариант 27
Написать программу, распознающую по длинам сторон среди всех треугольников прямоугольные. Если таковых нет, то вычислить величину угла С.
Вариант 28
Подсчитать количество четных чисел среди чисел m, n, p.
Вариант 29
Определить, является ли четырехугольник со сторонами a, b, c, d ромбом.
Вариант 30
По данным возрастам определить, кто старше брат или сестра.
Контрольные вопросы
Что такое разветвление и обход? Какие структуры соответствует разветвлению и обходу?
На чем основано сравнение символьных величин?
Для чего необходима защита программы от неправильного ввода и как она осуществляется?
Что означают ключевые слова if, then, else?
С чего начинается выполнение условного оператора?
В том случае, если часть оператора, стоящая после служебного слова е1sе, отсутствует выполняется …?
В каком случае говорят о вложенности операторов If?
