Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Занятие 1. Работа с файловыми потоками




Программа С++ может взаимодействовать не только с экраном DOS, но и с файлами. Мы будем рассматривать работу с текстовыми файлами (*.txt) и таблицами MS Excel (*.xls).

К примеру, требуется составить программу для решения дифференциального уравнения. Программа выдаст в качестве ответа набор чисел. Количество чисел может быть любым числом – и 10, и 200. Поэтому разумно в этом случае печатать эти данные не столько на экран DOS, сколько в файл *.xls, а затем в MS Excel строить график. При этом говорят, что программа выводит в файл данные.

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

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

Для работы с файловым потоком необходимо:

1. подключить библиотеку fstream:

#include <fstream>

2. объявить переменную типа файловый поток:

fstream f;

3. открыть файл:

а) для записи в файл:

f.open("1.txt", ios::out);

б) для чтения из файла:

f.open("1.txt", ios::in);

4. произвести запись в файл или чтение из файла:

а) для записи в файл:

f<<"x="<<x;

б) для чтения из файла:

f>>x;

5. закрыть файл:

f.close();

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

f.open("1.txt", ios::app);

 

Пример 1. Считать из файла число и показать его на экране.

Решение. Сначала рассмотрим, как выполнить эту задачу в Visual Studio, затем – в Borland C++.

Создадим проект в Visual Studio, назовем его “8.1”. При этом генерируется папка с нашим проектом. Открываем папку 8.1\8.1 и создаем текстовый документ, называем его 1.txt, как показано на рис. 1.

Рис. 1 Создание текстового файла в папке с проектом

Открываем файл 1.txt и записываем одно число, например, -3.27, как показано на рис. 2.

Рис. 2 Исходный текстовый файл для примера 1

Сохраняем и закрываем файл. Теперь переходим в приложение Visual Studio и в нашем проекте прописываем код программы.

Код программы для примера 1:

// 8.1.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

double x;

fstream f;

f.open("1.txt", ios::in);

f>>x;

f.close();

cout<<"x="<<x<<endl;

return 0;

}

Результат выполнения программы:

Чтобы работать с файлами в Borland C++, создадим папку F:/BC/FILES. Эта папка предназначена для хранения файлов, с которыми будет взаимодействовать наша программа. Создаем файл 1.txt в папке F:/BC/FILES, записываем в него число -3.27.

При открытии файла необходимо записать имя файла как FILES/1.txt, чтобы наша программа искала текстовый файл именно в этой папке.

Код программы:

#include <iostream.h>

#include <fstream.h>

int main()

{

double x;

fstream f;

f.open("FILES/1.txt", ios::in);

f>>x;

f.close();

cout<<"x="<<x<<endl;

return 0;

}

Результат выполнения программы:

 

Пример 2. Составить программу, которая производит запись двух чисел в файлы *.txt и *.xls.

Решение. Обозначим числа как a и b, зададим а =7,2; b =-10.89. Файлы не будем предварительно создавать, т.к. они возникнут автоматически при запуске нашей программы. Создаем новый проект 8.2 в Visual Studio.

Объявим два файловых потока ftxt – для записи в текстовый файл 1.txt, fxls – для записи в табличный файл 2.xls.

Сделаем так, чтобы в файле 1.txt появилась надпись:

a=7.2 b=-10.89

в файле 2.xls выведем каждый кусочек сообщения в разные ячейки. Для этого следует использовать символ табуляции ‘\t’.

Код программы для примера 2:

// 8.2.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

double a, b;

fstream ftxt, fxls;

a=7.2;

b=-10.89;

cout<<"a="<<a<<" b="<<b<<endl;

ftxt.open("1.txt", ios::out);

fxls.open("2.xls", ios::out);

ftxt<<"a="<<a<<" b="<<b;

fxls<<"a=\t"<<a<<"\tb=\t"<<b;

ftxt.close();

fxls.close();

return 0;

}

Результат выполнения программы:

экран DOS:

текстовый файл 1.txt:

табличный файл 2.xls:

Примечание. Файлы 1.txt и 2.xls создаются в папке с проектом 8.2\8.2, как показано на рис. 3.

Рис. 3 Созданные программой файлы в папке с проектом

