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

Рацеев.Лабораторные по информатике

.pdf
Скачиваний:
80
Добавлен:
18.04.2015
Размер:
680.77 Кб
Скачать

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

Во входном файле (FIn) задана последовательность записей, характеризующих некоторое множество студентов.

Для целей быстрого поиска в базе данных создаются индексные файлы. Записи этих файлов состоят из двух полей: ключевого, т. е. поля, по которому проводится поиск (например, поля Фамилия), и поля указателя на ту запись в файле базы данных, в которой находится искомое поле. Ключевые поля в индексных файлах отсортированы либо по алфавиту, либо по возрастанию ключа.

Сформировать индексные файлы по полям fam, name и age. Например, файл по полю fam может иметь следующий тип: struct F_In

{

char fam[20];

{ключ}

long index;

{индекс}

};

7. ФИНАНСОВЫЕ ДОКУМЕНТЫ БУХГАЛТЕРИИ Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

int year;

{год рождения}

float zarpl;

{заработная плата}

};

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

Требуется в выходной файл (FOut) записать все фамилии работников без повторения в отсортированном виде:

struct Rec2

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

};

8. ПЕРЕВОД ЧИСЛИТЕЛЬНЫХ В СЛОВЕСНУЮ ФОРМУ Входной файл содержит структуры:

struct Rec1

{

long nomer; {номер записи в файле}

33

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

char wares[20];

{наименование товара}

long price;

{цена (до 999 миллионов)}

};

Перевести цену товара, данную как натуральное число, в словесную форму, например: 123567 – сто двадцать три тысячи пятьсот шестьдесят семь. 11908100 – одиннадцать миллионов девятьсот восемь тысяч сто.

Результаты перевода поместить в файл (FOut) типа: struct Rec2

{

long nomer; char rez[200];

};

причем поле Rez представить в формате: <Wares> - <словесная форма>.

9. ФИНАНСОВЫЕ ДОКУМЕНТЫ БУХГАЛТЕРИИ Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

int year;

{год рождения}

float zarpl;

{заработная плата}

};

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

Требуется в выходной файл (FOut) записать все те записи о работниках, которые среди самых молодых имеют наибольшую заработную плату:

struct Rec2

{

char name[20];

{фамилия}

int year;

{год рождения}

float zarpl;

{заработная плата}

};

10. СТУДЕНЧЕСКАЯ ГРУППА Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

34

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

char name[20];

{фамилия}

int year;

{год рождения}

float sred;

{средний балл}

};

 

Во входном файле

(FIn) задана последовательность записей, которые

содержат информацию о студентах некоторой группы.

Требуется в выходной файл (FOut) записать все те записи о студентах, которые среди самых молодых имеют наибольший средний балл:

struct Rec2

 

{

 

char name[20];

{фамилия}

int year;

{год рождения}

float sred;

{средний балл}

};

 

11. СТУДЕНТЫ ФАКУЛЬТЕТА Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

int year;

{год рождения}

char group[20];

{группа}

float sred;

{средний балл}

};

Во входном файле (FIn) задана последовательность записей, которые содержат информацию о студентах некоторого факультета.

Требуется в выходной файл (FOut) записать все те записи, студенты которых принадлежат какой-то одной конкретной группе, причем записи должны быть отсортированы в алфавитном порядке относительно фамилий:

struct Rec2

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

int year;

{год рождения}

float sred;

{средний балл}

};

12. ЧАСТОТНЫЙ СЛОВАРЬ Входной файл содержит структуры:

struct Rec1

35

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

{

 

 

 

 

 

 

 

int nomer;

 

{номер записи в файле}

 

 

char word[30];

{слово}

 

 

 

 

};

 

 

 

 

 

 

 

Во входном файле (FIn) задана последовательность слов, состоящих

только из латинских букв.

 

 

 

 

 

 

Частотный

словарь

это

отсортированная

по

алфавиту

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

Требуется построить частотный словарь только симметричных слов и записать его в выходной файл (FOut) типа:

struct Rec2

 

{

 

char word[30];

{ слово словаря }

int frequency;

{ частота }

};

 

