Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основ Паскаль в примерах !!.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
227 Кб
Скачать
☆

19.2. Условный оператор

Если в процессе вычислительной работы появляется более одного направления хода дальнейших вычислений, такой процесс уже не является линейным: в зависимости от выполнения некоторого условия производятся различные варианты расчета. Ветвление в Паскале реализуется с помощью условного оператора IF, который позволяет выбрать для выполнения один из предлагаемых вариантов вычислений или не выбрать ни одного.

При решении задач в системе ИнтАл Вы использовали две формы записи команды ветвления: сокращенную и полную. Аналогично обстоит дело в Паскале:

Неполная команда ветвления

Полная команда ветвления

IF P THEN S ;

IF P THEN S1 ELSE S2 ;

Рис.3.4.

Здесь P – условие разветвления (логическое выражение или выражение отношения), S, S1, S2 – выполняемые операторы.

* Условие Р бывает простым (если оно содержит единственное выражение сравнения) и составным (если оно составлено из нескольких выражений сравнения, соединенных логическими операциями). В составных условиях выражения сравнения заключаются в круглые скобки. Примеры простых выражений: a>b, 5+x=3, sqrt (x)<=25. Примеры сложных выражений:

(x+y=5) and (2*x*sin(x)<5.5) 

(x<y) or not (y<z) 

Порядок выполнения операторов приводится на рис. 3.4. Так, в неполной конструкции, если условие Р истинно, выполняется оператор S, а затем – оператор, следующий за оператором if.

Если по одной из ветвей после служебных слов THEN и(ли) ELSE требуется выполнение более одного оператора, их ограничивают операторными скобками BEGIN … END и рассматривают как составной оператор.

Примеры:

Запись на ИнтАле

Запись на Паскале

Если a>b

То x:=a

Иначе

x:=b

Конец_Если

IF a>b THEN x:=a

ELSE x:=b ;

Если a>b

То x:=a k:=1

Иначе

x:=b k:=2

Конец_Если

IF a>b THEN BEGIN x:=a ; k:=1

END

ELSE

BEGIN x:=b ; k:=2

END ;

Если a>b

То

Если a>c

То x:=a

Конец_Если

Конец_Если

IF a>b THEN

IF a>c THEN x:=a ;

* IF (a>b) and (a>c) THEN x:=a ;

Примеры решения задач:

Пример 1. Моделирование работы пожарного датчика в помещении: программа должна выводить сообщение «Пожароопасная ситуация», если температура в комнате превысит 60° C; если температура не более 60° C, датчик «молчит».

Program OGON;

Var T: Real;

Begin

Write ('T='); Readln (T);

If T>60 then Writeln

('Пожароопасная ситуация')

End.

Пример 2. Реализуем на Паскале полностью алгоритм решения задачи 1 (§ 9): «Определить, на какой высоте и на каком расстоянии от места броска окажется через время t (с) мяч, брошенный под углом α к горизонту с начальной скоростью υ0 (м/с)» (с учетом проверки корректности исходных данных).

Напомним, что математическая постановка задачи и описание алгоритма ее решения приводятся в § 9, линейная часть алгоритма реализована на Паскале в § 15.

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

If (alfa>0) and (…) … then

Begin … End

Else

Writeln ('Некорректные данные');

Program BROSOK ;

Const g = 9.8 ;

Var V0, t, alfa, x, y : Real ;

Begin

Write ('введите скорость ') ;

Readln (V0) ;

Write ('введите время ') ;

Readln (t) ;

Write ('введите угол ') ;

Readln (alfa) ;

alfa:=alfa*pi/180;

If (alfa>0) and (alfa<=pi/2) and (V0>0) and (V0<=20) and (t>0) Then

Begin

x:=V0*cos(alfa)*t ;

y:=V0*sin(alfa)*t-g*t*t/2 ;

Writeln ('x=',x) ;

Writeln (' y=',y)

End ;

End .

Пример 3. Требуется определить, является ли человек, возраст которого x задан, школьником.

Задача сводится к проверке условия:

6 ≤ х ≤19 (сравните с решением примера 4 п. 19.1)

Program School_1;

Var X : Byte ;

Begin

Write ('Возраст=');

Readln (X) ;

If X>=6 then

if X<=19 then

Writeln ('школьник')

End .

Program School_2;

Var X : Byte ;

Begin

Write ('Возраст=');

Readln (X) ;

If (X>=6) and (X<=19)

then

Writeln ('школьник')

End .

* Пример 4. Требуется написать программу для решения неравенства ax > b (a, b – действительные числа).

Возможны следующие варианты ответа:

1) x>b/a (при a > 0);

2) x<b/a (при a < 0);

3) нет решений (при a = 0, b ≥ 0);

4) x – любое число (при a=0, b<0).

Program Neravenstvo ;

Var a, b : Real ;

Begin

Write ('a=') ; Readln (a) ;

Write ('b=') ; Readln (b) ;

If a>0 Then Writeln ('x>',b/a)

Else If a<0 Then

Writeln ('x<',b/a)

Else If b>=0 Then

Writeln ('нет решений')

Else

