Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцый для 1 курса-1 семестр.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
2.95 Mб
Скачать

Тэкставыя стандартныя файлы

У мове Pascal прадугледжаны стандартны від сувязі. Для гэтага апі­са­ны два тэкставыя файлы: Input і Output.

Існуюць чатыры працэдуры, пры дапамозе якіх здзяйсняюцца апе­ра­цыі ўводу-вываду даных, звязаныя з файламі тыпу Text:

Інфармацыя ідзе з клавіятуры ў стандартны файл Input, стандартны файл Output звязаны з дысплеем. Працэдуры ўводу-вываду могуць быць як з параметрамі, так і без іх. Калі ўводзім (ці выводзім) некалькі даных, яны аддзяляюцца ў спісе ўводу (вываду) коскай.

Апісанне тэкставага файла:

Var Ft : text;

Фарматы працэдур для чытання (уводу) інфармацыі з тэкставага фай­ла:

Read(Ft, x);

Read(Ft, x1, …, xn);

дзе першы параметр Ft – імя файлавай пераменнай, а другі – пераменная даз­во­ле­на­га тыпу, у якую ўводзіцца нейкае значэнне. Калі Ft = Input, та­ды ў аператарах уводу імя файла можа быць апушчана.

Read і Readln – працэдуры без параметраў. Чакаецца любы ўвод з кла­ві­я­ту­ры (паўза).

Аператар Read(Input, x) эквівалентны аператару Read(x); апе­ра­тар Read(Input, x1, …, xn) – аператару Read(x1, …, xn). Апе­ра­тар Read(Ft,x1, …, xn) эквівалентны раду аператараў: Read(Ft,x1); Read(Ft,x2); …; Read(Ft,xn); аператар Readln(Ft,x1, …, xn) – нас­туп­на­му раду аператараў: Read(Ft,x1); Read(Ft,x2); …; Readln(Ft,xn), дзе x1, …, xn – пераменныя да­пуш­ча­ль­ных тыпаў.

Фарматы працэдур для вываду інфармацыі ў тэкставы файл:

Write(Ft, x); Writeln(Ft, x);

Write(x); Writeln(x);

Працэдура Write(Ft, x1, …, xn) эквівалентная Write(Ft, y1); …; Write(Ft, yn).

Працэдура Writeln(Ft, x1, …, xn) эквівалентная Write(Ft, y1); …; Writeln(Ft, yn), дзе першы параметр Ft – імя файлавай пе­ра­мен­най тыпу text.

Калі Ft  Output, тады яго можна апусціць.

Writeln(Ft) {выводзіць пусты радок у файл Ft}

Writeln {выводзіць пусты радок у файл Output}

Заўвага. Значэнні, якія выводзяцца, аўтаматычна пераўтворацца з унут­ра­на­га ўяўлення ў сімвальнае; значэнні, якія ўводзяцца, – з сім­ва­ль­на­га ўяўлення ва ўнутранае.

Увод даных розных тыпаў