13. ОБРАБОТКА ТЕКСТОВ Входной файл содержит структуры:

struct Rec1

{

int nomer;

{номер записи в файле}

char text[300];

{текст}

};

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

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

(FOut):

struct Rec2

{

int nomer;

{номер записи в файле}

char word[50];

{ слово }

};

14. ОБРАБОТКА ТЕКСТОВ Входной файл содержит структуры:

struct Rec1

{

int nomer;

{номер записи в файле}

36

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

char text [300]; {текст}

};

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

Требуется из текста, который содержится в очередной записи, выделить такое слово, которое встречается наибольшее количество раз в тексте, и записать его в выходной файл (FOut):

struct Rec2

{

int nomer;

{номер записи в файле}

char word[50];

{ слово }

int frequency;

{ частота }

};

15. СТУДЕНТЫ ФАКУЛЬТЕТА Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

char name[20];

{фамилия}

int year;

{год рождения}

char group[20];

{группа}

};

Во входном файле (FIn) задана последовательность записей, которые содержат информацию о студентах некоторого факультета.

Если в каких-то различных группах встречаются студенты с одинаковой фамилией, то в выходной файл (FOut) записать все такие записи:

struct Rec2

{

char name[20];

{фамилия}

int year;

{год рождения}

char group[20];

{группа}

};

16. РАБОТА С ФАЙЛАМИ Входной файл содержит структуры:

struct Rec1

{

long nomer;

{номер записи в файле}

37

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

char fileName[50]; {полный путь к файлу}

};

Во входном файле (FIn) задана последовательность записей, которые содержат полный путь к тому или иному файлу на жестком диске.

Требуется из полного имени файла fileName выделить только имя файла и записать его в переменную name. При считывании очередной записи из входного файла, требуется проверить, имеется ли файл с именем fileName на жестком диске. Если такой файл имеется, то в переменную flag записать 1, иначе 0. Также в переменную size записать размерность файла (в байтах); если же такого файла нет, то в переменную size записать -1. Компоненты выходного файла (FOut) имеют такой вид:

struct Rec2

{

long nomer;

{номер записи в файле}

char fileName[50];

{полный путь к файлу, например,

“c:\\Temp\\Data\\a.txt”}

 

 

char name[50];

{имя файла без учета каталогов, например, “a.txt”}

int flag;

{наличие файла с именем fileName на жестком диске}

long size;

{размерность файла с именем fileName в байтах}

};

 

 

17. ОБРАБОТКА ТЕКСТОВ Входной файл содержит структуры:

struct Rec1

{

int nomer;

{номер записи в файле}

char text [300];

{текст}

};

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

Требуется в тексте, который содержится в очередной записи, подсчитать количество слов и записать его в переменную count в выходном файле (FOut):

struct Rec2

{

int nomer;

{номер записи в файле}

char text [50];

{ текст }

int count;

{ количество слов в тексте }

};

38

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

Лабораторная работа № 12.

ТЕМА: Представление и обработка линейных динамических структур. ЦЕЛЬ: Изучение методов работы с динамическими структурами. ОПРЕДЕЛЕНИЯ:

Линейный список – линейная динамическая структура из статических элементов. Каждый элемент состоит из полей ссылок на соседние элементы и информационных полей. Если есть только одна ссылка на последующий элемент, то список называется односвязным (L1), если имеется ссылка и на предыдущий объект, то - двухсвязным(L2). Когда последний элемент ссылается на первый, то список - циклический (LC).

ТРЕБОВАНИЯ:

1.ПЕРЕФОРМИРОВАНИЕ списка должно выполняться только путем изменения ссылок на элементы без создания нового списка.

2.ПОСТРОЕНИЕ или СОЗДАНИЕ списка означает формирование программным путем нового списка с сохранением исходных списков.

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

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

5.Элементы исходных и полученных списков должны печататься в порядке их следования.

6.По окончании работы программы память должна быть освобождена от динамических структур.

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

8.Для отчета необходимо представить текст программы, а также продемонстрировать ее работу.

