Работа С Файлами

vladis222

Active Member
06.12.2011
31
0
23
Украина
#1
Дан файл, компонентами которого являются целые числа. Найти сумму и произведение компонент заданного файла,вывести на экран последнюю и предпоследнюю компоненты этого файла, помогите пожалуйста, я не представляю как это написать на С/С++?
 
23.08.2014
16
0
23
#2
Написать это весьма просто, собственно похожий пример был в этой теме.
Создаем объект класса ifstream и привязываем его к нашему файлу.
Если количество элементов в файле известно заранее, то все еще проще: переменная - счетчик, которая будет считать количество итераций цикла и в нужное время считывать и выводить последний и предпоследний элемент файла.
Сумма аналогична простому подсчету суммы всех элементов массива. Единственное отличие, что значение нужно брать из файла. Тоже самое и с произведением.

В общем, посмотрите тему, что я вам скинул и попробуйте написать свой код. Если не выйдет отпишитесь в этом же топике и тогда можно будет вам помочь. Иначе это называется сделайте за меня, а не помогите.
 

vladis222

Active Member
06.12.2011
31
0
23
Украина
#3
Написать это весьма просто, собственно похожий пример был в этой теме.
Создаем объект класса ifstream и привязываем его к нашему файлу.
Если количество элементов в файле известно заранее, то все еще проще: переменная - счетчик, которая будет считать количество итераций цикла и в нужное время считывать и выводить последний и предпоследний элемент файла.
Сумма аналогична простому подсчету суммы всех элементов массива. Единственное отличие, что значение нужно брать из файла. Тоже самое и с произведением.

В общем, посмотрите тему, что я вам скинул и попробуйте написать свой код. Если не выйдет отпишитесь в этом же топике и тогда можно будет вам помочь. Иначе это называется сделайте за меня, а не помогите.
C++:
#include<iostream>
using namespace std;
#include<conio.h>
#include<stdlib.h>
#include<fstream>
const int N=30;
int main()
{
setlocale(LC_ALL,"Rus");
int sum=0;int pr=1;int a;int col=0;
fstream input ("my.txt");
input.open("D:\my.txt");//Путь к файлу
if (!input) {cout << "Файл не открыт.\n"; }
else
if(input)
{
while (!input.eof())
{
input>>a;
sum=sum+a;//Вычисление суммы компонентов файла
pr=pr*a;//Вычисление произведения компонентов файла
col=col+1;
}
cout<<sum<<endl;//Вывод суммы
cout<<pr<<endl;//Вывод произведения
}

Вот написал часть кода, вообщем в а считывается инфа из файла,подсчитывается сумма и произведение компонента,а вот с нахождением последней и предпоследней возникли трудности,не знаю как это реализовать
 
23.08.2014
16
0
23
#4
Я это сделал так.
C++:
#include <iostream>
#include <fstream>

using std::cout;
using std::endl;
using std::ifstream;

//const int N=30; 

void main()
{
setlocale(LC_ALL,"Rus");

int sum = 0;
unsigned int pr = 1;
int a;
int col = 0, col1 = 0;
int last_elem = 0;
int penultimate_elem = 0;

ifstream input("my.txt"); //Мой файл лежит в директории проекта
//input.open("D:\my.txt");//Путь к файлу <--- Это здесь не нужно. Было бы логичней его впихнуть в блок проверки открытия файла и если не открылся - открыть этим методом
if (!input)
{
cout << "Файл не открыт.\n";
}

if(input)
{
while(!input.eof()) //Узнаем количество элементов файла
{
input >> a;
col++; //Инкрементируем счетчик. Аналогично записи col = col+1
}
input.seekg(0); // Переводим указатель на начало файла 
while (!input.eof())
{
input >> a;
sum += a; //Вычисление суммы компонентов файла
pr *= a; //Вычисление произведения компонентов файла
col1++; //Инкрементируем счетчик элементов нашего файла
if(col1 == col - 1) //Предпоследний
penultimate_elem = a;
if(col1 == col) //Когда последний элемент
last_elem = a;
}

cout << "Cумма: " << sum << endl;//Вывод суммы
cout << "Произведение: " << pr << endl;//Вывод произведения
cout << "Предпоследний элемент: " << penultimate_elem << endl; //Предпоследний
cout << "Последний элемент: " << last_elem << endl; // Последний
}
std::cin.get(); //Задержка экрана
}
Мой файл был заполнен значениями: 12 22 33 66 5 55 4 6
Для чего вот это //const int N=30; ? Количество элементов файла не фиксировано, нигде в коде не используется, забыли с прошлых попыток удалить?)