Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лабораторная работа № 4. Работа с файлами на языке С



Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как единое целое. Каждый файл завершается маркером конца файла (end-of-file marker или EOF) или указанным числом байтов, записанным в служебную структуру данных.

Задание Краткие теоретические сведения
1. Выполнить программу, записанную в данном пункте. Дополнить программу операторами считывания файла и вывода на экран его содержимого.   Пример программы на языке С, которая открывает файл а.txt на диске f, записывает в него строку символов (слово «привет») и закрывает файл. Файл открывается с помощью функци fopen, общий вид которой: fopen(< имя_файла>, < режим_открытия> ) Режимы открытия файла: r- открывает файл для чтения (если файл не существует или его невозможно найти, вызов завершается ошибкой); w- открывает пустой файл для записи (если файл существует, его содержимое удаляется); a- открывает файл для записи в конец файла, создает файл, если он не существует; r+- открывает для чтения и записи существующий файл w+- открывает пустой файл для чтения и записи (если файл существует, его содержимое удаляется); a- открывает файл для чтения и добавления в конец. В программе примера " w" означает, что файл открывается для записи и, если он существует, то содержимое файла стирается. Если файл не открывается, то в программе выдается сообщение. Функция fwrite записывает содержимое переменной stдлинойstrlen(st), fp- указатель на файл, в который производится запись. Файл закрывается с помощью функции fclose.   Чтобы считать информацию можно использовать функцию, общий вид которой: int fread( void *ptr, int size, int n, FILE *fp); где void *ptr – указатель на область памяти, в которой размещаются считываемые из файла данные; int size – размер одного считываемого элемента; int n – количество считываемых элементов; FILE *fp – указатель на файл, из которого производится считывание. В случае успешного считывания информации функция возвращает число прочитанных элементов.       В новых версиях Visual Studioнадо использовать функцию, общий вид которой: fopen_s( FILE** pFile, const char *filename, const char *mode) Здесь pFile - указатель на файловый указатель, filename - имя файла, mode - режим открытия файла.
2. Выполнить программу, записанную в правой части. Изменить программу так, чтобы выводились на экран все предложения с 1 по n.   Пример. Пусть в текстовом файле “b.txt” на диске f записано несколько предложений. Конец предложения обозначен точкой. Требуетсч ввести номер предложения n и вывести из текстового файла на экран предложение с этим номером. В программе на языке С открывается файл, с помощью функции fseekустанавливается текущая позиция в файле на конец и функцией ftellопределяется размер содержимого файла. Далее с помощью функции fseekустанавливается текущая позиция в файле на начало и происходит чтение информации функцией fread и поиск точки.    
3. Выполнить программму, приведенную в правой части, несколько раз. Убедиться, что данные, введенные с клавиатуры, записываются в файл с именем base.bin. Записать условие задачи.
#include < iostream> typedef struct studios { char fio[16]; char gruppa[3]; } STUD; int num; FILE *f; using namespace std; void Vvod() { STUD buf = {' ', ' '}; f = fopen(" base.bin", " ab" ); for(int p = 0; p < num; p++) { cout< < " Фамилия: "; cin> > buf.fio; cout< < " Группа: "; cin> > buf.gruppa; fwrite(& buf, sizeof(buf), 1, f); } fclose(f); } void Vyvod() { STUD buf; f = fopen(" base.bin", " rb" ); cout< < " \nФамилия Группа\n"; fread(& buf, sizeof(buf), 1, f); while(! feof(f)) { cout< < buf.fio< < " \t " < < buf.gruppa< < endl; fread(& buf, sizeof(buf), 1, f); } cout< < endl; fclose(f); } void Poisk() { int i = 0; char fam[16]; STUD buf; f = fopen(" base.bin", " rb" ); cout< < " Введите фамилию: "; cin> > fam; while(! feof(f)) { fread(& buf, sizeof(buf), 1, f); if(strcmp(fam, buf.fio) == 0)//сравнение строк { cout< < " \nФамилия Группа\n"; cout< < buf.fio< < " \t " < < buf.gruppa< < endl; i = 1; break; } } fclose(f); if(i == 0) cout< < " Ничего не найдено\n"; } int main () { setlocale(LC_ALL, " Russian" ); int c; do { cout< < " \n1.Ввод данных с клавиатуры и запись в файл\n"; cout< < " 2.Вывод данных из файла\n"; cout< < " 3.Поиск по фамилии\n"; cout< < " 0.Выход из программы\n\n"; cout< < " Введите номер операции: "; cin> > c; switch(c) { case 1: cout< < " Введите количество студентов: "; cin> > num; Vvod(); break; case 2: Vyvod(); break; case 3: Poisk(); break; case 0: exit(0); break; } } while (c! = 0); }

 

 

