Бинарные Файлы.

fantom0005

New member
07.05.2013
2
0
#1
Здравствуйте! У меня проблема: есть созданный бинарный файл и я не могу у него заменять определенный позиции на другие. Т.е. вот задание: создать бинарный файл, в него записать матрицу mxm. Пробежаться по всем диагональным элементам и все на место тех позиций, у которых значение меньше определенного числа, записать 0.
Вот мой код:
C++:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cstdlib>
#include <conio.h>
#include "fstream"
#include "iomanip"

using namespace std;

float CreateMass(int size) {
fstream out ("MAT.FF", ios::out | ios::binary);
double a;
for (int i=0; i<size; i++) {
for (int j=0; j<size; j++) {
a=rand()%100;
out << a << " ";}			
out << endl;}
out.close();
return 0;
}
void print(int size){
cout << endl << endl;
double a;
ifstream in ("MAT.FF", ios::in | ios::binary);
in.seekg (1);
for (int i=0; i<size; i++){
for (int j=0; j<size; j++) {
in >> a;
cout << setw (5) << a;
}
cout << endl;
}
in.close();
}
void zamena(int size){
float k;
cout << endl <<"Vvedite k=";
cin >> k;
double a;
ifstream in ("MAT.FF", ios::in | ios::binary);
float *masDiag = new float[size];//вот массив с инфой о диагональных элементах
float *mas = new float[size];
for(int i = 0; i < size; i++)
for(int j = 0; j<size; j++){
in >> a;
if(i==j){
if(a<k)
masDiag[i]=1;									 
else
masDiag[i]=0;
mas[i] = a;							 
}				 
}
in.close();
cout << endl;
double g = 0;
int count = 0;
fstream file;
file.open("MAT.FF",ios::app | ios::binary); // вот в этом месте не работает, файл вроде открывает, но не записывает. 
file.seekg (0, ios::beg);
clout << endl << file.tellg();
for(int i = 0; i < size; i++)
for(int j = 0; j<size; j++){
count++;
if(i==j && masDiag[i]==1)
file.write ((char*)&g, sizeof(g));
else
file.seekg (count, ios::beg);
}
file.close();
}

int main() {
int n;
srand(time(NULL));
cout<<endl<<"Vvedite razmernost massiva: ";
cin>>n;
float mass;
mass=CreateMass(n);
print(n);
zamena(n);
print(n);
getch();
return 0;

}
Программа реализована так: создается массив, в который записывается информация о каждом диагональном элементе(больше(1) или меньше(2) диагональный элемент, чем определенное значение). Потом открываем файл и смотрим эту инфу, если в массиве 1 , то на место диагонального элемента записываем 0 иначе просто не трогаем. Но не получается у меня заменить эти позиции. Логически, вроде, все правильно, но не работает. Помогите, пожалуйста!