Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания.pdf
Скачиваний:
81
Добавлен:
13.02.2015
Размер:
1.2 Mб
Скачать

17.ЛАБОРАТОРНАЯ РАБОТА №15 «ТЕКСТОВЫЕ ФАЙЛЫ»

Цель работы: Сформировать навыки по созданию и использованию текстовых файлов средствами изучаемого языка программирования

13.1 Примеры решения задач с использованием текстовых файлов

Пример 17.2 Найти слово максимальной длины в текстовом файле.

В листинге 17.2 приводится решение этой задачи с использованием динамического массива, что позволит модернизировать данное решение для других задач, связанных с анализом слов в файле, таких как: сортировка слов, поиск одинаковых слов и т.д.

Процедура strToArray(var mas:tarr; strTmp:string) преобразует

все передаваемые в нее строки strTmp в слова, причем слова помещаются в динамический массив mas.

Процедура printArray(mas:tArr;mode:boolean;count:word=0) печа-

тает на экране слова из массива mas. Если параметр mode=true, то слова печатаются каждое с новой строки, в противном случае слова печатаются через пробел в одну строку. Опциональный параметр count позволяет указать количество печатаемых слов, когда count=0 и когда count больше длины передаваемого массива печатаются все слова из этого массива, в противном случае печатается count первых слов.

Функция maxWord(mas:tarr):string возвращает самое длинное слово из массива слов.

Листинг 17.2

type Tarr=array of string[20]; //процедура преобразующая передаваемые //в нее строки в массив //Задаем константу-множество разделителей

const delimeters:set of char =[chr(9),chr(10), chr(13), chr(32)..chr(34),chr(37)..chr(47), chr(58)..chr(63), chr(91)..chr(94),chr(123)..chr(127)];

procedure strToArray(var mas:tarr; strTmp:string); var

i:byte;

len:word; begin

setlength(mas,length(mas)+1);

len:=length(mas);

strTmp:=trim(strTmp);

115

for i := 1 to length(strTmp) do begin

if not (strTmp[i] in delimeters) then mas[len-1] := mas[len-1] + strTmp[i]

else

if length(mas[len-1]) > 0 then begin

setlength(mas,len+1);

inc(len);

end;

end;

end;

//Печать массива

procedure printArray(mas:tArr;mode:boolean;count:word=0); var

i:word; begin

i:=0;

if (count=0)or (count>=length(mas)) then while length(mas[i])>0 do

begin

//false - write, true - writeln

if mode then

writeln(mas[i])

else write(mas[i],' '); inc(i);

end

else

for i:=0 to count do writeln(mas[i]);

end;

//функция поиска слова с максимальной длиной function maxWord(mas:tarr):string;

var i:word;

max_word:string; lenMax:byte; begin

max_word:=mas[0]; lenMax:=length(max_word); i:=1;

while length(mas[i])>0 do begin

if lenMax<length(mas[i]) then begin

max_word:=mas[i];

116

lenMax:=length(max_word); end;

inc(i);

end; result:=max_word;

end;

var f:text; i:word;

mas_str:tarr; strtmp:string; begin

repeat

write('Input file name: '); readln(strtmp);

{$I-} AssignFile(f,strtmp); reset(f);

{$I+}

if IOResult<>0 then writeln('File not found')

else break; until false;

//чтение строк из файла и формирование массива while not Eof(f) do

begin readln(f,strtmp);

strToArray(mas_str,strtmp); end;

printArray(mas_str,false); //печать всего массива writeln;

writeln('word with max length: ',maxWord(mas_str)); readln;

end.

13.2Задания к лабораторной работе №15

Взаданиях 1—30 исходные текстовые файлы создаются с помощью ка- кого-либо текстового процессора.

1.Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами.

2.Дан файл, содержащий произвольный текст. Выяснить, чего в нем больше: русских букв или цифр.

117

3.Дан файл, содержащий текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.

4.Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или восклицательным знаком). Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложение.

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

6.Дан файл, содержащий текст на русском языке. Определить, сколько раз встречается в нем самое длинное слово.

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

8.Дан файл, содержащий текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте.

9.Дан файл, содержащий текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово.

10.Дан файл, содержащий текст на русском языке и некоторые два слова. Определить, сколько раз они встречаются в тексте и сколько из них — непосредственно друг за другом.

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

12.Дан файл, содержащий текст и арифметические выражения вида a(x)b, где ®— один из знаков +, -, , /. Выписать все арифметические выражения

ивычислить их значения.

13.Даны файл, содержащий текст на русском языке, и некоторые буквы. Найти слово, содержащее наибольшее количество указанных букв.

14.Дан файл, содержащий текст на русском языке, и некоторая буква. Подсчитать, сколько слов начинается с указанной буквы.

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

16.Дан файл, содержащий текст, включающий русские и английские слова. Подсчитать, каких букв в тексте больше — русских или латинских.

17.Дан файл, содержащий текст. Сколько слов в тексте? Сколько цифр

в тексте?

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

118

строчными и наоборот.

19.Дан файл, содержащий зашифрованный русский текст. Каждая буква заменяется на следующую за ней (буква я заменяется на а). Получить в новом файле расшифровку данного текста.

20.Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст. Слова в тексте разделены пробелами и знаками препинания. Файл f2 содержит не более 30 слов, которые разделены запятыми. Эти слова образуют па-

ры: каждое второе является синонимом первого. Заменить в файле f1 те слова, которые можно, их синонимами. Результат поместить в новый файл.

21.Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не более одного пробела. Результат поместить в новый файл.

22.Дан текстовый файл и некоторое слово. Напечатать те строки файла, которые содержат данное слово.

23.Дан текстовый файл. Напечатать в алфавитном порядке все слова из данного файла, имеющие заданную длину n.

24.Текстовый файл содержит запись многочлена некоторой степени с одной переменной х, коэффициенты многочлена — целые. Например, 5x^4- 3x^3+15x^2-4. Указать степень многочлена, его коэффициенты. Дописать в указанный файл таблицу значений этого многочлена на данном отрезке [а, b].

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

26.Дан файл, содержащий текст на русском языке. Подсчитать количество слов, длиной 3 буквы.

27.В файл вместо букв через запятую записаны их кода в CP-866, записать в новый файл буквы соответствующие кодам из первого файла.

28.Дан текстовый файл, определить, сколько в нем предложений.

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

30.В файле слова зашифрованы — каждое из них записано наоборот. Расшифровать файл.

119