Тып пераменных пры ўводзе з клавіятуры можа быць толькі прос­тым, не ўнутраным (г. зн. цэлым, сапраўдным, сімвальным) ці радковым або сумяшчальным з імі (дыяпазоны).

 Пры ўводзе лікавыя значэнні павінны набірацца па пра­ві­лах сін­так­сі­су. Два лікі лічацца раздзеленымі, калі паміж імі ёсць хоць адзін пра­бел, ці сімвал(ы) табуляцыі (#9), ці канец радка (#13#10).

 Калі ўводзіцца сімвальнае значэнне, тады ў адпаведную пераменную за­пі­шац­ца чарговы сімвал за апошнім, уведзеным да гэтага.

Напрыклад, няхай апісаны дзве сімвальныя пераменныя c1, c2: VAR c1, c2 : Char. Вынік выканання аператара Read(c1, c2) прад­стаў­ле­ны ў наступнай табліцы.

Уведзена з клавіятуры

c1

c2

аб

'а'

'б'

аб

'а'

#13

#13

#10

Сімвал  азначае націсканне клавішы ўводу <Enter>.

 Увод радкоў. Пачатак радка ідзе адразу за апошнім уведзеным да гэ­та­га сімвалам (з першай пазіцыі, калі радковая пераменная стаіць пер­шай у спісе ўводу). Чытаецца колькасць сімвалаў, роўная аб­’­яў­ле­най даўжыні радка. Але калі ў час чытання пападаецца сімвал #13, та­ды чытанне радка спыняецца, але сам сімвал #13 у радковую пе­ра­мен­ную не за­піс­ва­ец­ца, бо ён служыць раздзяляльнікам радкоў.

 Як увесці булеўскае значэнне? Паколькі гэта ўнутраны тып і ён не пры­ста­са­ва­ны да ўводу, то можна прымяніць наступную хітрасць:

VAR by : Byte;

boo : Boolean ABSOLUTE by;

{дазваляе пераменную boo размясціць на месцы

пераменнай by і ўвесці значэнне ў by}

. . .

Read(by);

{закадзіруйце 0 = False, 1 = True і ўвядзіце з клавіятуры 0 ці 1 – гэта і будзе лічыцца булеўскім значэннем}

Пасля набору даных для адной працэдуры Read націскаецца клавіша ўво­ду <Enter>. Значэнні пераменных павінны ўводзіцца ў строгай ад­па­вед­нас­ці з парадкам пералічэння іх у спісе ўводу і з сінтаксісам мовы. Калі ж, напрыклад, x1 мае тып Integer, а пры ўводзе набіраецца зна­чэнне ты­пу Char (значыць, нейкі сімвал), то ўзнікне памылка ўводу-вы­ва­ду. Па­ве­дам­лен­не аб памылцы мае наступны выгляд: I/O error XX, дзе XX – код па­мыл­кі. Тлумачальны тэкст у даведніках дапаможа вызна­чыць прычыну праг­рам­на­га перарывання.

Прыклад.

VAR I : Real;

J : Integer:

K : Char;

BEGIN

Read(I, J, K);

Набяром першы варыянт уводу: 235.98 100 G

Гэта добры ўвод, і адбудзецца наданне значэнняў, але пераменная К ат­ры­мае не значэнне 'G', а прабел:

I := 235.98; J := 100; K := ' ';

Набяром другі варыянт уводу: G 235.98 100

Другі варыянт выкліча памылку ўводу, бо для пераменнай I тыпу Real уводзіцца значэнне тыпу Char.

Паколькі інфармацыя пападае ў буфер уводу, то калі ў праграме ёсць не­ка­ль­кі Read, даныя для кожнага ўводзяцца патокам, і іх можна набі­раць у ад­ным радку да яго заканчэння.

Напрыклад, няхай A, B – Integer, C, D – Real. Разгледзім фраг­мент уводу:

Read(A, B); Read(C, D);

Набіраем значэнні для ўводу адзін за другім без пераходу на новы ра­док: 1875 34 2.62 1.54E+01 <Enter>. Аднак пасля кожнага ліку мож­на націскаць <Enter>.

Працэдура ўводу Readln аналагічна Read, за выключэннем таго, што пас­ля счытвання апошняга ў спісе значэння для апошняй пераменнай ад­бы­ва­ец­ца пераход курсора на наступны радок. Аператар Readln(fv, x1, …, xn) эквівалентны аператарам Read(fv, x1); Read(fv, x2); …; Readln(fv, xn).

Фактычна інфармацыя ідзе ў буфер уводу, а затым адлюстроўваецца на экране.

Калі ідзе чытанне з Input ці з тэкставага файла, які назначаецца на эк­ран, уводзіцца адзін радок уваходнага тэксту за адну аперацыю. Радок за­па­мі­на­ец­ца ва ўнутраным буферы тэкставага файла, і калі радок чыта­ецца, гэ­ты буфер выкарыстоўваецца як уваходная крыніца. Масівы ўводзяцца паэлементна, запісы – па палях. Увод мностваў не прадугледжаны.