Ввод, вывод и первая программа: Triangle из тетради

[Изображение: Экран с запросом «Введите стороны треугольника» и выведенным результатом]

Программа Triangle из тетради занимает страницу: константы, четыре переменные, Readln, три формулы. Это та самая площадь по Герону, которую мы рисовали блок-схемой в уроке 2.1. Схема была из четырёх фигур, программа из четырнадцати строк, но соответствие один в один. Пройдём её строку за строкой, а по дороге разберём, как программа разговаривает с человеком: ввод и вывод.

Чему научишься. После урока сможешь: считать значения с клавиатуры через Read и Readln; вывести текст и числа через Write и Writeln; задать ширину и число знаков после точки форматом a:5 и c:20:5; перевести линейную блок-схему в программу; прочитать программу Triangle и найти в ней ошибку в формуле.

Вспомни. Блок «данные» (параллелограмм) в схеме означает ввод и вывод (урок 2.1). Формула Герона: p = (a + b + c) / 2, S = √(p·(p−a)·(p−b)·(p−c)); трассировка на 3-4-5 давала 6. Типы Integer и Real и раздел Var разобраны в уроке 3.2.

Ввод: Read и Readln

Ввод это параллелограмм «ввод R» из блок-схемы. Программа останавливается и ждёт, пока человек наберёт число и нажмёт Enter, потом кладёт число в ящик. Пишется так: Read(a) или Readln(a, b, c): в скобках список ящиков через запятую. Разница между Read и Readln в хвосте ln (от слова line, строка): Readln после чтения переходит на новую строку ввода, Read остаётся на той же. В начале курса используй Readln: с ним меньше сюрпризов.

Вывод: Write и Writeln

Вывод это параллелограмм «вывод P». Write(...) печатает на экран то, что в скобках, и оставляет курсор в той же строке; Writeln(...) печатает и переводит строку. В скобках через запятую можно смешивать текст в апострофах и ящики: текст печатается как есть, вместо ящика печатается его содержимое.

Write('Введите стороны треугольника a, b, c: ');   { текст, курсор остаётся в строке }
Readln(a, b, c);                                     { человек вводит три числа }
Writeln('Площадь = ', S);                             { текст и содержимое ящика S }

Write перед Readln называется приглашением: без него программа молча ждёт ввода, и человек не понимает, что от него хотят. В тетради именно так: сначала Write с текстом, потом Readln.

Форматный вывод: a:5 и c:20:5

Вещественное число без формата печатается некрасиво: 6.0000000000E+00 или 12.559999999. Формат после двоеточия говорит, сколько места отвести под число и сколько знаков оставить после точки. Запись из тетради Writeln(a:5, b, c:20:5) читается так: a в поле шириной 5 символов (выравнивание по правому краю), b как есть, c в поле шириной 20 с пятью знаками после точки.

ФОРМАТ ВЫВОДА  ящик:ширина:знаков_после_точки

   a = 42,  c = 12.56

   Writeln(a);          →  42
   Writeln(a:5);        →  ···42          (поле 5, число прижато вправо)
   Writeln(c);          →  1.2560000000E+01   (некрасиво)
   Writeln(c:20:5);     →  ············12.56000  (поле 20, 5 знаков)
   Writeln(c:0:2);      →  12.56          (ширина 0 = по размеру, 2 знака)

   · — пробел. Для вещественных почти всегда хватает :0:2.

Пример 1 из тетради: сумма двух целых

Самая короткая полезная программа: ввести два целых числа и вывести их сумму. Здесь видна вся структура из урока 3.1 и все три этапа алгоритма: ввод, вычисление, вывод.

Program qq;
Var a, b, c: Integer;
Begin
  Read(a, b);
  c := a + b;
  Writeln(c);
end.
3 4
7

Запусти её: программа ждёт, ты вводишь 3 4 и Enter, на экране появляется 7. Это первый рабочий круг «написал → запустил → увидел». Сравни с блок-схемой: ввод a, b → c := a + b → вывод c. Три фигуры, три оператора.

