Итак... Мы подошли с вами к очень интересной теме - работе с файлами. Она не очень тяжелая, просто надо разобраться , что такое файловый поток и с чем его едят. Лабораторная, даная мне для закрепления материала, оказалась простой. Вот задание и код:
/*
Лабораторная работа № 3
Разработать алгоритм решения задачи обработки данных, хранящихся в бинарном
файле чисел или символов.
Реализовать алгоритм на языке С++ с помощью функций с параметрами. Описать следующие функции:
1) функцию формирования файла (параметрами должны быть файловый поток и его имя);
2) функцию чтения файла (параметрами должны быть файловый поток и его имя);
3) функцию обработки файла (параметрами должны быть файловый поток и его имя).
В главной функции должны быть реализованы объявления файловых потоков и вызов функций
работы с файлами.
Условие задачи выбрать из файла Приложение 2_SP1.doc (Задача 1) по номеру в журнале.
Дан файл f, компоненты которого являются действительными числа-ми. Найти произведение компонент файла f.
*/
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////
// Функция создания файла.В качестве параметров передано имя файла и файловый поток
void createSFile(char* fileName, fstream &file){
while(!file.is_open()) file.open(fileName,ios::out|ios::trunc|ios::binary);//открытие файла
int x;
cout << "Введите х(если х будет равен 9999, то ввод чисел закончится)= ";
cin >> x;
while(x!=9999)
{
file.write((char*)&x, sizeof x); //цикл для записи в файл чисел с клавиатуры
cout << "Число: ";
cin >> x;
}
file.close();//закрытие файла
cout << "Исходный файл \"" << fileName << "\" создан!" << endl;
}
////////////////////////////////////////////////////////////////////////////////////////
// функция выведдения содержимого файла на экран
void readSFile(char* fileName, fstream &file){
file.open(fileName,ios::in|ios::binary);
while(!file.is_open()){
cout << "Ошибка открытия файла \"" << fileName << "\"!" << endl;
exit(1);
}
if(file.eof()){//eof - возвращает истину, если достигнут конец файла
file.clear();// сбрасывает биты ошибок
file.seekg(0);// указатель на начало файла
}
int number;
while(file.read((char *) &number,sizeof(number))){//чтение числа
cout << " " << number << " "; //и вывод его на экран
}
file.close();
cout << endl << "Файл \"" << fileName << "\" прочитан!" << endl;
}
///////////////////////////////////////////////////////////////////////////////////////
//Функция умножения чисел , содержащихся в файле
void FileProcessing(char* sourceFileName, fstream &sFile){
sFile.open(sourceFileName,ios::in|ios::binary);
if(sFile.eof()){
sFile.clear();
sFile.seekg(0);
}
int number;
int pr=1;
while(sFile.read((char *) &number,sizeof(number))){
pr=pr*number;
}
sFile.close();
cout << "Произведение компонентов файла \"" << sourceFileName << "\" равно = "<<pr<< endl;
}
///////////////////////////////////////////////////////////////////////////////////////
void main()
{setlocale(LC_ALL,"Russian");
char FsourceFileName[15];// создание массива смволов - названия файла
fstream FsourceFile; // создание файлового потока
cout << "ВВедите имя файла(максимум 15 символов): ";
cin >> FsourceFileName;
createSFile(FsourceFileName,FsourceFile);
readSFile(FsourceFileName,FsourceFile);
FileProcessing(FsourceFileName,FsourceFile);
cin.get();
cin.get();
}
Вот результат работы программки:
Комментариев нет:
Отправить комментарий