Алгоритмы ветвления в Pascal(автор Салахетдинова Е.В.)

Download Report

Transcript Алгоритмы ветвления в Pascal(автор Салахетдинова Е.В.)

Алгоритмы – ветвления
в Паскаль
Ветвление
в
языке
программирования
Паскаль
организуется с помощью условного оператора. Оператор
условия позволяет организовать дальнейшее выполнение
алгоритма по одному из двух направлений. Эта
возможность позволяет реализовать очень сложные
алгоритмы.
В общем виде ветвление (условный оператор) в Паскале
записывается следующим образом:
If
условие then оператор_1
else оператор_2;
Обратите внимание, что символ «;» перед словом else не
ставится
Условный оператор выполняется следующим образом:
eсли условие истинно, то выполняется оператор_1,
стоящий за словом then,
если ложно, то –
оператор_2, следующий за словом else.
В качестве условия выступает логическое выражение,
которое строится с помощью операций сравнения:
< - меньше
> - больше
<= - меньше или равно
>= - больше или равно
= - равно
<> - не равно
Пример задачи реализующей условный оператор.
Даны два натуральных числа, необходимо написать
программу, в которой выводится на экран большее из них.
Program Raznoct;
Var a,b:Integer;
Begin
writeln(‘введи числа’);
readln(a,b);
if a>b then writeln(‘большее равно‘,а);
выводим на экран а
else writeln(‘большее равно‘,b);
выводим b
End.
// если a>b то
// иначе
И по ветке then и по ветке else должен выполнятся единственный оператор.
Если по условию задачи необходимо выполнить несколько операторов, тогда
следует использовать составной оператор. Это несколько команд
ограниченных словами begin … end; Тогда ветвление в общем виде будет
выглядеть так:
If условие then begin
оператор_1;
оператор_2;
…
оператор_n;
end
else begin
оператор_1;
оператор_2;
…
оператор_n;
end;
Ветвь else в ветвлении может отсутствует, если в ней нет
необходимости. Тогда ветвление называется неполным,
и выполняется следующим образом: если условие
ложно, то ничего не происходит и выполняется оператор
следующий за ветвлением.
If
условие then оператор_1;
Пример 2.
Задача: Дано натуральное число, определить делится, ли
оно на три, без остатка.
Для того, чтобы определить делиться ли одно число а на
число
b,
необходимо
использовать
операцию
целочисленного деления mod, которая возвращает остаток
от деления.
Если результат этой операции будет равен нулю, то a
делиться b, если же остаток не будет равен нулю, то не
делится.
В программе будем использовать следующие переменные
а – число, которое дано (вводится с клавиатуры)
ost – остаток от деления числа a на 3.
Program Primer_2;
Var a,ost:Integer;
Begin
writeln(‘введи число’);
readln(a);
ost:= a mod 3;
if ost= 0 then writeln(‘число делится на 3’)
else writeln(‘число не делится на 3’);
End.
Можно также написать операцию деления прямо в
условии ветвления:
if a mod 3 = 0 then writeln(‘число делится на 3’)
else writeln(‘число не делится на 3’)
Тогда использовать переменную ost не надо
Пример 3.
Задача: Вводится сумма денег, которую вы имеете (в рублях
и копейках) и цена книги (в рублях и копейках). Сможете ли
вы купить эту книгу.
Для того, чтобы решить эту задачу, необходимо перевести и
сумму денег, которую вы имеете и цену книги в копейки, а
затем сравнить полученные числа и вывести на экран
сообщение о том, сможете ли вы купить книгу или не
сможете.
В программе будем использовать следующие переменные:
sr, sk – сумма денег в рублях и копейках соответственно.
cr, ck – цена книги в рублях и копейках.
s, c - полученная сумма денег и цена книги в копейках
(после перевода)
Program Primer_3;
Var sr,sk,cr,ck,s,c:Integer;
Begin
writeln(‘сумму денег рубли, копейки’);
readln(sr,sk);
writeln(‘цену книги рубли, копейки’);
readln(сr,сk);
{переводим сумму денег и цену книги в копейки}
s:=sr*100+sk;
c:=cr*100+ck;
{сравниваем сумму денег и цену книги}
if s>=c then writeln(‘сможем купить книгу’)
else writeln(‘не сможем купить книгу’);
End.
Пример 4.
Задача: Дано натуральное двузначное число, определить и
вывести на экран большую цифру этого числа.
Для того, чтобы решить эту задачу, необходимо выделить из
исходного числа цифру десятков и цифру единиц, а затем их
сравнить.
Цифры в числе отделяются операциями div и mod. Операция
div возвращает целую часть от деления.
Например, нам дано число 3451.
Нам надо выделить из числа цифру тысяч цифру сотен,
цифру десятков и цифру единиц.
Отделяем цифры:
тысяч - 3451 div 1000 = 3
сотен - 1) 3451 div 100 = 34 или 1) 3451 mod 1000 = 451
2) 34 mod 10 = 4
2) 451 div 100 = 4
Два действия можно записать в одну строку:
3451 div 100 mod 10 = 4 или 3451 mod 1000 div 100 = 4
десятков - 3451 div 10 mod 10 = 5 или
3451 mod 100 div 10 = 5
единиц - 3451 mod 10 = 3
В программе будем использовать следующие переменные: a –
число (вводится с клавиатуры), d – цифра десятков, e – цифра
единиц.
Program Primer_4;
Var a,d,e:Integer;
Begin
writeln(‘введи число’);
readln(а);
d:=a div 10; {выделяем цифру десятков}
e:=a mod 10; {выделяем цифру единиц}
if d>e then writeln(d)
else writeln(e);
End.
Задачи для самостоятельного решения.
1. Определить, является ли натуральное число a
однозначным.
проверить на следующих данных
а = 12,
ответ: число не однозначное
а=3
ответ: число однозначное
2. Даны два натуральных числа. Вывести на экран то из
них, у которого последняя цифра меньше.
проверить на следующих данных
12, 25
ответ: 12
37, 24
ответ: 24
Сложные условия в
ветвлении.
В ветвлении можно проверять несколько условий
одновременно. Для этого условия связываются между собой
логическими операциями. Получается сложное логическое
выражение, используемое в качестве условия в ветвлении.
Если необходимо проверить одновременное выполнение
нескольких условий, для их связи используют логическую
операцию AND (И)
Например, условие 0<x<5, в ветвлении будет выглядеть так:
if (х>0) and (х<5) then …
Если же нужно чтобы выполнялось хотя бы одно из
нескольких условий, то для их связи используют операцию
OR (ИЛИ)
Например, условия y<0 или y>9 будет выглядеть следующим
образом:
if (y<0) or (y>9) then …
Логическая операция NOT (НЕ) меняет значение условия на
противоположное.
Например, необходимо взять все значения х, кроме 1:
if not (x=1) then …
При
связывании
нескольких
условий
логическими
операциями, необходимо заключать простые условия в
скобки.
Пример 5.
Задача: Прием на работу идет на конкурсной основе.
Кандидат будет принят, если стаж его работы не менее 10
лет, а возраст не более 42 лет. Определить будет ли
кандидат принят на работу.
Для определения будут ли принят кандидат на работу или
нет необходимо проверять сразу два условия: первое стаж должен быть 10 и более лет, второе – возраст должен
быть меньше или равен 42 года. Так как для решения
задачи необходимо одновременное выполнение двух
условий, то для их связи будем использовать логическую
операцию AND.
В программе будем использовать
стаж, v – возраст кандидата.
следующие переменные: st –
Program Primer_5;
Var st,v:Integer;
Begin
writeln(‘введи стаж’);
readln(st);
writeln(‘введи возраст’);
readln(v);
If (st>=10) and (v<=42) then writeln(‘принят’)
else writeln(‘не принят’);
End.
Пример 6.
Задача: Задана точка своими координатами
Проверить лежит ли она в первой четверти.
(х,y).
Для определения принадлежности точки первой четверти
необходимо проверять сразу два условия: первое координата х точки должна быть больше 0, второе –
координата y тоже должна быть больше 0. Так как для
решения задачи необходимо одновременное выполнение
двух условий, то для их связи будем использовать
логическую операцию AND.
В программе будем использовать следующие переменные: x, y –
соответствующие координаты точки.
Program Primer_6;
Var x,y:Integer;
Begin
writeln(‘координаты точки’);
readln(x,y);
If (x>=0) and (y>0) then writeln(‘принадлежит’)
else writeln(‘не принадлежит’);
End.
Пример 7.
Задача: Задана точка своими координатами (х,y).
Проверить лежит ли она на одной из координатных осей.
Теперь нам необходимо проверить равна ли одна из
координат точки 0. В нашей программе будут два условия
x=0, y=0.Так как нам надо проверить выполнение одного из
двух условий, то мы их свяжем операцией OR
Program Primer_7;
Var x,y:Integer;
Begin
writeln(‘координаты точки’);
readln(x,y);
If (x=0) or (y=0) then writeln(‘точка лежит на оси’)
else writeln(‘точка не лежит на оси’);
End.
Последовательное и вложенное
ветвления.
Ветвлений в программе может использоваться несколько.
Если ветвления расположены друг за другом то они
называются последовательными.
If условие then оператор_1
else оператор_2;
If условие then оператор_3
else оператор_4;
If условие then оператор_5
else оператор_6;
Если одно ветвление входит в другое, то такое ветвление
называется вложенным.
If условие then
if условие then оператор_1
else оператор_2;
else оператор_3;
Пример 8.
Задача: Даны три числа, необходимо определить большее из
них.
Решим эту задачу двумя способами:
1. С помощью последовательного ветвления и сложных
условий
2. С помощью вложенного ветвления.
В программах используются следующие переменные:
а, b, c – заданные числа, max – переменная в которую мы
будем сохранять большее из чисел.
1 способ.
Program Primer_8.1;
Var a,b,c,max:Integer;
Begin
writeln(‘введи числа’);
readln(а,b,c);
if (a>=b) and (a>=c) then max:=a;
if (b>=a) and (b>=c) then max:=b;
if (c>=a) and (c>=b) then max:=c;
writeln(‘большее число равно ’, max);
End.
В программе были использованы неполные ветвления в
которых отсутствует ветка else
2 способ.
Program Primer_8.2;
Var a,b,c,max:Integer;
Begin
writeln(‘введи числа’);
readln(а,b,c);
if a>=b then
if a>=c then max:=a
else max:=c
else
if b>=c then max:=b
else max:=c;
writeln(‘большее число равно ’, max);
End.
Задачи для самостоятельного решения.
3. В школу танцев принимаются юноши и девушки, рост
которых не ниже 168 см и не выше 178 см, а вес не более
чем рост минус 115. Будет ли принят поступающий?
проверить на следующих данных
рост - 170, вес - 60
ответ: не принят
рост - 168, вес - 53
ответ: принят
рост - 180, вес - 64
ответ: не принят
4. Даны числа. Определить делится ли одно число на
другое.
проверить на следующих данных
12 и 24 ответ: 1ое на 2ое не делится, 2ое на 1ое делится
9и6
ответ: 1ое на 2ое не делится, 2ое на 1ое не делится
100 и 100 ответ: 1ое на 2ое делится, 2ое на 1ое делится
5. В какой координатной четверти лежит точка с координатами
(x, y)?
проверить на следующих данных
(-1, 1) ответ: IV четверть
(5, 6) ответ: I четверть
(3, -2) ответ: II четверть
(-4, -2) ответ: III четверть
(0,3) ответ: ось У
(4,0) ответ: ось Х
(0,0) ответ: начало координат
6. Дано натуральное трехзначное число. Определить и
вывести на экран меньшую цифру этого числа.
проверить на следующих данных
234 ответ: 2
543 ответ: 3
637 ответ: 3
112 ответ: 1