Решение самой простой задачи на ЭВМ не обходится без процедур ввода-вывода информации. Ввод данных - это передача информации от внешнего носителя в оперативную память для обработки. Вывод данных - процесс передачи информации после обработки из оперативной памяти на внешний носитель. Внешним носителем может быть дисплей, принтер, плоттер (графопостроитель), дискета, винчестер, магнитная лента и т.д. В языке ТР стандартным средством общения человека и ЭВМ являются предопределенные файлы Input и Output, которые по умолчанию являются параметрами программы. Программа получает входные данные из файла Input и помещает результат обработки в файл Output. Стандартно файлу Input назначена клавиатура, а файлу Output - экран монитора. Для выполнения операций ввода-вывода в языке ТР имеются четыре процедуры: read, readln, write и writeln. Процедура чтения read обеспечивает ввод числовых данных, символов, строк и т.д. для их обработки программой.
Формат записи: read (х1, х2, ... , хn); или read (FV, x1, x2, ... , xn);, где x1, ... ,xn - переменные допустимых типов данных; FV - переменная, связанная с файлом, откуда будет выполнятся чтение. После прочтения процедуры read программа приостанавливается и ЭВМ ожидает ввода данных. Значения х1, ... хn набираются минимум через один пробел. После набора данных для одной процедуры read нажимается клавиша ввода. Значения переменных должны вводится в строгом соответствии с синтаксисом языка ТР. При нарушении синтаксиса возникают ошибки ввода-вывода. Сообщение об ошибке имеет вид: I/O error NN, где NN - код ошибки. Пояснительный текст поможет определить причину программного прерывания. Пример. Var i: integer; r: real; c: char; Begin read(i, r, c); {ввод данных}
Если в программе имеется несколько процедур read, данные для них вводятся потоком, т.е. после считывания значений переменных для одной процедуры read данные для следующей процедуры read набираются в той же строке, что и для предыдущей до окончания строки, затем происходит переход на новую строку.
На экране это будет выглядеть так: 1254 2.5 547 -5.169. Процедура чтения readln аналогична процедуре read, единственное отличие заключается в том, что после считывания последнего значения переменной из списка, указанного в процедуре readln, курсор переводится на начало новой строки. Пример. ... readln (a, b); readln (c, d); ... С клавиатуры набираем: 1254 32.5 <Enter> 547 -5.169 <Enter>
На экране это будет выглядеть так: 1254 32.5 547 -5.169.
где Y1, Y2, ... , Yn - выражения типа integer, byte, real, char, boolean и т.д. FV - имя файла, куда производится вывод. Например, для того, чтобы вывести данные на принтер FV равно Lst.
Пример. write ( 248 ); { выводится число 248 } write ( A-B*2 ); { выводится результат выражения } write (Lst, ‘результат =', Y ); { вывод значения Y на принтер }
Процедура writeln аналогична процедуре write, но после вывода последнего в списке значения для текущей процедуры writeln происходит перевод курсора к началу следующей строки. Процедура writeln, записанная без параметров, вызывает перевод строки. форматы вывода В процедурах вывода write и writeln имеется возможность записывать выражение, определяя ширину поля вывода. Для записи форматов, определим обозначения: I, p, q целочисленное выражение; R выражение вещественного типа; B выражение булевского типа; Ch выражение символьного типа; S выражение строкового типа; # цифра; * знак "+" или "-"; _ пробел.
I - выводится десятичное представление величины I, начиная с позиции, в которой находится курсор. Значение I Выражение Результат 345 write (I) 345 657 write (I, I, I) 657657657
I: p - выводится десятичное представление величины I в крайние правые позиции поля шириной p. Значение I Выражение Результат 345 write (I: 5) _ _345 1 write (I: 10) _ _ _ _ _ _ _ _ _ 1 68 write (I+I: 6) _ _ _ _ 136
R - в поле шириной 18 символов выводится десятичное представление величины R в формате с плавающей точкой. Если R >= 0.0, используется формат - _#.##########Е*##. Если R <= 0.0, формат имеет вид _-#.##########Е*##. Значение R Выражение Результат 345.76 write ® __3.4576000000E+02 -1.919E+01 write ® _-1.9190000000E+01 567.986 write (R/2) __2.8399300000E+02
R: p - в крайние правые позиции поля шириной р символов выводится десятичное представление значения R в формате с плавающей точкой. Если R >= 0.0, используется формат _..._#.#...#Е*##, причем минимальная длина поля вывода составляет 7 символов. Если R <= 0.0, формат имеет вид _..._-#.#...#Е*##. Минимальная длина поля вывода 8 символов. После десятичной точки выводится по крайней мере одна цифра.
Значение R Выражение Результат 345.87 write (R: 10) 3.4500E+02 -345.87 write (R: 10) -3.450E+02 -67.8 write (-R: 8) -6.780E+02
R: p: q - в крайние правые позиции поля шириной р символов выводится десятичное представление значения R в формате с фиксированной точкой, причем после десятичной точки выводится q цифр (0<= q <=24), представляющих дробную часть числа. Если q=0, ни дробная часть, ни десятичная точка не выводятся. Если q > 24, то при выводе используется формат с плавающей точкой. Значение R Выражение Результат 345.55 write (R: 8: 5) 345.5500 -45.67 write (R: 7: 2) _-45.67 -45.67 write (R: 9: 4) _-45.6700
Ch - начиная с позиции курсора выводится значение Ch. Значение Ch Выражение Результат 'X' write (Ch) X 'Y' write (Ch) Y '!’ write (Ch, Ch, Ch) !!!
Ch: p - в крайнюю правую позицию поля шириной р выводится значение Ch. Значение Ch Выражение Результат 'X' write (Ch: 5) _ _ _ _X 'Y' write (Ch: 3) _ _ _Y '!' write (Ch: 2, Ch: 3) _ !_ _!
S - начиная с позиции курсора выводится значение S (строка или массив символов, если его длина соответствует длине строки). Значение S Выражение Результат 'book' write (S) book 'xxxyyy' write (S, S) xxxyyyxxxyyy
S: p - значение S выводится в крайние правые позиции поля шириной р символов. Значение S Выражение Результат 'book' write (S: 5) _book 'xxxyyy' write (S: 7, S: 7) _xxxyyy_xxxyyy
B - выводится результат выражения B True или False, начиная с текущей позиции курсора.
Значение В Выражение Результат True write (B) True False write (B, not FalseTrue
B: p - в крайние правые позиции поля шириной р символов выводится результат булевского выражения В True или False. Значение В Выражение Результат True write (B: 5) _True False write (B: 7, not B: 7) __False__True