Практикум по основам программирования. Язык Паскаль
.pdfВвод/вывод связан с обменом информацией между оперативной памятью и внешними носителями ин формации. В гл. 7 показано, что все операции ввода/вывода основаны на работе с последовательными файлами. Здесь же рассмотрены четыре процедуры ввода/вывода: READ, READLN, WRITE, WRTTELN, использующие стандартные файлы ввода/вывода.
Стандартный файл |
ввода имеет |
имя |
INPUT, выво |
||
д а - и м я |
OUTPUT. Эти имена передаются в виде |
па |
|||
раметров |
в заголовке |
программы. |
Как |
правило, |
про |
грамм без вывода не бывает, поэтому простейшая конструкция заголовка программы имеет вид PROGRAM < имя > (OUTPUT).
Работа с файлами в различных вычислительных системах реализуется по-разному, поэтому в дальней шем рассматриваются примеры ПАСКАЛЬ-программ с вводом/вьгводом, ориентированным на ОС-РАФОС для СМ ЭВМ.
Задание исходных данных. Ввод. Задание исход ных данных, над которыми должны выполняться пре образования в программе, можно организовать различ ными способами. Рассмотрим эти способы на приме
рах. |
В |
разделе констант |
задаются соответствующие |
|
1. |
||||
значения. При этом тип констант автоматически опре |
||||
деляется по содержимому правой части. |
Х=7Г3; |
|||
Вычислить |
Y=АХ^+КХ - Т |
при А=2,5; |
||
К= -17,5; Т=548. |
|
имеют |
||
Раздел констант и фрагмент программы |
||||
вид |
|
|
|
|
CONST А=2.5; Х=7.3; К= - 17.5; Т=548;
...BEGIN Y :=A »X*X +K *X -H ... END.
Именованным константам АДДС гтрйсвоится веще ственный тип, а константе с именем Т - целый.
Однако такой способ задания исходных данных не всегда удобен, так как фактически позволяет вычислять Y только для одного набора параметров.
Изменять значения констант в программе нельзя!
и
2. В разделе переменных описываются перемен ные А, X, К, Т, а в разделе операторов им присва иваются соответствующие значения:
VAR А . Х . К . Т , Y t R E A L : B E G I N
А : = 2 . 5 ; X: = 7 . 3 ;
К : = —1 7 . 5 ; Т : = 5 4 в . 0 ; У : = А * Х * Х + К ' * Х - Т ;
END.
В этом случае возможности варьирования значе ниями параметров расширяются, так как в программе можно организовать их изменение, однако набор пара метров будет статическим.
3. В заголовке программы задается имя стандарт ного файла-INPUT, а в разделе операторов использу ются операторы ввода READ или READLN. Эти опера торы позволяют выполнить программы с различными наборами исходных данных.
Ввод в языке ПАСКАЛЬ может быть только бесформатный. Можно вводить данные только целого, вещественного и символьного типов.
Данные набиваются на перфокарты или набираются на терминале, при этом разделителем между числами служит пробел или конец строки.
Разделитель между символами, между числом и символом не нужен.
Например, требуется ввести числа 2,5; 7,3; -17,5; 548,0. В разделе операторов программы должны стоять операторы READ или READLN. В отличие от операто ра READ оператор READLN после ввода всех указан ных в операторе данных осуществляет переход к сле дующей строке (перфокарте).
Возможны различные методы организации ввода этих чисел.
а) С использованием одного оператора READ:
VAR A,B,D,T:REAL;
BEGIN... READ(A,B,D,T);...END.
Информация набирается в виде 25 73 -17.5 548.0 на одной или нескольких строках (перфокартах), так как если чисел в строке больше нет, а список ввода не исчерпан, то автоматически осуществляется переход к новой строке (перфокарте). В результате выполнения оператора READ переменной А присвоится значение 2,5, переменной В - значение 7,3, D - значение - 17,5,
Т- значение 548,0.
Вдальнейшем рассматривается ввод/вывод только
стерминала в диалоговом режиме.
б) С использованием нескольких операторов READ:
. . . REAl)(A,B,D); READ(T);
Числа, соответствующие переменным А, В, D, Т, можно набирать так, как указано в пункте а).
в) С использованием операторов READ и READLN:
...READLN(A,B,D); READ(13;
Числа, соответствующие переменным A,B,D, наби раются на одной строке, а число, соответствующее пе ременной Т, - на другой, так как после окончания ра боты оператора READLN(A,B,D) оператор READ(T) мо жет считать данные только с начала следующей стро ки.
Ввод чисел целого и вещественного типов осуще ствляется одинаково. Отметим особенности ввода ин формации символьного типа:
-при наборе информации между символами раз делитель не Нужен;
-в начале работы в диалоговом режиме во вход
ном файле INPUT автоматически образуется пустая строка, состоящая из пробела и символа "конец стро ки" (особенности работы в ОС РАФОС для СМ ЭВМ). При вводе числовой информации этот пробел рассмат ривается как разделитель и игнорируется. При вводе символьной Информации пробел становится значащим символом и его надо пропустить.
Например, первыми в программе вводятся значе ния переменных X, Y символьного типа. Тоща фраг мент программы выглядит так:
...READLN; READ(X,Y);...
Первый оператор пропускает пустую строку, вто рой вводит два символа и присваивает их значения со ответственно переменным X и Y. В пакетном режиме первый оператор не нужен.
Вывод данных. Можно выводить данные всех че тырех стандартных типов (для булевского типа выво дится константа TRUE или FALSE).
Общий вид операторов вывода:
W RTTE(V1[:W1[:D1]]>...,Vn[:Wn[:D JD ;
W RITELN (V1[:W1[:D1]]I^ V n[:Wn[:Dn]]):
Здесь и далее в тексте квадратные скобки исполь зуются для обозначения необязательных частей опера торов. Оператор вывода WRITELN обеспечивает завер шение печати текущей строки. Следующий оператор вывода начинает печать с новой строки; Vjr ..,Vn - вы ражения, значения которых выводятся на печать; W; и D j- выражения целого типа, определяющие соответст венно общее число позиций и число позиций после запятой (D /-только для значений выражений вещест венного типа).
Если число литер в представлении выводимого значения оказывается меньше, чем W/, то оно слева дополняется пробелами. Если Wi опускается, то назна чается стандартная длина поля, зависящая от конкрет ной ЭВМ.
Примеры операторов вывода:
1. Организация вывода значений переменных А,В,С целого типа.
а) ...WRTTE(A,B); WRITE(C);...
Все числа печатаются на одной строке. Под каж дое число отводится стандартное количество позиций. Например, на ЕС ЭВМ 1045 отводится по 12 позиций, на СМ ЭВМ - по 13 позиций. Предположим, что пере менные А, В, С имеют соответственно значения 12,
- 25, 7. Для СМ ЭВМ* |
напечатанная строка имеет вид |
|
1 2 - 2 |
5 |
7 |
Аналогичный результат можно получить, написав один оператор WRITE(A, В, С).
б) ...WRTTELN(A,B); WRITE(C);...
В дальнейшем все примеры приводятся для машин этого
типа.
Значения А и В печатаются на одной строке. Следующий оператор вывода осуществляет печать со следующей строки. Результат печати:
12 |
-2 5 |
7 |
|
в) ...WRITE(A:2,B:5,C:4);...
В этом случае при печати под значение перемен
ной А отводится 2 позиции, |
под В - 5 позиций, под |
С - 4 позиции, т. е. 12 - 25 |
7 |
Если количество указанных позиций недостаточно, то происходит автоматическое увеличение поля до не обходимых размеров.
г) ...WRTTE(’A=; а л ; В=,’В:3,’ С = \ С:1);...
Здесь используется возможность вывода строк сим волов. При этом будет напечатано:
А=12 В= -2 5 С=7
2. Организация вывода вещественных чисел отли чается от вывода целых чисел тем, что в случае зада ния общего количества позиций под выводимую вели чину можно задать и количество позиций после запя той. Пусть переменные А, В, С - вещественного типа и в программе им присвоены соответственно значения - 641,536; 17841,1; -7,4385.
а) ...WIUTELN(A:6:2, В:9:2, С:8:4);... обеспечит следующую печать:
641.54 17841.10 - 7.4385
б) Если в операторе вывода указывается общее число позиций (W) и не указывается количество по зиций после запятой (D), то числа выводятся в эк споненциальной форме с шириной поля W. [В ОС РАФОС в этом случае длина поля будет стандартная (см. пункт в)].
в) Если в операторе вывода не указывается длина поля W, то под каждое число отводится стандартная длина поля и числа печатаются в экспоненциальной форме:
...WRITELN(A, В, С);...обеспечит печать в виде
6.415360Е+02 1.784110Е+04 - 7.438500Е+00
9. Какие операции определены над переменными бу левского типа?
10*. Какие из приведенных ниже записей
а) |
’А’< ’С’ |
б) |
Т > ’9’ |
в) |
FALSE<TRUE |
г) ’А’< ’В’ AND 1 < 2 |
|
д) |
O’ OR ’9’ |
е) |
(D’> ’G’) AND (1< 2) |
являются правильными с точки зрения языка ПАС КАЛЬ?
11. Записать на языке ПАСКАЛЬ следующие вы ражения:
д^ + З х -у |
c + d - tgx |
у |
* |
a sin x + e 11 |
|x| + rf |
12. Определить тип результата следующих выражений:
a) |
I*I+J*J+2*K/2 |
б) X < Y |
в) |
SIN(X)+2*COS(Y)+Z |
г) I+SQRT(J), |
если известно, что I, J, RINTEGER; X, Y, Z:REAL?
13*. Какие из приведенных ниже операторов присваи вания являются правильными:
а) X:=Y +SIN(SIN(Z)); |
б) |
A :=(X <Y ) OR В AND |
|
(1<>К); |
|
в) X := I+ J-B ; |
г) |
I:=I+K/J, |
если I, J, K:INTEGER; X, Y, Z:REAL; A, B:BOOLEAN? 14. Вычислить значения выражений, если А =2,5; В=7,8; С= -17,3; М=5; Х=8,7; E=TRUE:
а) (А +В )/О М б) 2+Х*Х/(Х+(А+В)/5)
в) (А <В ) AND (Х +А <В ) OR (С<М ) OR Е
15*. Записать приведенные ниже высказывания в виде выражений:
а) значение А не принадлежит интервалу (0,3); б) значение А принадлежит отрезку [-2,0]; в) значение А принадлежит одному из отрезков:
[ - 5 , -4 ], [0,2], [3.2,7];
г) точка А с координатами (X, Y) лежит внутри круга с цент ром в начале координат и радиусом 2,3;
д) точка А с координатами (X, Y) лежит на границе или вне единичного круга с центром в начале координат.
16. Можно ли вводить с помощью оператора READ значения булевского типа?
17*. Что получится в результате выполнения операто ров:
а) WRITE(’A’:3,2:1); WRTTELN(5*3.2);
б) WRITELN(5 < 6 r5< =6:8); WMTELN(’KbHEU’); в) WRrrELN(5*3.2:V РЕЗУЛЬТАТ)?
18*. Написать программу вычисления выражения:
5,23 + 7,62 + sin -
7
-----п н ———
sin — + 3,1
7
без использования оператора присваивания
1.6. ПРАКТИЧЕСКИЕ ЗАДАНИЯ
З А Д А Н И Е 1. ОРГАНИЗАЦИЯ ВВОДА/ВЫВОДА.
ИЗУЧЕНИЕ СТАНДАРТНЫХ ТИПОВ ДАННЫХ
Це л ь з а д а н и я
1.Освоение простейшей структуры программы.
2.Получение навыков в организации ввода/вывода зна
чений стандартных типов данных.
3. Получение практических навыков работы в диалого вом режиме.
П о с т а н о в к а з а д а ч и Организовать ввод и вывод данных заданных ти
пов, снабдив распечатки соответствующими заголовка ми.
С о д е р ж а н и е о т ч е т а
1.Постановка задачи.
2.Текст программы и результаты ее выполнения.
3.Выводы.
М е т о д и ч е с к и е у к а з а н и я 1. При вводе с терминала числа и символы можно на
брать как на одной строке, так и на различных стро ках. При этом следует помнить, что ввод со следую щей строки осуществляется в том случае, если преды дущим оператором является READLN. В интеракти вном режиме приняты соглашения о вводе и выводе, отличные от соглашений, действующих для пакетного режима.
2.Переменной логического типа можно присвоить зна чение либо в разделе констант, либо в операторе при сваивания. Вводить значения переменных логического типа нельзя.
3.При работе в диалоговом (интерактивном) режиме следует перед операторами ввода использовать опера тор вывода на экран приглашения - подсказки о том, что наступило время ввода информации и какой именно информации. Например: WRITELN (’ВВЕДИ ЦЕЛЫЕ ЧИСЛА К, L, М’).
4.Выводить данные следует двумя способами: в стан
дартной форме и с указанием ширины поля вывода, при этом выводимую информацию необходимо снаб
дить заголовками. |
|
|
|
|
|
|
||
5. |
Пример программы. |
|
L=12, М=21425, |
|||||
Исходные |
данные: |
К= - 73, |
||||||
Х= -4192.21, Y=21.345, Sl=’*\ S2=’V \ S3=’F . |
|
|||||||
PROGRAM INOUT <INPUT,OUTPUT >; |
|
|
|
|||||
CONST LOG=TRUE; |
X,Y:REAL; SI,S2,S3:CHAR; |
|
||||||
VAR |
K,L,M:INTEGER; |
|
||||||
BEGIN WRITELN! ВВЕДИ ЦЕЛЫЕ |
ЧИСЛА К ,L,M:*); |
|
||||||
|
READ!К,L ,М); |
'ЦЕЛЫЕ |
ЧИСЛА*); |
|
|
|||
|
WRITELN(' |
:30, |
:12, |
|
||||
|
WRITELN( |
': 15, |
*СТАНДАРТНЫЙ ФОРМАТ * |
|
||||
|
WRITELNC |
*ЗАДАННАЯ |
ШИРИНА |
ПОЛЯ *); |
|
|
||
|
,К ,L ,М , |
*s5, *К= *,К: 3, * L=*,L:2f* М=',М:5>; |
||||||
|
WRITELN; WRITELNСВВЕДИ ВЕЩЕСТВЕННЫЕ ЧИСЛА X,Y:*>; |
|
||||||
|
READLN(X,Y); |
|
|
|
|
|
|
|
|
WRITELNC |
':25, ‘ВЕЩЕСТВЕННЫЕ ЧИСЛА'); |
':18, |
|
||||
|
WRITELN(* |
*;5,'СТАНДАРТНЫЙ |
ФОРМАТ' |
|
||||
|
WRITELNC |
'ЗАДАННАЯ |
ШИРИНА |
ПОЛЯ'); |
Y=',Y:6:3>; |
|
||
|
':5, X,Y, |
':10, |
Х=',Х:8:2, |
|
||||
|
WRITELN; WRITELNС ВВЕДИ |
СИМВОЛЫ S1,S2,S3:>; |
|
|||||
|
READLN(SI,S?,S3); |
|
|
ПЕРЕМЕННЫЕ; ' Sl=',Sl, |
|
|||
|
WRITELNC |
':20, 'СИМВОЛЬНЫЕ |
|
|||||
|
|
S2=',S2,* S3=*,S3); |
|
5:' |
||||
|
WRITELN! ПЕЧАТЬ |
СИМВОЛЬНЫХ |
ПЕРЕМЕННЫХ С ШИРИНОЙ ПОЛЯ |
|||||
|
|
S 1:5,S2:5,S3:5); |
|
|
|
|||
|
WRITELN('ЛОГИЧЕСКАЯ ПЕРЕМЕННАЯ=',LOG); |
|
||||||
|
WRITELNC |
';35, 'ПРОГРАММУ ВЫПОЛНИЛА ВОЛКОВА'> |
|
|||||
END. |
|
|
|
|
|
|
|
|
П р о т о к о л р а б о т ы п р о г р а м м ы : |
|
|||||||
ВВЕДИ ЦЕЛЫЕ ЧИСЛА |
K,L,M: |
|
|
|
|
|
||
-73 12 21425 |
|
|
|
|
|
|
|
|
|
|
|
|
ЦЕЛЫЕ |
ЧИСЛА |
|
|
|
|
СТАНДАРТНЫЙ |
ФОРМАТ |
|
ЗАДАННАЯ ШИРИНА |
ПОЛЯ |
|||
|
-73 |
|
12 |
|
|
21425 |
К=-73 L=12 М=21425 |
ВВЕДИ ВЕЩЕСТВЕННЫЕ ЧИСЛА X.Y, |
|
-4192.21 21.345 |
|
ВЕЩЕСТВЕННЫЕ |
ЧИСЛА |
СТАНДАРТНЫЙ ФОРМАТ |
ЗАДАННАЯ ШИРИНА ПОЛЯ |
-4.192210Е+03 2.134500Е+01 |
Х=-4192.21 Y=21.345 |
ВВЕДИ СИМВОЛЫ SIrS2fS3:
*VF
СИМВОЛЬНЫЕ ПЕРЕМЕННЫЕ: Sl=# S2=V S3=F
ПЕЧАТЬ* СИМВОЛЬНЫХ ПЕРЕМЕННЫХ С ШИРИНОЙ ПОЛЯ 5: М F
ЛОГИЧЕСКАЯ ПЕРЕМЕННАЯ = TRUE
ПРОГРАММУ ВЫПОЛНИЛА ВОЛКОВА
вариантаНомер
1
2
3
4
5
6
7
Целые числа
|
Формат |
|
Количество |
стандартный |
ширина поля |
|
1 |
|
2 |
+ |
5 |
3 |
+ |
6 |
3 |
+ |
6 |
2 |
+ |
5 |
4 |
+ |
4 |
2 |
+ |
3 |
3 |
+ |
2 |
Варианты задания
|
Вещественные числа |
|
|
|
|||
|
|
Формат |
|
|
|
|
|
Количество |
стандартный |
ширина поля |
количество |
знаков пос ле точки |
Количество сим |
волов |
Вывести значе ние булевской переменной |
4 |
+ |
6 |
|
2 |
4 |
|
TRUE |
2 |
+ |
7 |
|
3 |
5 |
|
FALSE |
2 |
+ |
6 |
|
3 |
3 |
|
TRUE |
4 |
+ |
6 |
|
2 |
6 |
|
TRUE |
3 |
+ |
7 |
|
4 |
4 |
|
FALSE |
3 |
+ |
5 |
|
1 |
3 |
|
TRUE |
4 |
+ |
8 |
|
3 |
2 |
|
TRUE |