ВАРИАНТЫ ЗАДАНИЙ.

1.Квадратная матрица целых чисел из текстового файла записывается построчно в линейный список. Из матрицы удаляются строка и столбец, в

39

Федеральное агентство по образованию

Форма

 

Ульяновский государственный университет

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

которых находится минимальный элемент матрицы (он в матрице единственный). Полученная матрица выводится в файл Fout построчно. ( Модель произвольного доступа).

2.Во входном файле дан текст. Используя структуры “Queue” («Очередь»), удалить из текста слова с чередованием гласных и согласных букв, а затем переписать текст с сохранением строчной структуры в выходной файл.

3.Дан текст во входном файле. Используя структуры “Stack”, исключить из текста слова - палиндромы и записать результат в выходной файл.

4.Дан текстовый файл, не содержащий цифр и знаков, кроме пробела. Переписать его в однонаправленный список. Выполнить сжатие этого списка по правилу: ищем цепочку из одинаковых символов и заменяем её на цепочку вида: 17k, что означает, что вместо 17 подряд идущих символов 'k' (‘kkkkkkkkkkkkkkkkk’) записывается: ('17k') и т.д. Например: строка

'kkkkkkkkaaaaaaaaaaadddcwww' заменяется на '8k11a3d1c3w'. Преобразо-

ванный список записать в выходной файл.

5.Распаковка сжатого файла. Файл представляет собой последовательность цепочек вида: <Число><Символ>. Переписать содержимое файла в очередь и преобразовать последовательность по правилу: каждую цепочку заменить на указанное число символов. Например: ‘7a12c4d’ заменяется на ‘aaaaaaaccccccccccccdddd’. Результат записать в выходной файл. (См.

предыдущую работу).

6. Дан текстовый файл, в котором встречаются цепочки вида:

<Число> <'+'|'-'> <Число>…<'+'|'-'> <Число>, разделенные символом

‘запятая’. Переписать цепочки из файла в список L1 и заменить их на результаты вычисления этих цепочек. Например: текст в списке ‘45+23- 98+56-6-32,37+8-56+86,1345+178’ преобразуется в ‘-12,75,1523’. Затем список переписать в выходной файл.

7.Из текстового файла строки символов переписать в структуру «Очередь». Используя структуру «Stack», в выходной файл переписать все слова каждой строки входного файла в обратном порядке, не меняя порядок символов в слове. Символы знаков, кроме пробела, исключить из строк.

8.Дан текстовый файл, строки которого являются правильными формулами

вида: <Form> :: = <Cifra> | ( <Form> <Znak> <Form> )

<Cifra>:: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <Znak> :: = + | - | *

Используя структуры «Stack», преобразовать формулы в постфиксную форму и записать их в выходной файл. Например: выражение ' ((5+7)*(6- 3)) ' преобразуется в следующую форму ' 5 7 + 6 3 - * '.

9.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1. Удалить из списка элементы так, чтобы оставши-

40

Федеральное агентство по образованию

Форма

 

 

Ульяновский государственный университет

 

 

 

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

 

 

еся образовывали неубывающую последовательность, которую записать в

выходной файл. Удаленные элементы вывести на экран.

10.Из текстового файла строки символов переписать в структуру «Очередь».

Используя структуру «Stack», в выходной файл переписать все слова

входного файла, причем в словах, в которых встречаются символы цифр,

нецифровые символы вывести в обратном порядке. Цифры должны

остаться на своих местах.

 

 

 

11.Дан текстовый файл с изображением целых чисел. Используя структуру

'Stack', вывести в выходной файл сначала только числа, которые являются

полными квадратами, затем числа, являющиеся полными кубами, в обрат-

ном порядке их следования. Например: последовательность: '144 81 345

121 718 49 27 53 64 78 256' преобразуется в следующий вид: '256 49 121 81

144 64 27'.

 

 

 

12.В файле дана последовательность целых чисел, которая переписывается в

линейный двунаправленный список. Отсортировать элементы в списке ме-

тодом обменной сортировки, затем, исключив простые числа, записать ре-

