Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BPlab (работы по паскалю).pdf
Скачиваний:
33
Добавлен:
01.06.2015
Размер:
1.04 Mб
Скачать

27 –

10.Окружность на плоскости задается координатами x,y ее центра и радиусом r. Пусть заданы соответствующие характеристики пяти окружностей: (x1,y1,r1), (x2,y2,r2), ..., (x5,y5,r5). Найти среди этих окружностей все уединенные окружности, т.е. такие, которые не имеют общих точек ни с одной из остальных окружностей, не лежат целиком внутри и не заключают внутри себя какую-либо из остальных окружностей. Написать функции, проверяющие наличие общих точек у окружностей и включение одной окружности в другую.

11.Дано число a>0. Вычислить величину (3 a 6 a2 1) /(1 + 7 3 + a ) . Корни k x вычислить с

точностью ε=0,0001 по итерационной формуле y0=1, yn+1 = yn + (x/(yn)k-1 - yn)/k, n=0,1,2,…

Написать функцию для вычисления корня.

Контрольные вопросы

1.Заголовок функции. Тип функции.

2.Основной выходной параметр функции и побочные эффекты.

3.Формальные и фактические параметры.

4.Параметры-значения и параметры-переменные.

5.Вызов функции и возврат из функции.

6.Передача фактических параметров по ссылке и по значению.

7.Возврат значения.

8.Глобальные и локальные данные подпрограмм. Области видимости.

Лабораторная работа 8. Работа с текстовыми файлами

Основные сведения

Текстовый файл состоит из строк. Строки разделяются символом CR (код 13) – «возврат каретки», который может быть объединен с символом LF (код 10) – «перевод строки». Конец текстового файла обозначается символом Ctrl+Z (код 26).

Файловая переменная для текстового файла определяется следующим образом:

var имя_файловой_переменной : text;

Процедуры и функции для работы с текстовыми файлами:

assign(var F:text; FileName:string) – связывает файловую переменную F с именем файла FileName ;

reset(var F:text) – открывает файл F только для чтения ;

rewrite(var F:text) – создает и открывает для записи новый файл, связанный с файловой переменной F ;

append(var F:text) – открывает существующий файл F для дозаписи; close(var F:text) – закрывает файл F ;

eof(var F:text):boolean – возвращает TRUE , если уже достигнут конец файла или FALSE

– в противном случае;

eoln(var F:text):boolean – возвращает TRUE , если указатель файла находится на символе конца строки или конца файла, FALSE – в противном случае:

read(var F:text; var V1; var V2; …) – чтение из файла F значений переменных V1, V2, ... ; readln(var F:text; var V1; var V2; …) – аналогична read, но после ввода всех перемен-

ных V1, V2, ... указатель файла перемещается в начало следующей строки;

write(var F:text; V1; V2; …) – вывод в текстовый файл F значений переменных V1, V2, ...

Элемент вывода имеет вид имя_переменной[:ширина[:точность]];

writeln(var F:text; V1; V2; …) – делает то же, что и write , после чего помещает в файл признак конца строки.

28 –

Пример выполнения

Открыть два текстовых файла. Один, ранее уже созданный, для чтения, другой, новый, для записи. Переместить содержимое первого файла во второй, вставляя '?' перед каждым пробелом и '!' после каждого пробела, а также вставляя признак конца строки после каждых 50 символов.

program PRIMER; var

fInp,fOut

: text;

{входной и выходной файлы}

C

: char;

{текущий символ входного файла}

I

: integer;

{счетчик символов текущей строки выходного файла}

begin assign(fInp,'FOLD.TXT'); assign(fOut,'FNEW.TXT'); reset(fInp); rewrite(fOut);

I:=0;

while not eof(fInp) do begin while not eoln(fInp) do begin

read(fInp,C);

if C<>' ' then begin if I=50 then begin

writeln(fOut); {к новой строке выходного файла}

I:=0 {сброс счетчика символов текущей строки выходного файла} end;

write(fOut,C);

I:=I+1 end

else begin {встретился пробел} case I of

50: begin

writeln(fOut); write(fOut,'?'); write(fOut,' '); write(fOut,'!'); I:=3

end; 49: begin

write(fOut,'?'); writeln(fOut); write(fOut,' '); write(fOut,'!'); I:=2

end; 48: begin

write(fOut,'?'); write(fOut,' '); writeln(fOut); write(fOut,'!'); I:=1

end; else begin

write(fOut,'?'); write(fOut,' '); write(fOut,'!');

I:=I+3 end

end { case I of } end

end; { while not eoln(fInp) } readln(fInp)

end; { while not eof(fInp) } close(fInp);

29 –

close(fOut)

end.

Варианты заданий

1.Создать текстовый файл с произвольным содержимым. Поменять местами четные и нечетные строки файла (первую со второй, третью с четвертой и т.д.), а затем добавить в выходной файл строку, содержащую количество строк в файле.

2.Создать текстовый файл с произвольным содержимым. Вставить в начало каждой строки её порядковый номер и пробел, а затем дописать в конец файла строку, в которой указывается количество строк файла.

