Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по основам программирования. Язык Паскаль

.pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
6.27 Mб
Скачать

Ввод/вывод связан с обменом информацией между оперативной памятью и внешними носителями ин­ формации. В гл. 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