Современное программирование предлагает пользователям использовать самые разнообразные языки программирования. Но основой основ является Паскаль.Данный язык был разработан в 1971 году в Университете Цюриха профессором Никлаусом Виртом. Его предназначение изначально было учебным. Имея достаточно четко выраженную структуру и систему предоставления данных Паскаль имел ограничения в функциях ввода - вывода, при создании подпрограмм.

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

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

Синтаксическая диаграмма <процедуры ввода с клавиатуры>

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

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

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

A) Var a, b, c:real; n:integer;

Begin

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

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

B) Var a:real; c:char;

Begin...

Read (a); ...

Write (`Продолжить? (y/n)`);

Read (c); {приводит к тому, что после запроса компьютер не переходит в ожидание ввода, а вводит следующий символ из буфера ввода, т. е. символ #13}

Ситуация "игнорирования" ввода.

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

Var a:real; c:char;

Begin...

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

Write (`Продолжить? (y/n)`)

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

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

Синтаксическая диаграмма <Процедура вывода не экран>.

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

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

Логические значения выводятся как True и False. Символы и строки выводятся без изменения, но дополняются пробелами, если ширина поля вывода больше, чем необходимо. После вывода значений процедурой WriteLn курсор переводится на следующую строку. Например:

Задание: Разработать программу вычисления корней уравнения:

Ax2+Bx+c=0

при условии, что дискриминат - неотрицательное число. Формула корней уравнения:

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

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

Ввести a, b, c

d:=b2 - 4*a*c

e:=b/2*a

x1:=-e+Vd / (2*a)

x2:=-e-Vd / (2*a)

Вывести x1, x2

Конец алгоритма.

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

Program ex;

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

Begin

WriteLn (`Введите коэфициенты уравнения:`)

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

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

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

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

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

WriteLn (`x1=`, x1:6:2, `x2=`, x2:6:2) {выводим результаты}

End.

Hosted by uCoz