Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач

Раздел Информатика
Класс 9 класс
Тип Тесты
Автор
Дата
Формат docx
Изображения Есть
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Занятие 3-5. Разветвляющие алгоритмы

Разветвляющий алгоритм содержит одно или несколько логических выражений и имеет несколько ветвей вычисления.

Порядок операций в порядке их приоритета

  1. not (не)

  2. *,/, div,mod, and (и)

  3. +, - , or (или), xor (исключающее или)

  4. = (равно), < (меньше), > (больше),>= (больше или равно),<= (меньше или равно),<> (не равно)

Логические связки

(Условие 1)

(Условие 2)

(условие 1) AND

(условие 2)

(условие 1)

OR

(условие 2)

(условие 1)

XOR

(условие 2)

AND - И (ЛОГИЧЕСКОЕ УМНОЖЕНИЕ)

OR - ИЛИ (ЛОГИЧЕСКОЕ СЛОЖЕНИЕ)

XOR - ЛИБО , ЛИБО

(ИСКЛЮЧАЮЩЕЕ ИЛИ)

False

False

False

False

False

False

True

False

True

True

True

False

False

True

True

True

True

True

True

false

False - ложь

True - истина

Условие

Not(условие)

False

True

True

False


Запись логических выражений

Логические выражения бывают простые и составные.

Примеры простых логических выражений:

А<=10

B<>30

C=12

S>'Александр'

Пример составных логических выражений:

  1. проверка истинности 2 логических выражений а кратно 5 и b не кратно 3

(a mod 5=0) and (b mod 3 <>0)

Условие

Запись логического выражения в Паскаль

5<=x<=20

(x>=5) and (x<=20)

x>10 или x<=-3

(x>10) or (x<=-3)

X четное

(остаток от деления на 2 должен =0)

X mod 2=0

X нечетное

(остаток от деления на 2 не должен =0)

X mod 2<>0

X кратно 5

(остаток от деления на 5 должен =0)

X mоd 5=0

X не кратно 5

(остаток от деления на 2 не должен =0)

X mоd 5<>0

x положительное

x>0

X отрицательное

X<0

X не положетельное

  1. (X<=0)

  2. Not(x>0)

X не отрицательное

  1. (X>=0)

  2. Not(x<0)

Задание

Записать условие, которое является истинным, когда:

а) каждое из чисел А и В больше 100;

(A>100) and (B>100)

б) только одно из чисел А и В четное;

(a mod 2=0) and (b mod 2<>0) or (a mod 2<>0) and (b mod 2=0)

ИЛИ 2 ВАРИАНТ ЗАПИСИ

(a mod 2=0) xor (b mod 2=0)

в) хотя бы одно из чисел А и В положительно;

(a>0) or (b>0)

г) каждое из чисел А, В, С кратно трем;

(a mod 3=0) and (b mod 3=0) and (c mod 3=0)

д) только одно из чисел А, В и С меньше 50;

((a<50) and (not(b<50)) and (not(c<50))) or ((b<50) and (not(a<50)) and (not(c<50))) or ((c<50) and (not(a<50)) and (not(b<50)) )

ИЛИ 2 ВАРИАНТ ЗАПИСИ

(a<50) xor (b<50) xor (c<50)

е) хотя бы одно из чисел А, В, С отрицательно.

(A<0) or (B<0) or (C<0)


Логическая переменная

Логическая переменная - тип Boolean, принимает значение true или false.

True - истина

false - ложь.

Например:

Var a,b:integer;

B:Boolean;

Begin

A:=5;

C:=10;

B:=(a>10) or (c>=-3) ; { b - логическая переменная, примет значение true}

….

End.

В Паскале можно реализовать разветвляющие алгоритмы используя 2 оператора:

1)Условный оператор IF

А) Неполное ветвление - If then (если тогда)

Б) Полное ветвление - if then else (если тогда иначе)

2) Оператор выбора Case

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

a)Неполное ветвление

If Условие then begin

Блок команд 1 (через ;)

End;

Условие после if может быть простым или составным (см. выше).

Работа оператора:

Если условие истинно (да) выполняется блок команд 1 и осуществляется переход к командам после оператора if then, в противном случае если условие не выполняется блок команд 1 не выполняется.

Примечание:

После then блок команд 1 обязательно заключается в операторные скобки begin end если в этот блок включается >=2 команд, если между begin и еnd находится только одна инструкция, то слова begin и end можно не писать.

If - если, Then - то.

Б) Полное ветвление

If Условие then begin

Блок команд 1 (через ;)

End

Else begin

