Форум программистов, компьютерный форум CyberForum.ru

Записать масив в файл - C++

Восстановить пароль Регистрация
 
shans
0 / 0 / 0
Регистрация: 09.02.2010
Сообщений: 43
09.02.2010, 17:30     Записать масив в файл #1
Как записать двухмерный int массив в файл.Обычный C.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 18:20     Записать масив в файл #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
int array[10] = {1,2,3,4,5,6,7,8,9,0};
FILE *f = fopen("C:\\my_file.txt", "w");
for(int i = 0; i < 10; i++)
{
fprintf(f, "%d ", array[i]);
}
fclose(f);
 
return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.02.2010, 18:31     Записать масив в файл #3
Цитата Сообщение от Genius Ignat Посмотреть сообщение
fprintf(f, "%d ", array[i]);
запишет в файл 1234567890, и как потом из этого 10 чисел получить? Не факт, что каждое число однозначным будет, да и вроде двухмерный массив просили...
shans
0 / 0 / 0
Регистрация: 09.02.2010
Сообщений: 43
09.02.2010, 18:56  [ТС]     Записать масив в файл #4
программа вылетает в конце и записывает в файл большие числа

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
 
 
FILE *fp;
 
 
int pow1(int a,int c);
int minor (int [4][4],int);
 
int main(int argc, char *argv[])
{            
    int a[4][4];
    int i;
    int j;
    int c;
 
    printf("Enter The Matrix:\n");
 
    for(i=0;i<4;i++)
    {        
        for(j=0;j<4;j++)
        {
            scanf("%d",&a[i][j]);                             
        }        
    }
 
    printf("Matrix:\n");
    printf("%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n",
        a[0][0],a[0][1],a[0][2],a[0][3],
        a[1][0],a[1][1],a[1][2],a[1][3],
        a[2][0],a[2][1],a[2][2],a[2][3],
        a[3][0],a[3][1],a[3][2],a[3][3]);
 
    int counter;
    int d=0;
 
    
    int s;
    int A;
    int h;
    for (counter=0;counter<4;counter++)
    {
        s =(pow1(-1,counter+2));
        A= (a[0][counter]);
        h=(minor(a,counter));
        d=s*A*h+d;                      
    }
 
    printf("\ndeterminant:%i",d);   
 
    
    FILE *f = fopen("file.txt", "w");
    
    for(i = 0; i < 4; i++){
    for(j = 0; j < 4; i++)
    {
    fprintf(f, "%d ", a[i][j]);
    }
    }
    fclose(f);
 
 
    system("PAUSE");   
    return 0;
    
    
    
    
}
 