4. В соответствии со своим вариантом разработать программу для работы с файлами на языке С. В задании использовать бинарные файлы (с расширением bin ).

№ варианта Условие задачи
Даны два файла вещественных чисел с именами A и B, содержащие элементы прямоугольных матриц M1 и M2 по строкам, причем начальный элемент каждого файла содержит количество столбцов соответствующей матрицы. Создать файл той же структуры с именем C, содержащий произведение матриц M1·M2. Если матрицы M1 и M2 нельзя перемножать, то оставить файл C пустым.
Даны два файла вещественных чисел с именами A и B, содержащие элементы прямоугольных матриц M1 и M2 по строкам, причем начальный элемент каждого файла содержит количество столбцов соответствующей матрицы. Создать файл той же структуры с именем C, содержащий сумму M1+M2.
Дан файл вещественных чисел, содержащий элементы квадратной матрицы (по строкам), причем начальный элемент файла содержит значение количества столбцов матрицы. Создать новый файл той же структуры, содержащий транспонированную матрицу.
Дан файл целых чисел с элементами A(i), i = 0, ..., N – 1 (N - размер файла). Заменить исходное расположение его элементов на следующее: A(0), A(N – 1), A(1), A(N – 2), A(2), ....
Компоненты файла A– целые отличные от нуля числа, причем из них первые 10 - положительные числа, затем 10 отрицательных, и т. д. Получить файл B, в котором содержатся сначала 5 положительных чисел, затем 5 отрицательных и т. д.
Даны три файла целых чисел одинакового размера с именами A, B и C. Создать новый файл с именем D, в котором чередовались бы элементы исходных файлов с одним и тем же номером: a0, b0, c0, a1, b1, c1, a2, b2, c2, ....
Компоненты файла A – вещественные числа (положительные и отрицательные). Определить и вывести на экран порядковый номер того из них, которое наиболее близко к введенному пользователем целому числу.
Компоненты файла A – целые числа, значения которых повторяются. Получить файл B, образованный из A числами, которые встречаются в A ровно 2 раза.
Компоненты файла A– целые числа, значения которых повторяются. Получить файл B, образованный из A исключением повторных вхождений одного и того же числа.
Компоненты файла A – целые отличные от нуля числа: х, y1,... yn. Вывести на экран два члена этой последовательности, среднее арифметическое которых ближе всего к х.
Компоненты файла A – целые отличные от нуля числа, причем положительных чисел столько же, сколько отрицательных. Получить файл B, в котором не было бы двух соседних чисел с одинаковым знаком (сохранить порядок следования чисел).
Компоненты файла A – целые числа, значения которых повторяются. Получить файл B, образованный из A числами, которые встречаются в A более 2 раз.
Дан файл вещественных чисел, содержащий элементы квадратной матрицы по строкам, причем начальный элемент файла содержит значение количества столбцов матрицы. Создать новый файл той же структуры, содержащий k-ую строку исходной матрицы.
Дан файл вещественных чисел, содержащий элементы квадратной матрицы по строкам, причем начальный элемент файла содержит значение количества столбцов матрицы. Создать новый файл той же структуры, содержащий k-ый столбец исходной матрицы.
Дан файл вещественных чисел, содержащий элементы квадратной матрицы по строкам, причем начальный элемент файла содержит значение количества столбцов матрицы. Создать новый файл той же структуры, содержащий k-ый столбец исходной матрицы.
Даны два файла целых чисел с именами A и B. Получить новый файл с именем C, который содержит сумму элементов файлов A и B.

 

5. В соответствии со своим вариантом разработать программу с использованием структуры для работы с данными из таблицы, приведенной ниже.

Реализовать функции ввода, вывода, удаления, поиска элементов. Предусмотреть ввод данных, как с клавиатуры, так и из файла. Вывод данных осуществить как на экран, так и в файл.

 