Решим данную задачу в Borland C++.

Код программы:

#include <iostream.h>

#include <fstream.h>

int main()

{

double a, b;

fstream ftxt, fxls;

a=7.2;

b=-10.89;

cout<<"a="<<a<<" b="<<b<<endl;

ftxt.open("FILES/1.txt", ios::out);

fxls.open("FILES/2.xls", ios::out);

ftxt<<"a="<<a<<" b="<<b;

fxls<<"a=\t"<<a<<"\tb=\t"<<b;

ftxt.close();

fxls.close();

return 0;

}

Результат выполнения программы:

экран DOS:

текстовый файл 1.txt:

табличный файл 2.xls:

Примечание. Т.к. в примере 2 мы задали имя текстового файла 1.txt так же, как в примере 1, то после выполнения программы примера 2 в папке FILES будет находиться два файла. Файл 1.txt запишется заново. При этом потеряется число -3.27, которое мы печатали для примера 1.

 

В следующих примерах будем приводить коды программ в среде Visual Studio.

 

Пример 3. Построить таблицу значений функции y =sin x при 0≤ x ≤2 с шагом 0,1.

Решение. Данный пример решается с помощью циклического алгоритма. Будем использовать цикл for. Построим таблицу значений функции на экране, а также в файле 1.xls и построим график в MS Excel.

Блок-схема:

Код программы:

// 8.3.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <iomanip>

#include <fstream>

using namespace std;

int main()

{

double x, y;

fstream f;

f.open("1.xls", ios::out);

cout<<setw(10)<<"x"<<setw(10)<<"y"<<endl;

f<<"x"<<"\t"<<"y"<<endl;

for(x=0; x<=2; x=x+0.1){

y=sin(x);

cout<<setw(10)<<x<<setw(10)<<y<<endl;

f<<x<<"\t"<<y<<endl;

}

f.close();

return 0;

}

Результат выполнения программы:

экран DOS:

табличный файл 1.xls:

Файл 1.xls с построенным графиком:

 

Пример 4. В матрице а(5, 5) вычислить сумму положительных элементов, произведение элементов на главной диагонали, количество элементов, больших 2.

Решение. Матрица а является двумерным массивом, состоящим из пяти строк и пяти столбцов. Проинициализируем массив по формуле a[ i ][ j ]=7sin(2,3 ij). Массив и все результаты вычислений будем выводить в файл 1.xls.

Блок-схема:

Код программы:

// 8.4.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <iomanip>

#include <fstream>

using namespace std;

int main()

{

double a[5][5], s, p;

int i, j, k;

fstream f;

f.open("1.xls", ios::out);

cout<<"matrix:"<<endl;

f<<"матрица:"<<endl;

for(i=0; i<5; i=i+1){

for(j=0; j<5; j=j+1){

a[i][j]=7.0*sin(2.3*i*j);

cout<<setw(10)<<a[i][j];

f<<'\t'<<a[i][j];

}

cout<<endl;

f<<endl;

}

s=0;

for(i=0; i<5; i=i+1){

for(j=0; j<5; j=j+1){

if(a[i][j]>0){

s=s+a[i][j];

}

}

}

cout<<"s="<<s<<endl;

f<<"Сумма положительных=\t"<<s<<endl;

p=1;

for(i=0; i<5; i=i+1){

for(j=0; j<5; j=j+1){

if(i==j){

p=p*a[i][j];

}

}

}

cout<<"p="<<p<<endl;

f<<"Произв. на гл. диаг.=\t"<<p<<endl;

k=0;

for(i=0; i<5; i=i+1){

for(j=0; j<5; j=j+1){

if(a[i][j]>2){

k=k+1;

}

}

}

cout<<"k="<<k<<endl;

f<<"Количество элем.>2 =\t"<<k<<endl;

f.close();

return 0;

}

Результат выполнения программы:

экран DOS:

табличный файл 1.xls:

Примечание. Если данный код запустить в программе Borland C++, то русский текст следует заменить латиницей.

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 562 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Человек, которым вам суждено стать – это только тот человек, которым вы сами решите стать. © Ральф Уолдо Эмерсон
==> читать все изречения...

2258 - | 2106 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.