<<
>>

Процедуры ввода-вывода

Ввод значений. Для ввода значений с клавиатуры используют специальные процедуры Read и ReadLn (рис. 2.10). Эти процедуры позволяют вводить значения стандартных типов, кроме boolean, и строки (string).

Вводимые значения (кроме значений символов и строк) разделяют пробелами или записывают на разных строках. Отдельные символы и строки символов при вводе записывают подряд, так как пробел в этом случае также считается символом.

Физически операции ввода выполняются с использованием буфера, т. е. вводимая с клавиатуры последовательность символов сначала помещается в память, а затем, уже из памяти, читается программой. Последовательность передается в буфер ввода по нажатию клавиши Enter. При этом в буфер вместе с кодами введенных символов помещается и код Enter, состоящий из двух символов «#13, #10».

Если ввод осуществляется процедурой ReadLn, то буфер ввода после выполнения операции очищается, причем символы, оставшиеся не обработанными, игнорируются.

Если ввод осуществляется процедурой Read, то очистка не выполняется и, следовательно, следующий оператор ввода начнет читать символы из той же строки. Последнее существенно только, если вводятся значения типа char (или string, см. параграф 4.5), так как при вводе чисел пробелы и переход на следующую строку игнорируются.

Например:

а) Var a,b,c:real; п:integer;

Begin

Read(a,b); (числа могут быть введены в одной строке или в разных}

ReadLn(c,n);...{числа могут быть введены в той же строке, что и предыдущие числа}

б) Var a. real; c:char;

Begin ...

Read(a); ...

]Угие(‘Продолжитъ? (y/n) );

Read(c); (приводит к тому, что после запроса компьютер не

переходит в ожидание ввода, как мы предполагали, а вводит

следующий символ из буфера ввода, т.е.

символ #13 (рис. 2.11)}

Чтобы избежать «игнорирования ввода», необходимо для выполнения предыдущей операции ввода использовать вместо процедуры Read процедуру ReadLn:

Рис. 2.11. Ситуация «игнорирования» ввода

Var a.real; c.char;

Begin...

ReadLn(a);... {очистим буфер ввода после выполнения операции}

Write(‘Продолжить? (у/п) ’);

Read(c); {в данном случае все в порядке: после вывода запроса программа ожидает ввода символа}

Вывод значений. Для вывода значений на экран используют процедуры Write и WriteLn (рис. 2.12). Эти процедуры предназначены для вывода значений стандартных типов и строк.

Целочисленный литерал интерпретируется как ширина поля, в которое выводится значение, причем выводимые значения прижимаются к правой границе. Если указанной ширины поля недостаточно, то она автоматически увеличивается до нужного значения. Если не указано, то его значение определяется количеством выводимых символов.

Целочисленный литерал указывается только для вещественных чисел: он определяет количество цифр дробной части числа. Если указано равным 0, то ни дробная часть числа, ни десятичная точка не выводятся. Если и не указаны, то вещественные числа выводятся в виде мантиссы и порядка, причем ширина поля вывода по умолчанию принимается равной 23, а количество дробных цифр - 14.

Логические значения выводятся как TRUE или FALSE.

Символы и строки выводятся без изменения, но дополняются пробелами, если ширина поля вывода больше, чем необходимо.

Рис. 2.12. Синтаксическая диаграмма

После вывода значений процедурой WriteLn курсор переводится на следующую строку.

Пример 2.1. Разработать программу вычисления корней уравнения Ах2+Вх+С=0 при условии, что дискриминант - неотрицательное число. Формула корней уравнения известна:

-b ±V d

х12 =----------------- »

где d = b2 - 4ас.

Алгоритм программы выглядит следующим образом:

Корни уравнения:

Ввести а, Ь, с d := Ь2 - 4ас е := b / (2а)

Х| := - е + V d / (2а) х2 := - е - V~d / (2а)

Вывести Xj, х2 Конец алгоритма.

Ниже приведен текст программы.

Program ex;

Var a,b,c,xl,x2te,d:real; {описываем переменные}

Begin

WriteLnCВведите коэффициенты уравнения:);

ReadLn(a,b,c); {вводим параметры}

d:-b*b-4*a*c; {определяем дискриминант}

е:=Ь/(2*а); {определяем значение вспомогательной переменной}

xl:=-e+sqrt(d)/(2*a); {определяем Х]}

x2:=-e-sqrt(d)/(2*a); {определяем Х2}

WriteLn(‘xl= \xl:6:2, ’ х2= \х2:6:2); {выводим результаты}

End.

0.4.

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Процедуры ввода-вывода:

  1. § 37 История вотчинной записки в России. – Явка актов в приказах. – Справка. – Юридическое и финансовое ее значение. – Аналогия нашей формы с западными. – Изменение старой формы при Петре I. – Новый крепостной порядок и новое значение справки и отказа. – Форма нового отказа и ввода во владение
  2. Схема «Процедуры комфортизации».
  3. Схема «Процедуры комфортизации».
  4. 3. Процедуры банкротства гражданина
  5. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  6. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  7. 3.3. Процедура экспериментирования
  8. 3.2. Процедура рассмотрения и утверждения проекта
  9. 28. Процедура наблюдения
  10. ПРОЦЕДУРЫ И РИТУАЛЫ
  11. Процедуры и техники.
  12. Процедура комфортизации («Послушный» и «непослушный» мозг»).
  13. 5.3. Социометрические процедуры
  14. § 4. Порядок работы парламента. Законодательная процедура
  15. 5. Основные процедуры банкротства