№ варианта Условие задачи
Преподаватели. Фамилия преподавателя, название экзамена, дата экзамена. Выбор по фамилии.
Вокзал. Номер поезда, пункт назначения, дни следования, время прибытия, время отправления. Выбор по пункту назначения.
Ломбард. База хранимых товаров и недвижимости: анкетные данные клиента, наименование товара, оценочная стоимость; сумма, выданная под залог, дата сдачи, срок хранения. Выбор товаров по наименованию.
Клиенты банка. Ф.И.О., тип счета (срочный, льготный и т. д.), номер счета, сумма на счете, дата последнего изменения. Выбор по номеру счета.
Личная библиотека. Автор книги, название, издательство, раздел библиотеки (специальная литература, хобби, домашнее хозяйство, беллетристика и т. д.), происхождение (покупка, кража, подарок) и наличие книги в данный момент. Выбор книг по автору.
Отдел кадров. Ф.И.О. работника, образование, специальность, подразделение, должность, оклад, дата поступления на предприятие. Выбор по должности.
Склад. Наименование товара, цена, количество, процент торговой надбавки (5, 10, 15, 20, 35, 30). Выбор по наименованию.
Авиарейсы. Номер рейса, пункт назначения, время вылета, дата вылета, стоимость билета, количество мест. Выбор по пункту назначения.
Ученики. Ф.И.О., класс (цифра+буква) предметы, оценки, средний балл. Выбор по фамилии.
Студенты. Ф.И.О., дата поступления, специальность, группа, факультет, средний балл. Выбор по среднему баллу.
Справочник автомобилей. Марка автомобиля, цвет, заводской номер, дата выпуска, тип кузова (седан, универсал и т. п.), дата последнего техосмотра, владелец. Выбор транспортных средств по владельцу.
Записная книжка. Ф.И.О, дата рождения, адрес, телефон, место работы или учебы, должность. Поиск по фамилии.
Государство. Наименование, столица, численность населения, площадь, фамилия президента. Выбор государства по названию.
Список клиентов гостиницы. Паспортные данные, даты приезда и отъезда, номер, тип размещения (люкс, одноместный, двухместный, трехместный, апартаменты). Поиск гостя по фамилии.
Справочник абитуриента. Наименование вуза, адрес, перечень специальностей, конкурс прошлого года по каждой специальности, размер оплаты при договорном обучении. Поиск минимального конкурса по данной специальности.
Горожанин. Ф.И.О., дата рождения, адрес, пол (м, ж). Реализовать выборку по году рождения.

 

 

 

 

В начало практикума


Лабораторная работа № 5. Работа с файлами на языке С++

Для обработки файлов на языке C++ в программу должны быть включены заголовочные файлы < iostream > и < fstream >. Следует также использовать стандартное пространство имен - using namespace std;

