Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
YaP_laby.pdf
Скачиваний:
159
Добавлен:
31.05.2015
Размер:
915.49 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ

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

Задания

1.Изучить:

а) правила записи символьных данных (констант, переменных, мас-

сивов) и их описание; б)способы ввода и вывода символьных данных;

в)способы обработки символьных данных; г) использование функций обработки символьных данных;

д)правила составления программ с использованием символьных данных;

е) основную терминологию, связанную с файловыми структурами данных.

ж) возможности языка программирования по обработке файла с последовательной организацией: записи данных в файл, ввод из файла, до записи данных в файл и т. п.

2.Разработать алгоритм решения в соответствии с заданием.

3.Составить программу решения задачи.

4.Подготовить тестовый вариант программы и исходных данных.

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

1.Указать, какие операции можно выполнять над символьными данными.

2.Указать способ описания символьных данных.

3.Назвать специальные функции, используемые для обработки символьных данных.

4.Объяснить, что означают следующие термины: файл, запись, метод

доступа, структура записи?

7.Каково назначение операторов открытия и закрытия файлов на языке программирования?

8.Допустимы ли различные типы данных для элементов одной записи?

9.Указать, с помощью, каких операторов выполняется запись данных в файл последовательного доступа, чтение из файла?

10.Привести пример использования файлов последовательного доступа.

11.Как распознать конец файла данных?

12.Какому коду эквивалентно выражение *s++;

Языки программирования. Метод. указания по лаб. работам

-41-

ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ

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

Обрабатываемый текст программа считывает из файла.

1.Подсчитать количество слов во введенном тексте.

2.Подсчитать количество предложений во введенном тексте.

3.Напечатать в столбик первые слова всех предложений текста.

4.Напечатать в столбик последние слова всех предложений текста.

5.Определить и напечатать слова максимальной длины.

6.Определить и напечатать слова минимальной длины.

7.Определить, в каком по счету предложении впервые встретилось заданное слово.

8.Напечатать предложение, в котором впервые встретилось заданное

слово.

9.Напечатать последовательно все двойные буквы (в слове подряд две одинаковых).

10.Подсчитать количество букв, которые встретились в тексте двойными.

11.Напечатать текст, заменив все буквы е на буквы е.

12.Напечатать текст, выпустив все гласные буквы.

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

14.Подсчитать количество встретившихся в тексте цифр.

15.Проверить правильность написания чисел в тексте. Встретившиеся

вначале числа незначащие нули опустить. Исправленный текст напечатать.

16.Прочитать текст построчно справа налево, напечатать.

17.Напечатать текст, выпустив повторяющиеся пробелы между словами.

18.Напечатать в столбик все аббревиатуры из текста.

19.Проверить правильность написания знаков пунктуации. Слева от знака пунктуации пробел не ставится, справа ставится один пробел. Исправленный текст напечатать.

20.Округлить все имеющиеся в тексте числа, оставив после точки две

цифры.

21.Напечатать последовательно первые буквы всех слов текста.

22.Напечатать последовательно последние буквы всех слов текста.

23.Напечатать последовательно все гласные буквы из текста.

24.Напечатать все отрицательные числа из текста.

25.Напечатать все положительные числа из текста.

26.Выдать строки по возрастанию количества слов в них.

27.Даны две строки. Определить, состоят ли они из одних и тех же симво-

лов.

28.Выдатьслова,которыеначинаютсяизаканчиваютсяоднойитойжебуквой.

29.Выдать слова, у которых первый символ совпадает с первым, а последний – с последним.

30.Выдать строки, в которых есть слова с тремя буквами у.

Языки программирования. Метод. указания по лаб. работам

-42-

// str Константа с разделителями.
// sr для строки из файла. // st для слова из строки.

ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ

Примеррешениявариантазадания

Подсчитать количество слов, которые начинаются с гласной буквы. Текст вводить из файла.

Анализ задачи. Начальные данные:

а) строковая константа для разделителей; б)строковая константа для гласных букв; в) переменная ch для символа текста;

г) переменная k для числа символов в слове; д)строка для текста из файла; е) строка для формирования слова из текста;

ж) переменная i для параметра цикла (индекса элементов строк); з) файловая переменная для указателя файла;

