Рацеев.Лабораторные по информатике
.pdfФедеральное агентство по образованию |
Форма |
|
Ульяновский государственный университет |
|
|
|
|
|
|
|
|
«Информатика» |
|
|
|
|
|
Во входном файле (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