Задание Краткие теоретические сведения
1. В правой части приведен пример программы на языке С++, которая открывает файл (имя которого вместе с расширением нужно ввести с клавиатуры), читает из файла число и возводит его в квадрат. Затем происходит запись результата вычислений в файл. Предварительно надо записать число в исходный файл. Выполнить программу, используя различные имена файлов.
#include < iostream> #include < fstream> using namespace std; double vvodf (ifstream & f, char s[40]) { double a; f.open (s); if (f.fail()) { cout< < " \n Ошибка открытия файла"; exit(1); }//Проверка открытия файла f > > a; //Чтение переменной f.close(); return a; } void vyvodf(ofstream & f, double a, char s[40]) { f.open(s); if (f.fail()) { cout< < " \n Ошибка открытия файла"; exit(1); } f < < a; //Запись переменной f.close(); } void main() { setlocale(LC_ALL, " Russian" ); double a, b; char str[40]; ifstream f; ofstream f1; cout< < " \n Ввести имя файла для чтения A: \n"; cin> > str; a = vvodf(f, str); cout< < " \n Прочитанное из файла число A=" < < a; b = pow(a, 2); cout< < " \n b=" < < b; cout< < " \n Ввести имя файла для записи A: \n"; cin > > str; vyvodf(f1, b, str); cout < < endl; }
2. Изучить ввод и вывод структур в файл, выполнив программы, записанные в правой части. Проверить, появился ли файл FIRMA.DAT среди файлов проекта.   Если программа должна вводить или выводить такие данные, как структуры или массивы, то можно использовать методы readи write. Пример. Программа слева использует метод write для вывода содержимого структуры с информацией о работнике (фамилия, возраст, зарплата) в файл FIRMA.DAT.         В программе справа используется метод read для чтения из файла информации о служащем.    
3. Выполнить программу, записанную в данном пункте. Проверить правильность работы программы.     Пример. Пусть дано число k и строковый файл на дискеf с именем Name1, содержащий непустые строки. Создать два новых файла: строковый с именем Name2, содержащий последние k символов каждой строки исходного файла (если строка короче k символов, то она сохраняется целиком), и символьный с именем Name3, содержащий k-й символ каждой строки (если строка короче k, то в файл Name3 записывается пробел).      
4. Изучить ввод и вывод структуры, организованной в виде объединения, в файл, выполнив программу, приведенную в правой части.    
#include < iostream> #include < fstream> typedef union telefony { char fio[16]; char tel[9]; } FT; int num; using namespace std; void Outpt() { ifstream otf(" Tel.DAT" ); cout< < " \nФамилия Телефон\n"; while(! otf.eof()) { FT buf={' '}; otf.read((char *) & buf, sizeof(buf)); cout< < buf.fio< < " \t "; otf.read((char *) & buf, sizeof(buf)); cout< < buf.tel< < endl; } cout< < endl; } void Poisk() { ifstream otf(" Tel.DAT" ); int i = 0; char fam[16]; FT buf = {' '}; cout< < " Введите фамилию: "; cin> > fam; while(! otf.eof()) { otf.read((char *) & buf, sizeof(buf)); if(strcmp(fam, buf.fio) == 0)//сравнение { cout< < " \nФамилия Телефон\n"; cout< < buf.fio< < " \t "; otf.read((char *) & buf, sizeof(buf)); cout< < buf.tel< < endl; i = 1; break; } } if(i == 0) cout< < " Ничего не найдено\n"; }     void Inpt() { ofstream itf; itf.open(" Tel.DAT", ios_base:: app); FT buf = {' '}; for(int p = 0; p < num; p++) { cout< < " Фамилия: cin> > buf.fio; itf.write((char *) & buf, sizeof(buf)); cout< < " Телефон: "; cin> > buf.tel; itf.write((char *) & buf, sizeof(buf)); } }     int main () { setlocale(LC_ALL, " Russian" ); int c; do { cout< < " \n1.Ввод данных с клавиатуры и запись в файл\n"; cout< < " 2.Вывод данных из файла\n"; cout< < " 3.Поиск по фамилии\n"; cout< < " 0.Выход из программы\n\n"; cout< < " Введите номер операции: "; cin> > c; switch(c) { case 1: cout< < " Введите количество "; cin> > num; Inpt(); break; case 2: Outpt(); break; case 3: Poisk(); break; case 0: exit(0); break; } } while (c! = 0); }

 

 

5. В соответствии со своим вариантом разработать программу для работы с файлами на языке С++. Предварительно создать текстовый файл F1 не менее чем из 10 строк и записать в него информацию.

 

№ варианта Условие задачи
Скопировать в файл F2 только четные строки из F1. Подсчитать размер файлов F1 и F2 (в байтах).
Скопировать в файл F2 только те строки из F1, которые начинаются с буквы «А». Подсчитать количество слов в F2.
Скопировать из файла F1 в файл F2 строки, начиная с К до К+5. Подсчитать количество гласных букв в F2.
Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры. Подсчитать количество строк, которые начинаются на букву «А» в файле F2.
Скопировать из файла F1 в файл F2 строки, начиная с четвертой по порядку. Подсчитать количество символов в последнем слове F2.
Скопировать из файла F1 в файл F2 строки, начиная с N до K. Подсчитать количество согласных букв в файле F2.
Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово. Найти самое длинное слово в файле F2.
Скопировать из файла F1 в файл F2 все строки, кроме той строки, в которой больше всего гласных букв. Напечатать номер этой строки.
Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А», расположенные между строками с номерами N1 и N2. Определить количество слов в первой строке файла F2.
Скопировать из файла F1 в файл F2 все строки, в которых нет слов, совпадающих с первым словом. Определить количество согласных букв в первой строке файла F2.
Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово. Найти самое короткое слово в файле F2.
Скопировать из файла F1 в файл F2 все строки, в которых есть слова, совпадающие с первым словом. Определить количество согласных букв в последней строке файла F2.
Скопировать из файла F1 в файл F2 все строки, в которых более 2 слов. Определить номер слова, в котором больше всего гласных букв.
Скопировать из файла F1 в файл F2 все строки, в которых содержится два одинаковых слова. Определить номер слова, в котором больше всего букв «А».
Скопировать из файла F1 в файл F2 все строки, в которых содержится не менее двух одинаковых слов. Определить номер слова, в котором больше всего цифр.
Скопировать из файла F1 в файл F2 все строки, в которых есть слова, совпадающие со вторым словом. Определить количество цифр в последней строке файла F2.

 

