Бинарные файлы c++.
От: fantom0005  
Дата: 07.05.13 05:01
Оценка:
Здравствуйте! У меня проблема: есть созданный бинарный файл и я не могу у него заменять определенный позиции на другие. Т.е. вот задание: создать бинарный файл, в него записать матрицу mxm. Пробежаться по всем диагональным элементам и все на место тех позиций, у которых значение меньше определенного числа, записать 0.
Вот мой код:
#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);
     file << "asdsadas";
     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 иначе просто не трогаем. Но не получается у меня заменить эти позиции. Логически, вроде, все правильно, но не работает. Помогите, пожалуйста!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.