Ответы по параграфу 3.4 Программирование разветвляющихся алгоритмов



Задание 2. Как на языке Паскаль записывается полное и неполное ветвление?

Полное ветвление (Выполняются действия как для ветка «да», так и для ветки «нет»):
if <условие> then <оператор_1> else <оператор_2>

Неполное ветвление (Выполнение действия только для ветки «да»):
if <условие> then <оператор>

Задание 3. Является ли условным оператором следующая последовательность символов?


Задание 4. Что такое составной оператор? Для чего он используется в условном операторе?

Составным оператором является конструкция вида:
begin <последовательность операторов> end
которая может стоять в условном операторе и после then и после else.
Такая конструкция используется тогда, когда нужно выполнить последовательность из нескольких операторов.

Задание 5. Используя составной оператор, упростите следующий фрагмент программы:
if a>b then c:=1;
if a>b then d:=2;
if a<=b then c:=3;
if a<=b then d:=4

if a>b then begin c:=1; d:=2 end else begin c:=3; d:=4 end

Задание 6. Дано натуральное трехзначное число. Напишите программу, которая определяет:

а) есть ли среди цифр данного числа одинаковые;
program z_6a;
var num, a, b, c: integer; //Исходные данные
BEGIN
 write ('Введите трёхзначное число: ');
 read (num);
 a:= num div 100; num:=num-100*a;
 b:= num div 10; num:=num-10*b;
 c:= num;
 if (a=b) or (a=c) or (b=c) then
 write ('Есть одинаковые цифры')
 else
 write ('Нет одинаковых цифр')
END.

б) является ли данное число «перевертышем», то есть числом, десятичная запись которого читается одинаково слева направо и справа налево.
program z_6b;
var num, a, b, c: integer; //Исходные данные
BEGIN
 write ('Введите трёхзначное число: ');
 read (num);
 a:= num div 100; num:=num-100*a;
 b:= num div 10; num:=num-10*b;
 c:= num;
 if a=c then
 write ('Перевертыш')
 else
 write ('НЕ перевертыш')
END.

Задание 7. Даны две точки в плоской прямоугольной системе координат. Напишите программу, определяющую, которая из точек находится ближе к началу координат.

Программа будет запрашивать координаты двух точек. Следующим её шагом будет определение расстояния от начала координат до точек. Треугольник прямоугольный, координаты точки равны двум ее катетам. По теореме Пифагора найдем гипотенузы двух треугольников и сравним их. Чем меньше гипотенуза, тем ближе точка находится к началу координат.
program z_7;
var xA, yA, xB, yB: integer; A, B: real;
BEGIN
 writeln ('Координаты 1-ой точки: ');
 write ('x=');
 read (xA);
 write ('y=');
 read (yA);
 writeln ('Координаты 2-ой точки: ');
 write ('x=');
 read (xB);
 write ('y=');
 read (yB);
 A:=sqrt(sqr(xA)+sqr(yA));
 B:=sqrt(sqr(xB)+sqr(yB));
 if A=B then
 write ('Точки равноудалены')
 else if A>B then
 write ('2-я точка ближе')
 else 
 write ('1-я точка ближе')
END.

Задание 8. Даны три натуральных числа. Напишите программу, определяющую, существует ли треугольник с такими длинами сторон. Если такой треугольник существует, то определите его тип (равносторонний, равнобедренный, разносторонний).

program z_8;
var a, b, c: integer;
BEGIN
 write ('a>>');
 readln(a);
 write ('b>>');
 readln(b);
 write ('c>>');
 readln(c);
 //Проверяем, существует ли такой треугольник
 if ((a+b)>c) and ((a+c)>b) and ((b+c)>a) then begin 
 if (a=b) and (a=c) and (b=c) then writeln ('Треугольник равносторонний')
 else if (a<>b) and (a<>c) and (b<>c) then writeln('Треугольник разносторонний')
 else writeln ('Треугольник равнобедренный');
 end
 else
 writeln ('Треугольник со сторонами ', a,', ', b,', ', c,' не существует');
END.

Задание 9. Имеются данные о количестве полных лет трех призеров спартакиады. Напишите программу, выбирающую и выводящую возраст самого младшего призера.


Задание 10. Напишите программу, определяющую, лежит ли точка A на прямой y=kx+l, над ней или под ней.

Сначала вводим данные для переменных: k, l, xA, yA (два последних это координаты точки A). Затем в уравнение y=kx+l подставим вместо «x» значение переменной xA и найдем значение «y» при заданной xA. Далее мы сравниваем значение «y» и «yB» и делаем вывод, где находится точка относительно прямой, на ней, над ней или под ней.
program z_10;
var y, k, l, xA, yA: integer;
BEGIN
 write ('k>>'); read(k);
 write ('l>>'); read (l);
 write ('xA>>'); read(xA); 
 write ('yA>>'); read(yA);
 y:= k*xA+l;
 if yA=y then writeln('Точка лежит НА прямой')
 else if yA>y then writeln('Точка лежит НАД прямой')
 else writeln('Точка лежит ПОД прямой')
END.

Задание 11. Напишите программу, которая производит обмен значений числовых переменных x и y, если x больше y.

program z_11;
var x, y, t: integer;
BEGIN
 write ('x>>'); readln(x);
 write ('y>>'); readln (y);
 if x>y then begin
 t:=x;
 x:=y;
 y:=t;
 end;
 writeln ('x=', x, '; y=', y)
END.

Задание 12. Дан условный оператор:
if a<5 then c:=1
else if a>5 then c:=2
else c:=3
Какое значение имеет переменная «a», если в результате выполнения условного оператора переменной «c» присваивается значение 3?

В нашем случае сработало третье условие. В первой условии значение переменной «a» меньше 5, а во втором больше 5. Значит переменная «а» равна 5. Ответ: a=5

Задание 13. Напишите программу, вычисляющую значение функции:


program z_16b;
var x, y: integer;
BEGIN
 write ('x>>'); readln(x);
 if x<0 then y:=-1
 else if x=0 then y:=0
 else y:=1;
 writeln ('y=', y)
END.

Задание 14. Составьте программу для решения задачи №21 к параграфу 2.4 (определение дня недели).

program z_14;
var chislo: integer; y: string;
BEGIN
 writeln('Введите число января 2011 года:');
 readln(chislo);
 writeln (chislo, ' января 2011 года: ');
 chislo:=chislo mod 7;
 if chislo=3 then y:=('Понедельник');
 if chislo=4 then y:=('Вторник');
 if chislo=5 then y:=('Среда');
 if chislo=6 then y:=('Четверг');
 if chislo=0 then y:=('Пятница');
 if chislo=1 then y:=('Суббота');
 if chislo=2 then y:=('Воскресенье');
 writeln (y)
END.

Задание 15. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. Напишите программу, которая по введенным координатам двух полей (k, l) и (m, n) определяет, имеют ли эти поля один цвет.


Сумма координат соседних (т.е. имеющих общую сторону) полей на шахматной доске отличается на 1. Следовательно, если сумма координат некоторого поля является четным числом, то сумма координат всех его соседних полей будет нечетным числом и наоборот. Вместе с тем соседние поля всегда имеют разный цвет.
program z_15;
var k, l, m, n: integer;
BEGIN
 writeln('Координаты 1-го поля:');
 readln (k, l);
 writeln('Координаты 2-го поля:');
 readln (m, n);
 if (k+l) mod 2 = (m+n) mod 2
 then writeln ('Поля одного цвета')
 else writeln ('Поля разного цвета')
END.

Задание 16. Напишите программу, в которой пользователю предлагается дополнить до 100 некоторое целое число а (а – случайное число, меньшее 100). Ответ пользователя проверяется и комментируется.

program z_16;
var a, b: integer;
BEGIN
 randomize;
 a:=random(100);
 writeln ('Дополните до 100 число ', a);
 readln (b);
 if a+b=100 then writeln ('Молодец!')
 else writeln ('Ошибка!')
END.
Решение заданий из учебника Информатика 8 класс Босова, параграф 3.4 Программирование разветвляющихся алгоритмов. Условный оператор, составной оператор, многообразие способов записи ветвлений, многообразие способов записи ветвлений.