int minor(int a[4][4],int r)
{        int m=0;
 
        switch(r) {
            case 0 :                
                m=(a[1][1]*a[2][2]*a[3][3]
                +a[1][2]*a[2][3]*a[3][1]
                +a[1][3]*a[2][1]*a[3][2]
                -a[1][1]*a[2][3]*a[3][2]
                -a[1][2]*a[2][1]*a[3][3]
                -a[1][3]*a[2][2]*a[3][1]);    
                printf("\n%i\n",m);
                break;
            case 1 :
 
                m=(a[1][0]*a[2][2]*a[3][3]
                +a[1][2]*a[2][3]*a[3][0]
                +a[1][3]*a[2][0]*a[3][2]
                -a[1][3]*a[2][2]*a[3][0]
                -a[1][0]*a[2][3]*a[3][2]
                -a[1][2]*a[2][0]*a[3][3]);
                printf("\n%i\n",m);
                break;
            case 2:
 
 
                m=(a[1][0]*a[2][1]*a[3][3]
                +a[1][1]*a[2][3]*a[3][0]
                +a[1][3]*a[2][0]*a[3][1]
                -a[1][1]*a[2][0]*a[3][3]
                - a[1][0]*a[2][3]*a[3][1]
                -a[1][3]*a[2][1]*a[3][0]);   
                printf("\n%i\n",m);
                break;
 
            case 3:           
                m=(a[1][1]*a[2][1]*a[3][2]
                +a[1][1]*a[2][2]*a[3][0]
                +a[1][2]*a[2][0]*a[3][1]                
                - a[1][2]*a[2][1]*a[3][0]
                -a[1][1]*a[2][0]*a[3][2]
                -a[1][0]*a[2][2]*a[3][1]); 
 
                printf("\n%i\n",m);
                break;
 
                   
        }
        return m;
}
int pow1(int a,int c){
 
    int p,counter;
    int d=1;
    for (counter=0;counter<c;counter++){
 
        d=a*d;}
 
    return  d;     
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.02.2010, 19:25     Записать масив в файл #5
shans, диржы!
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
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct {
    size_t rows;
    size_t cols;
} Dim_t;
 
#define FILE_NAME "matrix.bin"
 
int main(void){
    Dim_t out_matrix_dim, in_matrix_dim; /* для чистоты эксперимента */
    int **out_matrix, **in_matrix, i, j;
    FILE *f;
    
    srand(time(NULL));
    
    /* исходная матрица */
    out_matrix_dim.rows = 5;
    out_matrix_dim.cols = 10;
    if ( ( out_matrix = (int**)calloc(out_matrix_dim.rows, sizeof(int*)) ) == NULL ){
        perror("Bad memory!\n");
        exit(1);
    }
    for ( i = 0; i < out_matrix_dim.rows; ++i ){
        if ( ( out_matrix[i] = (int*)calloc(out_matrix_dim.cols, sizeof(int)) ) == NULL ){
            perror("Bad memory!\n");
            exit(1);
        }
    }
    printf("\nOriginal:\n");
    for ( i = 0; i < out_matrix_dim.rows; ++i )
        for ( j = 0; j < out_matrix_dim.cols; ++j )
            printf( ( j < out_matrix_dim.cols - 1 ) ? "%d " : "%d\n", ( out_matrix[i][j] = rand() % 10 ) );
    
    if ( ( f = fopen(FILE_NAME, "wb") ) == NULL ){
        perror("Can't open output file!\n");
        exit(1);
    }
    
    if ( fwrite(&out_matrix_dim, sizeof(Dim_t), 1, f) != 1 ){
        perror("Can't write to file!\n");
        exit(1);
    }
    for ( i = 0; i < out_matrix_dim.rows; ++i ){
        if ( fwrite(out_matrix[i], sizeof(int), out_matrix_dim.cols, f) != out_matrix_dim.cols ){
            perror("Can't write to file!\n");
            exit(1);
        }
    }
    fclose(f);
    f = NULL;
    
    /* чтение записанного */
    if ( ( f = fopen(FILE_NAME, "rb") ) == NULL ){
        perror("Can't open input file!\n");
        exit(1);
    }
    if ( fread(&in_matrix_dim, sizeof(Dim_t), 1, f) != 1 ){
        perror("Can't read from file!\n");
        exit(1);
    }
    /* проверка размеров */
    if ( out_matrix_dim.rows != in_matrix_dim.rows || out_matrix_dim.cols != in_matrix_dim.cols ){
        perror("Shit happens!\n");
        exit(1);
    }
    if ( ( in_matrix = (int**)calloc(in_matrix_dim.rows, sizeof(int*)) ) == NULL ){
        perror("Bad memory or something!\n");
        exit(1);
    }
    for ( i = 0; i < in_matrix_dim.rows; ++i ){
        if ( ( in_matrix[i] = (int*)calloc(in_matrix_dim.cols, sizeof(int)) ) == NULL ){
            perror("Bad memory!\n");
            exit(1);
        }
        if ( fread(in_matrix[i], sizeof(int), in_matrix_dim.cols, f) != in_matrix_dim.cols ){
            perror("Can't read from file!\n");
            exit(1);
        }
    }
    /* вывод */
    printf("\nFrom file:\n");
    for ( i = 0; i < in_matrix_dim.rows; ++i )
        for ( j = 0; j < in_matrix_dim.cols; ++j )
            printf( ( j < in_matrix_dim.cols - 1 ) ? "%d " : "%d\n", in_matrix[i][j]);
    
    /* очистка памяти */
    for ( i = 0; i < in_matrix_dim.rows; ++i ){
        free(in_matrix[i]);
        free(out_matrix[i]);
    }
    free(in_matrix);
    free(out_matrix);
    
    exit(0);
}
shans
0 / 0 / 0
Регистрация: 09.02.2010
Сообщений: 43
09.02.2010, 19:38  [ТС]     Записать масив в файл #6
блин, я сколько не осилю, можно как нибудь проще отредактировать мою программу?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.02.2010, 19:57     Записать масив в файл #7
Цитата Сообщение от shans Посмотреть сообщение
можно как нибудь проще отредактировать мою программу?
Можно, но хлопотно...

Цитата Сообщение от shans Посмотреть сообщение
C
1
printf("%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n", a[0][0],a[0][1],a[0][2],a[0][3], a[1][0],a[1][1],a[1][2],a[1][3], a[2][0],a[2][1],a[2][2],a[2][3], a[3][0],a[3][1],a[3][2],a[3][3]);
это хорошо, когда массив 4х4, а не 100500х100500


Цитата Сообщение от shans Посмотреть сообщение
C
1
2
int minor(int a[4][4],int r) 
{ int m=0; switch(r) { case 0 : m=(a[1][1]*a[2][2]*a[3][3] +a[1][2]*a[2][3]*a[3][1] +a[1][3]*a[2][1]*a[3][2] -a[1][1]*a[2][3]*a[3][2] -a[1][2]*a[2][1]*a[3][3] -a[1][3]*a[2][2]*a[3][1]); printf("\n%i\n",m); break; case 1 : m=(a[1][0]*a[2][2]*a[3][3] +a[1][2]*a[2][3]*a[3][0] +a[1][3]*a[2][0]*a[3][2] -a[1][3]*a[2][2]*a[3][0] -a[1][0]*a[2][3]*a[3][2] -a[1][2]*a[2][0]*a[3][3]); printf("\n%i\n",m); break; case 2: m=(a[1][0]*a[2][1]*a[3][3] +a[1][1]*a[2][3]*a[3][0] +a[1][3]*a[2][0]*a[3][1] -a[1][1]*a[2][0]*a[3][3] - a[1][0]*a[2][3]*a[3][1] -a[1][3]*a[2][1]*a[3][0]); printf("\n%i\n",m); break; case 3: m=(a[1][1]*a[2][1]*a[3][2] +a[1][1]*a[2][2]*a[3][0] +a[1][2]*a[2][0]*a[3][1] - a[1][2]*a[2][1]*a[3][0] -a[1][1]*a[2][0]*a[3][2] -a[1][0]*a[2][2]*a[3][1]); printf("\n%i\n",m); break; } return m; }
а это вообще что?
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
09.02.2010, 20:01     Записать масив в файл #8
Цитата Сообщение от easybudda Посмотреть сообщение
а это вообще что?
По-моему, это минор, ужасно криво оформленный, "в лоб"
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.02.2010, 20:08     Записать масив в файл #9
Цитата Сообщение от Darky Посмотреть сообщение
По-моему, это минор...
Хм... Спасибо, конечно - погуглив узнал, что такое "минор матрицы"
shans, вроде надо было её (матрицу) в файл записать, к чему тут это странное заклинание?
shans
0 / 0 / 0
Регистрация: 09.02.2010
Сообщений: 43
09.02.2010, 20:15  [ТС]     Записать масив в файл #10
ну скажите как попроще записать матрицу, в файл.Мне просто после всех операций нужно записать матрицу и определитель в файл.
Knightt
5 / 5 / 2
Регистрация: 09.02.2010
Сообщений: 11
09.02.2010, 20:29     Записать масив в файл #11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(){
// матрица размером a*b
 
FILE *f = fopen("C:\\my_file.txt", "w");
for(int i = 0; i < a; i++)
{
 for (int j = 0;j < b; j++)
      fprintf(f, "%d ", array[i][j]);  // тут после d обязателен пробел
 fprintf(f, "\n");
}
fclose(f);
 
return 0;
}
должно сработать
shans
0 / 0 / 0
Регистрация: 09.02.2010
Сообщений: 43
09.02.2010, 21:56  [ТС]     Записать масив в файл #12
большое спасибо,всё работает, в чем была моя ошибка?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2010, 23:43     Записать масив в файл
Еще ссылки по теме:

Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке C++
C++ Масив на 18 действ. Упорядочить по возростанию масив
Дан целочисленный файл А. Записать в файл В все кратные трём числа из А C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Knightt
5 / 5 / 2
Регистрация: 09.02.2010
Сообщений: 11
09.02.2010, 23:43     Записать масив в файл #13
если честно, не в курсе где ошибка... вроде "пробел" стоял... единственное не было fprintf(f, "\n");
, чтоб новую строку матрицы с новой строки в файле печатать..
Yandex
Объявления
09.02.2010, 23:43     Записать масив в файл
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru