8 класс Информатика ГДЗ учебник Босова Параграф 4.4. Программирование разветвляющихся алгоритмов. Глава 4. Начала программирования на языке Паскаль
Стр.177-181.
Задание 1
Коротко: В Паскале ветвление записывается оператором if.
Неполное ветвление
|
1 2 3 |
if условие then оператор; |
Полное ветвление
|
1 2 3 4 5 |
if условие then оператор1 else оператор2; |
Примечание: если в ветви несколько операторов, используют begin ... end.
|
1 2 3 4 5 6 7 8 9 10 11 |
if условие then begin оператор1; оператор2; end else begin оператор3; оператор4; end; |
Задание 2
Коротко: условный оператор в Pascal — это if ... then (и при необходимости else). Во всех пунктах ниже используется условный оператор, но записи содержат ошибки.
- а) Да, это условный оператор, но нужна точка с запятой перед
else.Правильно:
1if x < y then x := 0 else readln(y);
Чаще пишут так:
1234if x < y thenx := 0elsereadln(y); - б) Да, это условный оператор, но если в ветви больше одного оператора, нужны
begin ... end.Правильно:
1234567if x >= y thenbeginx := 0;y := 0;endelsewriteln(z); - в) Идея — условный оператор, но в Pascal нельзя писать цепочку сравнений
x < y < z.Правильно:
12if (x < y) and (y < z) thena := a + 1;
Задание 3
Коротко: нужно объединить одинаковые условия и записать группы операторов в begin ... end.
Решение (с операторными скобками):
|
1 2 3 4 5 6 7 8 9 10 11 |
if a > b then begin c := 1; d := 2; end; if a <= b then begin c := 3; d := 4; end; |
Ещё короче (через полное ветвление):
|
1 2 3 4 5 6 7 8 9 10 |
if a > b then begin c := 1; d := 2; end else begin c := 3; d := 4; end; |
Задание 4
Коротко: по координатам двух точек определить, какая ближе к началу координат (0;0), или что они равноудалены.
Идея: сравниваем квадраты расстояний: d1 = x1*x1 + y1*y1, d2 = x2*x2 + y2*y2.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
program PointCloser; var x1, y1, x2, y2: integer; d1, d2: longint; begin write('Координаты 1-й точки>>'); readln(x1, y1); write('Координаты 2-й точки>>'); readln(x2, y2); d1 := x1*x1 + y1*y1; d2 := x2*x2 + y2*y2; if d1 < d2 then writeln('1-я точка ближе') else if d2 < d1 then writeln('2-я точка ближе') else writeln('Точки равноудалены'); end. |
Проверка по тестам из задания:
1 2и3 4→ 1-я точка ближе1 2и2 1→ Точки равноудалены2 4и2 2→ 2-я точка ближе
Задание 5
Коротко: если x > y, выполнить обмен значений x и y. Если x ≤ y, ничего не менять.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
program SwapIfGreater; 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); writeln('y=', y); end. |
Проверка:
- Ввод:
x=5,y=6→ вывод: x=5, y=6 - Ввод:
x=6,y=5→ вывод: x=5, y=6
Задание 6 (к §3.5, №11). Определение дня недели (январь 2022)
Коротко: Ввести число chislo (1..31) — номер дня января 2022. Вывести день недели, зная, что 31.01.2022 — понедельник.
Идея: берём chislo mod 7 и по остатку определяем день недели.
Соответствие остатков:
3→ Понедельник4→ Вторник5→ Среда6→ Четверг0→ Пятница1→ Суббота2→ Воскресенье
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
program DayOfWeekIf; var chislo: integer; y: string; begin readln(chislo); chislo := chislo mod 7; if chislo = 3 then y := 'Понедельник' else if chislo = 4 then y := 'Вторник' else if chislo = 5 then y := 'Среда' else if chislo = 6 then y := 'Четверг' else if chislo = 0 then y := 'Пятница' else if chislo = 1 then y := 'Суббота' else if chislo = 2 then y := 'Воскресенье'; writeln(y); end. |
Задание 7. Проверка роста для аттракциона
Коротко: Ввести рост (в см). Если 140 ≤ рост ≤ 195 — вывести, что можно кататься, иначе — нельзя.
Решение (Pascal):
|
1 2 3 4 5 6 7 8 9 10 11 |
program RollerCoaster; var h: integer; begin readln(h); { рост в сантиметрах } if (h >= 140) and (h <= 195) then writeln('Можно') else writeln('Нельзя'); end. |
Пример: ввод 150 → Можно, ввод 130 → Нельзя.
Задание 8
Кратко: Ввести число 1/2/3 и вывести фигуру:
1 — треугольник, 2 — квадрат, 3 — окружность. (Без case)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
program DrawFigureIf; var n: integer; begin readln(n); if n = 1 then begin writeln(' * '); writeln(' *** '); writeln('*****'); end else if n = 2 then begin writeln('*****'); writeln('* *'); writeln('* *'); writeln('* *'); writeln('*****'); end else if n = 3 then begin writeln(' *** '); writeln('* *'); writeln('* *'); writeln(' *** '); end else writeln('Ошибка: нужно ввести 1, 2 или 3.'); end. |
Задание 9
Кратко: Дано трёхзначное число n. Определить:
а) является ли оно «перевёртышем» (палиндромом);
б) есть ли среди его цифр одинаковые.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
program Task9; var n, a, b, c: integer; begin readln(n); { цифры числа n = abc } a := n div 100; b := (n div 10) mod 10; c := n mod 10; { а) "перевёртыш": первая цифра равна последней } if a = c then writeln('Перевёртыш') else writeln('Нет'); { б) есть ли одинаковые цифры } if (a = b) or (a = c) or (b = c) then writeln('Да') else writeln('Нет'); end. |
Проверка (как в таблице):
122 → Нет, Да
121 → Перевёртыш, Да
222 → Перевёртыш, Да
123 → Нет, Нет
Задание 10
Кратко: Даны три натуральных числа a, b, c.
Определить, существует ли треугольник с такими сторонами.
Если существует — указать его тип.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
program Task10; var a, b, c: integer; begin readln(a, b, c); { проверка существования треугольника } if (a + b <= c) or (a + c <= b) or (b + c <= a) then writeln('Не существует') else { определение типа } if (a = b) and (b = c) then writeln('Равносторонний') else if (a = b) or (a = c) or (b = c) then writeln('Равнобедренный') else writeln('Разносторонний'); end. |
Проверка:
1 2 1 → Не существует
2 2 2 → Равносторонний
20 20 30 → Равнобедренный
3 4 5 → Разносторонний
Задание 11
Кратко: Даны возраста (полных лет) трёх призёров. Вывести возраст самого младшего.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
program Task11; var a, b, c, mn: integer; begin readln(a, b, c); mn := a; if b < mn then mn := b; if c < mn then mn := c; writeln(mn); end. |
Пример: 18 21 19 → 18
Задание 12
Кратко: Программа выводит «Да», если выполняется условие (s >= 10) OR (t > 10), иначе выводит «Нет».
| № | s | t | s >= 10 | t > 10 | (s >= 10) or (t > 10) | Вывод |
|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 0 | 0 | 0 | Нет |
| 2 | 11 | 2 | 1 | 0 | 1 | Да |
| 3 | 1 | 12 | 0 | 1 | 1 | Да |
| 4 | 11 | 12 | 1 | 1 | 1 | Да |
| 5 | -11 | -2 | 0 | 0 | 0 | Нет |
| 6 | -11 | 12 | 0 | 1 | 1 | Да |
| 7 | -12 | 11 | 0 | 1 | 1 | Да |
| 8 | 10 | 10 | 1 | 0 | 1 | Да |
| 9 | 10 | 5 | 1 | 0 | 1 | Да |
Ответ: программа вывела «Да» в 7 запусках.
Задание 13
Коротко: Нужно найти, при каком a переменная c станет равна 3.
|
1 2 3 4 5 6 7 |
if a < 5 then c := 1 else if a > 5 then c := 2 else c := 3 |
Разбор:
- Если a < 5, то c = 1 (нам не подходит).
- Если a > 5, то c = 2 (нам не подходит).
- Чтобы получить c = 3, нужно попасть в ветку else второго условия, то есть a не больше 5 и при этом мы уже в первом else (значит a не меньше 5).
Значит: одновременно выполняется a >= 5 и a <= 5, поэтому a = 5.
Ответ: a = 5.
Задание 14
Кратко: Программа загадывает целое число a (меньше 100).
Пользователь должен дополнить его до 100. Ответ проверяется.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
program To100; var a, x: integer; begin randomize; a := random(100); { 0 ≤ a < 100 } writeln('Дано число: ', a); write('Введите число, которое нужно прибавить до 100: '); readln(x); if a + x = 100 then writeln('Верно!') else writeln('Неверно. Правильный ответ: ', 100 - a); end. |
Пояснение:
- Число a генерируется случайно и меньше 100.
- Пользователь вводит число x.
- Если a + x = 100, ответ считается правильным.
Задание 15
Кратко: Сравнить строки попарно в тройках и увидеть, как работает сравнение строк
(учитывается регистр, порядок символов, пробелы/подчёркивания, цифры и т.д.).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
program CompareTriples; var a, b, c: string; procedure Compare3(s1, s2, s3: string); begin writeln('---'); writeln('1) "', s1, '"'); writeln('2) "', s2, '"'); writeln('3) "', s3, '"'); { 1 и 2 } if s1 = s2 then writeln('1 = 2') else if s1 < s2 then writeln('1 < 2') else writeln('1 > 2'); { 2 и 3 } if s2 = s3 then writeln('2 = 3') else if s2 < s3 then writeln('2 < 3') else writeln('2 > 3'); { 1 и 3 } if s1 = s3 then writeln('1 = 3') else if s1 < s3 then writeln('1 < 3') else writeln('1 > 3'); end; begin { тройка 1 } Compare3('KAWA1', 'Kawai', 'kawai'); { тройка 2 } Compare3('инФорматика', 'информатика', 'Информатика'); { тройка 3 } Compare3('50_кг', '50 kg', '200_кг'); { тройка 4 } Compare3('яблоко', 'яблоки', 'яблоня'); end. |
Что нужно увидеть в выводе (кратко):
- Строки сравниваются посимвольно слева направо.
- Регистр важен: ‘A’ и ‘a’ — разные символы, поэтому строки могут упорядочиваться неожиданно.
- Пробел, подчёркивание и цифры — это тоже символы и влияют на результат.
Задание 16
Кратко: Вводится трёхзначное натуральное число.
Программа находит суммы первой и второй цифр, затем второй и третьей,
и выводит эти суммы в порядке неубывания, формируя новое число.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
program Automat; var n, a, b, c: integer; s1, s2: integer; begin readln(n); { выделяем цифры } a := n div 100; b := (n div 10) mod 10; c := n mod 10; { суммы } s1 := a + b; s2 := b + c; { вывод в порядке неубывания } if s1 <= s2 then writeln(s1, s2) else writeln(s2, s1); end. |
Пример:
- Ввод:
125 - Суммы:
1+2=3,2+5=7 - Вывод:
37
Задание 17
Кратко: Даны координаты двух клеток шахматной доски (k, l) и (m, n).
Определить, одного ли они цвета.
Идея: Клетки одного цвета, если суммы координат одной чётности:
(k + l) mod 2 = (m + n) mod 2.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
program ChessColor; var k, l, m, n: integer; begin readln(k, l); readln(m, n); if ((k + l) mod 2) = ((m + n) mod 2) then writeln('Поля одного цвета') else writeln('Поля разного цвета'); end. |
Проверка (как в примерах):
- Ввод:
2 2и3 3→ Поля одного цвета - Ввод:
2 3и3 3→ Поля разного цвета - Ввод:
2 7и5 4→ Поля одного цвета