Разбор: Program Triangle

Теперь программа из тетради целиком, с комментариями в фигурных скобках, как у преподавателя. По трём сторонам она считает полупериметр, площадь и две длины окружностей: описанной вокруг треугольника и вписанной в него.

Program Triangle;
Const
  Pi = 3.1415926;
Var
  a, b, c: Real;        { стороны }
  S, p: Real;           { площадь и полупериметр }
  Sout, Sint: Real;     { длины описанной и вписанной окружностей }
Begin
  { ввод данных }
  Write('Введите стороны треугольника a, b, c: ');
  Readln(a, b, c);
  { вычисления }
  p := (a + b + c) / 2;
  S := Sqrt(p * (p - a) * (p - b) * (p - c));
  Sout := 2 * Pi * (a * b * c / (4 * S));    { R = abc / (4S) }
  Sint := 2 * Pi * (S / p);                  { r = S / p }
  { вывод }
  Writeln('Площадь = ', S:0:2);
  Writeln('Описанная окружность = ', Sout:0:2);
  Writeln('Вписанная окружность = ', Sint:0:2);
end.
Введите стороны треугольника a, b, c: 3 4 5
Площадь = 6.00
Описанная окружность = 15.71
Вписанная окружность = 6.28

Проверка на 3-4-5: площадь 6 (сошлось с трассировкой из урока 2.1). Радиус описанной окружности R = abc/(4S) = 60/24 = 2.5, длина 2πR ≈ 15.71. Радиус вписанной r = S/p = 6/6 = 1, длина 2π ≈ 6.28. Все три числа разумные: у прямоугольного треугольника 3-4-5 описанная окружность проходит через концы гипотенузы, её диаметр 5, радиус 2.5, сошлось.

Sqrt это стандартная функция «квадратный корень». В тетради следующая тема так и называется: стандартные функции; с ними будет отдельный урок. Пока запомни две: Sqrt(x) даёт корень, Sqr(x) квадрат.

Сверь с тетрадью. В конспекте формулы окружностей записаны иначе: Sout := pi*sqrt(a*b*c/4/S) и Sint := pi*sqrt(2*S/p). Радиус описанной окружности R = abc/(4S), вписанной r = S/p, без корня, а длина окружности 2πR. Корень там лишний (и двойка перед π потеряна): при 3-4-5 запись из тетради даст не 15.71 и 6.28, а 4.97 и 4.44. Возможно, так продиктовали, возможно, ошибка при записи. На занятии в группе стоит спросить преподавателя; в своей программе используй формулы из этого урока и проверяй на 3-4-5.

Схема → программа: правило перевода

БЛОК-СХЕМА → ПАСКАЛЬ

   ( Начало )              Begin
   / ввод a, b, c /        Readln(a, b, c);
   [ p := (a+b+c)/2 ]      p := (a + b + c) / 2;
   [ S := sqrt(...) ]      S := Sqrt(p * (p - a) * (p - b) * (p - c));
   / вывод S /             Writeln(S:0:2);
   ( Конец )               end.

   Параллелограмм → Readln / Writeln,  прямоугольник → присваивание,
   овал → Begin / end.  Плюс над схемой: раздел Var для всех ящиков.

Контрольный вопрос. Какой оператор печатает на экран и переводит курсор на новую строку?

АWrite
БWriteln
ВReadln

Подсказка: Хвост ln идёт от слова «строка».

Онлайн-проверка ответа появится позже

Контрольный вопрос. Программа из примера 1: Read(a, b); c := a + b; Writeln(c). Пользователь ввёл 12 и 30. Что появится на экране? Впиши число.

Подсказка: Пройди три оператора по порядку: что легло в a и b, что легло в c.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что означает 5 в записи Writeln(c:20:5)?

Аширина поля вывода
Бчисло знаков после точки
Вколичество выводимых переменных