Блок команд 2 (через ;)

End;

Работа оператора:

Если условие истинно (да) выполняется блок команд 1 (Блок команд 2 - не выполняется) и осуществляется переход к оператору после оператора if then else, в противном случае если условие не выполняется (Ложно) осуществляется переход к выполнению блока команд 2 (Блок команд 1 не выполняется) , после выполнение которого осуществляется переход к оператору после оператора if then else.

Примечание:

Перед Else точка с запятой не ставится (грубая ошибка).

Если между begin и еnd находится только одна инструкция, то слова begin и end можно не писать.

If - если, Then - то, Else - иначе.

Решение задач разветвляющей структуры

Задача № 1. Даны два числа a,b. Если a больше b, то a увеличить в два раза, b уменьшить на 100.

Решение ввод исходных данных с клавиатуры и вывод на экран

Program vet1;

var a,b:real;

begin

write('введите значения 2-х переменных a и b');

readln(a,b);

If a>b then begin

a:=a*2;

b:=b-100;

end;

writeln('a=',a:0:2,'b=':3,b:0:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

Program vet1;

var a,b:real;t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,a,b);

If a>b then begin

a:=a*2;

b:=b-100;

end;

writeln(t2,'a=',a:0:2,'b=':3,b:0:2);

close(t1); close(t2);

end.

Задача №2. Даны a,b. Необходимо осуществить обмен значениями a и b, если a не равно b.

A,b,h - должны быть одного типа: или все real; или все integer; или все char; или все string; или все Boolean.

Решение ввод исходных данных с клавиатуры и вывод на экран

Program vet1;

var a,b:real;

h:real; {вспомог. Переменная для обмена}

begin

write('введите значения 2-х переменных a и b');

readln(a,b);

If a<>b then begin

h:=a;

a:=b;

b:=h;

еnd;

writeln('a=',a:0:2,'b=':3,b:0:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

Program vet1;

var a,b:real;t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,a,b);

If a<>b then begin

h:=a;

a:=b;

b:=h;

еnd;

writeln(t2,'a=',a:0:2,'b=':3,b:0:2);

close(t1); close(t2);

end.

Задача № 3.Даны три числа x,y,z. Найти максимальное число.

1 способ

Решение ввод исходных данных с клавиатуры и вывод на экран

Program vet2a;

var x,y,z,max:real;

begin

readln(x,y,z);

max:=x; {предположение}

if max

if max

writeln('максимальное число из трех чисел=',max:10:2);

readln

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

Program vet2a;

var x,y,z,max:real; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,x,y,z);

max:=x; {предположение}

if max

if max

writeln(t2,'максимальное число из трех чисел=',max:10:2);

close(t1); close(t2);

end.

2 способ решения (полное ветвление, в котором ветка else содержит еще одно полное ветвление

Решение ввод исходных данных с клавиатуры и вывод на экран

Program vet_2_b;

var x,y,z:real;

begin

readln(x,y,z);

if (x>y) and (x>z) then

writeln('максим.число -',x:10:2)

else

if y>z then

writeln('максимальное число-',y:10:2)

else


writeln('максимальное число-',z:10:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

Program vet_2_b;

var x,y,z:real; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,x,y,z);

if (x>y) and (x>z) then writeln(t2,'максим.число -',x:10:2)

else if y>z then writeln(t2,'максимальное число-',y:10:2)

else writeln(t2,'максимальное число-',z:10:2);

close(t1); close(t2);

end.

Задача № 4. Полное ветвление (множественный выбор). Заданы вес в килограммах и граммах. Сравнить веса.

Решение ввод исходных данных с клавиатуры и вывод на экран

Program vet3;

var k,gr:real; {вес в килограммах и граммах}

k2:real;{вес в гр. пересчитанный в кг}

begin

readln(k,gr);

k2:=gr/1000;

If k>k2 then writeln('вес в килограммах(',k:0:2,')>веса в граммах (',k2:0:2,')')

else

if k<k2 then

writeln('вес в килограммах(',k:0:2,')<веса в граммах (',k2:0:2,')')

else writeln('вес в килограммах(',k:0:2,')=весу в граммах (',k2:0:2,')');

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

Program vet3;

var k,gr:real; {вес в килограммах и граммах}

k2:real;{вес в гр. пересчитанный в кг}

t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,k,gr);

k2:=gr/1000;

If k>k2 then writeln(t2,'вес в килограммах(',k:0:2,')>веса в граммах (',k2:0:2,')')

else

if k<k2 then

writeln(t2,'вес в килограммах(',k:0:2,')<веса в граммах (',k2:0:2,')')

