1.Цель работы:
Целью работы является изучение приемов программирования вычислительных задач с ветвлением.
2. Теоретические сведения
IF - THEN - ELSE
Разветвления в программах возникают при необходимости выбора одного из нескольких путей решения задачи, в зависимости от выполнения одного или нескольких условий. Для организации разветвлений в Pascal-программах используют условный оператор: IF - THEN - ELSE или оператор выбора: CASE.
Условный оператор имеет два вида записи:
1) IF b THEN a;
2) IF b THEN a1 ELSE a2;
где b - логическое выражение; a,a1,a2 - операторы простые или составные.
Для первого вида записи если логическое выражение "b" истинно, выполняется оператор "a" , в противном случае следующий за условным оператором оператор.
Для второго вида записи если логическое выражение "b" истинно, выполняется оператор "a1" , в противном случае - оператор "a2".
Примером простейших логических выражений является сравнение переменных или констант: a > b , c <= d , 5 > 3.2.
Переменные должны быть определены до выполнения операции сравнения.
Использование составных операторов расширяет действие условного оператора. Составной оператор представляет собой последовательность операторов, заключенных в операторные скобки (ключевые слова begin и end ) и рассматриваются транслятором как один оператор.
begin
оператор A;
оператор B;
........
оператор S
end;
Условный оператор IF - THEN - ELSE применяют в тех случаях, когда вычисления могут пойти различным путем, в зависимости от выполнения определенных условий.
Рассмотрим пример использования условного оператора.
Задание:
Составить программу, вычисляющую сумму или разность двух чисел, в зависимости от соотношения этих чисел. Если первое число больше второго, то нужно вычислить их сумму, в противном случае - их разность.
Паскаль программа имеет вид:
(файл prim41.pas)
program prim;
var x,y,z:real ;
Begin
writeln('введите число x '); readln(x);
writeln('введите число y '); readln(y);
IF x>y THEN z:=x+y ELSE z:=x-y;
writeln('число z = ',z:8:2 );
readln
End.
Алгоритм:
В этой задаче можно рассматривать переменную z как функцию, меняющую свое значение в зависимости от значения аргументов x и y и их соотношения.
- инструкция IF - THEN – ELSE используется для выбора одного из двух направлений дальнейшего хода программы (последовательности инструкций, которые должны быть выполнены);
- выбор последовательности инструкций осуществляется во время выполнения программы в зависимости от выполнения условия;
- условие – это выражение логического типа, которое может принимать одно из двух значений: TRUE (истина – условие выполняется) FALSE (ложь – условие не выполняется);
- при помощи логических операций AND (логическое "И") и OR (логическое "ИЛИ") из простых условий можно строить сложные.
CASE
Оператор выбора (варианта ) используется в тех случаях, когда в зависимости от какого-либо выражения необходимо выполнить один из нескольких последовательных операторов. Оператор выбора относится к сложным и имеет следующую форму записи:
CASE _ выражение _ OF
константа n : оператор n
END;
Здесь CASE , OF , END - служебные слова.
Выражение может быть любого стандартного типа кроме REAL. В соответствии с этим и константа не может быть действительного типа. Тип константы должен совпадать с типом выражения.
Оператор выбора действует следующим образом: если значение выражения равно одной из констант, то выполняется соответствующий ей оператор, и затем управление передается за пределы оператора выбора.
Пример программы для определения дня недели по введенному числу месяца (для октября 2001 года) имеет вид:
(файл prim42.pas)
program day_;
var data, ost:Integer;
day:string[15];
Begin
writeln('Введите число.');
readln(data);
ost:=data mod 7;
Case ost of
1:day:='понеделник';
2:day:='вторник';
3:day:='cреда';
4:day:='четверг';
5:day:='пятница';
6:day:='суббота';
7:day:='воскресенье';
end;
writeln(day);
End.
В рассмотренном примере используется операция MOD - получение целого остатка при делении целого данного на целое.
В операторе выбора в качестве константы допускается использование списка констант, например:
Раздел описаний :
var S:char;
P:integer;
Фрагмент тела программы:
Case S of
'+','-','*','/': P:=1;
'A','B' : P:=2;
'.' : P:=3
- инструкция Case используется для выбора одного из нескольких направлений дальнейшего хода программы (последовательности инструкций, которые должны быть выполнены);
- выбор последовательности инструкций осуществляется во время выполнения программы в зависимости от равенства выражения константе, указанной перед группой инструкций;
GOTO
Оператор безусловного перехода (GOTO) представляет собой простой оператор, используя который можно изменять порядок выполнения операторов в программе.
Общий вид оператора безусловного перехода:
GOTO <метка>;
GOTO - зарезервированное слово языка, а <метка> - идентификатор или целое число от 0 до 9999. Все используемые в программе метки перечисляются в разделе LABEL.
Пример: (файл prim43.pas)
program perehod;
uses crt;
label 1;
var data, ost:Integer;
day:string[15];
Begin
clrscr;
1:writeln('Введите число.');
readln(data);
if (data<0) or (data>32) then
begin
TextColor(128);
writeln('Ошибка при вводе
числа (1..31).');
TextColor(White);
writeln;
goto 1;
end;
ost:=data mod 7;
Case ost of
1:day:='понеделник';
2:day:='вторник';
3:day:='cреда';
4:day:='четверг';
5:day:='пятница';
6:day:='суббота';
7:day:='воскресенье';
end;
writeln;
TextColor(Red);write(data);
TextColor(White);
write(' октября 2001 года соответствует дню недели ');
TextColor(Red);writeln(day);
repeat until keypressed;
End.
Однако применение оператора безусловного перехода является нежелательным, т.к. присутствие этого оператора в программе нарушает ее структурную целостность и наглядность.
Такую программу трудно читать, отлаживать и модифицировать.
EXIT и HALT
Модуль System, который содержит все стандартные и встроенные процедуры и функции Turbo Pascal, используется автоматически любым модулем или программой и никогда не требуется указывать его в директиве uses. Модуль System реализует низко-уровневые подпрограммы для операций ввода/вывода, обработки строк, управления оверлеями и динамическое распределение памяти.
Процедуры управления программой:
Exit Позволяет немедленно выйти из текущего блока.
Halt Останавливает выполнение программы и возвращает в операционную систему.
Пример: (файл prim44.pas)
program preriv;
uses crt;
var data, ost:Integer;
day:string[15];
Begin
clrscr;
writeln('Введите число.');
readln(data);
if (data<0) or (data>32) then
begin
TextColor(128);
writeln('Ошибка при вводе числа (1..31).');
writeln('Для выхода нажать ввод');
readln;
Halt;
end;
ost:=data mod 7;
Case ost of
1:day:='понеделник';
2:day:='вторник';
3:day:='cреда';
4:day:='четверг';
5:day:='пятница';
6:day:='суббота';
7:day:='воскресенье';
end;
writeln;
TextColor(Red);write(data);
TextColor(White);
write(' октября 2001 года соответствует дню недели ');
TextColor(Red);writeln(day);
repeat until keypressed;
End.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы, представленный в виде таблицы (5 значений аргумента, 5 значений функции).
5. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какие операторы применяют для организации ветвлений в языке Turbo Pascal?
2. В каких случаях применяют в программе условный оператор?
3. Тип выражения в операторе CASE в языке Turbo Pascal?
4. Оператор безусловного перехода в языке Turbo Pascal?
5. Немедленная остановка выполнения программы?
6. ВАРИАНТЫ ЗАДАНИЙ
№ по списку |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
№ задания |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
№ задания |
Функция |
Исходные данные |
1 |
x2, при x<1 y={ ax, при x>1 |
a=0,5*№ по списку |
2 |
a+5, при a<2 b={ c, при a=2 a-5, при a>2 |
c=5+№ по списку |
3 |
d3, при d<0 f={ (d-k)2, при d>0 |
k=№ по списку |
4 |
p+t, при p<0 g={ t, при p=0 p-t, при p>0 |
t=4/№ по списку |
5 |
10n, при n<10 m={ n/10+h, при n>10 |
h=№ по списку/2 |
Лабораторная работа N15.
ОРГАНИЗАЦИЯ ЦИКЛИЧЕСКИХ ВЫЧИСЛЕНИЙ.
ЦИКЛЫ С ПРЕДУСЛОВИЕМ И ПОСТУСЛОВИЕМ.