Подсказка: Первое число после двоеточия задаёт ширину, второе точность.

Онлайн-проверка ответа появится позже

Контрольный вопрос. В программе Triangle перед Readln стоит Write с текстом в апострофах. Как называется такой вывод перед вводом, который объясняет человеку, что вводить? Впиши одно слово.

Подсказка: Так же называют надпись «Введите пароль» перед полем ввода.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какая стандартная функция в программе Triangle извлекает квадратный корень? Впиши её имя латиницей.

Подсказка: Она стоит в строке, где считается площадь S.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какой фигуре блок-схемы соответствует оператор Readln(a, b, c)?

Апрямоугольник «процесс»
Бпараллелограмм «данные»
Вромб «решение»
Говал «терминатор»

Подсказка: Та же фигура, что и у вывода.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Переменная x типа Real равна 3.14159. Что напечатает Writeln(x:0:2)? Впиши число (дробная часть через точку или запятую).

Подсказка: Ширина 0 значит «по размеру числа», второе число формата задаёт, сколько знаков оставить после точки.

Онлайн-проверка ответа появится позже

Задание. Программа компилируется, но печатает неверную сумму: один оператор стоит не на своём месте: он использует ящики раньше, чем в них что-то положили. Впиши имя переменной, которая получает значение слишком рано.

Исходный код для этого задания:

Program Summa;
Var a, b, c: Integer;
Begin
  Write('Введите два числа: ');
  c := a + b;
  Readln(a, b);
  Writeln('Сумма = ', c);
end.

Подсказка: Пройди операторы сверху вниз и у каждого спроси: все ли ящики справа от := уже заполнены? Ту же ошибку ты искал в блок-схеме окружности.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Контрольный вопрос. В тетради длина вписанной окружности записана как Sint := pi*sqrt(2*S/p). Правильная формула: радиус r = S/p, длина = 2·π·r. Какая строка на Паскале верна?

АSint := pi * sqrt(2 * S / p);
БSint := 2 * pi * S / p;
ВSint := 2 * pi * sqrt(S / p);
ГSint := pi * S / p;

Подсказка: В формуле длины окружности корня нет, а двойка перед π есть.

Онлайн-проверка ответа появится позже

Задание. Переведи блок-схему в программу на Паскале: Const с pi = 3.14, Var для R, L, A типа Real, приглашение Write, Readln, два присваивания, вывод обоих результатов форматом :0:2. Запусти при R = 2 и впиши через пробел два числа, которые напечатала программа, например 6.28 3.14.
Принято, если: (1) числа совпали; (2) есть разделы Const и Var, приглашение перед Readln, оба вывода с форматом :0:2; (3) программа скомпилировалась и запустилась (скриншот экрана с результатом).

Задача: по радиусу R найти длину окружности L = 2·π·R и площадь круга A = π·R².

Блок-схема (урок 2.1): ввод R → L := 2·pi·R → A := pi·R·R → вывод L, A.

Подсказка: При R = 2 длина 2·3.14·2, площадь 3.14·2·2. Формат :0:2 оставит два знака после точки.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Итог. Readln(a, b) кладёт введённые числа в ящики; Write печатает и оставляет курсор в строке, Writeln переводит строку; перед вводом ставь приглашение. Формат x:ширина:знаков делает вывод читаемым, для вещественных чаще всего :0:2. Линейная блок-схема переводится в программу один в один: параллелограмм → Readln/Writeln, прямоугольник → присваивание, овал → Begin/end. Программа Triangle считает площадь по Герону и длины окружностей; формулы из тетради стоит сверить с преподавателем.

Что дальше

В тетради анонсирована тема «Стандартные функции»: Sqrt, Sqr, Abs, Trunc, Round и другие. Как только группа её пройдёт, здесь появится урок 3.4, а следом ветвление if в Паскале (глава 4): ромб из главы 2 превратится в текст.

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева