- •Лабораторная работа №1. Работа в среде Norton Commander
- •Лабораторная работа n 2. Среда программирования turbo pascal 7.0
- •Лабораторная работа n 3. Программирование в среде turbo pascal 7.0
- •Лабораторная работа n°4.Ознакомление со средствами компиляции и отладки в среде Turbo Pascal 7.0.
- •Лабораторная работа n 5. Ввод/вывод на языке программирования Паскаль
- •Лабораторная работа n 6.Программирование алгоритмов линейной структуры
- •Лабораторная работа n 7. Программирование алгоритмов ветвящейся структуры
- •Лабораторная работа n 8. Программирование алгоритмов циклической структуры
- •Лабораторная работа n 9.Одномерные массивы
- •Лабораторная работа n 10. Многомерные массивы
Лабораторная работа n 5. Ввод/вывод на языке программирования Паскаль
=============================================
Цель и задача работы : целью работы является ознакомление с про-
---------------------- цедурами ввода/вывода. В данной работе
требуется написать программу, которая при-
нимает данные с клавиатуры и печатает их
на экран дисплея.
Теоретические положения.
------------------------
Идея построения совершенно независимой от внешнего мира прог-
раммы может показаться очень плодотворной, однако это не так. Прог-
рамма более реалистична (и более полезна), если некоторые значения
разрешено указывать в ходе ее выполнения. Ввод делает программу бо-
лее гибкой, благодаря чему ее можно использовать не только для вы-
полнения какой-то конкретной задачи, но и для решения большого чис-
ла задач данного типа. Для того чтобы узнать результаты работы прог-
раммы,данные нужно вывести на какое-либо устройство (например,дис-
плей).
Процедура ввода отвечает за ввод с указанного устройства и пе-
ревод данных, представленных в приемлемой для программиста форме,
т.е. в виде символов и цифр, в двоичный код в виде нулей и единиц -
информацию понятную компьютеру. Для того чтобы программист мог уви-
деть результат работы какой-либо программы, нужно перевести двоич-
ный код в приемлемую для человека форму и вывести эти данные куда
он укажет. Этим занимается процедура ввода.
Для определения конструкций языка используется метаязык, осно-
ванный на металингвистических формулах бекуса-наура, приведенный в
таблице:
+----------------------+-------------------------------+
I метасимвол I значение I
+----------------------+-------------------------------+
I = I определяет "быть" I
+----------------------+-------------------------------+
I ! I альтернатива I
+----------------------+-------------------------------+
I . I конец определения I
+----------------------+-------------------------------+
I [X] I 0 или 1 появление X I
+----------------------+-------------------------------+
I (*X*) I 0 или более повторений X I
+----------------------+-------------------------------+
I (X!Y!...!Z) I группирование: любой из X,Y,Z I
+----------------------+-------------------------------+
I "XYZ" I терминальный символ XYZ I
+----------------------+-------------------------------+
I имя-из-строчных-букв I нетерминальный символ I
+----------------------+-------------------------------+
Для удобочитаемости нетерминальные символы разделены дефисами.
Для осуществления ввода/вывода на языке программирования пас-
каль, существуют специальные процедуры ввода/вывода : READ, READLN,
WRITE, WRITELN, а также процедуры работы с файлами GET и PUT, кото-
рые будут рассмотрены в соответствующей лабораторной работе.
Ввод: GET +
I> (F);
вывод: PUT +
если параметр F не задан, то подразумевается ввод (вывод) из
(в) стандартного (стандартный) файл ввода (вывода) INPUT (OUTPUT),
обычно с клавиатуры (на экран дисплея), этот файл имеет тип TEXT.
Процедуры ввода (READ, READLN) считывают одно или более значе-
--------------- ний из файла F в одну или более переменных.
Формат процедуры:
список-параметров-READ = "(" [переменная-файл ","] переменная
(*"," переменная*) ")".
Список-параметров-READLN = "(" [переменная-файл ","] перемен-
ная (*"," переменная*) ")".
Если параметр переменная-файл не задан, то подразумевается ввод
из стандартного файла ввода INPUT , обычно с клавиатуры, этот файл
имеет тип TEXT.
Если в одной процедуре ввода присутствуют несколько переменных,
то возникает ряд трудностей,связанных с тем, что при вводе значения
должны разделяться друг от друга разделителями. Вид этих разделите-
лей зависит от конкретной реализации языка программирования в конк-
ретной операционной системе. Обычно при вводе числовых значений в
качестве разделителей выступает пробел (обычно количество пробелов
может быть любым). Особый случай, если наряду с числовыми перемен-
ными указаны символьные переменные. В этом случае пробел может быть
воспринят как разделитель или как значение символьного типа, кото-
рое вводится. Обычно пробел остается разделителем, но тогда если за
числом вводится литера пробел, то между ними должна присутствовать
дополнительная литера пробел, выполняющая роль разделителя. Из фай-
ла INPUT можно вводить следующие типы значений : CHAR, REAL и
INTEGER. Ввод значений остальных типов (в том числе и стандартного
типа BOOLEAN) осуществляется программно с помощью значений указанных
типов, чаще всего на базе типа CHAR.
Процедуры вывода (WRITE, WRITELN) записывают одно или более зна-
чений переменных или строковых констант в файл.
Формат процедуры:
список-параметров-WRITE = "(" [переменная-файл ","] параметр-
WRITE (*"," параметр-WRITE*) ")"
параметр-WRITE = выражение [":" выражение [":" выражение ]].
Список-параметров-WRITELN = "(" [переменная-файл ","] параметр-
WRITE (*"," параметр-WRITE*) ")".
Если параметр переменная-файл не задан, то подразумевается вы-
вод в стандартный файл вывода OUTPUT, на экран дисплея, этот файл
имеет тип TEXT.
Элемент вывода может иметь один из трех видов : V, V:M, V:M:N.
При выводе можно управлять размещением данных по позициям строки.
Элемент вида V.
При обработке элемента вывода в свободные позиции буфера заносится
группа литер, которая представляет собой выводимое значение, задан-
ное элементом V:
- если V строковая константа, то такой группой литер является пос-
ледовательность литер в этой константе, заключенная в апострофы,
т.е. если V костанта 'F(X)=2X-1', то в буфер будет занесено 9
литер F(X)=2X-1;
- если V выражение типа CHAR, то в буфер будет занесена единствен-
ная литера, в зависимости от выражения V;
- если V логическое выражение, то в буфер заносится четыре литеры
TRUE или пять литер FALSE, в зависимости от значения выражения V;
- если V выражение типа INTEGER, то его целочисленное значение
преобразуется из внутреннего представления в последовательность
литер, представляющих запись этого числа в десятичной форме;
- если V выражение типа REAL, то ненулевое значение представляется
в десятичной системе счисления в форме с плавающей точкой.
Формат числа с плавающей точкой:
число-с-плавающей-точкой = [знак] целое-без-знака "." Дробная-
часть ["E" парядок] ! целое-без-знака "E" порядок
целое-без-знака = последовательность-цифр
дробная-часть = послеовательность-цифр
порядок = целое-со-знаком
целое-со-знаком = знак целое-без-знака
знак = "+" ! "-".
Элемент вида V:M.
Здесь значение выражения M задает ширину поля (число позиций в
строке буфера), в котором должно быть размещено выводимое значение.
Значение размещается,начиная с правых позиций поля.
Пусть D число литер, изображаюших значение V:
а) M>D - свободными оказываются M-D левые позиции и они заполня-
ются пробелами;
б) M<D - ширина поля принимается автоматически в точности равной
числу литер D.
Элемент вида V:M:N.
Такой элемент используется,только если V выражение типа REAL, при-
чем M общая ширина поля, а N ширина поля под дробную часть числа.
Процедуры WRITELN и READLN отличаются от WRITE и READ тем, что
после выполнения процедуры ввода/вывода произойдет переход к началу
новой записи.
При заданном параметре переменная-файл (кроме файла типа TEXT),
элементы списка ввода/вывода должны иметь тот же тип, что и пере-
менная-файл. Если файл типа TEXT, то элементы списка ввода/вывода
могут иметь разный тип.
Типы переменных :
-----------------
INTEGER (Числа с фиксированной точкой)
диапазон представления чисел : -32768..+32767
В памяти занимает 2 байта.
REAL (Числа с плавающей точкой)
диапазон представления чисел : 1.E-38 .. 1.E+38 (По модулю)
в памяти занимает 4 байта.
CHAR (Символьный тип)
все символы таблицы кои-7
в памяти занимает 1 байт.
BOOLEAN (Логический тип)
значениями этого типа могут быть константы : FALSE и TRUE
в памяти занимает 1 байт.
Пример : ввести с клавиатуры два числа (целого и вещественного
типа), вывести на экран дисплея : целое в поле шириной
7, а вещественное в поле шириной 7 и под дробную часть
поле шириной 5.
PROGRAM PRIMER;
VAR I: INTEGER; X: REAL;
BEGIN
WRITE('Введите первое число (целое) :'); READ(I);
WRITE('Введите второе число (вещественное) :'); READ(X);
WRITELN('Вы ввели : I=',I,' X=',X);
WRITELN('Первое число : ',I:7); (* V:M *)
WRITELN('Второе число : ',X:7:5); (* V:M:N *)
END.
Варианты заданий :
------------------
Ввести значения переменных по шаблону, представленному в табли-
це, и вывести их по другому шаблону с тремя различными полями (см.
Примечание)
+-----------+-----------------------+-----------------------+
I I последовательность I поля I
I номер I ввода/вывода данных +-----------------------+
I +-----------------------+ M I N I
I варианта I ввод I вывод +---+---+---+---+---+---+
I I I I 1 I 2 I 3 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 1 I R I R C C I C C R I R I 3 I 3 I 6 I 2 I 0 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 2 I R C I R I I C I R I R I 5 I 4 I 3 I 2 I 1 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 3 I C I R I R I R I C I R I 4 I 7 I 8 I 2 I 5 I 5 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 4 I C I C I R I I I C R C I 5 I 6 I 9 I 0 I 1 I 7 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 5 I C R R I C I R R C I C I 2 I 8 I 5 I 1 I 4 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 6 I C C R I I I C R I I C I 4 I 4 I 4 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 7 I R I C R C I I R C R C I 4 I 5 I 6 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 8 I R I C I C I I I C C R I 4 I 5 I 6 I 2 I 4 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 9 I I C R C R I C R R C I I 7 I 5 I 5 I 1 I 0 I 4 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 10 I I C R I C I C R I C I I 5 I 7 I 8 I 2 I 2 I 2 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 11 I R I C R C I R C I C R I 4 I 5 I 6 I 3 I 2 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 12 I C C R R I I I C C R R I 3 I 5 I 4 I 0 I 0 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 13 I R C R C I I I C R C R I 4 I 5 I 6 I 1 I 3 I 2 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 14 I C R I R C I C I R C R I 7 I 7 I 9 I 2 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 15 I R C C I C I C C R I C I 3 I 4 I 3 I 2 I 2 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 16 I I R C C R I C R I R C I 4 I 2 I 1 I 2 I 0 I 0 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 17 I C R I R C I I R C C R I 4 I 1 I 3 I 1 I 0 I 2 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 18 I I I C R R I I R C R I I 4 I 2 I 9 I 2 I 1 I 5 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 19 I I R C R I I I I C R R I 4 I 5 I 3 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 20 I R I C I R I I R I C R I 2 I 5 I 7 I 1 I 2 I 6 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 21 I R C I C R I C R C I R I 8 I 6 I 2 I 3 I 3 I 0 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 22 I C R C I R I R C I C R I 3 I 4 I 1 I 1 I 1 I 0 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 23 I C R C I I I I I R C C I 2 I 2 I 3 I 1 I 0 I 2 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 24 I R R I C C I R I C R C I 3 I 7 I 4 I 2 I 6 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 25 I R C I C C I C I C R C I 2 I 4 I 4 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 26 I C C I R I I R I I C C I 3 I 7 I 6 I 1 I 3 I 5 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 27 I R C I C R I I C C R R I 8 I 2 I 4 I 1 I 2 I 1 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 28 I C I I R C I C I C I R I 1 I 6 I 5 I 1 I 2 I 3 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 29 I C I R C I I I C R I C I 8 I 5 I 7 I 1 I 4 I 6 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 30 I R I C C R I I R C R C I 6 I 9 I 4 I 5 I 9 I 2 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 31 I C I I C R I R C I I C I 4 I 9 I 8 I 3 I 8 I 7 I
+-----------+-----------+-----------+---+---+---+---+---+---+
I 32 I R I R C C I C C R I R I 8 I 5 I 9 I 7 I 4 I 9 I
+-----------+-----------+-----------+---+---+---+---+---+---+
примечание : R C I C R - означает,что данные присваиваются
------------ соответственно переменным типа REAL,потом CHAR,
INTEGER, CHAR, REAL. При выводе сначала выводятся
соответственно значения переменных типа REAL,
INTEGER, CHAR, REAL. Ввод/вывод осуществляется
в одной процедуре ввода/вывода.
Вывести с тремя различными полями означает, что в программе присут-
вуют три процедуры вывода, в каждой из которых данные выводятся с
размещением по позициям строки (элементы вида V:M и V:M:N).
Пример : вывести числа 6 и 4.67
--------
+-----------------------+
I Поля I
+-----------+-----------+
I M I N I
+---+---+---+---+---+---+
I 1 I 2 I 3 I 1 I 2 I 3 I
+---+---+---+---+---+---+
I 5 I 6 I 7 I 3 I 2 I 3 I
+---+---+---+---+---+---+
в данном случае : WRITELN(6:5,4.67:5:3);
WRITELN(6:6,4.67:6:2);
WRITELN(6:7,4.67:7:3);
Приложение
Cредства обмена данными.
Основа ввода и вывода составляют текстовые файлы, которые передаются как
параметры. Вычислительный процесс выполняет преобразование текстового файла
называемого INPUT в текстовый файл называемый OUTPUT. Оба эти файла в языке
стандартные и служат параметрами для программы. Для управления текстовыми
файлами вводятся четыре стандартные процедуры READ , WRITE , READLN , и
WRITELN в дополнении к процедурам GET и PUT.
Эти процедуры позволяют использовать для переменных большее количество
параметров. Параметры не обязательно должны быть типа CHAR. Разрешаеются
типы , для которых передача данных совмещена с опеациями по их неявному
преобразованию. Если первый параметр - это переменная-файл, то этот файл
читается или пишется. В противном случае стандартные файлы INPUT и OUTPUT
автоматически предпологаются как значения по умолчанию в случае чтения или
записи.
Текстовые файлы - это специалный случай типа FILE, когда текст подразде-
ляется на строки с помощью маркеров строк. Если во время чтения текстового
файла позиция файла достигает маркера конца строки, следующего за последней
литерой строки, то значение буферной переменной F^ становится равным пробелу,
а стандартная функция EOLN(F) принимает значение TRUE.
Продвижение позиции файла еще дальше вызывает то, что EOF(P) становится
равным TRUE или F^ присваивается первая литера следующей строки и EOLF(F) и
принимает значение FALSE (если только следующая строка не состоит из нуля
литер). Маркеры строк не принадлежат типу CHAR и могут быть сгенерированы
только процедурой WRITKLN.
4.1. Процедура READ
формат процедуры:
список параметров -READ = '(' [переменная-файл ','] переменная [',' пере-
менная] ');
для процедуры справедливо следующее:
1) READ(V1...VN) Эквивалентно READ( INPUT , V1...VN);
2) READ(F,V1...,VN) Эквивалентно
BEGIN
READ(F,V1); ...; READ(F,VN);
END.
3)Если V - переменная типа CHAR или интервального типа CHAR , то READ(F,V)
эквивалентно
BEGIN
V:=F^ GET(F)
END.
4)Если V - переменная типа INTEGER (или его интервал), то READ(F,V) читает
читает из F последовательности литер,которые образуют целое со знаком в
соответствии с синтаксисом. Значение целого числа присваивается переменной
V , если оно совместимо по присваиванию с типом переменной V. Предшеству-
ющие пробелы и маркеры строк пропускаются. Чтение прекращается, как только
в буферной переменной файла F^ пояфляется литера,которая не является частью
целого со знаком .
Процедура READ может быть использована для чтения из файла F, который
не есть текстовый файл.
READ(F,X) Эквивалентно
BEGIN
X:=F^; GET(F);
END.
Примечание. В подразделе обозначено:
V1,V2,...,VN - Переменные типа CHAR, INTEGER,REAL;
F - текстовый файл
4.2 Процедура READLN
поцедура READLN используется для перехода к началу следующей строки.
Формат процедуры:
список-параметров-READLN=['('переменная-файл I переменная) (','переменная')']
для процедуры справедливо следующее :
1)READLN(F,V1,...,VN); Эквивалентно
BEGIN READ(F,V1,...,VN); READLN(F); END.
2)READLN(F); Эквивалентно
BEGIN WHILE NOT EOLN (F) DO GET (F); GET(F); END.
Примечание. В подразделе обозначено:
V1,...VN - Переменные типа CHAR , INTEGER , REAL;
F - текстовый файл.
4.3.Процедура WRITE
формат процедуры:
список-параметров-WRITE = выражение [':' выражение [':' выражение]]
для процедуры справедливо следующее:
1)WRIE (P1,P2,...,RN) Эквивалентно
BEGIN WRITE(F,P1);...; WRITE(F,PN); END.
2)Параметр P может иметь следующий вид:
E:M
E:M:N
E.E
Где E - выражение, значение которого должно быть записано в файл F ;
оно может быть числовым (целым или вещественным), литерным, логичес-
ким или строковым.
M И N - целые значения, являющиеся параметрами ширины поля; ровно M
литер выводится (включая необходимое число пробелов слева в представ-
лении E ), за исключением случая, когда E является числовым значением
которое требует для своего представления больше, чем M литер.
Процедура WRITE(F,E) эквивалентна WRITE(F,E:M), использующей значе-
ние по умолчанию для M , которое зависит от типа E: для типов INTEGER,
BOOLEAN и REAL это значение определяется при реализации. Процедура
WRITE(F,E:M:N) применима, только если е имеет тип REAL;
3)если е имеет тип CHAR, то значение м по умолчанию есть единица;
4)если е имеет тип INTEGER, то в файл F выводится десятичное представ-
ление числа E. Если P - положительное число, определяемое как
IF E=0
THEN P:=1
ELSE определит P так, что
10**(P-1)<=ABS(E)<10**P,
то представление числа E имеет следующий вид:
- если M больше или равно P+1, то (M-P-1) пробелов;
знак ('-'), если E<0, в противном случае пробел, P цифр;
- если м<P+1, то P литер, если E=>Q ,и (P+1) литера , если E<0
5) если число е имеет тип реал , то в файл F выводится десятичное пред-
ставление числа E , округленное с указанным числом значащих цифр или деся-
тичных позиций.
WRITE (F,E:M) Выводит E в форме числа с плавающей точкой.
Если D - значение , определенное при реализации (представляющее число
цифр , выводимых как экспонента), а неотрицательное число ER и целое число
P определяется как
IF E=0.0
THEN BEGIN ER:=0.0; P:=1 END
ELSE
BEGIN
ER:=ABS (E);
Определить P так , что 10**(F-1)<=10*P;
ER=ER+0.5*(10**(P-M+D+4));
ER Округляется до (M-D-4) значащих десятичных цыфр
END;
то представление числа E имеет следующий вид:
- если M больше или равно D+6 , то знак ('-', если E< и ER<=>,в про-
тивном случае пробел)
начальные цифры ER,
литера '.'
Следующие (M-D-5) цыфр ER,
литера 'E',
знак числа (F-1)('+' или '-'),
D - цифр для (P-1) ( с ведущими нулями);
- если M меньше D+6 , то (D+6) литер , включая одну чифру после деся-
тичной точки.
WRITE (F,E:M:N) Выводит E в форме числа с фиксированной точкой. Если
неотрицательное число ER и положительное число P определяются как
IF E=0.0
THEN ER:=0.0
ELSE
BEGIN
ER:=ABS (S);
ER:=ER+0.5*10**(-N);
ER Округляется до N десятичных позиций
END;
IF
TRUNC (ER)=0
THEN P:=1
ELSE определить P так, что 10**(P-1)<=TRUNC(ER)<10**P
то представление числа E имеет вид :
- если M больше или равно P+M+2 , то (M-P-N-2) пробелов,
знак ('-' если ER<=>0 , в противонм случае пробел),
первые P цыфр ER,
- если M меньше P+N+2 , то (P+N+2) литер;
6) если E имеет тип BOOLEAN , то в файл F выводится представление слова
TRUE или слова FALSE. Это эквивалентно
WRITE (F, 'TRUE' *M или WRITE (F, 'FALSE':M);
7)если E имеет строковый тип , то в файл F выводится значение E, которому
предшествует (M-N) пробелов, если M>=N.
Если M<N,то выводятся символы строки с 1 по M включительно .
Если M опущено ,то значение по умолчанию есть M.
Процедура WRITE может быть использована для записи в файл,
который не является текстовым .
WRITE (F,X) Эквивалентно
BEGIN F^:=X; PUT (F) END.
4.4 Процедупа WRITELN
формат процедуры:
список-параметров - WRITELN = ['('( переменная-файл параметр WRITE) [','
параметр - WRITE ]')]
для процедуры справедливо следующее:
1) WRITELN (F,P1,...,PN); WRITELN (F) END;
BEGIN WRITE (F,P1,...,PN); WRITELN (F) END;
2) WRITELN (F) Приписывает маркер строки к файлу F.