зультат в выходной файл Fout. (Модель произвольного доступа).

13.Даны два текстовых файла, в одном текст, в другом справочник. В некото-

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

#<параметр>, заменяемые при обработке фактическим значением. Текст из

файла переписать в список L1. Пусть для примера в списке L1 находится

текст: «Автобус типа #bus с номером #nomer выполняет рейс до города

#city». Если список

L2 содержит справочник

вида: #<пара-

метр>[<значение>],

(Например:

#bus[Икарус],

#nomer[АМ673К],#city[Москва],) то в результате обработки в списке L1

будет получен текст: «Автобус типа Икарус с номером АМ673К выпол-

няет рейс до города Москва». Результат вывести в выходной файл. 14.Дан текстовый файл, строки которого являются правильными формулами

в постфиксной записи (см. вариант 9). Используя структуры «Stack», вычислить значения этих формул и результаты записать в выходной файл. Например: значение выражения в постфиксной записи ' 5 7 + 6 3 - * ' рав-

но 36.

15.Даны два текстовых файла, Fin1 и Fin2 с изображениями целых чисел, которые переписываются в списки L1A и L1B. В выходной файл вывести только те числа, которые содержатся в обоих списках и не имеют в них одинаковых соседних чисел. Например: L1A содержит

«12 27 12 43 78 67 14 19 14 89», а L1B содержит «18 27 43 67 89 19 189». В

этом случае результат будет следующий: «43 67 89». (Модель произвольного доступа).

16.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1. Удалить из списка все числа – палиндромы, вста-

41

Федеральное агентство по образованию

Форма

 

 

Ульяновский государственный университет

 

 

 

 

 

 

 

 

 

«Информатика»

 

 

 

 

 

 

 

вив вместо нечетных палиндромов самое минимальное число всего спис-

ка. Например, исходный список:'127 12321 67897 45654 10001 17 9856 93456 767 984' преобразуется в список: '127 17 67897 17 17 9856 93456 17 984'. Результат переписать в файл.

17.Даны два файла, в первом числа упорядочены по неубыванию, во втором неупорядочены. Переписать оба файла в однонаправленные списки. Добавить все числа в первый список из второго так, чтобы не нарушать условие упорядоченности. Записать результат в выходной файл. (Модель последовательного доступа).

18.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1. Используя структуру «Stack», найти цепочки чисел длиной M с наибольшей суммой элементов и перенести их в выходной файл.

19.Дан текстовый файл, в котором слова разделены пробелом. Текст из файла необходимо переписать в список L1a. В список L1b переписать сначала слова, состоящие из одной буквы, затем из двух, далее из трех и т.д. Ре-

зультат поместить в

выходной

файл.

Так,

входной

текст:

"begin for i:=1 to N

do if i

= N

div 2

then exit

end"

преобразуется

в

 

 

следующий:

"N i = N 2 to do if for div end i:=1 then exit begin".

20.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1a. В список L1b записать самую длинную неубывающую последовательность из списка L1a, из которой исключить повторения. Результат записать в выходной файл. Пример: L1a = '34 67 12 15 17

17

19

21

27

19

11

67

8

73',

тогда L1b = '12 15 17 19 21 27'.

 

 

 

 

 

21.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1a. Количество отрицательных и положительных чисел в этом файле одинаково. Используя структуры «Stack», в выходной

файл записать последовательность с чередованием

отрицательных и по-

ложительных

 

 

чисел.

 

Пример:

"34

-9

85

71

7 -2 -127

-1

93

-2"

преобразуется

в

"34 -9 85 -2 71 -127 7 -1 93 -2".

22.Дан текстовый файл с изображением целых чисел, которые необходимо переписать в список L1a. Используя метод «Обмен элементов в списке», перенести в начало списка только нечетные числа, а в конец – четные. Использовать модель произвольного доступа. Результат записать в выходной файл.

23.Дан текстовый файл, слова в котором разделены пробелом. Текст необходимо переписать в список L1a. В тексте оставить только двойные фамилии, которые переписать построчно в выходной файл. Двойная фамилия –

42