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

Тема в разделе "Общие вопросы по С и С++", создана пользователем fantom0005, 7 май 2013.

  1. fantom0005

    fantom0005 New Member

    Регистрация:
    7 май 2013
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте! У меня проблема: есть созданный бинарный файл и я не могу у него заменять определенный позиции на другие. Т.е. вот задание: создать бинарный файл, в него записать матрицу 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 иначе просто не трогаем. Но не получается у меня заменить эти позиции. Логически, вроде, все правильно, но не работает. Помогите, пожалуйста!
     
Загрузка...
Похожие Темы - Бинарные Файлы
  1. motogarri
    Ответов:
    27
    Просмотров:
    4.375
  2. lmike
    Ответов:
    27
    Просмотров:
    259
  3. garrick
    Ответов:
    25
    Просмотров:
    661
  4. sgfsdg
    Ответов:
    1
    Просмотров:
    427
  5. vovanabali
    Ответов:
    0
    Просмотров:
    536

Поделиться этой страницей