Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Цель работы: научиться правильно использовать условный оператор if, оператор выбора case; научиться составлять программы решения задач на разветвляющиеся алгоритмы.
В Паскале имеется возможность нелинейного хода программы, т.е. выполнения операторов не в том порядке, в котором они записаны. Такую возможность нам предоставляют разветвляющиеся алгоритмы. Они могут быть реализованы одним из трех способов: с использованием операторов перехода, условного оператора или оператора выбора.
Оператор перехода
Оператор перехода имеет вид
GOTO <метка>.
Он позволяет передать управление непосредственно на нужный оператор программы. Перед этим оператором должна располагаться метка отделенная от него двоеточием. В Турбо Паскале в качестве меток выступают либо целые числа от 0 до 9999, либо идентификаторы. Все метки должны быть описаны в разделе объявления меток следующим образом:
label <список меток через запятую> ;
Условный оператор IF
Условный оператор включает в себя операторы, которые выполняются или не выполняются в зависимости от записанного в операторе условия. Оператор имеет вид:
IF "условие" Then "оператор1" Else "оператор2";
где "условие" - выражение логического типа;
"оператор1" выполняется, если условие верно ( True ),
"оператор2" выполняется, если условие не верно ( False ).
Например, вычисление квадратного корня из числа "a" проводится при условии a>=0, операторами:
IF a>=0 Then b := Sqrt(a)
Else
begin
WriteLn('a<0');
Readln;
Halt
end;
Оператор Halt прекращает выполнение программы.
Схема выполнения условного оператора имеет вид:
В условном операторе может отсутствовать блок Else оператор2; т. е. условный оператор может иметь вид:
IF "условие" Then "опертор1";
например: IF a<0 Then a:=abs(a);
Приведем пример программы определения весовой категории в зависимости от веса спортсмена.
PROGRAM VES; { определение весовой категории спортсмена }
Условная схема программы
CONST A1='легкая категория';
A2='средняя категория';
A3='тяжелая категория';
A4='сверхтяжелая категория';
var
V : integer;
BEGIN
Write('введите вес спортсмена V = '); ReadLn(v);
if V<62 then WriteLn(A1) {вложенный условный оператор }
else if V<75 then WriteLn(A2)
else if V<88 then WriteLn(A3)
else WriteLn(A4)
writeln('Нажмите Enter');
readln;
END.
Для разложения целого числа на цифры удобно применять операции: MOD и DIV. Например, если дано трехзначное число "N" ( "N" соответствует "X1X2X3" ), то цифры: X1X2X3, составляющие это число определяются блоком операторов:
X3:= N mod 10;
N:= N div 10;
X2:= N mod 10;
N:= N div 10;
X1:= N;
Если требуется определить, делится ли вещественное число "A" нацело на число "B", то можно применять функции Frac(x); и Int(x); например:
x := A/B;
if Frac(x) = 0 then writeln('Число "A" делится нацело на число "B"');
if Int(x) = x then writeln('Число "A" делится нацело на число "B"');
Условный оператор может применяться для идентификации (распознавания) объекта по определенным признакам составляющих его элементов. Например, если объектом является треугольник, то элементами объекта могут быть: 1) три его угла (a, b, c); 2) три его стороны (a1, b1, c1); и т. д.
Признаками являются значения элементов по которым производится идентификация, например, для углов: 1) один угол > 90 - (один признак); 2) три угла < 90 - (три признака); и т. д.
В результате идентификации объект получает имя. Например, треугольник - остроугольный, либо тупоугольный и т. д.
Если идентификация проводится по одному признаку для нескольких элементов, то несколько условий связываются служебным словом "or", например:
If (a > 90) or (b > 90) or (c > 90) then writeln ( 'Треугольник - тупоугольный' );
Если идентификация проводится по нескольким признакам, число которых равно числу элементов, то несколько условий связываются служебным словом "and", например:
If (a < 90) and (b < 90) and (c < 90) then
writeln('Треугольник - остроугольный');
Если имя объекта составное, то добавляются признаки для идентификации второй части имени и применяются вложенные условные операторы, например, для равнобедренного треугольника:
If (a < 90)and (b < 90) and(c < 90) then
If (a=b) or (b=c) or (a=c) then
writeln('Треугольник - остроугольный и равнобедренный')
else writeln('Треугольник - остроугольный');
Напомним, что условный оператор можно применять для контроля правильности вводимых данных, например:
If (a+b+c)<>180 then
begin
writeln('Сумма углов <> 180');
Halt
end;
Если для идентификации объекта достаточно меньшего числа признаков, чем число элементов, то условия, связанные "and" группируются, а группы соединяются служебным словом "or". Например, четырехугольник имеет элементами четыре стороны ( a, b, c, d ), а его имя устанавливается по двум признакам (равенство двух пар сторон), тогда можно использовать операторы:
If ((a=b) and (c=d)) or ((a=c) and (b=d)) or ((a=d) and (b=c)) then
writeln('Параллелограмм');
Оператор выбора CASE
Оператор служит для выбора одного из помеченных вариантов действия (операторов), в зависимости от значения "параметра". Оператор имеет вид:
Case "параметр" Of
"список помеченных операторов"
Else "оператор"
End;
Здесь "параметр" - выражение или переменная порядкового типа.
Из "списка помеченных операторов" выполняется оператор с меткой, включающей значение "параметра", иначе оператор после слова Else.
Конструкция Else "оператор" может отсутствовать, тогда "оператор" будет иметь вид: Begin "операторы" end;
Пример операторов для определения порядка целого числа N от 0 до 999:
case N of
0..9 : writeln('однозначное');
10..99 : writeln('двузначное');
100..999 : writeln('трехзначное')
else writeln('Число "N" не входит в указанный диапазон')
end;
Приведем пример программы случайного предсказания одного из десяти вариантов ближайшего будущего с вероятностью 1/20, в остальных случаях - вы "неудачник".
PROGRAM FUTURE;
var N : word;
BEGIN
writeln('ПРЕДСКАЗАНИЕ БУДУЩЕГО');
Randomize;
N:=Random(20)+1; { N - случайное число от 1 до 20 }
writeln; write('Вас ожидает ');
case N of
1 : writeln('счастье');
2 : writeln('пятерка');
3 : writeln('дорога');
4 : writeln('двойка');
5 : writeln('болезнь');
6 : writeln('здоровье');
7 : writeln('деньги');
8 : writeln('любовь');
9 : writeln('встреча');
10 : writeln('дети')
else writeln('неудача')
end;
writeln('Нажми Enter');
readln;
END.
Здесь функция Random(x) генерирует случайное число, с равномерной плотностью распределения на заданном интервале. Для инициализации распределения в начале программы необходимо вызвать процедуру Randomize.
Пример1: Дано действительное а. Для функций f(a),график которой представлен на рисунке,вычислить f(a).
Этапы решения задачи:
Детализируем блок"Определяем к какому промежутку относится x."
Добавим блоки вычисления функции на каждом из промежутков:
Таким образом, окончательный алгоритм выглядит следующим образом:
Дальнейшая детализация не требуется. Переводим блок-схему на язык Паскаль:
Program example1;
var a, f:real;
begin
write('Введите a> ');
readln(a);
if a<-1 then f:= -a-1 else
if (a>=-1) and (a<0) then f:= a+1 else
if (a>=0) and (a<1) then f:= -a+1 else f:= a+1;
writeln('F= 'f);
end.
а) |
б) |