Writeln ('x-любое число')

E nd .

If a >0 Then Writeln ('x>',b/a) ;

If a <0 Then Writeln ('x<',b/a) ;

If a=0 then If b>=0 Then

Writeln ('нет решений')

Else Writeln ('x-любое число')

* В случае вложенных ветвлений каждое новое ключевое слово Else следует считать относящимся к ближайшему неиспользованному If. Например,

If x>-5 Then

If x<=6 Then y:=x*x

Else y:=x*x*x

Else y:=x ;

Этот фрагмент позволяет вычислить значение y по формуле:

1. Какие значения могут принимать переменные типа Boolean?

2. Какие операции сравнения и логические операции допустимы в языке Паскаль?

3. Что может быть операндом выражений сравнения? логических выражений?

4. Что такое «условный оператор» и когда он применяется?

5. Что может использоваться в качестве условия в условном операторе?

1. Определите, какие значения будут принимать переменные Х и Y после выполнения следующих операторов при:

1) A=5, B=3; 2) A=7, B=7; 3) A=-3, B=-10; 4) A=3, B=0; 5) A=5, B=2:

а) if A=B then X := A+1; Y:=B+1 ;

б) if A>B then X:=B+1 else Y:=A+1; X:=0;

в) if A=B then Begin

X := A+1 ; Y := B+1 End ;

г) if A>B then Y:=A-1 else

Begin X:=B-2; Y:=0 End ;

* д) if (A>B) and (A*B>0) then Begin X:=SQRT (A*B); Y:=100 End

Else Begin X:=B-A; Y:=A*B End ;

2. Определите, какие значения будут иметь переменные a и b после выполнения условного оператора if a>=b then a:=b else b:=a;

если: 1) a=0.9; b=0.7; 2) a=-7.3; b=7.3; 3) b=17; a=17; 4) a=5; b=5;

* 3. Определите, какие из следующих операторов задают вычисления по формуле:

a) if x>=-1 then y:=0 else if x<1 then y:=x+1 else y:=2;

б) if x<-1 then y:=0 else if x>=-1 then y:=2 else y:=x+1;

в) if x>=1 then y:=2 else if x<=-1 then y:=0 else y:=x+1.

4. Напишите программы решения задач:

1) Найти лучший результат в забеге на 100 м трех спортсменов.

2) Участники забега на 100 м имеют номера 1, 2, 3. Найти номер победителя, если результаты забега известны.

3) Определить длительность звучания музыкальной композиции, если известно время начала и окончания звучания. На экран компьютера требуется вывести только значения времени (часов, минут, секунд), отличные от нуля (например, если время начала – 16 ч 57 м 30 с, а время окончания – 17 ч 14 м 30 с, то длительность звучания составит 17 м ).

4) Определить по номеру года, является ли он високосным (год високосный, если его номер делится на 4, кроме тех, которые делятся на 100 и не делятся на 400). Например, 1900 год – не високосный, 2000 год – високосный.

5) Для старшеклассника определены нормальные значения границ кровяного давления: верхняя – не более 100, нижняя – не менее 60 и разница верхней и нижней границ – не менее 30. Определить, является ли давление старшеклассника нормальным, если заданы значения нижней и верхней границ кровяного давления.

* 6) Используя метод Ленуара, определить название дня недели для некоторой даты, которая задается номерами года (g), месяца (m), дня (d):

вначале следует вычислить значение С = [365,25g] + [30,56m] + d +N, где N=1, если месяц – январь или февраль високосного года, N=2, если месяц – январь или февраль невисокосного года, N=0 для остальных месяцев;

затем нужно найти остаток от деления С на 7; если он равен 0, то в качестве ответа выведите «среда», 1 – «четверг», …, 6 – «вторник».

* 7) В финале конкурса «Лучший по профессии» приняли участие два конкурсанта: Петров и Сидоров. Финал предусматривает проведение трех конкурсов, по каждому из которых выставляется число баллов каждому участнику. Победитель должен быть определен по сумме баллов. С клавиатуры вводятся количество баллов, которое набрал каждый участник в каждом конкурсе. Требуется вывести наибольшую сумму баллов и фамилию победителя.

8) Найти решение уравнения ax=b.

9) Решить квадратное уравнение ax2 +bx + c =0 (а ≠ 0).

* 10) Решить уравнение ax2 +bx + c =0.

11) Заданы три действительных числа. Выяснить, могут ли они оказаться длинами сторон некоторого треугольника.

* 12) Получить решение системы уравнений:

* 13) На экскурсию в крепость-герой Брест отправляется N человек. Для их перевозки выделены автобусы вместимостью K и M человек. Определить, сколько необходимо автобусов для перевозки всех экскурсантов (не забудьте, что одно место в каждом автобусе занято гидом). Попытайтесь определить вариант с минимальным количеством автобусов.

* 14) При исследовании поверхности планеты Зета обнаружена популяция, развитие которой с момента ее возникновения подчиняется закону, описываемому следующим образом:

где k = 1, 2, 3, … (аi – численность популяции в i-м году). По заданному номеру n года найти численное значение популяции.