Часть III. Изучение процедур ввода/вывода
Рекомендуемое время
5 Минут
Вводить данные в Паскале можно при помощи двух стандартных процедур — Read и ReadLn. Процедуры используются следующим образом: сначала указывается имя процедуры, а затем в круглых скобках указывается список переменных, значения которых необходимо ввести. Переменные отделяются друг от друга запятыми.
Пример:
Read(x, y, z);
ReadLn(a, b, c);
При выполнении этих процедур вводимые значения отделяются друг от друга одним или несколькими пробелами или переходом на следующую строку. В отличие от Read выполнение процедуры ReadLn завершается только после нажатия на клавишу «возврат каретки».
Рассмотрим эту разницу на примере. При выполнении следующего фрагмента программы
Read(a, b);
Read(c);
и при вводе данных
4 5 1
переменной а присвоится значение 4, переменной b — 5, а переменной с — 1. В случае же фрагмента
ReadLn(a, b);
ReadLn(c);
при вводе данных таким же образом переменной а присвоится значение 4, переменной b — 5. После этого ожидается ввод значения с на новой строке. Значение 1 будет проигнорировано.
Часто процедура Readln без параметров ставится в конце программы для задержки окна ввода/вывода на экране до нажатия «возврат каретки». Однако если предыдущий ввод запрашивался процедурой Read, задержки не будет.
Вывод данных обеспечивается двумя стандартными процедурами Write и WriteLn. В скобках после имени процедуры могут быть записаны константы, выражения, переменные.
Пример:
Write(‘Корень уравнения= ', X);
Writeln(‘Сумма =’,Sum,’ Среднее значение=’,Sum/n);
Числа вещественных типов по умолчанию выводятся в экспоненциальной форме, что воспринимается обычным пользователем не лучшим образом. Для того, чтобы вывести число в общепринятой форме, задается формат вывода:
WriteLn(X:n:m);
где Х — переменная вещественного типа, а n и m — выражения целого типа, характеризующие ширину поля вывода. Выражение n означает, что все число будет выравниваться по правому краю поля из n символов (недостающие символы слева заменяются пробелами), выражение m означает, что число будет выводиться с m знаками после запятой. При этом будет происходить округление абсолютной величины числа.
Для вывода целых чисел можно использовать форму:
WriteLn(a:n);
В этом случае выводимое значение будет выравниваться по правому краю поля шириной в n символов.
Отличие WriteLn от Write состоит в том, что после вывода всех значений, перечисленных в скобках, производится переход на следующую строку.
Алгоритм, в котором все действия выполняются последовательно одно за другим, называется линейным. Приведем пример программы, в которой реализуем линейный алгоритм.
Пример.
Условие задачи:
Какого роста цен за год можно ожидать, если правительство гарантирует, что инфляция в новом году составит р%?
Если за каждый месяц цены возрастут в 1 + р/100 раз, то за год рост цен составит (1+р/100)12 раз или прирост в процентах
Поясним формулу. За один месяц цены возрастут на р/100 и составят 1 + р/100. Для того, чтобы сократить изложение, обозначим эту величину за Х.
Х = 1 + р/100
Единица — это условная цена единица товара. В следующем месяце цены возрастут на тот же процент, но уже от имеющихся цен на остаток месяца: Х* р/100. Цены будут иметь значение Х + Х * р/100 или Х*(1 + р/100).
Х*(1 + р.100) = Х2
В следующем (третьем месяце) цены будут иметь значение:
Х2 + Х2*р/100 = Х2*(1+р/100) = Х3
И так далее. В конце 12-го месяца года цена единицы товара будет равна Х12 или(1 + р/100)12. Очевидно, что рост цены будет равен (1 + р/100)12 – 1.
Чтобы получить прирост в процентах, необходимо умножить на 100%.
Схема алгоритма:
Программа на Турбо Паскале в этом случае может иметь следующий вид:
Program Procent; {Заголовок программы}
Var a, p, S: Real; {Описание переменных}
{p — процент инфляции в месяц.
a — кратность роста цен. S — рост цен за год в процентах}
Begin {Начало операторной части }
Write(‘Введите процент месячной инфляции’); ReadLn(p);
{Вывод подсказки ввода. Ввод переменной р}
a := Exp(Ln(1+p/100)*12); {Оператор присваивания}
{Так как в Паскале нет возведения в степень, используется тождество:
a^b = exp(Ln(a)*b)}
S := (a – 1) * 100; {Оператор присваивания}
Writeln(‘Годовой прирост цен составит ‘, a:10:2,
‘ раз, или ’S:10:2, ‘ процентов’); {Процедура вывода}
End. {Конец программы}