Главная / Учебники / Информатика 8 класс / Параграф §4.4 / ГДЗ §4.4
| Глава: | Глава 4. Начала программирования на языке Паскаль |
|---|---|
| Параграф: | §4.4 - Программирование разветвляющихся алгоритмов |
| Учебник: | Информатика 8 класс - |
| Автор: | Босова Людмила Леонидовна |
| Год: | 2025 |
| Издание: | 7-е издание, стереотипное |
Ответ:
Запись ветвления в Паскале
if <условие> then <операторы_1> else <операторы_2>, где <операторы_1> выполняются при истинности условия, а <операторы_2> — при его ложности.if <условие> then <операторы_1>. Действия выполняются только при истинном условии. В обеих формах для объединения нескольких операторов используются begin и end.Ответ:
Анализ операторов
Оператором, следующим за условным оператором, может быть:
then x := 0 else read(y): Это полный условный оператор, который сам является допустимым оператором Паскаля. Верно.then x := 0; y := 0 else write(z): Это неверно, так как в ветви then использована точка с запятой (;), разделяющая два оператора (x := 0 и y := 0). Это допустимо только внутри begin-end. В данном виде это недопустимая последовательность символов.then a := a + 1: Это неверно, так как условие \( x < y < z \) не является корректным логическим выражением в Паскале. Его нужно записывать как составное условие: \( (x < y) \land (y < z) \).Анализ выполнения оператора
Задание сформулировано не полностью, так как не приведен сам условный оператор, но согласно контексту вопроса, если в результате выполнения условного оператора переменной \( a \) присваивается значение 8, то после выполнения этой операции переменная \( a \) будет иметь значение 8.
Программа 'Дополнение до 100'
Программа должна:
Алгоритм:
Program Task14;var a, user_answer, d: integer;beginRandomize;a := Random(100) + 1; { Генерируем число от 1 до 100 }d := 100 - a;Writeln('Число: ', a);Write('Введите, на сколько его нужно дополнить до 100: ');Readln(user_answer);if user_answer = d thenWriteln('Верно! ', a, ' + ', user_answer, ' = 100.')elseWriteln('Ошибка. Нужно дополнить на ', d, '.');end.
Программа 'Автомат'
Для трёхзначного числа \( N = c_1 c_2 c_3 \):
Алгоритм:
Program Task16;var N, c1, c2, c3, S1, S2: integer;beginWrite('Введите трехзначное число: ');Readln(N);c1 := N div 100;c2 := (N div 10) mod 10;c3 := N mod 10;S1 := c1 + c2;S2 := c2 + c3;if S1 > S2 thenWriteln(S2 * 10 + S1) { Выводим S2S1, если S2 < S1 }elseWriteln(S1 * 10 + S2); { Выводим S1S2, если S1 <= S2 }end.
Программа 'Цвет полей шахматной доски'
Цвет поля определяется четностью суммы его координат: \( x+y \). Если суммы координат двух полей имеют одинаковую четность, то поля одного цвета.
Алгоритм:
Program ChessBoardColor;var x1, y1, x2, y2: integer;beginWrite('Введите координаты 1-го поля (x1 y1): '); Readln(x1, y1);Write('Введите координаты 2-го поля (x2 y2): '); Readln(x2, y2);if (x1 + y1) mod 2 = (x2 + y2) mod 2 thenWriteln('Поля одного цвета')elseWriteln('Поля разного цвета');end.
Анализ программы с логической операцией or
Условие: \( (s \ge 10) \lor (t > 10) \). Вывод 'Да' происходит, если хотя бы одно из двух простых условий истинно.
| s | t | \( s \ge 10 \) | \( t > 10 \) | \( (s \ge 10) \lor (t > 10) \) | Вывод |
|---|---|---|---|---|---|
| 1 | 2 | 0 (Ложь) | 0 (Ложь) | 0 (Ложь) | Нет |
| 1 | 12 | 0 (Ложь) | 1 (Истина) | 1 (Истина) | Да |
| 11 | 2 | 1 (Истина) | 0 (Ложь) | 1 (Истина) | Да |
| 11 | 12 | 1 (Истина) | 1 (Истина) | 1 (Истина) | Да |
| -11 | 12 | 0 (Ложь) | 1 (Истина) | 1 (Истина) | Да |
| -12 | -11 | 0 (Ложь) | 0 (Ложь) | 0 (Ложь) | Нет |
| 10 | 5 | 1 (Истина) | 0 (Ложь) | 1 (Истина) | Да |
Для пары (10, 5) из учебника в таблице вывод 'Да'.
Анализ вложенного ветвления
Проанализируем фрагмент:
| Значение \( a \) | Условие \( a < 5 \) | Условие \( a > 5 \) | Значение \( c \) |
|---|---|---|---|
| \( a = 4 \) | Истинно | - | \( c = 1 \) |
| \( a = 6 \) | Ложно | Истинно | \( c = 2 \) |
| \( a = 5 \) | Ложно | Ложно | \( c = 3 \) |
Применение операторных скобок
Для объединения нескольких операторов присваивания под одним условием используется составной оператор begin ... end. Для данного задания требуется объединить операторы, которые должны выполняться вместе, хотя исходный фрагмент, видимо, подразумевает последовательное выполнение четырех независимых if операторов. Если предполагается, что эти операторы были частью какого-то внешнего условного оператора, то их группировка:
begin if a > b then c := 1; if a = b then d := 2; if a <= b then c := 3; if a < b then d := 4end;
Если же цель была вложить их: (Наиболее вероятно, что в задании ошибка и имелось в виду последовательное ветвление, которое уже было бы записано с begin/end, если бы нужно было выполнить несколько действий)
Программа 'Ближайшая точка'
Расстояние от точки \( (x, y) \) до начала координат \( (0, 0) \) равно \( \sqrt{x^2 + y^2} \). Сравнивать можно квадраты расстояний, чтобы избежать извлечения корня.
Алгоритм:
Program ClosestPoint;var x1, y1, x2, y2, d1_sq, d2_sq: integer;beginWrite('Введите координаты 1-й точки (x1 y1): '); Readln(x1, y1);Write('Введите координаты 2-й точки (x2 y2): '); Readln(x2, y2);d1_sq := x1*x1 + y1*y1;d2_sq := x2*x2 + y2*y2;if d1_sq < d2_sq thenWriteln('1-я точка ближе')else if d2_sq < d1_sq thenWriteln('2-я точка ближе')elseWriteln('Точки равноудалены');end.
Программа 'Обмен значений'
Для обмена значений двух переменных необходима третья (временная) переменная \( temp \).
Алгоритм:
Program SwapIfGreater;var x, y, temp: integer;beginWrite('Введите x и y: '); Readln(x, y);if x > y thenbegintemp := x;x := y;y := temp;end;Writeln('x=', x, ', y=', y);end.
Задача 'Определение дня недели'
(Предполагается, что в задаче № 11 § 3.5 требовалось определить день недели по его номеру \( N \in [1; 7] \), где 1 — понедельник).
Программа должна использовать последовательность условных операторов или оператор case для вывода названия дня недели.
Фрагмент алгоритма с вложенным if-else:
if N = 1 then Writeln('Понедельник')else if N = 2 then Writeln('Вторник')else if N = 3 then Writeln('Среда')...else if N = 7 then Writeln('Воскресенье')else Writeln('Некорректный номер');
Программа 'Допуск на аттракцион'
Условие допуска: \( (R \ge 140) \land (R \le 195) \), где \( R \) — рост посетителя в сантиметрах.
Алгоритм:
Program RollerCoasterAccess;var R: integer;beginWrite('Введите рост в см: '); Readln(R);if (R >= 140) and (R <= 195) thenWriteln('Допуск разрешен')elseWriteln('Допуск запрещен');end.
Программа 'Свойства трёхзначного числа'
Для трёхзначного числа \( n = c_1 c_2 c_3 \):
а) Определение «перевёртыша»: Число является «перевёртышем», если \( c_1 = c_3 \).
б) Одинаковые цифры: Среди цифр есть одинаковые, если \( (c_1 = c_2) \lor (c_2 = c_3) \lor (c_1 = c_3) \).
Алгоритм:
Program NumberProperties;var n, c1, c2, c3: integer;beginWrite('Введите трехзначное число: '); Readln(n);c1 := n div 100;c2 := (n div 10) mod 10;c3 := n mod 10;Writeln('--- а) Перевёртыш ---');if c1 = c3 thenWriteln('Перевёртыш')elseWriteln('Нет');Writeln('--- б) Одинаковые цифры ---');if (c1 = c2) or (c2 = c3) or (c1 = c3) thenWriteln('Да')elseWriteln('Нет');end.
Программа 'Тип треугольника'
1. Условие существования треугольника: Должно выполняться неравенство треугольника: \( (a + b > c) \land (a + c > b) \land (b + c > a) \).
2. Определение типа:
Алгоритм:
Program TriangleType;var a, b, c: integer;beginWrite('Введите длины сторон a, b, c: '); Readln(a, b, c);if (a + b <= c) or (a + c <= b) or (b + c <= a) thenWriteln('Не существует')elsebeginif (a = b) and (b = c) thenWriteln('Равносторонний')else if (a = b) or (b = c) or (a = c) thenWriteln('Равнобедренный')elseWriteln('Разносторонний');end;end.
Задали создать проект?
Создай с помощью ИИ за 5 минут
Список готовых проектов к текущему параграфу.
ВНИМАНИЕ: Представленные фрагменты из учебных материалов используются исключительно в научно-образовательных целях в объеме, оправданном поставленной целью.
Данное использование осуществляется в рамках, установленных законодательством об авторском праве (в частности, нормами о свободном использовании произведения для образовательных целей).
В соответствии с законодательством, автор и источник заимствования указаны для каждого используемого фрагмента.