else writeln(t2,'вес в килограммах(',k:0:2,')=весу в граммах (',k2:0:2,')');

close(t1); close(t2);

end.

Задача № 5. Для заданного действительного числа X вычислить значение f(x)=y, если

Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач.

1 способ решения ( полное ветвление, ветка else содержит еще полное ветвление

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet_4_a;

var x,y:real;

begin

write('введите x');

readln(x);

if (x>1) then y:=sqrt(x)+10

else

if (x>=-1) and (x<=1) then y:=10

else y:=x-1;

writeln('y=',y:0:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet_4_a;

var x,y:real;t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t1,'output.txt'); rewrite(t2);

readln(t1,x);

if (x>1) then y:=sqrt(x)+10

else

if (x>=-1) and (x<=1) then y:=10

else y:=x-1;

writeln(t2,'y=',y:0:2);

close(t1); close(t2);

end.

2 способ решения (3 последовательных оператора if then)

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet_4_b;

var x,y:real; t1,t2:text;

begin

write('введите x');

readln(x);

if (x>1) then y:=sqrt(x)+10;

if (x>=-1) and (x<=1) then y:=10;

if (x<-1) then y:=x-1;

writeln('y=',y:0:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet_4_b;

var x,y:real; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(x);

if (x>1) then y:=sqrt(x)+10;

if (x>=-1) and (x<=1) then y:=10;

if (x<-1) then y:=x-1;

writeln('y=',y:0:2);

close(t1); close(t2);

end.

Задача № 6. Дан треугольник ABC с координатами A(Ax,Ay), B(Bx,By),C(Cx,Cy), где числа Ax, Ay, Bx, By, Cx, Cy - целые. Составьте алгоритм, определяющий, является ли треугольник равнобедренным.

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet_4;

var ax,ay,bx,by,cx,cy:real;

ab2, bc2,ac2:real;

begin

write('введите координаты точки A');

readln(ax,ay);

write('введите координаты точки В');

readln(bx,by);

write('введите координаты точки C');

readln(cx,cy);

ab2:=sqr(ax-bx)+sqr(ay-by); {сторона ab квадрате}

bc2:=sqr(bx-cx)+sqr(by-cy); {сторона вс в квадрате}

ac2:=sqr(ax-cx)+sqr(ay-cy); {сторона aс в квадрате}

if (ab2=bc2) or (bc2=ac2) or (ab2=ac2) then

writeln('равнобедренный')

else writeln('не равнобедренный');

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet_4;

var ax,ay,bx,by,cx,cy:real;

ab2, bc2,ac2:real; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,ax,ay);

readln(t1,bx,by);

readln(t1,cx,cy);

ab2:=sqr(ax-bx)+sqr(ay-by); {сторона ab квадрате}

bc2:=sqr(bx-cx)+sqr(by-cy); {сторона вс в квадрате}

ac2:=sqr(ax-cx)+sqr(ay-cy); {сторона aс в квадрате}

if (ab2=bc2) or (bc2=ac2) or (ab2=ac2) then writeln(t2,'равнобедренный')

else writeln(t2,'не равнобедренный');

close(t1); close(t2);

end.

Комментарии к программе:

Необходимо последовательно ввести координаты каждой точки. Вычислить квадраты расстояний между соседними точками (ab2, bc2, ac2). Сравнить между собой найденные квадраты расстояний, если совпадут между собой хотя бы два, то треугольник окажется равнобедренным, в противном случае - не равнобедренный.

Задача № 7. Для пошива одного пальто требуется 3 метра драпа, 4 метра подкладочной ткани, 2 метра ватина и 7 пуговиц. Цех по пошиву пальто получил N метров драпа, M метров подкладочной ткани, К метров ватина и L пуговиц. Какое количество пальто можно сшить из полученных материалов?

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet_6;

const dr=3; pt=4;

vat=2; pug=7;

var n,m,k,l,k1,k2,k3,k4,min:integer;

begin

write('введите кол-во в метрах драпа, подкл. Ткани, ватина, пуговиц');

readln(n,m,k,l);

k1:=n div dr;

k2:=m div pt;

k3:=k div vat;

k4:=l div pug;

min:=k1;

if k2

if k3

if k4

writeln('kol-vo pal',min:2);

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet_6;

const dr=3; pt=4;

vat=2; pug=7;

var n,m,k,l,k1,k2,k3,k4,min:integer; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t1,'output.txt'); rewrite(t2);

readln(t1,n,m,k,l);

k1:=n div dr;

k2:=m div pt;

k3:=k div vat;

k4:=l div pug;

min:=k1;

if k2

if k3

if k4

writeln(t2,'kol-vo pal',min:2);

Close(t1); close(t2);

end.

Комментарии к программе:

1) Указать в разделе констант, сколько метров драпа понадобится при пошиве одного пальто (dr), подкладочной ткани (pt), ватина (vt), пуговиц (pug).

2) Ввести исходные данные N,M, К,L.

3) Вычислить целую часть от деления n на dr (k1:=целая часть (n/dr), то есть находим на сколько пальто хватило бы драпа) .

4) Вычислить целую часть от деления m на pt (k2:=целая часть (m/pt), то есть находим на сколько пальто хватило бы подкладочной ткани).

5) Вычислить целую часть от деления k на vat (k3:=целая часть (k/vat), то есть находим на сколько пальто хватило бы ватина).

6) Вычислить целую часть от деления l на pug (k4:=целая часть (l/pug), то есть находим на сколько пальто хватило бы пуговиц).

7) Находим минимальное значение (min) из 4 чисел k1,k2,k3,k4 (можно использовать любой прием нахождение минимального значения).

8) Вывести «Количество пальто-» min (min - количество пальто, которое можно сшить из полученных материалов).

Задача № 8. Задача Пусть D - заштрихованная часть плоскости, как показано на рисунке. Определить, принадлежит ли заданная точка с координатами (x,y) области D.

Решение с использованием логической переменной

Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet_7;

var x,y:real;

h:boolean;

begin

write('введите координаты точки');

readln(x,y);

h:=(y>=x) and (x>0) or (y>=-x) and (x<=0) or (y>=1);

if h then writeln('принадлежит')

else writeln('не принадлежит');

readln;

end.

program vet_7;

var x,y:real;

h:boolean; t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,x,y);

h:=(y>=x) and (x>0) or (y>=-x) and (x<=0) or (y>=1);

if h then writeln(t1,'принадлежит')

else writeln(t2,'не принадлежит');

Close(t1); Close(t2);

end.

Комментарии к программе:

Используется логическая переменная h, которая получает значение true или false, в зависимости от принадлежности точки заштрихованной области.

Задача 9.

Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач.

1 способ решения ( полное ветвление, ветка else содержит еще полное ветвление

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet;

var a,b,c:real;

d,x1,x2,x:real;

begin

write('введите коэффициенты a,b,c');

readln(a,b,c);

d:=sqr(b)-4*a*c;

writeln('дискриминант=',d:0:2);

if (d<0) then writeln('корней нет')

else

if d=0 then begin

x:=-b/(2*a)

writeln('x=',x:0:2);

end

else begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln('x1=',x1:0:2,'x2=':4,x2:0:2);

end;

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet;

var a,b,c:real;

d,x1,x2,x:real;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,a,b,c);

d:=sqr(b)-4*a*c;

writeln(t2,'дискриминант=',d:0:2);

if (d<0) then writeln('корней нет')

else

if d=0 then begin

x:=-b/(2*a)

writeln(t2,'x=',x:0:2);

end

else begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln(t2,'x1=',x1:0:2,'x2=':4,x2:0:2);

end;

Close(t1), Close(t2);

end.


2 способ решения (3 последовательных оператора if then)

Решение ввод исходных данных с клавиатуры и вывод на экран

program vet;

var a,b,c:real;

d,x1,x2,x:real;

begin

write('введите коэффициенты a,b,c');

readln(a,b,c);

d:=sqr(b)-4*a*c;

writeln('дискриминант=',d:0:2);

if (d<0) then writeln('корней нет')

else

if d=0 then begin

x:=-b/(2*a)

writeln('x=',x:0:2);

end

else begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln('x1=',x1:0:2,'x2=':4,x2:0:2);

end;

readln;

end.

Решение с использованием файлов чтения (input.txt) и вывода (output.txt)

program vet;

var a,b,c:real;

d,x1,x2,x:real;

t1,t2:text;

begin

assign(t1,'input.txt'); reset(t1);

assign(t2,'output.txt'); rewrite(t2);

readln(t1,a,b,c);

d:=sqr(b)-4*a*c;

writeln(t2,'дискриминант=',d:0:2);

if d<0 then writeln('корней нет');

if d=0 then begin

x:=-b/(2*a)

writeln(t2,'x=',x:0:2);

end;

if d>0 then begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln(t2,'x1=',x1:0:2,'x2=':4,x2:0:2);

end;

Close(t1), Close(t2);

end.


16


© 2010-2022