Форум программистов, компьютерный форум, киберфорум
Наши страницы

Бинарные файлы: на место тех позиций, у которых значение меньше определенного числа, записать 0 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужно еще два способа (вывести введенное слово наоборот) http://www.cyberforum.ru/cpp-beginners/thread858057.html
Ребят у меня программа выводит введенное слово наоборот(То есть ввожу привет, а выводит тевирп). Помогите сделать тоже самое только двумя другими способами. Вот код: #include <stdio.h> #include...
C++ Система массового обслуживания с отказами (Dev C++) помогите, смоделировать система масового обслуживания с отказами на обычном dev C++ http://www.cyberforum.ru/cpp-beginners/thread858018.html
Подсчет попарно неизоморфных графов, содержащих не более 4 вершин C++
Пишу курсовую по программе,которая считает попарно неизоморфные графы,содержащие не более 4 вершин.вот прога: #include <stdio.h> #include <conio.h> #define NMAX 4 // максимальное число вершин...
Возвращение значения из функции C++
Ребят, подскажите, когда функция возвращает значение из функции, то в памяти создается копия значения? Я все время думал что функция на "прямую" возвращает значение в программу, после чего перестает...
C++ Цикл должен удалять все первые элементы пар чисел сумма которых превышает 10 http://www.cyberforum.ru/cpp-beginners/thread858008.html
Помогите найти ошибку. Цикл должен удалять все первые элементы пар чисел сумма которых превышает 10. Например: 1 2 3 4 5 6 7 8 9 10 Результатом должно быть 1 2 3 4 6 8 10 n - размерность...
C++ Бинарное дерево. Каждую вершину с чётным номером поменять местами с сыном, имеющим чётный номер Доброго времени суток всем помогите пожалуйста с задачей: Дано бинарное дерево. Каждую вершину с чётным номером поменять местами с сыном, имеющим чётный номер. подробнее

Показать сообщение отдельно
fantom0005
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 9

Бинарные файлы: на место тех позиций, у которых значение меньше определенного числа, записать 0 - C++

07.05.2013, 09:05. Просмотров 573. Ответов 11
Метки (Все метки)

Здравствуйте! У меня проблема: есть созданный бинарный файл и я не могу у него заменять определенный позиции на другие. Т.е. вот задание: создать бинарный файл, в него записать матрицу mxm. Пробежаться по всем диагональным элементам и все на место тех позиций, у которых значение меньше определенного числа, записать 0.
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#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 иначе просто не трогаем. Но не получается у меня заменить эти позиции. Логически, вроде, все правильно, но не работает. Помогите, пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru