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

Сохранение матриц больших размеров в типизированный файл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ два ++ http://www.cyberforum.ru/cpp-beginners/thread342651.html
Что означает "++" что ето за операция в С++Builder очень надо узнать Напишите кто нибудь.
C++ Тетрис и многопоточность Здравствуйте. Взялся я за тетрис, немного написал, а потом понял, что мне нужны два потока. Вот зачем: у меня игровое поле — двумерный массив . Фигура представленна массивом . В то время, как один... http://www.cyberforum.ru/cpp-beginners/thread342646.html
C++ Подскажите, как должно выглядеть это задание?
Разработайте приложение rle.exe, выполняющее RLE-компрессию бинарных файлов с сильно разреженным содержимым, а также декомпрессию упакованных ею файлов. Необходимо реализовать следующий принцип...
C++ string
народ я вот решаю задачу .. вводишь в файл input.txt латинскую букву...а в файл output.txt выводить должно справа стоящую на клавиатури букву. вот код: #include <fstream> #include <string>...
C++ Что такое ' ' (апострофы) http://www.cyberforum.ru/cpp-beginners/thread342587.html
Да, я знаю что char c = '1'; // == 48 А вот что такое '1234' и почему нельзя '12345'?
C++ Определить когда массив меняет знак. Дан массив чисел, как положительных так и отрицательных. Нужно определить номер элемента, который первым меняет знак с отрицательного на положительный и номер элемента, который последним меняет... подробнее

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

Сохранение матриц больших размеров в типизированный файл - C++

16.08.2011, 23:45. Просмотров 679. Ответов 4
Метки (Все метки)

Проблема: есть большой двумерный массив (double). Пытаюсь сохранить его в типизированный файл (а затем считать в другой массив). В файл сохраняется только некоторая часть (до 58 элемента, в частном случае), на оставшиеся места записываются максимальное и минимальное значения double (+-6.2 * 10^66). Причем иногда прерывается посередине строки. Как будто память под строку выделилась не в одном месте, а в разных. Однако все последующие строки изначально "повреждены". Что я делаю неправильно или как можно этого избежать?
Делаю в Visual Studio 2005 (или в 2010, разницы не заметил), win forms.
Значимый код:
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
    int X = 30, Y = 13; // Размер матрицы
 
    // Создаем и заполняем матрицу (формула наугад)
    int size = sizeof(double);               
    double **arr1;
    arr1 = new double* [Y];
    for (int i=0; i<Y; i++)
    {
        arr1[i] = new double [X];
        for (int j=0; j<X; j++)
            arr1[i][j] = (i-3)*17 / 10.0 / (j+5);
    }        
    // Сохраняем матрицу
    FILE *f1;
    f1 = fopen("test.dat", "w");
    for (int i=0; i<Y; i++)
        fwrite(arr1[i], size, X, f1);
    fclose(f1);
 
    // Открываем файл для чтения
    FILE *f2;
    f2 = fopen("test.dat", "r");
    // Сохраняем данные из файла в массив mas
    double **mas;
    mas = new double* [Y];
    for (int i=0; i<Y; i++)
    {
        mas[i] = new double [X];                     
        fread(mas[i], size, X, f2);
    }
    fclose(f2);
 
    // Вывод обоих матриц
    richTextBox1->Clear();
    for (int i=0; i<Y; i++)
    {
        for (int j=0; j<X; j++)
            richTextBox1->Text += Convert::ToString(Math::Round(arr1[i][j]*100)/100.0) + "\t";
        richTextBox1->Text += "\n";
    }
    richTextBox1->Text += "\n#######################\n\n";
    for (int i=0; i<Y; i++)
    {
        for (int j=0; j<X; j++)
            richTextBox1->Text += Convert::ToString(Math::Round(mas[i][j]*100)/100.0) + "\t";
        richTextBox1->Text += "\n";
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.