- Преподавателю
- Информатика
- Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач
Разветвляющие алгоритмы. Запись условий. Условный оператор. Разбор решения задач
Раздел | Информатика |
Класс | 9 класс |
Тип | Тесты |
Автор | ОчоаБикэ О.В. |
Дата | 20.08.2015 |
Формат | docx |
Изображения | Есть |
Занятие 3-5. Разветвляющие алгоритмы
Разветвляющий алгоритм содержит одно или несколько логических выражений и имеет несколько ветвей вычисления.
Порядок операций в порядке их приоритета
-
not (не)
-
*,/, div,mod, and (и)
-
+, - , or (или), xor (исключающее или)
-
= (равно), < (меньше), > (больше),>= (больше или равно),<= (меньше или равно),<> (не равно)
Логические связки
(Условие 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>'Александр'
Пример составных логических выражений:
-
проверка истинности 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 не положетельное
-
(X<=0)
-
Not(x>0)
X не отрицательное
-
(X>=0)
-
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