Для разветвления в программе более чем в 2-х направлениях, можно использовать оператор выбора:
Case <Выражение - ключ выбора> OF <Список выбора> End
Или
Case <Выражение - ключ выбора> OF <Список выбора>
Else <Операторы> End
Ключ выбора - выражение любого порядкового типа;
<Список выбора> -одна или более конструкций вида:
<Константа выбора>: <Оператор>;
<Константа выбора> - выражение того же типа, что и ключ выбора;
Оператор выбора работает следующим образом: вычисляется значение выражения <ключ выбора>, а затем в последовательности операторов <список выбора>отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает работу. Если в списке выбора нет такой константы, то управление передается оператору, стоящему за ключеваым словом Else. Часть Else может отсутствовать и в этом случае оператор выбора завершает свою работу.
Задачи
1. Если точка М(х,у) принадлежит внутренней области треугольника с вершинами А(а,0), В(0,b), О(0,0), то напечатать его площадь, в противном случае его периметр (a>0,b>0).
program zadacha_3; uses crt; var a,b,y,x: integer; p,s: real; begin clrscr; write ('Введите a '); readln (a); write ('Введите b '); readln (b); writeln ('введите координату точки x'); readln (x); writeln ('введите y '); readln (y); if (x>=0) and (y>=0) and (y<(-(b/a)*x)+b) then begin writeln ('точка с координатами (',x,',',y,') принадлежит области треугольника'); s:=a*b; write ('s=',s:5:2); readln; end else begin writeln ('тоска с координатами (',x,',',y,') не принадлежит области треугольника'); p:=a+b+(sqrt(sqr(a)+sqr(b))); write ('p=',p:5:2); end; readln; end.
2. Найти сумму корней квадратного уравнения. Если эта сумма положительна и кратна трём, то увеличить коэффициенты a и b в 0.5 раза. Иначе проверить, кратна ли данная сумма произведению коэффициентов этого уравнения. Если уравнение не имеет корней, то вывести соответствующие сообщение.
3. Составить программу, заменяющую меньшее из трех данных чисел произведением этих чисел
program zadacha_8;
uses crt;
var
min,a,b,c:integer;
begin
clrscr;
writeln('введите число №1 ');
readln(a);
writeln('введите число №2 ');
readln(b);
writeln('введите число №3 ');
readln(c);
if (a < b) and (b < c) then
min:=a;
if (a > b) and (b < c ) then
min:=b;
if (a > b) and (b > c) then
min:=c;
writeln('min=',min);
readln;
min:=a*b*c; {присваиваю min произведение трех чисел}
writeln('min=',min);
readln;
end.
4. Составить программу, определяющую, проходит ли график функции y=x2+2x+2 через точку А(x,y).
program zadacha_10;
uses crt;
var
x,y,x1,y1:real;
begin
clrscr;
writeln ('введите x');
readln (x);
writeln ('введите y');
readln (y);
y1:=x*x+2*x+2;
writeln ('y1= ',y1:2:0);
readln;
If (y=y1) then
writeln (' график проходит через точку А')
else
writeln('график не проходит через точку А');
readln;
end.
5. Даны два числа. Если эти числа кратны некоторому заданному числу, то большее из этих чисел уменьшить в два раза. В противном случае каждое из этих чисел увеличить на сумму их квадратов.
program zadacha_11;
uses crt;
var
a:integer; {первое число}
b:integer; {второе число}
c:integer; {заданное число}
d,d1:real; {уменьшенные числа, если исходные числа кратны зад. числу}
f,f1:integer; {увеличенные числа, если исх. числа не кратны зад. числу}
begin
clrscr;
writeln('введите первое число ');
readln(a);
writeln('введите второе число ');
readln(b);
writeln('введите третье число ');
readln(c);
if (a mod c=0) and (b mod c=0) then {проверяется кратность чисел}
begin
if a > b then
begin
d:=a/2;
writeln('уменьшенное число, если первое число больше второго=',d:2:0);
readln;
end;
if a < b then
begin
d1:=b/2;
writeln('уменьшенное число, если второе число больше первого=',d1:2:0);
readln;
end;
end
else
begin
f:=a+sqr(a+b);
writeln('увеличенное первое число на квадрат чисел=',f:2);
readln;
f1:=b+sqr(a+b);
writeln('увеличенное второе число на квадрат числа=',f1:2);
readln;
end;
end.
6. Дано действительное число. Определить что больше sin(x) или cos(x). Если больше cos(x), то данное число увеличить на его квадрат, в противном случаи извлечь квадратный корень из заданного числа (если это возможно, если нет , то вывести на экран соответствующее сообщение). Если величины равны, то найти их произведение и разделить его на абсолютную величину данного числа.
program zadacha_14;
uses crt;
var
x: real;
k: real;
begin
clrscr;
write ('Введите число');
readln (x);
if cos(x)>sin(x) then
begin
k:=x+sqr(x);
end;
if cos(x)0 then
begin
k:=sqrt(x);
end
else
begin
writeln ('Из введённого числа невозможно извлечь квадратный корень');
end;
end;
if cos(x)=sin(x) then
begin
k:=(cos(x)*sin(x))/abs(x);
end;
if k<>0 then
begin
write ('Новое значение величины x=',k:5:2);
end;
readln;
end.
7. Точки на плоскости заданы своими координатами. Определить какая из них находится ближе к началу координат.
program zadacha_15;
uses crt;
var
x1,y1: real; {координаты первой точки}
x2,y2: real; {координаты второй точки}
x3,y3: real; {координаты третей точки}
d1,d2,d3: real; {расстояние от начала координат до каждой точки}
begin
clrscr;
writeln('Введите координаты x1 и y1 первой точки');
readln(x1,y1);
writeln('Введите координаты x2 и y2 первой точки');
readln(x2,y2);
writeln('Введите координаты x3 и y3 первой точки');
readln(x3,y3);
d1:=sqrt(sqr(x1)+sqr(y1));
d2:=sqrt(sqr(x2)+sqr(y2));
d3:=sqrt(sqr(x3)+sqr(y3));
writeln('d1=',d1);
writeln('d2=',d2);
writeln('d3=',d3);
if (d1 < d2) and (d1< d3) then
writeln('Точка с координатами: A(',x1:2:2,';',y1:2:2,') ближе к началу координат');
if (d2 < d1) and (d2 < d3) then
writeln('Точка с координатами: A(',x2:2:2,';',y2:2:2,') ближе к началу координат');
if (d3 < d1) and (d3 < d2) then
writeln('Точка с координатами: A(',x3:2:2,';',y3:2:2,') ближе к началу координат');
readln;
end.
8. Даны вещественные положительные числа a, b, c. Если существует треугольник с такими сторонами, то определить его вид (прямоугольный, остроугольный, тупоугольный).
program zadacha_17;
uses crt;
var
a,b,c:real; {стороны треугольника}
cos1,cos2,cos3:real; {косинусы углов}
begin
clrscr;
writeln('введите первую сторону ');
readln(a);
writeln('введите вторую сторону ');
readln(b);
writeln('введите третью сторону ');
readln(c);
begin
if (a<(b+c)) and (b<(a+c)) and (c<(b+a)) then
begin
writeln('такой треугольник существует ');
readln;
end
else
begin
writeln('такого треугольника не существует ');
readln;
end;
end;
begin
if (a<(b+c)) and (b<(a+c)) and (c<(b+a)) then begin
cos1:=((sqr(a)+sqr(b)-sqr(c))/2*a*b);
writeln('cos1 = ',cos1:2);
readln;
end;
end;
begin
if (a<(b+c)) and (b<(a+c)) and (c<(b+a)) then begin
cos2:=((sqr(c)+sqr(b)-sqr(a))/2*c*b);
writeln('cos2 = ',cos2:2);
readln;
end;
end;
begin
if (a<(b+c)) and (b<(a+c)) and (c<(b+a)) then
begin
cos3:=((sqr(a)+sqr(c)-sqr(b))/2*a*c);
writeln('cos3 = ',cos3:2);
readln;
end;
end;
if ((cos1<0) or (cos2<0) or (cos3<0)) and ((a<(b+c)) and (b<(a+c)) and (c<(b+а)) then
writeln('треугольник тупоугольный ');
readln;
end;
if ((cos1=0) or (cos2=0) or (cos3=0)) and ((a<(b+c)) and (b<(a+c)) and (c<(b+а)) then
writeln('треугольник прямоугольный ');
readln;
end;
if ((cos1>0) and (cos2>0) and (cos3>0)) and ((a<(b+c)) and (b<(a+c)) and (c<(b+a)) then
writeln('треугольник остроугольный ');
readln;
end;
end.
9. Вывести номер координатной плоскости, которой принадлежит точка с заданными координатами (x,y) при условии, что х<>0,y<>0.
program zadacha_18;
uses crt;
Var
x,max,min:integer;
y:integer;
begin
clrscr;
write('Введите x - ');
readln(x);
write('Введите y - ');
readln(y);
begin
if (x<>0) and (y<>0) then
if (x>0) and (y>0) then
begin
writeln('Точка находится в I четверти');
end;
if (x<0) and (y>0) then
begin
writeln('Точка находится во II четверти');
end;
if (x<0) and (y<0) then
begin
writeln('Точка находится в III четверти');
end;
if (x>0) and (y<0) then
begin
writeln('Точка находится в IV четверти');
end;end;
readln;
end.
Контрольные вопросы:
1. Определите значение а после выполнения фрагмента программ, если в одном случае a=0, а в другом a=6:
1) if a<>0 then ; a:=2;
2) if a<4 then begin a:=a+2; a:=a+3 end;
3) if a<4 then a:=a+2; a:=a+3;
4) if a<4 then a:=a+2 else a:=a+3;
5) if a<4 then else begin a:=a+2; a:=a+3 end.
2. Может ли в записи программы на Паскале количество ключевых слов else быть больше количества ключевых слов then? А меньше?
3. Являются ли условными операторами следующие последовательности символов:
1) if x<y then x:=0 else y:=0;
2) if x>y then x:=0 else read(y);
3) if x>=y then x:=0;y:=0 else write(y);
4) if a<b then 100 else z:=25;
5) if a=b then begin; c:=3 end else c:=1;
6) if f or false then a:=2*f else a:=c-2;
7) if c<2 or a>2 then read(a) else read(c);
8) if a+b then write('a') else write('b');
9) if a and true then begin c:=1 else c:=2 end;
10) if (1<=x) and (x<=9) then c:=2; else c:=3;
11) if 2*a-3>0 then (a:=0) and (b:=0) and (c:=0);
12) if t<z else a:=4;
13) a:=if c>d then d else c;
4. Объясните, как будут выполняться фрагменты программ:
1) if a<b then a:=b else a:=b;
2) if false then write('a') else write('b');
3) if true then write('a') else write('b');
4) if 2*a<=3*b then a:=a+b-14 else a:=b-14+a;
5) if a<b then a:=b else a:=a;
6) if a>b then a:=a else a:=b;
7) if a mod 2<>3 then a:=a+1;
8) if (a mod 2=1) or (a mod 2 =0) then if a<0 then a:=-a;
9) if a<0 then b:=a else b:=-a.
Замените приведенные фрагменты, где возможно, более короткими операторами Паскаля.
5. Запишите одним условным оператором:
1) if k>5 then c:=1;
if k>5 then d:=2;
if k>5 then e:=3;
if k<=5 then write(c+d);
if k<=5 then write(d+e);
2) if a>b then c:=1;
if a>b then d:=2;
if a<=b then c:=3;
if a<=b then d:=4;
3) if x<y then x:=1 else y:=2;
if x<y then y:=0.5 else x:=1.5;
if x>=y then z:=0.25 else z:=2.25;
if x>=y then d:=5;
4) if a-b<0 then else c:=1;
if a-b<0 then else d:=2;
if a>=b then else c:=3;
if a>=b then else d:=4.
6. Определите, какими будут значения переменных p и d после выполнения операторов:
p:=true; d:=1;
case k mod 10 of
3,2,7,5: d:=k;
1: ;
4,8: begin p:=false; d:=2 end;
9,6: begin p:=false; d:=3 end;
end {of case}
если целая переменная k имеет значение: 1) 6; 2) 235; 3) 71; 4) 100.