3.Создать текстовый файл с произвольным содержимым. Написать программу, которая изменяет файл таким образом, что каждое его слово, содержащее хотя бы одну цифру, заключается в скобки, а затем дописывает в конец файла строку, в которой указывается количество слов, заключенных в скобки. Под словом понимается любая последовательность символов, разделенная пробелом, концом строки или концом файла.

4.Создать текстовый файл с произвольным содержимым. Написать программу, которая заменяет каждую пустую строку файла на строку «Пустая строка», а затем дописывает к файлу строку, в которой указывается количество найденных (и замененных) пустых строк.

5.Создать текстовый файл, содержащий программу на языке Pascal. Написать программу, которая проверяет соответствие открывающих и закрывающих круглых скобок в программе. При обнаружении первой несоответствующей скобки её с двух сторон выделить символами ?. В конец файла дописать строку с результатом проверки: «Все в порядке» или «Обнаружено

несоответствие».

6.Создать текстовый файл с произвольным содержимым. Написать программу, которая удаляет пробелы в конце каждой строки файла (если они есть), а затем дописывает к файлу новую строку, в которой указывается количество удаленных пробелов.

7.Создать текстовый файл с произвольным содержимым. Переформатировать файл так, чтобы каждая его строка содержала 30 символов (кроме, возможно, последней), а затем добавить к файлу строку, в которой указать количество полных (по 30 символов) строк файла.

8.Создать текстовый файл с произвольным содержимым. Написать программу, которая меняет местами в файле четные и нечетные слова (первое со вторым, третье с четвертым и т.д.), а затем добавляет в конец файла строку, содержащую количество строк в файле. Под словом понимается любая последовательность символов, ограниченная пробелом, концом строки или концом файла.

9.Создать текстовый файл с произвольным содержимым. Написать программу, которая после каждого слова записывает в файл количество символов в этом слове, а после этого дописывает в конец файла строку, в которой указывается количество слов в файле. Под словом понимается любая непустая последовательность символов, ограниченная символами пробела, табуляции, конца строки или конца файла.

10.Создать текстовый файл с произвольным содержимым. Написать программу, которая заменяет в файле все буквосочетания аяна иеи дописывает в конец файла строку с указани-

ем найденного количества сочетаний ая.

11. Создать текстовый файл с произвольным содержимым. Написать программу, которая меняет порядок символов в каждой строке файла на противоположный, а затем добавляет в конец файла новую строку, в которой указывается количество символов в самой длинной строке файла.

Контрольные вопросы

1.Назначение процедуры assign ?

2.Отличие процедур rewrite и append ?

3.Типичный фрагмент последовательного чтения всего файла.

4.Назначение функции eof.

5.Вывод числовых переменных.

30 –

Лабораторная работа 9. Работа с типизированными файлами и записями

Основные сведения

Типизированный файл состоит из последовательности записей одной и той же структуры. Структура записи задается типом, который может быть как стандартным, так и заданным в программе. Запрещено создавать файлы файлов и файлы объектов, а также файлы структурированных компонентов, содержащих файлы и объекты. Записи файла нумеруются начиная с

0.

Файловая переменная для типизированного файла задается следующим образом:

var имя_файловой_переменной : file of тип_записи_файла;

Процедуры и функции для работы с типизированными файлами:

assign( var F; FileName:string ) – связывает файловую переменную F с именем файла

FileName ;

reset( var F ) – открывает существующий файл F для операций чтения и записи; rewrite( var F ) – создает новый файл F и открывает его для операций чтения и записи; close( var F ) – закрывает файл F ;

eof( var F ):boolean – возвращает TRUE, если достигнут конец файла, и FALSE – в противном случае;

read( var F; var X1; var X2; … ) – ввод данных из файла F в переменные X1, X2, …, тип которых должен совпадать с типом записи файла. После чтения записи указатель файла устанавливается на запись, следующую за последней прочитанной;

write( var F; X1; X2; … ) – вывод в файл F переменных X1, X2, …, тип которых должен совпадать с типом записи файла. После вывода каждой переменной указатель файла устанавливается на запись, следующую за только что выведенной;

filesize( var F ): longint – возвращает количество записей в открытом файле F ; filepos( var F ): longint – возвращает номер записи открытого файла F, на которой

находится указатель;

seek( var F; N: longint ) – устанавливает указатель в открытом файле F на запись с номером N ;

truncate( var F ) – усекает открытый файл F отбрасыванием всех его записей, начиная с текущей, до конца файла.

Запись – это тип данных, состоящий из набора компонентов, называемых полями. Поля могут быть любых допустимых в языке типов.

Описание типа записи и переменной записи:

type имя_типа_записи = record имя_поля_1: тип_поля_1; имя_поля_2: тип_поля_2;

...

имя_поля_N: тип_поля_N end;

var имя_переменной_записи:имя_типа_записи;

Обращение к полям переменной записи: имя_переменной_записи.имя_поля

Над полями записей можно выполнять любые действия, доступные для переменных типа соответствующего поля.

Пример выполнения

Имеется файл STUD.DAT, содержащий данные о студентах: фамилию, имя, отчество, номер

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]