6. В соответствии со своим вариантом разработать программу с использованием структуры в виде объединения для работы с данными из таблицы, приведенной ниже.

Реализовать функции ввода, вывода, редактирования, удаления, поиска элементов. Предусмотреть ввод данных, как с клавиатуры, так и из файла. Вывод данных осуществить как на экран, так и в файл на языке С++.

 

№ варианта Условие задачи
Преподаватели. Фамилия преподавателя, название экзамена, дата. Выбор по фамилии, дате экзамена.
Вокзал. Номер поезда, пункт назначения, дни следования, время прибытия, время отправления. Выбор по пункту назначения, дате. Вывод расписания по времени.
Ломбард. База товаров и недвижимости: данные клиента, наименование товара, оценочная стоимость; залоговая сумма, дата сдачи, срок хранения. Выбор товаров по истечении срока хранения, по наименованию товара.
Клиенты банка. Ф.И.О., тип счета (срочный, льготный и т. д.), номер счета, сумма на счете, дата последнего изменения. Выбор по номеру счета, по диапазону суммы (< 100, > 100).
Записная книжка. Ф.И.О, дата рождения, адрес, телефон, место работы или учебы, должность. Автоматическое формирование поздравления с днем рождения (по текущей дате). Поиск по фамилии.
Отдел кадров. Ф.И.О. работника, образование, специальность, подразделение, должность, оклад, дата поступления на предприятие. Выбор по должности, стражу работы.
Склад. Наименование товара, цена, количество, процент торговой надбавки (5, 10, 15, 20, 35, 30). Выбор по наименованию, цене. Вывод всего списка товаров на складе с расчетом сумм.
Авиарейсы. Номер рейса, пункт назначения, время вылета, дата вылета, стоимость билета, количество мест. Выбор по пункту назначения, дате вылета.
Ученики. Ф.И.О., класс (цифра+буква) предметы, оценки, средний балл. Выбор по фамилии, выбор по среднему баллу.
Студенты. Ф.И.О., дата поступления, специальность, группа, факультет, средний балл. Выбор по году поступления, фамилии, среднему баллу, группе.
Справочник автомобилей. Марка автомобиля, цвет, заводской номер, дата выпуска, тип кузова (седан, универсал и т. п.), дата последнего техосмотра, владелец. Выбор транспортных средств по владельцу или номеру. Формирование приглашений на техосмотр в соответствии со сроком.
Личная библиотека. Автор книги, название, раздел библиотеки (специальная литература, хобби, домашнее хозяйство, беллетристика и т. д.), происхождение (покупка, кража, подарок) и наличие книги в данный момент. Выбор книг по автору и году, вывод всего списка книг по категориям.
Государство. Наименование, столица, численность населения, площадь, фамилия президента. Выбор государства по названию, занимаемой площади (> заданного значения).
Список клиентов гостиницы. Паспортные данные, даты приезда и отъезда, номер, тип размещения (люкс, одноместный, двухместный, трехместный, апартаменты). Поиск гостя по дате приезда или по фамилии.
Справочник абитуриента. Наименование вуза, адрес, перечень специальностей, конкурс прошлого года по каждой специальности, размер оплаты при договорном обучении. Выбор по разным критериям: все о данном вузе; все о данной специальности, поиск минимального конкурса по данной специальности.
Горожанин. Ф.И.О., дата рождения, адрес, пол (м, ж). Реализовать выборку по полу и году рождения.

 

 

 

 

 

 

 

В начало практикума


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 1671; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.022 с.)
Главная | Случайная страница | Обратная связь