Помогите с программой на С++
У меня возникла проблема при работе с файлами в С ++. Вот задача, которую нужно выполнить: Прямая на плоскости задается уравнением аx + by + c = 0, где a и b одновременно не равны нулю. Пусть во входном файле содержатся коэффициенты нескольких прямых (не менее 3). Сформировать четыре исходные файлы из коэффициентов тех прямых, которые: 1)параллельные первой заданной прямой 2)накладываются с первой заданной прямой 3)пересекаются с первой заданной прямой 4)перпендикулярны к первой заданной прямой Программа в цикле каждый раз перезаписывает коэффициенты каждой прямой в каждый файл, но я не знаю как это исправить( Помогите, пожалуйста! Вот мой код:
include <iostream>
#include <Windows.h>
#include <iomanip>
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
struct Coefficient
{
int a; int b; int c; //коэффициенты прямых
};
int main() {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
string file = "";
cout << "Введите имя файла" << endl;
cin >> file;
Coefficient s;
ifstream fin;
fin.open(file, ios_base::in | ios_base::binary);
if (fin.is_open())
{
cout << "Запись данных в ранее созданный файл с названием " << file << endl;
}
ofstream fout(file, ios_base::out | ios_base::trunc | ios_base::binary);
if (!fout.is_open())
{
cout << "\nПроизошла ошибка. Не удалось открыть файл " << file << endl;
return 1;
}
int n;
cout << "\nВведите количество прямых, коэффициенты которых будут вводиться" << endl;
cin >> n;
if (n <= 2)
{
cout << "\nВведите большее количество прямых";
cin >> n;
}
bool k = 0;
int a0, b0, c0; //коэффициенты первой заданной прямой
for (int i = 0; i < n; i++) //цикл для ввода коэффициентов прямых
{
cout << "\nВведите коэффициент a прямой " << i + 1 << endl;
cin >> s.a;
if (k == 0) { a0 = s.a; }
cout << "\nВведите коэффициент b прямой " << i + 1 << endl;
cin >> s.b;
if (k == 0) { b0 = s.b; }
cout << "\nВведите коэффициент c прямой " << i + 1 << endl;
cin >> s.c;
if (k == 0) { c0 = s.c; }
fout.write((char*)&s, sizeof s);
k++;
}
fout.close();
string file1 = "";
cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые параллельные первой заданной прямой" << endl;
cin >> file1;
string file2 = "";
cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые накладываются с первой заданной прямой" << endl;
cin >> file2;
string file3 = "";
cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые пересекают первую заданную прямую" << endl;
cin >> file3;
string file4 = "";
cout << "\nВведите название файла, в который программа запишет коэффициенты прямых, которые перпендикулярны к первой заданной прямой" << endl;
cin >> file4;
ofstream fout1(file1, ios_base::out | ios_base::trunc | ios_base::binary);
ofstream fout2(file2, ios_base::out | ios_base::trunc | ios_base::binary);
ofstream fout3(file3, ios_base::out | ios_base::trunc | ios_base::binary);
ofstream fout4(file4, ios_base::out | ios_base::trunc | ios_base::binary);
ifstream fin1;
ifstream fin2;
ifstream fin3;
ifstream fin4;
fin.open(file, ios_base::in | ios_base::binary);
if (fin.is_open())
{
int i = 1;
fin.read((char*)&s, sizeof s);//игнорирование коэффициентов первой прямой
//запись коэффициентов прямых в соответствующие файлы и вывод соответствующих сообщений
while (fin.read((char*)&s, sizeof s))
{
//здесь происходит определение по коэффициентам которые между собой прямые
if (b0 == 0) {
if (s.b == 0) {
if ((c0) / (a0) == (s.c) / (s.a)) {
cout << "\nПрямая 1 и прямая " << i + 1 << " накладываются" << endl;
fout2.write((char*)&s, sizeof s);
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
fout1.write((char*)&s, sizeof s);
}
}
else {
if (s.a == 0) {
cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
fout4.write((char*)&s, sizeof s);
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
fout3.write((char*)&s, sizeof s);
}
}
}
if (a0 == 0) {
if (s.a == 0) {
if ((c0) / (b0) == (s.c) / (s.b)) {
cout << "\nПрямая 1 и прямая " << i + 1 << " накладываются" << endl;
fout2.write((char*)&s, sizeof s);
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
fout1.write((char*)&s, sizeof s);
}
}
else {
if (s.b == 0) {
cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
fout4.write((char*)&s, sizeof s);
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
fout3.write((char*)&s, sizeof s);
}
}
}
if (a0 != 0 && b0 != 0) {
if (s.a != 0 && s.b != 0) {
if ((a0) / (b0) == (s.a) / (s.b)) {
cout << "\nПрямая 1 и прямая " << i + 1 << " параллельные" << endl;
fout1.write((char*)&s, sizeof s);
}
else {
if (((a0) / (b0)) * ((s.b) / (s.a)) == -1) {
cout << "\nПрямая 1 и прямая " << i + 1 << " перпендикулярны" << endl;
fout4.write((char*)&s, sizeof s);
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
fout3.write((char*)&s, sizeof s);
}
}
}
else {
cout << "\nПрямая 1 и прямая " << i + 1 << " пересекаются" << endl;
fout3.write((char*)&s, sizeof s);
}
}
i++;
}
fin.close();
}
//вывод коэффициентов исходных файлов
fin1.open(file1, ios_base::in | ios_base::binary);
if (fin1.is_open())
{
cout << "\nКоэффициенты прямых, параллельных первой заданной прямой и содержатся в файле " << file1 << ":" << endl;
while (!fin1.eof())
{
fin1.read((char*)&s, sizeof s);
cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
}
fin1.close();
}
fin2.open(file2, ios_base::in | ios_base::binary);
if (fin2.is_open())
{
cout << "\nКоэффициенты прямых, которые накладываются с первой заданной прямой и содержатся в файле " << file2 << ":" << endl;
while (!fin2.eof())
{
fin2.read((char*)&s, sizeof s);
cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
}
fin2.close();
}
fin3.open(file3, ios_base::in | ios_base::binary);
if (fin3.is_open())
{
cout << "\nКоэффициенты прямых, пересекающихся с первой заданной прямой и содержатся в файле " << file3 << ":" << endl;
while (!fin3.eof())
{
fin3.read((char*)&s, sizeof s);
cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
}
fin3.close();
}
fin4.open(file4, ios_base::in | ios_base::binary);
if (fin4.is_open())
{
cout << "\nКоэффициенты прямых, перпендикулярных к первой заданной прямой и содержатся в файле " << file4 << ":" << endl;
while (!fin4.eof())
{
fin4.read((char*)&s, sizeof s);
cout << setw(5) << s.a << setw(5) << s.b << setw(5) << s.c << endl;
}
fin1.close();
}
return 0;
}