#include <fstream>
using namespace std;
int GetFromF(fstream* f)
{
int x;
do
{
*f>>x;
}
while ( x < 0 );
return x;
}
int GetFromH(fstream* f)
{
int x;
*f>>x;
return x;
}
int main()
{
fstream f,g;
f.open("f.txt",ios::in);
g.open("h.txt",ios::out);
int x,cnt;
cnt=0;
while ( f.eof() == false )
{
f>>x;
cnt++;
if ( x < 0 )
g<<x<<"\t";
}
g.close();
f.close();
f.clear();
g.clear();
f.open("f.txt",ios::in);
g.open("g.txt",ios::out);
fstream h("h.txt",ios::in);
cnt/=4;
for (int i=1;i<=cnt;i++)
{
g<<GetFromF(&f)<<"\t";
g<<GetFromF(&f)<<"\t";
g<<GetFromH(&h)<<"\t";
g<<GetFromH(&h)<<"\t";
}
f.close();
g.close();
h.close();
return 0;
}
С++. работа с фаилами.
Дан файл F, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных и т.д. ( предполагается, что число компонент в файле делится на 4).
Зарание благодарю.
При условии что проверять на корректность введённые данные не нужно то задача вродебы решается следующим образом:
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream inFile("input.txt");
ofstream outFile("output.txt");
vector <int> plus;
vector <int> minus;
if (inFile.fail() || outFile.fail())
{
cerr<<"File error"<<endl;
exit(1);
}
string str;
int rez;
while (inFile>>str)
{
rez=atoi(str.c_str());
if (rez>0) plus.push_back(rez);
else minus.push_back(rez);
}
int i=0,p=plus.size()-1,m=minus.size()-1;
bool b=false;
while (plus.size()>0 && minus.size()>0)
{
if (!b)
{
outFile<<plus[p--]<<endl;
plus.pop_back();
i++;
if (i==2) b=true;
}
else
{
outFile<<minus[m--]<<endl;
minus.pop_back();
i--;
if (!i) b=false;
}
}
outFile.close();
return 0;
}
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream inFile("input.txt");
ofstream outFile("output.txt");
vector <int> plus;
vector <int> minus;
if (inFile.fail() || outFile.fail())
{
cerr<<"File error"<<endl;
exit(1);
}
string str;
int rez;
while (inFile>>str)
{
rez=atoi(str.c_str());
if (rez>0) plus.push_back(rez);
else minus.push_back(rez);
}
int i=0,p=plus.size()-1,m=minus.size()-1;
bool b=false;
while (plus.size()>0 && minus.size()>0)
{
if (!b)
{
outFile<<plus[p--]<<endl;
plus.pop_back();
i++;
if (i==2) b=true;
}
else
{
outFile<<minus[m--]<<endl;
minus.pop_back();
i--;
if (!i) b=false;
}
}
outFile.close();
return 0;
}
Цитата: BroKeR
не понял зачем нужен дополнительный файл,намудрил с векторами но работает.
Код:
...
string str;
int rez;
while (inFile>>str)
{
rez=atoi(str.c_str());
if (rez>0) plus.push_back(rez);
else minus.push_back(rez);
}
...
string str;
int rez;
while (inFile>>str)
{
rez=atoi(str.c_str());
if (rez>0) plus.push_back(rez);
else minus.push_back(rez);
}
...
Если ты из потока читаешь зачем еще atoi и с_str ?
Код:
...
int value;
while(in)
{
in >> value;
if(value > 0)
plus.push_back(value);
else
minus.push_back(value);
}
minus.pop_back();
...
int value;
while(in)
{
in >> value;
if(value > 0)
plus.push_back(value);
else
minus.push_back(value);
}
minus.pop_back();
...
я с стлью постольку поскольку.Ты вот написал вспомнил,что он сам понимает.Говорю же на работе ядерная смесь с и с++.
Цитата: BroKeR
не понял зачем нужен дополнительный файл,намудрил с векторами но работает.
А дополнительный файл нужен по тому, что в условии задачи сказано:
Цитата:
...Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы....
Цитата: morf
А дополнительный файл нужен по тому, что в условии задачи сказано:
А на фига????
Цитата: BroKeR
А на фига????
1.Рекомендую пользоваться нормальным языком,без подобных выражений типа "на фига".
2.Еще раз повторю: студенческие задачи имеют свою специфику,есть условие задачи и оно должно быть соблюдено.