и)параметр n для подсчета слов, которые начинаются с гласных букв. Основой для решения задач из данного раздела является программа для

выделения слова из текста. Данная программа подробно разбирается в лекциях методического комплекса и ее код приведен ниже.

Программа выделяет слово из текста. void main()

{FILE *f1;

char *str = ",. !?:;:'\n\0"; char ch = ' ';

char st[81], sr[81];

int k = -1, i;

 

clrscr();

 

f1 = fopen("str_w.dat", "r");

 

do

 

{ fgets(sr,80,f1);

// Ввод строки из файла.

for (i = 0; i < strlen(sr); i++)

// Начало цикла по i.

{ ch = sr[i];

 

if (strchr( str,ch) ) // Если символ не разделитель, то иди на // формирование слова.

{

// Если слово сформировано, значение k не равно –1.

if (k != -1)

{

// Определяем индекс для символа \0 (конец строки).

 

k++;

 

st[k] = '\0';

// Из массива символов st формируем строку.

 

//___________________________________________________________

 

cout << "\n" << st; // Вывод слова на экран.

 

//______________________________________________________________

 

 

 

Языки программирования. Метод. указания по лаб. работам

-43-

ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ

Пример решения варианта задания

 

k = -1;

// Устанавливаем k = –1.

}

}

 

else

 

{

// Формируем слово.

 

 

k++;

// Определяем индекс k для текущего символа слова.

 

st[k] = ch;

// В массив для слова st засылаем текущий символ.

}

}

// Конец цикла по i.

}

while (!feof(f1)); // Конец цикла по считыванию текста из файла.

fclose(f1);

 

getch(); }

 

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

cout << "\n" << st; // Вывод слова на экран.

заменить на коды:

if (strchr( stb,st[0]) ) // Если у слова первая буква гласная, { cout << "\n" << st; // то слово выводится на экран.

n++; }

Здесь stb – строковая константа с набором гласных букв; st – строка с текущим словом; strchr() – стандартная функция из файла string.h. Эта функция определяет, содержится ли символ st[0] в строке stb.

В других задачах сформированное слово надо преобразовать по определенным правилам.

void main()

{

FILE *f1;

char *str = ",. !?:;:'\n\0"; // str Константа с разделителями.

char *stb=“aAeEyYuUiIoOjJаАуУеЕыЫоОэЭяЯиИюЮ”; // Константа

char ch = ' ';

// с гласными

 

char st[81], sr[81];

// sr для строки из файла.

 

// st для слова из строки.

int k = -1, i, n =0; clrscr();

f1 = fopen("str_w.dat", "r");

Языки программирования. Метод. указания по лаб. работам

-44-

ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ

Пример решения варианта задания

do

 

 

 

{

 

 

 

fgets(sr,80,f1);

 

 

// Ввод строки из файла.

for (i = 0; i < strlen(sr); i++)

// Начало цикла по i.

{

 

 

 

ch = sr[i];

 

 

 

if (strchr( str,ch) ) //

Если символ не разделитель, то иди на

{

// формирование слова.

// Если слово сформировано, значение k не равно –1.

if (k != -1)

{

// Определяем индекс для символа \0 (конец строки).

k++;

st[k] = '\0';

// Из массива символов st формируем строку.

//___________________________________________________________

if (strchr( stb,st[0]) )

// Если у слова первая буква гласная,

{ cout << "\n" << st;

//то слово выводится на экран.

n++;

 

 

 

}

 

 

 

//_______________________________________________

 

k = -1;

// Устанавливаем k = –1.

}

}

 

else

 

{

// Формируем слово.

 

 

k++;

// Определяем индекс k для текущего символа слова.

}

st[k] = ch;

// В массив для слова st засылаем текущий символ.

 

 

}

 

// Конец цикла по i.

} while (!feof(f1)); // Конец цикла по считыванию текста из файла.

fclose(f1);

 

if ( n!= 0)

 

cout

<< “Число слов, которые начинаются с гласных букв= ”

else

<< n << “\n”;

 

 

cout

<< “Слов, которые начинаются с гласных букв нет\n ”;

getch(); }

 

Языки программирования. Метод. указания по лаб. работам

-45-

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